added upload image integrated with upload popup
git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/user/reports@95187 82a268e6-3cf1-43bd-a215-b396298e98cfmaster
parent
5645ceafab
commit
fd610b29bc
@ -1,112 +0,0 @@
|
||||
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||
|
||||
import com.google.gwt.user.client.ui.CheckBox;
|
||||
import com.google.gwt.user.client.ui.ClickListener;
|
||||
import com.google.gwt.user.client.ui.FlexTable;
|
||||
import com.google.gwt.user.client.ui.HTML;
|
||||
import com.google.gwt.user.client.ui.HorizontalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @author massi
|
||||
*
|
||||
*/
|
||||
public class TSHeader extends HorizontalPanel {
|
||||
|
||||
private CheckBox myCB;
|
||||
private HTML myHeader;
|
||||
private int myColNo;
|
||||
private FlexTable myTable;
|
||||
TimeSeriesFilterDialog caller;
|
||||
TSHeader myinstance;
|
||||
|
||||
/**
|
||||
* @param tsf -
|
||||
* @param myTable .
|
||||
* @param cb .
|
||||
* @param myColNo .
|
||||
* @param myHeader .
|
||||
*/
|
||||
public TSHeader(TimeSeriesFilterDialog tsf, FlexTable myTable, CheckBox cb, int myColNo, HTML myHeader) {
|
||||
super();
|
||||
myinstance = this;
|
||||
caller = tsf;
|
||||
this.myTable = myTable;
|
||||
this.myCB = cb;
|
||||
|
||||
this.myColNo = myColNo;
|
||||
this.myHeader = myHeader;
|
||||
setVerticalAlignment(ALIGN_MIDDLE);
|
||||
myHeader.setStyleName("timeSeries_header_font");
|
||||
add(myHeader);
|
||||
add(myCB);
|
||||
|
||||
myCB.addClickListener(cbListener);
|
||||
}
|
||||
|
||||
private void removeEmptyHeaders( FlexTable myTable) {
|
||||
|
||||
for (int i = 0; i < myTable.getCellCount(0); i++) {
|
||||
if (myTable.getWidget(0, i) == null) {
|
||||
myTable.removeCell(0, i);
|
||||
myTable.removeCell(1, i);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ClickListener cbListener = new ClickListener() {
|
||||
public void onClick(Widget sender) {
|
||||
caller.removeHeader(myinstance);
|
||||
myTable.remove(sender.getParent());
|
||||
removeEmptyHeaders(myTable);
|
||||
}
|
||||
};
|
||||
/**
|
||||
*
|
||||
* @return .
|
||||
*/
|
||||
public CheckBox getMyCB() {
|
||||
return myCB;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param myCB .
|
||||
*/
|
||||
public void setMyCB(CheckBox myCB) {
|
||||
this.myCB = myCB;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @return .
|
||||
* */
|
||||
public HTML getMyHeader() {
|
||||
return myHeader;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param myHeader .
|
||||
*/
|
||||
public void setMyHeader(HTML myHeader) {
|
||||
this.myHeader = myHeader;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @return .
|
||||
*/
|
||||
public int getMyColNo() {
|
||||
return myColNo;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param myColNo .
|
||||
*/
|
||||
public void setMyColNo(int myColNo) {
|
||||
this.myColNo = myColNo;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,212 +0,0 @@
|
||||
package org.gcube.portlets.user.reportgenerator.client.dialog;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.portlets.d4sreporting.common.client.CommonConstants;
|
||||
import org.gcube.portlets.d4sreporting.common.shared.TimeSeriesFilter;
|
||||
import org.gcube.portlets.d4sreporting.common.shared.TimeSeriesinfo;
|
||||
import org.gcube.portlets.d4sreporting.common.shared.RepTimeSeries;
|
||||
import org.gcube.portlets.user.reportgenerator.client.targets.TSArea;
|
||||
|
||||
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.ui.Button;
|
||||
import com.google.gwt.user.client.ui.ChangeListener;
|
||||
import com.google.gwt.user.client.ui.CheckBox;
|
||||
import com.google.gwt.user.client.ui.ClickListener;
|
||||
import com.google.gwt.user.client.ui.DialogBox;
|
||||
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.ScrollPanel;
|
||||
import com.google.gwt.user.client.ui.TextBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author massi
|
||||
*
|
||||
*/
|
||||
public class TimeSeriesFilterDialog extends DialogBox {
|
||||
ScrollPanel scroller = new ScrollPanel();
|
||||
TextBox from = new TextBox();
|
||||
TextBox to = new TextBox();
|
||||
FlexTable flexTable = new FlexTable();
|
||||
|
||||
List<TSHeader> compoundHeaders = new LinkedList<TSHeader>();
|
||||
/**
|
||||
*
|
||||
* @param sts a ts
|
||||
* @param caller .
|
||||
*/
|
||||
public TimeSeriesFilterDialog(final TSArea caller, final RepTimeSeries sts) {
|
||||
|
||||
final TimeSeriesinfo droppedTS = sts.getTsMetadata();
|
||||
|
||||
setText(droppedTS.getTitle() + " Filter");
|
||||
String name = droppedTS.getTitle();
|
||||
long rowsNo = droppedTS.getDimension();
|
||||
|
||||
|
||||
Grid metadata = new Grid(2, 2);
|
||||
metadata.setWidget(0, 0, new HTML("Name:", true));
|
||||
metadata.setWidget(0, 1, new HTML(name));
|
||||
metadata.setWidget(1, 0, new HTML("Total rows : ", true));
|
||||
metadata.setWidget(1, 1, new HTML(""+rowsNo));
|
||||
|
||||
|
||||
final VerticalPanel main_panel = new VerticalPanel();
|
||||
main_panel.addStyleName("bgBlank p8 font_family font_12");
|
||||
|
||||
main_panel.add(metadata);
|
||||
|
||||
List<String> headersString = droppedTS.getHeaderLabels();
|
||||
|
||||
/**
|
||||
*/
|
||||
for (int i = 0; i < headersString.size(); i++) {
|
||||
CheckBox toAdd = new CheckBox();
|
||||
toAdd.setChecked(true);
|
||||
compoundHeaders.add(new TSHeader(this, flexTable, toAdd, i, new HTML(headersString.get(i) )));
|
||||
}
|
||||
|
||||
|
||||
main_panel.add(new HTML("Selected fields: (click to remove)"));
|
||||
|
||||
flexTable = getTableHeader(compoundHeaders);
|
||||
main_panel.add(flexTable);
|
||||
|
||||
main_panel.add(new HTML("Select rows interval:"));
|
||||
|
||||
from.setText("1");
|
||||
to.setText("10");
|
||||
to.setMaxLength(6);
|
||||
from.setMaxLength(6);
|
||||
from.addChangeListener(textBoxListener);
|
||||
to.addChangeListener(textBoxListener);
|
||||
|
||||
|
||||
Grid rowsInterval = new Grid(1, 4);
|
||||
rowsInterval.setWidget(0, 0, new HTML("From row:"));
|
||||
rowsInterval.setWidget(0, 1, from);
|
||||
rowsInterval.setWidget(0, 2, new HTML(" To row:"));
|
||||
rowsInterval.setWidget(0, 3, to);
|
||||
|
||||
main_panel.add(rowsInterval);
|
||||
|
||||
main_panel.add(new HTML("<hr align=\"left\" size=\"1\" width=\"100%\" color=\"gray\" noshade>"));
|
||||
HorizontalPanel buttonspanel = new HorizontalPanel();
|
||||
buttonspanel.setHeight("50");
|
||||
buttonspanel.setSpacing(3);
|
||||
|
||||
|
||||
|
||||
|
||||
// PopupPanel is a SimplePanel, so you have to set it's widget property to
|
||||
// whatever you want its contents to be.
|
||||
Button close = new Button("Close");
|
||||
close.addClickHandler(new ClickHandler() {
|
||||
public void onClick(ClickEvent event) {
|
||||
hide();
|
||||
}
|
||||
});
|
||||
|
||||
Button apply = new Button("Apply");
|
||||
apply.addClickHandler(new ClickHandler() {
|
||||
@Override
|
||||
public void onClick(ClickEvent event) {
|
||||
List<TSHeader> selectedCols = compoundHeaders;
|
||||
|
||||
List<Integer> colsToShow = new LinkedList<Integer>();
|
||||
|
||||
for (TSHeader head : selectedCols) {
|
||||
colsToShow.add(new Integer(head.getMyColNo()));
|
||||
}
|
||||
int fromInt = Integer.parseInt(from.getText());
|
||||
int toInt = Integer.parseInt(to.getText());
|
||||
|
||||
TimeSeriesFilter toSet = new TimeSeriesFilter(colsToShow, null, null, fromInt, toInt);
|
||||
caller.setNewFilter(toSet);
|
||||
caller.refreshHeaders();
|
||||
hide();
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
buttonspanel.add(close);
|
||||
buttonspanel.add(apply);
|
||||
main_panel.add(buttonspanel);
|
||||
|
||||
scroller.setPixelSize(550, 280);
|
||||
main_panel.setPixelSize(550, 260);
|
||||
|
||||
scroller.add(main_panel);
|
||||
setWidget(scroller);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param toRemove .
|
||||
* @return .
|
||||
*/
|
||||
public boolean removeHeader(TSHeader toRemove) {
|
||||
return compoundHeaders.remove(toRemove);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* display the header of the ts
|
||||
* @param droppedTS
|
||||
* @return
|
||||
*/
|
||||
private FlexTable getTableHeader(List<TSHeader> headers) {
|
||||
flexTable.clear();
|
||||
int n = headers.size();
|
||||
|
||||
for (int i = 0; i < n ; i++) {
|
||||
flexTable.getCellFormatter().setStyleName(0, i, "timeSeries_header");
|
||||
flexTable.setWidget(0, i, headers.get(i));
|
||||
flexTable.getCellFormatter().setStyleName(1, i, "timeSeries_td");
|
||||
flexTable.setWidget(1, i, new HTML("..."));
|
||||
}
|
||||
|
||||
return flexTable;
|
||||
}
|
||||
|
||||
ChangeListener textBoxListener = new ChangeListener() {
|
||||
|
||||
public void onChange(Widget sender) {
|
||||
TextBox tb = (TextBox) sender;
|
||||
String text = tb.getText();
|
||||
String checkedText = text;
|
||||
text = text.replaceAll(CommonConstants.ACCEPTED_CHARS_JUST_NUM, "");
|
||||
if (! text.equals(checkedText) ) {
|
||||
Window.alert("Only numbers are accepted");
|
||||
tb.setText(text);
|
||||
}
|
||||
int start = Integer.parseInt(from.getText());
|
||||
int end = Integer.parseInt(to.getText());
|
||||
|
||||
if (start >= end) {
|
||||
Window.alert("From must be greater than to");
|
||||
to.setText(""+(start+10));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void show() {
|
||||
super.show();
|
||||
center();
|
||||
}
|
||||
|
||||
}
|
@ -1,115 +0,0 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||
|
||||
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.portlets.user.workspace.client.interfaces.GXTFolderItemTypeEnum;
|
||||
import org.gcube.portlets.user.workspace.client.model.FileModel;
|
||||
|
||||
import com.extjs.gxt.ui.client.dnd.DND.Operation;
|
||||
import com.extjs.gxt.ui.client.dnd.DropTarget;
|
||||
import com.extjs.gxt.ui.client.dnd.Insert;
|
||||
import com.extjs.gxt.ui.client.event.DNDEvent;
|
||||
import com.extjs.gxt.ui.client.store.TreeStoreModel;
|
||||
import com.extjs.gxt.ui.client.widget.treepanel.TreePanel;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
|
||||
/**
|
||||
* @author Federico De Faveri defaveri@isti.cnr.it
|
||||
*
|
||||
*/
|
||||
public class DropTSListener extends DropTarget {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final String NO_DROP = "x-dd-drop-nodrop";
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final String OK_DROP = "x-dd-drop-ok";
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final String OK_DROP_ADD = "x-dd-drop-ok-add";
|
||||
|
||||
protected TSArea panel;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param panel .
|
||||
* @param config .
|
||||
*/
|
||||
public DropTSListener(TSArea panel) {
|
||||
super(panel);
|
||||
this.panel = panel;
|
||||
//IMPORTANT
|
||||
setOperation(Operation.COPY);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void showFeedback(DNDEvent event) {
|
||||
if (!isValidDropTarget(event)) {
|
||||
Insert.get().hide();
|
||||
event.getStatus().setStatus(false);
|
||||
return;
|
||||
}
|
||||
super.showFeedback(event);
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private boolean isValidDropTarget(DNDEvent event) {
|
||||
GWT.log("isValidDropTarget");
|
||||
TreePanel<FileModel> source = (TreePanel<FileModel>) event.getDragSource().getComponent();
|
||||
List<FileModel> selection = source.getSelectionModel().getSelection();
|
||||
|
||||
for (FileModel model : selection) {
|
||||
GWT.log("selection: " + model.getGXTFolderItemType());
|
||||
if(model.getGXTFolderItemType()!=null){
|
||||
if (model.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.TIME_SERIES))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param source .
|
||||
* @param e .
|
||||
* @param data .
|
||||
* @return .
|
||||
*/
|
||||
protected void onDragDrop(DNDEvent event) {
|
||||
|
||||
super.onDragDrop(event);
|
||||
|
||||
if(event.getData() != null){
|
||||
List<TreeStoreModel> listItemsSource = event.getData();
|
||||
GWT.log("Number of move " + listItemsSource.size());
|
||||
|
||||
FileModel sourceFileModel = null; //for print
|
||||
|
||||
for(TreeStoreModel itemSource : listItemsSource){
|
||||
|
||||
sourceFileModel = (FileModel) itemSource.getModel();
|
||||
|
||||
if(sourceFileModel.getParentFileModel()!=null)
|
||||
GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag " + " Parent Name: " + sourceFileModel.getParentFileModel().getName() + "id " + sourceFileModel.getParentFileModel().getIdentifier());
|
||||
else
|
||||
GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag ");
|
||||
|
||||
GWT.log("Child count: " + itemSource.getChildCount());
|
||||
|
||||
panel.fetchTS(sourceFileModel.getIdentifier(), false , true);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,312 +0,0 @@
|
||||
package org.gcube.portlets.user.reportgenerator.client.targets;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.portlets.d4sreporting.common.shared.TimeSeriesFilter;
|
||||
import org.gcube.portlets.d4sreporting.common.shared.TimeSeriesinfo;
|
||||
import org.gcube.portlets.d4sreporting.common.shared.Table;
|
||||
import org.gcube.portlets.d4sreporting.common.shared.RepTimeSeries;
|
||||
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.TimeSeriesFilterDialog;
|
||||
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 RepTimeSeries sts = new RepTimeSeries();
|
||||
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, RepTimeSeries 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(" ", 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(TimeSeriesinfo 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);
|
||||
|
||||
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) {
|
||||
TimeSeriesFilterDialog dlg = new TimeSeriesFilterDialog(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<Table>() {
|
||||
public void onFailure(Throwable caught) { Window.alert("There were Problem contacting Server, please try later");}
|
||||
|
||||
public void onSuccess(Table result) {
|
||||
Table 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();
|
||||
TimeSeriesinfo tsMetadata = convertWSTS2SerialazableTS(droppedTS);
|
||||
sts = new RepTimeSeries(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 TimeSeriesinfo convertWSTS2SerialazableTS(GWTTimeSeries md) {
|
||||
TimeSeriesinfo tsMetadata = new TimeSeriesinfo(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>();
|
||||
TimeSeriesFilter 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 RepTimeSeries getSts() {
|
||||
return sts;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param sts .
|
||||
*/
|
||||
public void setSts(RepTimeSeries sts) {
|
||||
this.sts = sts;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param tsf the new ts filter
|
||||
*/
|
||||
public void setNewFilter(TimeSeriesFilter tsf) {
|
||||
this.sts.setFilter(tsf);
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
package org.gcube.portlets.user.reportgenerator.server.servlet;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.StringReader;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.gcube.application.framework.core.session.SessionManager;
|
||||
import org.gcube.common.homelibrary.home.HomeLibrary;
|
||||
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
|
||||
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException;
|
||||
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
||||
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException;
|
||||
import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalImage;
|
||||
import org.gcube.common.homelibrary.util.MimeTypeUtil;
|
||||
import org.gcube.common.portal.PortalContext;
|
||||
import org.gcube.common.scope.api.ScopeProvider;
|
||||
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper;
|
||||
|
||||
/**
|
||||
* Servlet implementation class DownloadImageServlet
|
||||
*/
|
||||
public class DownloadImageServlet extends HttpServlet {
|
||||
protected static Logger _log = Logger.getLogger(DownloadImageServlet.class);
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* @see HttpServlet#HttpServlet()
|
||||
*/
|
||||
public DownloadImageServlet() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
*/
|
||||
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||
String itemId = req.getParameter("id");
|
||||
if(itemId==null || itemId.isEmpty()){
|
||||
sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Item id is null");
|
||||
return;
|
||||
}
|
||||
Workspace wa;
|
||||
WorkspaceItem item;
|
||||
try{
|
||||
wa = getWorkspaceArea(req.getSession());
|
||||
item = wa.getItem(itemId);
|
||||
ExternalImage externalImage = (ExternalImage) item;
|
||||
|
||||
String mimeType = externalImage.getMimeType();
|
||||
String itemName = MimeTypeUtil.getNameWithExtension(item.getName(), mimeType);
|
||||
|
||||
resp.setHeader( "Content-Disposition", "inline; filename=\"" + itemName + "\"" );
|
||||
resp.setContentType(externalImage.getMimeType());
|
||||
|
||||
resp.setContentLength((int) externalImage.getLength());
|
||||
|
||||
OutputStream out = resp.getOutputStream();
|
||||
InputStream is = externalImage.getData();
|
||||
|
||||
IOUtils.copy(is, out);
|
||||
is.close();
|
||||
|
||||
out.close();
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
_log.error("Error during item retrieving "+itemId,e);
|
||||
sendError(resp,HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error during image retrieving: "+e.getMessage());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
* @throws WorkspaceFolderNotFoundException
|
||||
* @throws InternalErrorException
|
||||
* @throws HomeNotFoundException
|
||||
*/
|
||||
protected Workspace getWorkspaceArea(HttpSession session) throws WorkspaceFolderNotFoundException, InternalErrorException, HomeNotFoundException {
|
||||
String user = (String) session.getAttribute(ScopeHelper.USERNAME_ATTRIBUTE);
|
||||
String currScope = ScopeProvider.instance.get();
|
||||
if (currScope == null) {
|
||||
String scope2Set = "/"+PortalContext.getConfiguration().getInfrastructureName();
|
||||
ScopeProvider.instance.set(scope2Set);
|
||||
_log.warn("Found scope null, setting infrastructure scope="+scope2Set);
|
||||
}
|
||||
if (user == null) {
|
||||
user = ReportServiceImpl.getDevUser();
|
||||
ScopeProvider.instance.set(ReportServiceImpl.TEST_SCOPE);
|
||||
_log.warn("User is null in session, setting dev user = " + user);
|
||||
}
|
||||
Workspace toReturn = HomeLibrary.getUserWorkspace(user);
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
|
||||
protected void sendError(HttpServletResponse response, String resultMessage) throws IOException {
|
||||
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||
_log.trace("error message: "+resultMessage);
|
||||
_log.trace("writing response...");
|
||||
StringReader sr = new StringReader(resultMessage);
|
||||
IOUtils.copy(sr, response.getOutputStream());
|
||||
_log.trace("response wrote");
|
||||
response.flushBuffer();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package org.gcube.portlets.user.reportgenerator.shared;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class ReportImage implements Serializable {
|
||||
private String id;
|
||||
private String url;
|
||||
private int width;
|
||||
private int height;
|
||||
public ReportImage() {
|
||||
super();
|
||||
}
|
||||
public ReportImage(String id, String url, int width, int height) {
|
||||
super();
|
||||
this.id = id;
|
||||
this.url = url;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
}
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
public int getWidth() {
|
||||
return width;
|
||||
}
|
||||
public void setWidth(int width) {
|
||||
this.width = width;
|
||||
}
|
||||
public int getHeight() {
|
||||
return height;
|
||||
}
|
||||
public void setHeight(int height) {
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue