This repository has been archived on 2024-05-07. You can view files and clone it, but cannot push or open issues or pull requests.
species-discovery/src/main/java/org/gcube/portlets/user/speciesdiscovery/client/filterresult/ResultFilterPanelManager.java

324 lines
9.3 KiB
Java

package org.gcube.portlets.user.speciesdiscovery.client.filterresult;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.gcube.portlets.user.speciesdiscovery.client.SpeciesDiscovery;
import org.gcube.portlets.user.speciesdiscovery.client.event.StreamEvent;
import org.gcube.portlets.user.speciesdiscovery.client.event.StreamEvent.Event;
import org.gcube.portlets.user.speciesdiscovery.client.model.ClassificationModel;
import org.gcube.portlets.user.speciesdiscovery.client.util.SpeciesGridFields;
import org.gcube.portlets.user.speciesdiscovery.client.util.stream.StreamPagingLoader;
import org.gcube.portlets.user.speciesdiscovery.client.util.stream.StreamPagingLoaderListener;
import org.gcube.portlets.user.speciesdiscovery.shared.DataSourceModel;
import com.allen_sauer.gwt.log.client.Log;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.store.StoreEvent;
import com.extjs.gxt.ui.client.store.StoreListener;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
*
*/
public class ResultFilterPanelManager{
private static ResultFilterPanelManager instance;
private ClassificationFilter classificationFilter;
private DataProviderFilter dataProviderFilter;
private TypeFilter typeFilter;
private DataSourceFilter dataSourceFilter;
private RankFilter rankFilter;
private List<ContentPanel> listResultFilterPanel = new ArrayList<ContentPanel>();
private StreamPagingLoader loader;
private int pageSize;
private EventBus eventBus;
private int oldStreamSize= -1;
private boolean isDataLoaded = false;
private String currentGroupByRank = "";
private ResultFilterPanelManager(){
classificationFilter = new ClassificationFilter();
dataProviderFilter = new DataProviderFilter();
typeFilter = new TypeFilter();
dataSourceFilter = new DataSourceFilter();
rankFilter = new RankFilter();
listResultFilterPanel.add(classificationFilter.getPanel());
listResultFilterPanel.add(dataProviderFilter.getPanel());
listResultFilterPanel.add(dataSourceFilter.getPanel());
listResultFilterPanel.add(rankFilter.getPanel());
// listResultFilterPanel.add(typeFilter.getPanel());
}
public List<ContentPanel> getListResultFilterPanel() {
return listResultFilterPanel;
}
public static synchronized ResultFilterPanelManager getInstance() {
if (instance == null)
instance = new ResultFilterPanelManager();
return instance;
}
public void loadDataSource(List<DataSourceModel> result) {
// dataSourceFilter.loadDataSource(result);
}
public void setEventBus(EventBus eventBus){
this.eventBus = eventBus;
classificationFilter.setEventBus(eventBus);
dataProviderFilter.setEventBus(eventBus);
dataSourceFilter.setEventBus(eventBus);
rankFilter.setEventBus(eventBus);
}
public void setIsDataLoaded(boolean bool){
isDataLoaded = bool;
}
public void bind(StreamPagingLoader loader)
{
this.loader = loader;
this.pageSize = loader.getPageSize();
loader.addListener(new StreamPagingLoaderListener() {
@Override
public void onStreamUpdate(int streamSize, int currentStartItem, int currentEndItem) {
Log.trace("in on stream UPDATE - Stream size: " +streamSize);
if(oldStreamSize != streamSize)
updateDataSourceFilter();
oldStreamSize = streamSize;
setIsDataLoaded(true);
}
@Override
public void onStreamLoadingComplete() {
Log.trace("####### onStreamLoadingComplete COMPLETED");
updateDataSourceFilter();
eventBus.fireEvent(new StreamEvent(true, Event.COMPLETED));
}
@Override
public void onStreamStartLoading() {
resetFilters();
eventBus.fireEvent(new StreamEvent(false, Event.STRARTED));
}
});
loader.getStore().addStoreListener(new StoreListener<ModelData>(){
/**
* {@inheritDoc}
*/
@Override
public void storeBeforeDataChanged(StoreEvent<ModelData> se) {
}
});
}
public void updateDataSourceFilterById(SpeciesGridFields filterId){
if(filterId==null)
return;
switch (filterId) {
case DATASOURCE:
SpeciesDiscovery.taxonomySearchService.getFilterCounterById(SpeciesGridFields.DATASOURCE, new AsyncCallback<HashMap<String,Integer>>() {
@Override
public void onSuccess(HashMap<String, Integer> result) {
if(result!=null)
dataSourceFilter.loadDataSource(result);
}
@Override
public void onFailure(Throwable caught) {
resetFilters();
// errorAlert("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById " + caught.getMessage());
Log.error("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById " + caught);
}
});
break;
case DATAPROVIDER:
SpeciesDiscovery.taxonomySearchService.getFilterCounterById(SpeciesGridFields.DATAPROVIDER, new AsyncCallback<HashMap<String,Integer>>() {
@Override
public void onSuccess(HashMap<String, Integer> result) {
if(result!=null)
dataProviderFilter.loadDataSource(result);
}
@Override
public void onFailure(Throwable caught) {
resetFilters();
// errorAlert("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById " + caught.getMessage());
Log.error("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById " + caught);
}
});
break;
case MATCHING_RANK:
SpeciesDiscovery.taxonomySearchService.getFilterCounterById(SpeciesGridFields.MATCHING_RANK, new AsyncCallback<HashMap<String,Integer>>() {
@Override
public void onSuccess(HashMap<String, Integer> result) {
if(result!=null)
rankFilter.loadDataSource(result);
}
@Override
public void onFailure(Throwable caught) {
resetFilters();
// errorAlert("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById" + caught.getMessage());
Log.error("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById " + caught);
}
});
break;
}
}
public void updateDataSourceFilter(){
SpeciesDiscovery.taxonomySearchService.getFilterCounterById(SpeciesGridFields.DATASOURCE, new AsyncCallback<HashMap<String,Integer>>() {
@Override
public void onSuccess(HashMap<String, Integer> result) {
if(result!=null)
dataSourceFilter.loadDataSource(result);
}
@Override
public void onFailure(Throwable caught) {
resetFilters();
// errorAlert("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById " + caught.getMessage());
Log.error("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById " + caught);
}
});
SpeciesDiscovery.taxonomySearchService.getFilterCounterById(SpeciesGridFields.DATAPROVIDER, new AsyncCallback<HashMap<String,Integer>>() {
@Override
public void onSuccess(HashMap<String, Integer> result) {
if(result!=null)
dataProviderFilter.loadDataSource(result);
}
@Override
public void onFailure(Throwable caught) {
resetFilters();
// errorAlert("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById " + caught.getMessage());
Log.error("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById " + caught);
}
});
SpeciesDiscovery.taxonomySearchService.getFilterCounterById(SpeciesGridFields.MATCHING_RANK, new AsyncCallback<HashMap<String,Integer>>() {
@Override
public void onSuccess(HashMap<String, Integer> result) {
if(result!=null)
rankFilter.loadDataSource(result);
}
@Override
public void onFailure(Throwable caught) {
resetFilters();
// errorAlert("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById" + caught.getMessage());
Log.error("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterById " + caught);
}
});
SpeciesDiscovery.taxonomySearchService.getFilterCounterForClassification(getUpdatedGroupByRank() , callbackFilterCounter);
}
public void resetFilters() {
dataSourceFilter.reset();
dataProviderFilter.reset();
classificationFilter.reset();
rankFilter.reset();
oldStreamSize = -1;
setIsDataLoaded(false);
}
public void updateFilterCounterForClassification(){
if(isDataLoaded)
SpeciesDiscovery.taxonomySearchService.getFilterCounterForClassification(getUpdatedGroupByRank(), callbackFilterCounter);
}
public String getUpdatedGroupByRank() {
if(currentGroupByRank.compareTo(classificationFilter.getGroupRank())!=0)
classificationFilter.reset();
setGroupByRank(classificationFilter.getGroupRank());
return currentGroupByRank;
}
public void setGroupByRank(String groupByRank) {
currentGroupByRank = groupByRank;
}
public String getGroupByRank() {
return classificationFilter.getGroupRank();
}
private AsyncCallback<HashMap<String,ClassificationModel>> callbackFilterCounter = new AsyncCallback<HashMap<String,ClassificationModel>>() {
@Override
public void onFailure(Throwable caught) {
resetFilters();
// errorAlert("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterForClassification" + caught.getMessage());
Log.error("Error in SpeciesDiscovery.taxonomySearchService.getFilterCounterForClassification " + caught);
}
@Override
public void onSuccess(HashMap<String, ClassificationModel> result) {
if(result!=null)
classificationFilter.loadDataSourceClassification(result, currentGroupByRank);
}
};
}