Package org.openfaces.demo.beans.datatable

Source Code of org.openfaces.demo.beans.datatable.CitiesList

/*
* OpenFaces - JSF Component Library 2.0
* Copyright (C) 2007-2013, TeamDev Ltd.
* licensing@openfaces.org
* Unless agreed in writing the contents of this file are subject to
* the GNU Lesser General Public License Version 2.1 (the "LGPL" License).
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* Please visit http://openfaces.org/licensing/ for more details.
*/

package org.openfaces.demo.beans.datatable;

import org.openfaces.component.filter.CompositeFilterCriterion;
import org.openfaces.component.filter.ExpressionFilterCriterion;
import org.openfaces.component.filter.FilterCriterion;
import org.openfaces.component.table.DataTable;
import org.openfaces.demo.beans.util.City;
import org.openfaces.util.Faces;

import javax.faces.context.FacesContext;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

/**
* @author Darya Shumilina
*/
public class CitiesList implements Serializable {

    private CitiesDB citiesDB = new CitiesDB();
    private List<String> countries = new ArrayList<String>();
    private List<String> queries = new ArrayList<String>();
    private static final String REQUEST_STARTED_ADDED = "org.openfaces.demo.beans.datatable.CitiesList.queryAdded";

    public CitiesList() {
        citiesDB.addQueryListener(new QueryListener() {
            public void queryPerformed(QueryEvent event) {
                Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
                if (!requestMap.containsKey(REQUEST_STARTED_ADDED)) {
                    queries.add("---------------------------");
                    requestMap.put(REQUEST_STARTED_ADDED, Boolean.TRUE);
                }
                queries.add(event.getQueryInfo());
            }
        });
        List<City> citiesList = new ArrayList<City>();
        citiesList.addAll(citiesDB.getCitiesList());
        for (City currentCity : citiesList) {
            if (!countries.contains(currentCity.getCountry()))
                countries.add(currentCity.getCountry());
        }
    }

    public List<City> getCitiesList() {
        CompositeFilterCriterion filterCriteria = Faces.var("filterCriteria", CompositeFilterCriterion.class);
        boolean sortAscending = Faces.var("sortAscending", Boolean.class);
        String sortColumnId = Faces.var("sortColumnId", String.class);
        int pageStart = Faces.var("pageStart", Integer.class);
        int pageSize = Faces.var("pageSize", Integer.class);
        CitiesDB.CitySelectionCriteria filterConditions = calculateFilterConditions(filterCriteria);
        return citiesDB.getCitiesByParameters(filterConditions, sortColumnId, sortAscending, pageStart, pageSize);
    }

    private CitiesDB.CitySelectionCriteria calculateFilterConditions(CompositeFilterCriterion filterCriteria) {
        CitiesDB.CitySelectionCriteria filterConditions = new CitiesDB.CitySelectionCriteria();
        for (FilterCriterion entry : filterCriteria.getCriteria()) {
            ExpressionFilterCriterion criterion = (ExpressionFilterCriterion) entry;
            String columnId = criterion.getExpressionStr();
            String searchString = criterion.getArg1().toString();
            if (columnId.equals("name")) {
                filterConditions.setCityNameSearchString(searchString);
            } else if (columnId.equals("population")) {
                String[] result = searchString.split(" \u2013 ");

                String[] minLimit = result[0].split(",");
                StringBuffer minLimitBuffer = new StringBuffer();
                for (String aMinLimit : minLimit) {
                    minLimitBuffer.append(aMinLimit);
                }
                int min = new Integer(minLimitBuffer.toString());

                String[] maxLimit = result[1].split(",");
                StringBuffer maxLimitBuffer = new StringBuffer();
                for (String aMaxLimit : maxLimit) {
                    maxLimitBuffer.append(aMaxLimit);
                }
                int max = new Integer(maxLimitBuffer.toString());

                filterConditions.setMinPopulation(min);
                filterConditions.setMaxPopulation(max);
            } else if (columnId.equals("country")) {
                filterConditions.setCountry(searchString);
            }
        }
        return filterConditions;
    }

    public List<String> getRanges() {
        List<String> ranges = new ArrayList<String>();
        ranges.add("500,000 \u2013 1,000,000");
        ranges.add("1,000,000 \u2013 1,500,000");
        ranges.add("1,500,000 \u2013 2,000,000");
        ranges.add("2,000,000 \u2013 2,500,000");
        ranges.add("2,500,000 \u2013 3,000,000");
        ranges.add("3,000,000 \u2013 3,500,000");
        ranges.add("3,500,000 \u2013 6,500,000");
        ranges.add("6,500,000 \u2013 9,500,000");
        ranges.add("9,500,000 \u2013 12,500,000");
        ranges.add("12,500,000 \u2013 16,000,000");
        return ranges;
    }

    public int getRowCount() {
        CompositeFilterCriterion filterCriteria = Faces.var("filterCriteria", CompositeFilterCriterion.class);
        CitiesDB.CitySelectionCriteria filterConditions = calculateFilterConditions(filterCriteria);
        return citiesDB.getRecordCount(filterConditions);
    }

    public City getRowByKey() {
        Integer key = Faces.var("rowKey", Integer.class);
        return citiesDB.getCityById(key);
    }

    public List<String> getCountries() {
        if (countries.size() > 4)
            countries.remove(countries.get(0));
        return countries;
    }

    public List<String> getQueries() {
        List<String> prepared = new ArrayList<String>();
        StringBuffer queriesAsString = new StringBuffer();
        for (String query : queries) {
            queriesAsString.append(query);
        }
        String[] queriesAsStringArray = queriesAsString.toString().split("---------------------------");
        for (String currentString : queriesAsStringArray) {
            String[] currentStringArray = currentString.split("\t");
            StringBuffer currentStringBuffer = new StringBuffer();
            for (int j = 0; j < currentStringArray.length; j++) {
                currentStringBuffer.append(currentStringArray[j]);
                if ((j != 0) && (j != currentStringArray.length - 1))
                    currentStringBuffer.append("<br/>");
            }
            prepared.add(currentStringBuffer.toString());
        }
        Collections.reverse(prepared);
        return prepared;
    }
}
TOP

Related Classes of org.openfaces.demo.beans.datatable.CitiesList

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.