package org.gcube.portlets.user.speciesdiscovery.client.advancedsearch; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.gcube.portlets.user.speciesdiscovery.shared.DataSourceCapability; import org.gcube.portlets.user.speciesdiscovery.shared.DataSourceModel; import org.gcube.portlets.user.speciesdiscovery.shared.SpeciesCapability; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.form.DateField; import com.extjs.gxt.ui.client.widget.form.NumberField; import com.extjs.gxt.ui.client.widget.layout.CardLayout; /** * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * */ public class AdvancedSearchPanelManager extends ContentPanel implements AdvancedSearchInterface{ private static AdvancedSearchPanelManager instance; private BoundsFilter boundsFilter; private DateFilter dateFilter; private RegionFilter regionFilter; private DataSourceFilter dataSourceFilter; private List listAdvacedPanels = new ArrayList(); private CardLayout cardLayout = new CardLayout(); // private ClassificationFilter classificationFilter; private HashMap listDataSources; private SpeciesCapability currentSelectedCapability; public static synchronized AdvancedSearchPanelManager getInstance() { if (instance == null) instance = new AdvancedSearchPanelManager(); return instance; } private AdvancedSearchPanelManager(){ boundsFilter = new BoundsFilter(); dateFilter = new DateFilter(); regionFilter = new RegionFilter(); dataSourceFilter = new DataSourceFilter(); // classificationFilter = new ClassificationFilter(); init(); // listAdvacedPanels.add(classificationFilter.getName()); listAdvacedPanels.add(dataSourceFilter.getName()); listAdvacedPanels.add(boundsFilter.getName()); listAdvacedPanels.add(dateFilter.getName()); // listAdvacedPanels.add(regionFilter.getName()); } private void init() { setLayout(cardLayout); setHeaderVisible(false); setSize(925, 70); setBodyBorder(false); add(boundsFilter.getPanel()); add(dateFilter.getPanel()); add(dataSourceFilter.getPanel()); add(regionFilter.getPanel()); // add(classificationFilter.getPanel()); cardLayout.setActiveItem(boundsFilter.getPanel()); } public List getListAdvancedSearchPanels(){ return listAdvacedPanels; } public void setActivePanel(String name){ if(name.equals(AdvancedSearchPanelEnum.BOUNDS.getLabel())) cardLayout.setActiveItem(boundsFilter.getPanel()); else if(name.equals(AdvancedSearchPanelEnum.DATE.getLabel())) cardLayout.setActiveItem(dateFilter.getPanel()); else if(name.equals(AdvancedSearchPanelEnum.DATASOURCE.getLabel())) cardLayout.setActiveItem(dataSourceFilter.getPanel()); else if(name.equals(AdvancedSearchPanelEnum.REGION.getLabel())) cardLayout.setActiveItem(regionFilter.getPanel()); // else if(name.equals(AdvancedSearchPanelEnum.CLASSIFICATION.getLabel())) // cardLayout.setActiveItem(classificationFilter.getPanel()); } public ContentPanel getPanel(){ return this; } public NumberField getUpperBoundLatitudeField() { return boundsFilter.getUpperBoundLatitudeField(); } public NumberField getUpperBoundLongitudeField() { return boundsFilter.getUpperBoundLongitudeField(); } public NumberField getLowerBoundLatitudeField() { return boundsFilter.getLowerBoundLatitudeField(); } public NumberField getLowerBoundLongitudeField() { return boundsFilter.getLowerBoundLongitudeField(); } public DateField getFromDate() { return dateFilter.getFromDate(); } public DateField getToDate() { return dateFilter.getToDate(); } public void loadDataSource(List result) { dataSourceFilter.loadDataSource(result); listDataSources = new HashMap(); //fill hash for(DataSourceModel dsm: result){ listDataSources.put(dsm.getId(), dsm); } setAvailableInfoAdvancedFilters(result); } private void setAvailableInfoAdvancedFilters(List result) { for(DataSourceModel dsm: result){ for (DataSourceCapability dsc : dsm.getListCapabilities()) { ArrayList properties = dsc.getListFilters(); for (SpeciesCapability capabilityEnum : properties) { // System.out.println("capability " + capabilityEnum.toString()); if(capabilityEnum.equals(SpeciesCapability.FROMDATE)) dateFilter.addAvailablePlugInfo(dsm, SpeciesCapability.FROMDATE); else if(capabilityEnum.equals(SpeciesCapability.LOWERBOUND)) boundsFilter.addAvailablePlugInfo(dsm, SpeciesCapability.LOWERBOUND); else if(capabilityEnum.equals(SpeciesCapability.TODATE)) dateFilter.addAvailablePlugInfo(dsm, SpeciesCapability.TODATE); else if(capabilityEnum.equals(SpeciesCapability.UPPERBOUND)) boundsFilter.addAvailablePlugInfo(dsm, SpeciesCapability.UPPERBOUND); } } } } public void setCurrentCapability(SpeciesCapability capability){ this.currentSelectedCapability = capability; this.capabilityChange(); } public void setVisibleAllPanel(boolean bool){ boundsFilter.getPanel().setVisible(bool); dateFilter.getPanel().setVisible(bool); dataSourceFilter.getPanel().setVisible(bool); regionFilter.getPanel().setVisible(bool); // classificationFilter.getPanel().setVisible(bool); } private void capabilityChange() { // dataSourceFilter.disableAllCheck(); dataSourceFilter.enableCheckByCapability(this.currentSelectedCapability); } public List getCheckedDataSources() { return dataSourceFilter.getCheckedGroupList(); } public HashMap findDataSourceByCapability(SpeciesCapability capability) { if(capability.getName().compareTo(SpeciesCapability.RESULTITEM.getName())==0){ return dataSourceFilter.getHashMapDataSourceOccurrences(); } else if(capability.getName().compareTo(SpeciesCapability.TAXONOMYITEM.getName())==0){ return dataSourceFilter.getHashMapDataSourceClassification(); } return null; } public DataSourceModel findDataSourceByCapabilityAndName(SpeciesCapability capability, String dataSourceName) { HashMap hashDataSource = findDataSourceByCapability(capability); if(hashDataSource!=null) return hashDataSource.get(dataSourceName); return null; } public SpeciesCapability getCurrentSelectedCapability() { return currentSelectedCapability; } // public String getGroupByRank(){ // return classificationFilter.getSelectedRank(); // } }