This repository has been archived on 2021-11-25. You can view files and clone it, but cannot push or open issues or pull requests.
vmereports-manager-portlet/src/main/java/org/gcube/portlets/user/reportgenerator/client/targets/TSArea.java

315 lines
9.4 KiB
Java

package org.gcube.portlets.user.reportgenerator.client.targets;
import java.util.LinkedList;
import java.util.List;
import org.gcube.portlets.d4sreporting.common.shared.SerializableTSFilter;
import org.gcube.portlets.d4sreporting.common.shared.SerializableTSinfo;
import org.gcube.portlets.d4sreporting.common.shared.SerializableTable;
import org.gcube.portlets.d4sreporting.common.shared.SerializableTimeSeries;
import org.gcube.portlets.user.reportgenerator.client.ReportGenerator;
import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter;
import org.gcube.portlets.user.reportgenerator.client.dialog.TimeSeriesDialog;
import org.gcube.portlets.user.reportgenerator.client.dialog.TimeSeriesFilter;
import org.gcube.portlets.user.reportgenerator.client.dialog.TimeSeriesSampleDialog;
import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem;
import org.gcube.portlets.user.workspace.client.workspace.folder.item.GWTTimeSeries;
import com.extjs.gxt.ui.client.widget.Composite;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
/**
* <code> TSArea </code> class is a Widget you can drop a Workspace Time Series on
*
* @author Massimiliano Assante, ISTI-CNR - massimiliano.assante@isti.cnr.it
* @version July 2011 (3.0)
*/
public class TSArea extends Composite {
private VerticalPanel mainPanel;
private SerializableTimeSeries sts = new SerializableTimeSeries();
private String idInBasket;
private Presenter presenter;
private FlexTable flexTable;
private TSArea singleton;
VerticalPanel tableContainer = new VerticalPanel();
Grid metadata = new Grid(3, 2);
Label label;
/**
* @param presenter .
* @param width .
* @param height .
* @param sts the time series
*/
public TSArea(Presenter presenter, int width, int height, SerializableTimeSeries sts) {
singleton = this;
this.presenter = presenter;
mainPanel = new VerticalPanel();
//setElement(mainPanel.getElement());
mainPanel.setStyleName("timeseriesArea");
mainPanel.addStyleName("timeseriesArea_bg");
mainPanel.setWidth(width);
mainPanel.setHeight(height);
mainPanel.add(new HTML("&nbsp;", true));
this.sts = sts;
if (sts != null) {
if (sts.getTsMetadata() != null) {
showTS(sts.getTsMetadata());
}
}
initComponent(mainPanel);
mainPanel.layout(true);
}
/**
* called when dropped a TS on the area
* @param toShow the TS to show
*/
public void showTS(SerializableTSinfo toShow) {
mainPanel.removeAll();
mainPanel.removeStyleName("timeseriesArea_bg");
tableContainer.removeAll();
metadata.setWidget(0, 0, new HTML("<b>TS name:</b>", true));
metadata.setWidget(0, 1, new HTML(toShow.getTitle()));
metadata.setWidget(1, 0, new HTML("<b>Creation Date:</b> ", true));
metadata.setWidget(1, 1, new HTML(toShow.getTimeSeriesCreationDate()));
metadata.setWidget(2, 0, new HTML("<b>Total rows:</b>", true));
metadata.setWidget(2, 1, new HTML(""+toShow.getDimension()));
List<String> headers = toShow.getHeaderLabels();
flexTable = new FlexTable();
int n = (headers.size() > 10) ? 10 : headers.size();
for (int i = 0; i < n ; i++) {
flexTable.getCellFormatter().setStyleName(0, i, "timeSeries_header");
flexTable.setWidget(0, i, new HTML(headers.get(i)));
flexTable.setWidget(1, i, new HTML(".."));
flexTable.getCellFormatter().setStyleName(1, i, "timeSeries_td");
}
if (headers.size() > 10) {
flexTable.setWidget(0, 11, new HTML(" more .."));
flexTable.setWidget(1, 11, new HTML(".."));
flexTable.getCellFormatter().setStyleName(0, 11, "timeSeries_header");
flexTable.getCellFormatter().setStyleName(1, 11, "timeSeries_td");
}
tableContainer.add(flexTable);
mainPanel.add(metadata);
mainPanel.add(tableContainer);
Button moreDetails = new Button("View Timeseries Metadata");
Button filter = new Button("Filter Table");
Button showSample = new Button("Show Sample");
HorizontalPanel buttonsPanel = new HorizontalPanel();
buttonsPanel.setSpacing(5);
buttonsPanel.add(moreDetails);
buttonsPanel.add(filter);
buttonsPanel.add(showSample);
mainPanel.add(buttonsPanel);
moreDetails.addClickHandler(viewMetadataTS);
showSample.addClickHandler(showTSSample);
filter.addClickHandler(applyFilterTs);
//TODO: check this
presenter.storeChangeInSession(this);
mainPanel.layout(true);
}
ClickHandler viewMetadataTS = new ClickHandler() {
public void onClick(ClickEvent event) {
TimeSeriesDialog dlg = new TimeSeriesDialog(sts.getTsMetadata());
dlg.setAnimationEnabled(true);
dlg.show();
}
};
ClickHandler applyFilterTs = new ClickHandler() {
public void onClick(ClickEvent event) {
TimeSeriesFilter dlg = new TimeSeriesFilter(singleton, sts);
//dlg.setPopupPosition(sender.getAbsoluteLeft(), sender.getAbsoluteTop());
dlg.setAnimationEnabled(true);
dlg.show();
}
};
ClickHandler showTSSample = new ClickHandler() {
public void onClick(ClickEvent event) {
presenter.getModel().getModelService().getSampleTimeSeries(sts, new AsyncCallback<SerializableTable>() {
public void onFailure(Throwable caught) { Window.alert("There were Problem contacting Server, please try later");}
public void onSuccess(SerializableTable result) {
SerializableTable toPass = result;
TimeSeriesSampleDialog dlg = new TimeSeriesSampleDialog(toPass);
dlg.setAnimationEnabled(true);
dlg.show();
}
});
}
};
/**
*
* @param droppedTS the dropped timeseries
*/
public void dropTS(GWTTimeSeries droppedTS) {
idInBasket = droppedTS.getId();
SerializableTSinfo tsMetadata = convertWSTS2SerialazableTS(droppedTS);
sts = new SerializableTimeSeries(null, tsMetadata);
GWT.log("showTS TS");
showTS(tsMetadata);
}
public void fetchTS(String identifier, boolean isInteralImage, boolean fullDetails) {
GWT.log("FETCH TS");
this.mask("fetching TimeSeries, pleas wait", "loading-indicator");
ReportGenerator.get().getWSTreeService().getTimeSeriesById(identifier, new AsyncCallback<GWTWorkspaceItem>() {
public void onSuccess(GWTWorkspaceItem result) {
unmask();
GWTTimeSeries ts = (GWTTimeSeries) result;
dropTS(ts);
}
public void onFailure(Throwable caught) {
unmask();
Window.alert("Could not fetch Time Series from infrastructure " + caught.getCause());
}
});
}
/**
* converts the WorkSpace TS Object into a Report TS Object
* @param md the TS metadata to convert
* @return
*/
private SerializableTSinfo convertWSTS2SerialazableTS(GWTTimeSeries md) {
SerializableTSinfo tsMetadata = new SerializableTSinfo(md.getId(), md.getName(), md.getDescription(), md.getOwner(),
md.getCreationTime(), md.getLastModificationTime(), md.getTimeSeriesId(), md.getTitle(), md.getCreator(),
md.getTimeSeriesDescription(), md.getTimeSeriesCreationDate(),
md.getPublisher(), md.getSourceId(), md.getSourceName(), md.getRights(), md.getDimension(), md.getHeaderLabels());
return tsMetadata;
}
/**
* refresh the headers once the TS has been filtered
*/
public void refreshHeaders() {
tableContainer.removeAll();
flexTable = new FlexTable();
List<String> filteredHeaders = new LinkedList<String>();
SerializableTSFilter tf = sts.getFilter();
for (Integer colNo : tf.getColsNumberToShow()) {
String toAdd = sts.getTsMetadata().getHeaderLabels().get(colNo);
filteredHeaders.add(toAdd);
}
int n = (filteredHeaders.size() > 10) ? 10 : filteredHeaders.size();
for (int i = 0; i < n ; i++) {
flexTable.getCellFormatter().setStyleName(0, i, "timeSeries_header");
flexTable.setWidget(0, i, new HTML(filteredHeaders.get(i)));
flexTable.setWidget(1, i, new HTML(".."));
flexTable.getCellFormatter().setStyleName(1, i, "timeSeries_td");
}
if (filteredHeaders.size() > 10) {
flexTable.setWidget(0, 11, new HTML(" more .."));
flexTable.setWidget(1, 11, new HTML(".."));
flexTable.getCellFormatter().setStyleName(0, 11, "timeSeries_header");
flexTable.getCellFormatter().setStyleName(1, 11, "timeSeries_td");
}
tableContainer.add(flexTable);
Grid newGrid = new Grid(1, 2);
newGrid.setWidget(0, 0, new HTML("<b>Selected Interval:</b> ", true));
newGrid.setWidget(0, 1, new HTML(tf.getFrom() + " - " + tf.getTo() ));
tableContainer.add(newGrid);
}
/**
*
* @return the possible content
*/
public Label getLabel() {
return label;
}
/**
*
* @param label set the label
*/
public void setLabel(Label label) {
this.label = label;
}
/**
*
* @return .
*/
public String getIdInBasket() {
return idInBasket;
}
/**
*
* @param idInBasket .
*/
public void setIdInBasket(String idInBasket) {
this.idInBasket = idInBasket;
}
/**
*
* @return .
*/
public SerializableTimeSeries getSts() {
return sts;
}
/**
*
* @param sts .
*/
public void setSts(SerializableTimeSeries sts) {
this.sts = sts;
}
/**
*
* @param tsf the new ts filter
*/
public void setNewFilter(SerializableTSFilter tsf) {
this.sts.setFilter(tsf);
}
}