package org.gcube.portlets.user.accountingdashboard.client.application.providers; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.gcube.portlets.user.accountingdashboard.client.application.controller.Controller; import org.gcube.portlets.user.accountingdashboard.shared.data.TreatmentData; import com.google.gwt.view.client.AsyncDataProvider; import com.google.gwt.view.client.HasData; import com.google.gwt.view.client.Range; import com.google.inject.Inject; /** * * @author Giancarlo Panichi * */ public class TreatmentsProvider extends AsyncDataProvider { private static Logger logger = java.util.logging.Logger.getLogger(""); @SuppressWarnings("unused") private Controller controller; private int start; private int length; private int columnSortIndex; private boolean ascending = false; private String id; private ArrayList list; @Inject public TreatmentsProvider(String id, Controller controller) { this.id = id; this.controller = controller; list = new ArrayList<>(); bindEvents(); } private void bindEvents() { /* * EventBus eventBus = controller.getEventBus(); * eventBus.addHandler(DatasetsEvent.TYPE, new * DatasetsEvent.DatasetsEventHandler() { * * @Override public void onDatasets(DatasetsEvent event) { * update(event.getList()); * * } }); */ } private void update(ArrayList list) { logger.log(Level.FINE, "Treatments Data Display is empty: " + getDataDisplays().isEmpty()); logger.log(Level.FINE, "Show=[Start=" + start + ", Length=" + length + "]"); int limits = start + length; if (limits > list.size()) { limits = list.size(); if (limits < start) { start = limits; } } List dataInRange = new ArrayList<>(); if (list != null && list.size() > 1) { if (columnSortIndex > -1) { logger.log(Level.FINE, "ColumnSortIndex: " + columnSortIndex); logger.log(Level.FINE, "Ascending: " + ascending); Comparator comparator; switch (columnSortIndex) { case 0: comparator = new Comparator() { public int compare(TreatmentData d1, TreatmentData d2) { if (d1 == d2) { return 0; } int diff = -1; if (d1 != null) { if (d1.getTreatmentType() != null) { diff = ((d2 != null) && (d2.getTreatmentType() != null)) ? d1.getTreatmentType().compareTo(d2.getTreatmentType()) : 1; } } return ascending ? -diff : diff; } }; break; case 1: comparator = new Comparator() { public int compare(TreatmentData d1, TreatmentData d2) { if (d1 == d2) { return 0; } int diff = -1; if (d1 != null) { if (d1.getNumberOfTreatments() != null) { diff = ((d2 != null) && (d2.getNumberOfTreatments() != null)) ? d1.getNumberOfTreatments().compareTo(d2.getNumberOfTreatments()) : 1; } } return ascending ? -diff : diff; } }; break; default: comparator = new Comparator() { public int compare(TreatmentData d1, TreatmentData d2) { if (d1 == d2) { return 0; } int diff = -1; if (d1 != null) { if (d1.getTreatmentType() != null) { diff = ((d2 != null) && (d2.getTreatmentType() != null)) ? d1.getTreatmentType().compareTo(d2.getTreatmentType()) : 1; } } return ascending ? -diff : diff; } }; break; } Collections.sort(list, comparator); } dataInRange = list.subList(start, limits); } else { dataInRange = list; } this.updateRowCount(list.size(), true); this.updateRowData(start, dataInRange); } @Override protected void onRangeChanged(HasData display) { Range range = display.getVisibleRange(); start = range.getStart(); length = range.getLength(); logger.log(Level.FINE, "Treatmentss Provider Range Change: [start=" + start + ", length=" + length + "]"); retrieveData(); } public void onSortChanged(int start, int length, int columnSortIndex, boolean ascending) { logger.log(Level.FINE, "Treatments Provider Sort: [start=" + start + ", length=" + length + "]"); this.start = start; this.length = length; this.columnSortIndex = columnSortIndex; this.ascending = ascending; retrieveData(); } public void onRefreshTreatments() { logger.log(Level.FINE, "Treatments Provider Refresh"); retrieveData(); } private void retrieveData() { logger.log(Level.FINE, "Treatments Provider: " + id); update(list); // controller.getDatasets(productId); } public void addNewTreatment() { // TODO Auto-generated method stub } }