Package de.jetwick.ui.jschart

Source Code of de.jetwick.ui.jschart.JSDateFilter

/**
* Copyright (C) 2010 Peter Karich <jetwick_@_pannous_._info>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*         http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.jetwick.ui.jschart;

import de.jetwick.es.ElasticTweetSearch;
import de.jetwick.ui.util.FacetHelper;
import de.jetwick.ui.util.LabeledLink;
import de.jetwick.util.Helper;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.facet.range.RangeFacet;

/**
*
* @author Peter Karich, peat_hal 'at' users 'dot' sourceforge 'dot' net
*/
public class JSDateFilter extends Panel {

    private List<FacetHelper> facetList = new ArrayList<FacetHelper>();
    private String dtKey = ElasticTweetSearch.DATE;
    private final float MAX_HEIGHT_IN_PX = 50.0f;
    private long max = 1;
    private long totalHits = 0;

    public JSDateFilter(String id) {
        super(id);

        final String dtVal = "Date Filter";
        List<String> dateFilterList = new ArrayList<String>();
        dateFilterList.add(dtKey);

        // TODO WICKET update dateFilter even if we call only update(rsp)
        ListView dateFilter = new ListView("dateFilterParent", dateFilterList) {

            @Override
            public void populateItem(final ListItem item) {
                String filter = getFilterName(dtKey);
                if (filter != null) {
                    item.add(new LabeledLink("dateFilter", "Click to remove custom date filter") {

                        @Override
                        public void onClick(AjaxRequestTarget target) {
                            onFilterChange(target, dtKey, null);
                        }
                    }.add(new AttributeAppender("title", new Model("Remove all filters from '" + dtVal + "'"), " ")));
                } else {
                    String str = "";
                    if (totalHits > 0)
                        str = "Select a date to filter results";
                    Label label = new Label("dateFilter", str);
                    label.add(new AttributeAppender("class", new Model("gray"), " "));
                    item.add(label);
                }
            }
        };
        add(dateFilter);

        ListView items = new ListView("items", facetList) {

            @Override
            public void populateItem(final ListItem item) {
                float zoomer = MAX_HEIGHT_IN_PX / max;
                final FacetHelper entry = (FacetHelper) item.getModelObject();

                Label bar = new Label("itemSpan");
                String additionalDateInfo = entry.count + " tweets";
                String displayName = entry.displayName;
                try {
                    Date date = Helper.toDate(displayName);
                    int index = displayName.indexOf("T");
                    if (index > 0)
                        additionalDateInfo += " on " + Helper.getMonthDay(date);
                   
                    displayName = Helper.getWeekDay(date);
                } catch (Exception ex) {
                }

                AttributeAppender app = new AttributeAppender("title", new Model(additionalDateInfo), " ");
                bar.add(app).add(new AttributeAppender("style", new Model("height:" + (int) (zoomer * entry.count) + "px"), " "));
                final boolean selected = isAlreadyFiltered(entry.key, entry.value);
                Link link = new /*Indicating*/ AjaxFallbackLink("itemLink") {

                    @Override
                    public void onClick(AjaxRequestTarget target) {
                        JSDateFilter.this.onFilterChange(target, entry.getFilter(), !selected);
                    }
                };
                link.add(app);
                Label label = new Label("itemLabel", displayName);
                link.add(bar).add(label);
                if (entry.count == 0) {
                    link.setEnabled(false);
                    link.add(new AttributeAppender("class", new Model("gray"), " "));
                }

                if (selected)
                    link.add(new AttributeAppender("class", new Model("filter-rm"), " "));
                else
                    link.add(new AttributeAppender("class", new Model("filter-add"), " "));
                item.add(link);
            }
        };

        add(items);
    }

    protected void onFilterChange(AjaxRequestTarget target, String filter, Boolean selected) {
    }

    protected boolean isAlreadyFiltered(String key, Object value) {
        return false;
    }

    public String getFilterName(String name) {
        return name;
    }

    public void update(SearchResponse rsp) {
        facetList.clear();
        if (rsp == null)
            return;

        if (rsp != null && rsp.facets() != null) {
            RangeFacet rf = rsp.facets().facet(ElasticTweetSearch.DATE_FACET);
            if (rf != null) {
                int counter = 0;
                for (RangeFacet.Entry e : rf.entries()) {
                    String display = e.getFromAsString();
                    String fromStr = e.getFromAsString();
                    String toStr = e.getToAsString();
                    counter++;
                    if (counter == rf.entries().size()) {
                        display = "Older";
                        fromStr = "*";
                    } else if (counter == 1) {
                        display = "Last 8h";
                        toStr = "*";
                    } else if (counter == 2) {
                        display = "Today";    
                    }
                   
                    String filter = "[" + fromStr + " TO " + toStr + "]";
//                    System.out.println(display + " " + filter + " " + e.getCount());
                    facetList.add(new FacetHelper(dtKey, filter, display, e.getCount()));
                }
            }
        }
        max = 1;
        for (FacetHelper h : facetList) {
            if (h.count > max)
                max = h.count;
        }
        totalHits = rsp.hits().getTotalHits();
    }

    public List<FacetHelper> getFacetList() {
        return facetList;
    }

    public static Integer getFacetQueryCount(Map<String, Integer> facetQueries, String entry) {
        if (facetQueries != null)
            return facetQueries.get(entry);
        return null;
    }
}
TOP

Related Classes of de.jetwick.ui.jschart.JSDateFilter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.