You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
accounting-dashboard/src/main/java/org/gcube/portlets/user/accountingdashboard/client/application/providers/TreatmentsProvider.java

181 lines
4.8 KiB
Java

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<TreatmentData> {
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<TreatmentData> 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<TreatmentData> 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<TreatmentData> 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<TreatmentData> comparator;
switch (columnSortIndex) {
case 0:
comparator = new Comparator<TreatmentData>() {
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<TreatmentData>() {
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<TreatmentData>() {
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<TreatmentData> 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
}
}