diff --git a/pom.xml b/pom.xml
index 88f8115..f90cd6c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -289,4 +289,5 @@
+ war
diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorUpdater.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorUpdater.java
index aed1fc9..c9a0fba 100644
--- a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorUpdater.java
+++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorUpdater.java
@@ -53,11 +53,19 @@ public class MonitorUpdater extends Timer implements MonitorDialogEventUIListene
+ result);
if(result.isInBackground()){
+ Log.debug("Operation is in background");
cancel();
fireMonitorPutInBackground();
return;
}
+ if(result.isAbort()){
+ Log.debug("Operation is aborted");
+ cancel();
+ fireMonitorAborted();
+
+ }
+
switch (result.getTask().getState()) {
case INITIALIZING:
Log.info("Initializing...");
diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorWidgetEntry.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorWidgetEntry.java
index 1b647ac..ef9bf7a 100644
--- a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorWidgetEntry.java
+++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorWidgetEntry.java
@@ -10,6 +10,8 @@ import org.gcube.portlets.user.td.gwtservice.shared.task.State;
import org.gcube.portlets.user.td.gwtservice.shared.task.TaskS;
import org.gcube.portlets.user.td.gwtservice.shared.task.ValidationsJobS;
import org.gcube.portlets.user.td.gwtservice.shared.task.WorkerState;
+import org.gcube.portlets.user.td.monitorwidget.client.background.MonitorBackgroundDialog;
+import org.gcube.portlets.user.td.monitorwidget.client.background.MonitorBackgroundInfoDialog;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.EntryPoint;
@@ -26,37 +28,95 @@ import com.google.web.bindery.event.shared.SimpleEventBus;
public class MonitorWidgetEntry implements EntryPoint {
private MonitorDialog monitorWidget;
+ private MonitorBackgroundDialog monitorBackgroundWidget;
+ private MonitorBackgroundInfoDialog monitorBackgroundInfoWidget;
+ private SimpleEventBus eventBus;
+ protected enum TestShow {
+ MONITORWIDGET, MONITORBACKGROUNDWIDGET, MONITORBACKGROUNDINFOWIDGET
+ };
public void onModuleLoad() {
- Log.debug("Test MonitorWidget");
- SimpleEventBus eventBus = new SimpleEventBus();
- monitorWidget = new MonitorDialog("1", eventBus);
- monitorWidget.show();
-
- Timer elapsedTimer = new Timer () {
- public void run() {
- showElapsed();
- }
- };
-
- Log.debug("Start Time:"+System.currentTimeMillis());
+ TestShow testShow = TestShow.MONITORBACKGROUNDWIDGET;
+ Timer elapsedTimer;
- // Schedule the timer for every 1/2 second (500 milliseconds)
- elapsedTimer.scheduleRepeating(3000);
+ switch (testShow) {
+ case MONITORWIDGET:
+ Log.debug("Test MonitorWidget");
+ eventBus = new SimpleEventBus();
+ monitorWidget = new MonitorDialog("1", eventBus);
+ monitorWidget.show();
+ elapsedTimer = new Timer() {
+ public void run() {
+ showElapsed();
+ }
+ };
+
+ Log.debug("Start Time:" + System.currentTimeMillis());
+
+ // Schedule the timer for every 1/2 second (500 milliseconds)
+ elapsedTimer.scheduleRepeating(3000);
+ break;
+ case MONITORBACKGROUNDWIDGET:
+ Log.debug("Test MonitorBackgroundWidget");
+ eventBus = new SimpleEventBus();
+ monitorBackgroundWidget = new MonitorBackgroundDialog(eventBus);
+ monitorBackgroundWidget.show();
+
+ elapsedTimer = new Timer() {
+ public void run() {
+ showBackgroundElapsed();
+ }
+ };
+
+ Log.debug("Start Time:" + System.currentTimeMillis());
+
+ // Schedule the timer for every 1/2 second (500 milliseconds)
+ elapsedTimer.scheduleRepeating(3000);
+ break;
+ case MONITORBACKGROUNDINFOWIDGET:
+ eventBus = new SimpleEventBus();
+ showBackgroundInfoWidget();
+ break;
+
+ }
}
-
- private void showElapsed(){
+
+ private void showElapsed() {
OperationMonitor operationMonitor = new OperationMonitor("1",
UIOperationsId.EditRow);
- operationMonitor.setTask(createTaskForTest());
+ operationMonitor.setTask(createTaskForTest("1"));
monitorWidget.updateOperationMonitor(operationMonitor);
}
-
-
- private TaskS createTaskForTest() {
-
+
+ private void showBackgroundElapsed() {
+ ArrayList backgroundOperationMonitorList = new ArrayList();
+
+ for (int i = 0; i < 20; i++) {
+
+ OperationMonitor operationMonitor = new OperationMonitor(String.valueOf(i),
+ UIOperationsId.EditRow);
+ operationMonitor.setTask(createTaskForTest(String.valueOf(i)));
+
+ backgroundOperationMonitorList.add(operationMonitor);
+ }
+
+ monitorBackgroundWidget
+ .updateBackgroundOperationMonitor(backgroundOperationMonitorList);
+ }
+
+ private void showBackgroundInfoWidget() {
+ OperationMonitor operationMonitor = new OperationMonitor("1",
+ UIOperationsId.EditRow);
+ operationMonitor.setTask(createTaskForTest("1"));
+ monitorBackgroundInfoWidget = new MonitorBackgroundInfoDialog(
+ operationMonitor, eventBus);
+ monitorBackgroundInfoWidget.show();
+ }
+
+ private TaskS createTaskForTest(String taskId) {
+
ArrayList validationsJobs = new ArrayList();
ValidationsJobS validationJobS = new ValidationsJobS("1",
WorkerState.IN_PROGRESS, genProgress(), "Row Validate", null,
@@ -71,28 +131,42 @@ public class MonitorWidgetEntry implements EntryPoint {
JobS job2 = new JobS("2", genProgress(), "Add Row Job for Human",
"Add Row Job", WorkerState.IN_PROGRESS, null, validationsJobs);
jobs.add(job2);
-
+
JobS job3 = new JobS("3", genProgress(), "Delete Job for Human",
- "Delete Row Job", WorkerState.IN_PROGRESS, null, validationsJobs);
+ "Delete Row Job", WorkerState.IN_PROGRESS, null,
+ validationsJobs);
jobs.add(job3);
- TaskS task = new TaskS("1", genProgress(), State.IN_PROGRESS, null, "default",
- new Date(), null, jobs);
+ JobS job4 = new JobS("4", genProgress(), "Edit Row Job for Human",
+ "Edit Row Job", WorkerState.IN_PROGRESS, null, validationsJobs);
+ jobs.add(job4);
+
+ JobS job5 = new JobS("5", genProgress(), "Add Row Job for Human",
+ "Add Row Job", WorkerState.IN_PROGRESS, null, validationsJobs);
+ jobs.add(job5);
+
+ JobS job6 = new JobS("6", genProgress(), "Delete Job for Human",
+ "Delete Row Job", WorkerState.IN_PROGRESS, null,
+ validationsJobs);
+ jobs.add(job6);
+
+ TaskS task = new TaskS(taskId, genProgress(), State.IN_PROGRESS, null,
+ "default", new Date(), null, jobs);
return task;
}
-
- private float genProgress(){
+
+ private float genProgress() {
float fperc;
- int perc=Random.nextInt(100);
- if(perc==0){
- fperc=0f;
+ int perc = Random.nextInt(100);
+ if (perc == 0) {
+ fperc = 0f;
} else {
- fperc= new Float(perc)/100;
+ fperc = new Float(perc) / 100;
}
- Log.debug("ProgressSet: "+fperc);
+ // Log.debug("ProgressSet: " + fperc);
return fperc;
}
-
+
}
diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundDialog.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundDialog.java
index 01ec5ea..8ed7432 100644
--- a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundDialog.java
+++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundDialog.java
@@ -1,7 +1,14 @@
package org.gcube.portlets.user.td.monitorwidget.client.background;
+import java.util.ArrayList;
+
+import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor;
+
+import com.allen_sauer.gwt.log.client.Log;
import com.google.web.bindery.event.shared.EventBus;
import com.sencha.gxt.widget.core.client.Window;
+import com.sencha.gxt.widget.core.client.event.SelectEvent;
+import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
/**
* Background Operations Monitor
@@ -11,23 +18,22 @@ import com.sencha.gxt.widget.core.client.Window;
*
*/
public class MonitorBackgroundDialog extends Window {
-
- private static final String WIDTH = "400px";
- private static final String HEIGHT = "520px";
-
+
+ protected static final String WIDTH = "400px";
+ protected static final String HEIGHT = "520px";
+
protected EventBus eventBus;
protected MonitorBackgroundPanel monitorBackgroundPanel;
-
+
public MonitorBackgroundDialog(EventBus eventBus) {
+ super();
+ Log.debug("MonitorBackgroundDialog");
this.eventBus = eventBus;
-
initWindow();
create();
-
-
}
-
- protected void initWindow(){
+
+ protected void initWindow() {
setWidth(WIDTH);
setHeight(HEIGHT);
setBodyBorder(false);
@@ -36,42 +42,38 @@ public class MonitorBackgroundDialog extends Window {
setClosable(true);
setHeadingText("Background Operations Monitor");
}
-
- protected void create(){
- monitorBackgroundPanel = new MonitorBackgroundPanel(eventBus);
+
+ protected void create() {
+ monitorBackgroundPanel = new MonitorBackgroundPanel(this, eventBus);
add(monitorBackgroundPanel);
- show();
}
-
+
/**
* {@inheritDoc}
*/
@Override
protected void initTools() {
- /*if (backgroundBtnEnabled) {
- backgroundBtn = new ToolButton(ToolButton.CLOSE);
- backgroundBtn.setToolTip("Put in the background");
- backgroundBtn.addSelectHandler(new SelectHandler() {
-
- @Override
- public void onSelect(SelectEvent event) {
- hide();
- }
- });
-
- header.addTool(backgroundBtn);
- }*/
-
- super.initTools();
-
- closeBtn.setVisible(false);
/*
+ * if (backgroundBtnEnabled) { backgroundBtn = new
+ * ToolButton(ToolButton.CLOSE);
+ * backgroundBtn.setToolTip("Put in the background");
+ * backgroundBtn.addSelectHandler(new SelectHandler() {
+ *
+ * @Override public void onSelect(SelectEvent event) { hide(); } });
+ *
+ * header.addTool(backgroundBtn); }
+ */
+
+ super.initTools();
+
+ closeBtn.setVisible(true);
+
closeBtn.addSelectHandler(new SelectHandler() {
public void onSelect(SelectEvent event) {
close();
}
- });*/
+ });
}
@@ -79,6 +81,12 @@ public class MonitorBackgroundDialog extends Window {
hide();
}
-
+ public void updateBackgroundOperationMonitor(ArrayList operationMonitorList) {
+ if (monitorBackgroundPanel != null) {
+ monitorBackgroundPanel.operationMonitorListUpdated(operationMonitorList);
+ }
+ forceLayout();
+ }
+
}
diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundInfoDialog.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundInfoDialog.java
new file mode 100644
index 0000000..962e38e
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundInfoDialog.java
@@ -0,0 +1,79 @@
+package org.gcube.portlets.user.td.monitorwidget.client.background;
+
+
+import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.google.web.bindery.event.shared.EventBus;
+import com.sencha.gxt.widget.core.client.Window;
+import com.sencha.gxt.widget.core.client.event.SelectEvent;
+import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
+
+/**
+ * Background Operations Monitor
+ *
+ * @author "Giancarlo Panichi" g.panichi@isti.cnr.it
+ *
+ */
+public class MonitorBackgroundInfoDialog extends Window {
+
+ private static final String WIDTH = "640px";
+ private static final String HEIGHT = "378px";
+
+ protected EventBus eventBus;
+ protected MonitorBackgroundInfoPanel monitorBackgroundInfoPanel;
+ protected OperationMonitor operationMonitor;
+
+ public MonitorBackgroundInfoDialog(OperationMonitor operationMonitor, EventBus eventBus) {
+ super();
+ Log.debug("MonitorBackgroundInfoDialog");
+ this.eventBus = eventBus;
+ this.operationMonitor =operationMonitor;
+ initWindow();
+ create();
+ }
+
+ protected void initWindow() {
+ setWidth(WIDTH);
+ setHeight(HEIGHT);
+ setBodyBorder(false);
+ setResizable(false);
+ setModal(false);
+ setClosable(true);
+ setHeadingText("Info Operation");
+ }
+
+ protected void create() {
+ monitorBackgroundInfoPanel = new MonitorBackgroundInfoPanel(this, operationMonitor,eventBus);
+ add(monitorBackgroundInfoPanel);
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void initTools() {
+
+ super.initTools();
+
+ closeBtn.setVisible(true);
+
+ closeBtn.addSelectHandler(new SelectHandler() {
+
+ public void onSelect(SelectEvent event) {
+ close();
+ }
+ });
+
+ }
+
+ protected void close() {
+ hide();
+
+ }
+
+
+
+}
diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundInfoPanel.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundInfoPanel.java
new file mode 100644
index 0000000..b50dc83
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundInfoPanel.java
@@ -0,0 +1,399 @@
+package org.gcube.portlets.user.td.monitorwidget.client.background;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor;
+import org.gcube.portlets.user.td.gwtservice.shared.task.ValidationsTasksMetadata;
+import org.gcube.portlets.user.td.gwtservice.shared.task.WorkerState;
+import org.gcube.portlets.user.td.gwtservice.shared.task.WorkerStateParser;
+import org.gcube.portlets.user.td.monitorwidget.client.details.tree.MonitorBaseDto;
+import org.gcube.portlets.user.td.monitorwidget.client.details.tree.MonitorFolderDto;
+import org.gcube.portlets.user.td.monitorwidget.client.details.tree.MonitorTreeDataGenerator;
+import org.gcube.portlets.user.td.monitorwidget.client.details.tree.MonitorValidationJobSDto;
+import org.gcube.portlets.user.td.monitorwidget.client.resources.ResourceBundle;
+import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.google.gwt.cell.client.AbstractCell;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import com.google.web.bindery.event.shared.EventBus;
+import com.sencha.gxt.cell.core.client.ProgressBarCell;
+import com.sencha.gxt.core.client.ToStringValueProvider;
+import com.sencha.gxt.core.client.ValueProvider;
+import com.sencha.gxt.core.client.util.Margins;
+import com.sencha.gxt.data.shared.IconProvider;
+import com.sencha.gxt.data.shared.ModelKeyProvider;
+import com.sencha.gxt.data.shared.TreeStore;
+import com.sencha.gxt.widget.core.client.FramedPanel;
+import com.sencha.gxt.widget.core.client.button.TextButton;
+import com.sencha.gxt.widget.core.client.container.MarginData;
+import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
+import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
+import com.sencha.gxt.widget.core.client.event.CollapseItemEvent;
+import com.sencha.gxt.widget.core.client.event.CollapseItemEvent.CollapseItemHandler;
+import com.sencha.gxt.widget.core.client.event.ExpandItemEvent;
+import com.sencha.gxt.widget.core.client.event.ExpandItemEvent.ExpandItemHandler;
+import com.sencha.gxt.widget.core.client.event.SelectEvent;
+import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
+import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
+import com.sencha.gxt.widget.core.client.grid.ColumnModel;
+import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
+import com.sencha.gxt.widget.core.client.treegrid.TreeGrid;
+
+/**
+ *
+ * @author "Giancarlo Panichi" g.panichi@isti.cnr.it
+ *
+ */
+public class MonitorBackgroundInfoPanel extends FramedPanel {
+ protected static final String WIDTH = "618px";
+ protected static final String HEIGHT = "370px";
+ protected static final String HEIGHTGRID ="300px";
+
+ protected static final int CC1WIDTH = 168;
+ protected static final int CC2WIDTH = 100;
+ protected static final int CC3WIDTH = 140;
+ protected static final int CC4WIDTH = 100;
+
+ protected MonitorBackgroundInfoDialog parent;
+ protected MonitorBackgroundInfoPanel thisPanel;
+
+
+
+ protected TRId trId;
+ protected VerticalLayoutContainer con;
+ protected ValidationsTasksMetadata validationsTasksMetadata;
+
+ protected MonitorTreeDataGenerator gen;
+ protected TreeStore store;
+ protected TreeGrid tree;
+ protected OperationMonitor operationMonitor;
+
+ protected EventBus eventBus;
+ protected MonitorBackgroundUpdater monitorBackgroundUpdater;
+
+ class KeyProvider implements ModelKeyProvider {
+ @Override
+ public String getKey(MonitorBaseDto item) {
+ return (item instanceof MonitorFolderDto ? "f-" : "v-")
+ + item.getId();
+ }
+ }
+
+
+ public MonitorBackgroundInfoPanel(MonitorBackgroundInfoDialog parent,
+ OperationMonitor operationMonitor, EventBus eventBus) {
+ super();
+ this.parent = parent;
+ this.operationMonitor=operationMonitor;
+ this.eventBus = eventBus;
+ forceLayoutOnResize = true;
+ init();
+ create();
+ }
+
+ protected void init() {
+ setWidth(WIDTH);
+ setHeight(HEIGHT);
+ setHeaderVisible(false);
+ setBodyBorder(false);
+ setResize(true);
+
+ }
+
+ protected void create() {
+ con = new VerticalLayoutContainer();
+ // con.setScrollMode(ScrollMode.AUTO);
+
+ store = new TreeStore(new KeyProvider());
+
+ addChildrensToStore();
+
+
+ ColumnConfig cc1 = new ColumnConfig(
+ new ToStringValueProvider("task"), CC1WIDTH,
+ "Task");
+ cc1.setHeader("Task");
+ cc1.setCell(new AbstractCell() {
+
+ @Override
+ public void render(Context context, String value, SafeHtmlBuilder sb) {
+ sb.appendHtmlConstant("" + value
+ + "");
+
+ }
+ });
+
+ ColumnConfig cc2 = new ColumnConfig(
+ new ValueProvider() {
+
+ @Override
+ public String getValue(MonitorBaseDto object) {
+ String state = null;
+ if (object instanceof MonitorValidationJobSDto) {
+ state = ((MonitorValidationJobSDto) object)
+ .getWorkerState().toString();
+
+ }
+ if (object instanceof MonitorFolderDto) {
+ state = ((MonitorFolderDto) object).getState();
+ }
+ return state;
+ }
+
+ @Override
+ public void setValue(MonitorBaseDto object, String value) {
+ if (object instanceof MonitorValidationJobSDto) {
+ WorkerState workerState = WorkerStateParser.parse(value);
+ ((MonitorValidationJobSDto) object)
+ .setWorkerState(workerState);
+
+ }
+ if (object instanceof MonitorFolderDto) {
+ ((MonitorFolderDto) object).setState(value);
+ }
+ }
+
+ @Override
+ public String getPath() {
+ return "status";
+ }
+ }, CC2WIDTH, "Status");
+ cc2.setHeader("Status");
+
+ ColumnConfig cc3 = new ColumnConfig(
+ new ValueProvider() {
+
+ @Override
+ public String getValue(MonitorBaseDto object) {
+ String state = null;
+ if (object instanceof MonitorValidationJobSDto) {
+ state = ((MonitorValidationJobSDto) object).getHumanReadableStatus();
+ }
+ if (object instanceof MonitorFolderDto) {
+ state = ((MonitorFolderDto) object)
+ .getHumanReadableStatus();
+ }
+ return state;
+ }
+
+ @Override
+ public void setValue(MonitorBaseDto object, String value) {
+ if (object instanceof MonitorValidationJobSDto) {
+ ((MonitorValidationJobSDto) object)
+ .setHumanReadableStatus(value);
+
+ }
+ if (object instanceof MonitorFolderDto) {
+ ((MonitorFolderDto) object)
+ .setHumanReadableStatus(value);
+ }
+ }
+
+ @Override
+ public String getPath() {
+ return "humanreadablestatus";
+ }
+ }, CC3WIDTH, "Human Readble");
+ cc3.setHeader("Human Readble");
+
+ ColumnConfig cc4 = new ColumnConfig(
+ new ValueProvider() {
+
+ @Override
+ public Double getValue(MonitorBaseDto object) {
+ Double d = null;
+ if (object instanceof MonitorValidationJobSDto) {
+ Float f = ((MonitorValidationJobSDto) object).getProgress();
+ d = new Double(f);
+ }
+ if (object instanceof MonitorFolderDto) {
+ Float f = ((MonitorFolderDto) object).getProgress();
+ d = new Double(f);
+ }
+
+ return d;
+ }
+
+ @Override
+ public void setValue(MonitorBaseDto object, Double value) {
+ if (object instanceof MonitorValidationJobSDto) {
+ ((MonitorValidationJobSDto) object)
+ .setProgress(value.floatValue());
+ }
+ if (object instanceof MonitorFolderDto) {
+ ((MonitorFolderDto) object).setProgress(value
+ .floatValue());
+ }
+ }
+
+ @Override
+ public String getPath() {
+ return "progress";
+ }
+ }, CC4WIDTH, "Progress");
+ cc4.setHeader("Progress");
+
+ ProgressBarCell progress = new ProgressBarCell() {
+ @Override
+ public boolean handlesSelection() {
+ return true;
+ }
+ };
+ progress.setProgressText("{0}% Complete");
+ progress.setWidth(110);
+
+ cc4.setCell(progress);
+
+ List> l = new ArrayList>();
+ l.add(cc1);
+ l.add(cc2);
+ l.add(cc3);
+ l.add(cc4);
+ ColumnModel cm = new ColumnModel(l);
+
+ tree = new TreeGrid(store, cm, cc1);
+ tree.getView().setAutoFill(true);
+ tree.setBorders(false);
+ tree.setLoadMask(true);
+ tree.setColumnResize(true);
+ tree.getView().setAutoExpandColumn(cc1);
+ tree.setHeight(HEIGHTGRID);
+ tree.setAutoExpand(true);
+
+ IconProvider iconProvider = new IconProvider() {
+
+ @Override
+ public ImageResource getIcon(MonitorBaseDto model) {
+ ImageResource img = null;
+ if (model instanceof MonitorFolderDto) {
+ String type = ((MonitorFolderDto) model).getType();
+ if (type.compareTo("job") == 0) {
+ img = ResourceBundle.INSTANCE.cog();
+ } else {
+ if (type.compareTo("task") == 0) {
+ img = ResourceBundle.INSTANCE.basket();
+ } else {
+
+ }
+ }
+ } else {
+ img = ResourceBundle.INSTANCE.tableValidation();
+ }
+ return img;
+ }
+ };
+ tree.setIconProvider(iconProvider);
+
+ tree.addExpandHandler(new ExpandItemHandler() {
+
+ @Override
+ public void onExpand(ExpandItemEvent event) {
+ forceLayout();
+
+ }
+ });
+
+ tree.addCollapseHandler(new CollapseItemHandler() {
+
+ @Override
+ public void onCollapse(CollapseItemEvent event) {
+ forceLayout();
+
+ }
+ });
+
+
+ ToolBar toolBar = new ToolBar();
+
+ TextButton btnExpandAll = new TextButton();
+ btnExpandAll.setIcon(ResourceBundle.INSTANCE.magnifierZoomIn());
+ btnExpandAll.setToolTip("Expand All");
+ btnExpandAll.addSelectHandler(new SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ tree.expandAll();
+ forceLayout();
+ }
+ });
+ toolBar.add(btnExpandAll);
+
+ TextButton btnCollapseAll = new TextButton();
+ btnCollapseAll.setIcon(ResourceBundle.INSTANCE.magnifierZoomOut());
+ btnCollapseAll.setToolTip("Collapse All");
+ btnCollapseAll.addSelectHandler(new SelectHandler() {
+
+ @Override
+ public void onSelect(SelectEvent event) {
+ tree.collapseAll();
+ forceLayout();
+ }
+ });
+ toolBar.add(btnCollapseAll);
+
+ con.add(toolBar, new VerticalLayoutData(1, -1, new Margins(0)));
+ con.add(tree, new VerticalLayoutData(1, -1, new Margins(0)));
+
+ add(con, new MarginData(0));
+
+ forceLayout();
+ tree.expandAll();
+
+ }
+
+
+
+
+
+ protected void close() {
+ if (parent != null) {
+ parent.close();
+ }
+
+ }
+
+
+ private void addChildrensToStore() {
+ gen = new MonitorTreeDataGenerator();
+ try {
+ MonitorFolderDto root = gen.getRoot(operationMonitor);
+ Log.debug("root childrens " + root.getChildrens().size());
+ for (MonitorBaseDto base : root.getChildrens()) {
+ Log.debug("Check children: " + base);
+
+ store.add(base);
+ if (base instanceof MonitorFolderDto) {
+ processFolder((MonitorFolderDto) base);
+ }
+
+ }
+ } catch (Throwable e) {
+ Log.error("Error adding childrens to store :"
+ + e.getLocalizedMessage());
+ e.printStackTrace();
+ }
+ }
+
+ private void processFolder(MonitorFolderDto folder) {
+ for (MonitorBaseDto child : folder.getChildrens()) {
+ store.add(folder, child);
+ if (child instanceof MonitorFolderDto) {
+ processFolder((MonitorFolderDto) child);
+ }
+
+ }
+ }
+
+
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundPanel.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundPanel.java
index 06b1bcc..9568589 100644
--- a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundPanel.java
+++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundPanel.java
@@ -3,6 +3,7 @@ package org.gcube.portlets.user.td.monitorwidget.client.background;
import java.util.ArrayList;
import java.util.List;
+import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.task.ValidationsTasksMetadata;
import org.gcube.portlets.user.td.gwtservice.shared.task.WorkerState;
@@ -12,10 +13,16 @@ import org.gcube.portlets.user.td.monitorwidget.client.details.tree.MonitorFolde
import org.gcube.portlets.user.td.monitorwidget.client.details.tree.MonitorTreeDataGenerator;
import org.gcube.portlets.user.td.monitorwidget.client.details.tree.MonitorValidationJobSDto;
import org.gcube.portlets.user.td.monitorwidget.client.resources.ResourceBundle;
+import org.gcube.portlets.user.td.monitorwidget.client.utils.UtilsGXT3;
+import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent;
+import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType;
import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId;
+import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.Cell.Context;
+import com.google.gwt.event.logical.shared.SelectionEvent;
+import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
@@ -23,12 +30,12 @@ import com.google.web.bindery.event.shared.EventBus;
import com.sencha.gxt.cell.core.client.ProgressBarCell;
import com.sencha.gxt.core.client.ToStringValueProvider;
import com.sencha.gxt.core.client.ValueProvider;
+import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.data.shared.IconProvider;
import com.sencha.gxt.data.shared.ModelKeyProvider;
import com.sencha.gxt.data.shared.TreeStore;
import com.sencha.gxt.widget.core.client.FramedPanel;
-import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.MarginData;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
@@ -36,13 +43,11 @@ import com.sencha.gxt.widget.core.client.event.CollapseItemEvent;
import com.sencha.gxt.widget.core.client.event.CollapseItemEvent.CollapseItemHandler;
import com.sencha.gxt.widget.core.client.event.ExpandItemEvent;
import com.sencha.gxt.widget.core.client.event.ExpandItemEvent.ExpandItemHandler;
-import com.sencha.gxt.widget.core.client.event.SelectEvent;
-import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
import com.sencha.gxt.widget.core.client.grid.ColumnModel;
+import com.sencha.gxt.widget.core.client.menu.Item;
import com.sencha.gxt.widget.core.client.menu.Menu;
import com.sencha.gxt.widget.core.client.menu.MenuItem;
-import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
import com.sencha.gxt.widget.core.client.treegrid.TreeGrid;
/**
@@ -51,22 +56,23 @@ import com.sencha.gxt.widget.core.client.treegrid.TreeGrid;
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it
*
*/
-public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackgroundUpdaterListener {
- protected static final int STATUS_POLLING_DELAY = 2000;
+public class MonitorBackgroundPanel extends FramedPanel implements
+ MonitorBackgroundUpdaterListener {
+ protected static final int STATUS_POLLING_DELAY = 4000;
protected static final String WIDTH = "298px";
protected static final String HEIGHT = "520px";
- protected static final int CC1WIDTH = 168;
- protected static final int CC2WIDTH = 100;
- protected static final int CC3WIDTH = 140;
- protected static final int CC4WIDTH = 100;
-
+ protected static final int CC1WIDTH = 110;
+ protected static final int CC2WIDTH = 70;
+ protected static final int CC3WIDTH = 100;
+ protected MonitorBackgroundDialog parent;
+
protected ArrayList monitorBackgroundEventUIListeners = new ArrayList();
protected MonitorBackgroundPanel thisPanel;
protected Menu contextMenu;
- protected MenuItem resumeItem;
- protected MenuItem resolveItem;
+ protected MenuItem infoItem;
+ protected MenuItem abortItem;
protected TRId trId;
protected VerticalLayoutContainer con;
@@ -79,7 +85,7 @@ public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackg
protected EventBus eventBus;
protected MonitorBackgroundUpdater monitorBackgroundUpdater;
-
+
class KeyProvider implements ModelKeyProvider {
@Override
public String getKey(MonitorBaseDto item) {
@@ -87,8 +93,7 @@ public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackg
+ item.getId();
}
}
-
-
+
public MonitorBackgroundPanel(EventBus eventBus) {
super();
this.eventBus = eventBus;
@@ -96,7 +101,17 @@ public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackg
init();
create();
}
-
+
+ public MonitorBackgroundPanel(MonitorBackgroundDialog parent,
+ EventBus eventBus) {
+ super();
+ this.eventBus = eventBus;
+ this.parent = parent;
+ forceLayoutOnResize = true;
+ init();
+ create();
+ }
+
protected void init() {
setWidth(WIDTH);
setHeight(HEIGHT);
@@ -105,17 +120,18 @@ public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackg
setResize(true);
}
-
+
protected void create() {
con = new VerticalLayoutContainer();
- // con.setScrollMode(ScrollMode.AUTO);
+ con.setScrollMode(ScrollMode.AUTO);
store = new TreeStore(new KeyProvider());
addChildrensToStore();
ColumnConfig cc1 = new ColumnConfig(
- new ToStringValueProvider("task"), CC1WIDTH, "Task");
+ new ToStringValueProvider("task"), CC1WIDTH,
+ "Task");
cc1.setHeader("Task");
cc1.setCell(new AbstractCell() {
@@ -165,41 +181,7 @@ public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackg
}, CC2WIDTH, "Status");
cc2.setHeader("Status");
- ColumnConfig cc3 = new ColumnConfig(
- new ValueProvider() {
-
- @Override
- public String getValue(MonitorBaseDto object) {
- String state = null;
- if (object instanceof MonitorValidationJobSDto) {
- state = ((MonitorValidationJobSDto) object).getHumanReadableStatus();
- }
- if (object instanceof MonitorFolderDto) {
- state = ((MonitorFolderDto) object).getHumanReadableStatus();
- }
- return state;
- }
-
- @Override
- public void setValue(MonitorBaseDto object, String value) {
- if (object instanceof MonitorValidationJobSDto) {
- ((MonitorValidationJobSDto) object)
- .setHumanReadableStatus(value);
-
- }
- if (object instanceof MonitorFolderDto) {
- ((MonitorFolderDto) object).setHumanReadableStatus(value);
- }
- }
-
- @Override
- public String getPath() {
- return "humanreadablestatus";
- }
- }, CC3WIDTH, "Human Readble");
- cc3.setHeader("Human Readble");
-
- ColumnConfig cc4 = new ColumnConfig(
+ ColumnConfig cc3 = new ColumnConfig(
new ValueProvider() {
@Override
@@ -233,8 +215,8 @@ public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackg
public String getPath() {
return "progress";
}
- }, CC4WIDTH, "Progress");
- cc4.setHeader("Progress");
+ }, CC3WIDTH, "Progress");
+ cc3.setHeader("Progress");
ProgressBarCell progress = new ProgressBarCell() {
@Override
@@ -245,13 +227,12 @@ public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackg
progress.setProgressText("{0}% Complete");
progress.setWidth(110);
- cc4.setCell(progress);
+ cc3.setCell(progress);
List> l = new ArrayList>();
l.add(cc1);
l.add(cc2);
l.add(cc3);
- l.add(cc4);
ColumnModel cm = new ColumnModel(l);
tree = new TreeGrid(store, cm, cc1);
@@ -260,8 +241,8 @@ public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackg
tree.setLoadMask(true);
tree.setColumnResize(true);
tree.getView().setAutoExpandColumn(cc1);
+ tree.getElement().setAttribute("height", "auto");
-
IconProvider iconProvider = new IconProvider() {
@Override
@@ -304,59 +285,27 @@ public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackg
}
});
- // createContextMenu();
+ createContextMenu();
- ToolBar toolBar = new ToolBar();
-
- TextButton btnExpandAll = new TextButton();
- btnExpandAll.setIcon(ResourceBundle.INSTANCE.magnifierZoomIn());
- btnExpandAll.setToolTip("Expand All");
- btnExpandAll.addSelectHandler(new SelectHandler() {
-
- @Override
- public void onSelect(SelectEvent event) {
- tree.expandAll();
- forceLayout();
- }
- });
- toolBar.add(btnExpandAll);
-
- TextButton btnCollapseAll = new TextButton();
- btnCollapseAll.setIcon(ResourceBundle.INSTANCE.magnifierZoomOut());
- btnCollapseAll.setToolTip("Collapse All");
- btnCollapseAll.addSelectHandler(new SelectHandler() {
-
- @Override
- public void onSelect(SelectEvent event) {
- tree.collapseAll();
- forceLayout();
- }
- });
- toolBar.add(btnCollapseAll);
-
- con.add(toolBar, new VerticalLayoutData(1, -1, new Margins(0)));
con.add(tree, new VerticalLayoutData(1, -1, new Margins(0)));
add(con, new MarginData(0));
- addMonitor();
-
- //tree.expandAll();
+ // addMonitor();
+
forceLayout();
}
-
-
+
protected void addMonitor() {
monitorBackgroundUpdater = new MonitorBackgroundUpdater();
-
+
monitorBackgroundUpdater.addListener(this);
monitorBackgroundUpdater.scheduleRepeating(STATUS_POLLING_DELAY);
-
- addMonitorBackgroundEventUIListener(monitorBackgroundUpdater);
-
- }
+ addMonitorBackgroundEventUIListener(monitorBackgroundUpdater);
+
+ }
public void addMonitorBackgroundEventUIListener(
MonitorBackgroundEventUIListener listener) {
@@ -367,20 +316,18 @@ public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackg
MonitorBackgroundEventUIListener listener) {
monitorBackgroundEventUIListeners.remove(listener);
}
-
+
public void update() {
forceLayout();
}
-
-
protected void close() {
- /*
- * if (parent != null) { parent.close(); }
- */
+ if (parent != null) {
+ parent.close();
+ }
+
}
-
protected void requestOperationOnKey(Context context) {
String key = (String) context.getKey();
@SuppressWarnings("unused")
@@ -388,50 +335,104 @@ public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackg
}
-
-
private void addChildrensToStore() {
gen = new MonitorTreeDataGenerator();
+ try {
+ MonitorFolderDto root = gen.getRoot(operationMonitorList);
+ Log.debug("root childrens " + root.getChildrens().size());
+ for (MonitorBaseDto base : root.getChildrens()) {
+ Log.debug("Check children: " + base);
+
+ store.add(base);
- MonitorFolderDto root = gen.getRoot(operationMonitorList);
- for (MonitorBaseDto base : root.getChildrens()) {
- store.add(base);
- if (base instanceof MonitorFolderDto) {
- processFolder(store, (MonitorFolderDto) base);
}
+ } catch (Throwable e) {
+ Log.error("Error adding childrens to store :"
+ + e.getLocalizedMessage());
+ e.printStackTrace();
}
}
- private void processFolder(TreeStore store,
- MonitorFolderDto folder) {
- for (MonitorBaseDto child : folder.getChildrens()) {
- store.add(folder, child);
- if (child instanceof MonitorFolderDto) {
- processFolder(store, (MonitorFolderDto) child);
+ protected void createContextMenu() {
+ contextMenu = new Menu();
+
+ infoItem = new MenuItem();
+ infoItem.setText("Info");
+ infoItem.setIcon(ResourceBundle.INSTANCE.ok());
+ infoItem.addSelectionHandler(new SelectionHandler- () {
+
+ @Override
+ public void onSelection(SelectionEvent
- event) {
+ MonitorBaseDto selected = tree.getSelectionModel()
+ .getSelectedItem();
+ Log.debug(selected.toString());
+ requestMoreInfo(selected);
+ }
+ });
+
+ abortItem = new MenuItem();
+ abortItem.setText("Abort");
+ abortItem.setIcon(ResourceBundle.INSTANCE.basket());
+ abortItem.addSelectionHandler(new SelectionHandler
- () {
+
+ @Override
+ public void onSelection(SelectionEvent
- event) {
+ MonitorBaseDto selected = tree.getSelectionModel()
+ .getSelectedItem();
+ Log.debug(selected.toString());
+ requestBacgroundAbort(selected);
+
+ }
+
+ });
+
+ contextMenu.add(infoItem);
+ contextMenu.add(abortItem);
+ tree.setContextMenu(contextMenu);
+
+ }
+
+ protected void requestMoreInfo(MonitorBaseDto selected) {
+ for (OperationMonitor operationMonitor : operationMonitorList) {
+ if (operationMonitor.getTaskId().compareTo(selected.getId()) == 0) {
+ Log.debug("Found Task Id: " + operationMonitor.getTaskId());
+ MonitorBackgroundInfoDialog monitorBackgroundInfoDialog = new MonitorBackgroundInfoDialog(
+ operationMonitor, eventBus);
+ monitorBackgroundInfoDialog.show();
+ return;
}
}
+
}
-
-
+
+ protected void requestBacgroundAbort(MonitorBaseDto selected) {
+
+ }
+
@Override
public void operationMonitorListUpdated(
ArrayList operationMonitorList) {
+ this.operationMonitorList = operationMonitorList;
store.clear();
store.commitChanges();
addChildrensToStore();
store.commitChanges();
- tree.expandAll();
+ // tree.expandAll();
forceLayout();
-
- }
+ }
@Override
public void retrieveOperationMonitorListFailed(Throwable caught) {
- // TODO Auto-generated method stub
-
+ if (caught instanceof TDGWTSessionExpiredException) {
+ eventBus.fireEvent(new SessionExpiredEvent(
+ SessionExpiredType.EXPIREDONSERVER));
+ } else {
+ UtilsGXT3.alert("Error", "Error retrieving tasks in bacground: "
+ + caught.getLocalizedMessage());
+
+ }
+
}
-
-
}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorFolderDto.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorFolderDto.java
index 2194b88..0fccb75 100644
--- a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorFolderDto.java
+++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorFolderDto.java
@@ -17,6 +17,8 @@ public class MonitorFolderDto extends MonitorBaseDto {
protected String state;
protected String humanReadableStatus;
protected float progress;
+ protected String startTime;
+ protected String endTime;
public MonitorFolderDto(){
@@ -77,7 +79,6 @@ public class MonitorFolderDto extends MonitorBaseDto {
this.state = state;
}
-
public String getHumanReadableStatus() {
return humanReadableStatus;
@@ -86,6 +87,24 @@ public class MonitorFolderDto extends MonitorBaseDto {
public void setHumanReadableStatus(String humanReadableStatus) {
this.humanReadableStatus = humanReadableStatus;
}
+
+
+
+ public String getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(String startTime) {
+ this.startTime = startTime;
+ }
+
+ public String getEndTime() {
+ return endTime;
+ }
+
+ public void setEndTime(String endTime) {
+ this.endTime = endTime;
+ }
@Override
public String toString() {
diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorTreeDataGenerator.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorTreeDataGenerator.java
index c93b055..c28d549 100644
--- a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorTreeDataGenerator.java
+++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorTreeDataGenerator.java
@@ -54,12 +54,17 @@ public class MonitorTreeDataGenerator {
jobs.add(foldJob);
}
MonitorFolderDto foldTask = new MonitorFolderDto("task",
- task.getId(), task.getId() + " [Date:"
- + sdf.format(task.getStartTime()) + "]", task
- .getState().toString(), "", task.getProgress(),
+ task.getId(), operationMonitor.getOperationId().toString(),
+ task.getState().toString(), "", task.getProgress(),
jobs);
+ if(task.getStartTime()!=null){
+ foldTask.setStartTime(sdf.format(task.getStartTime()));
+ }
+ if(task.getEndTime()!=null){
+ foldTask.setEndTime(sdf.format(task.getEndTime()));
+ }
+
childrens.add(foldTask);
-
root = new MonitorFolderDto("root", "-1", "root", "root", "", 0,
childrens);
Log.debug("Generated root");
@@ -115,9 +120,11 @@ public class MonitorTreeDataGenerator {
ArrayList operationMonitorList) {
ArrayList childrens = new ArrayList();
if (operationMonitorList != null && operationMonitorList.size() > 0) {
+ Log.debug("getRoot: "+operationMonitorList.size());
for (OperationMonitor operationMonitor : operationMonitorList) {
if (operationMonitor != null
&& operationMonitor.getTask() != null) {
+ Log.debug("getRoot: [TaskId="+operationMonitor.getTaskId()+"]");
TaskS task = operationMonitor.getTask();
ArrayList jobs = new ArrayList();
for (JobS job : task.getJobs()) {
@@ -143,15 +150,21 @@ public class MonitorTreeDataGenerator {
jobs.add(foldJob);
}
MonitorFolderDto foldTask = new MonitorFolderDto("task",
- task.getId(), task.getId() + " [Date:"
- + sdf.format(task.getStartTime()) + "]",
+ task.getId(), operationMonitor.getOperationId().toString(),
task.getState().toString(), "", task.getProgress(),
jobs);
+ if(task.getStartTime()!=null){
+ foldTask.setStartTime(sdf.format(task.getStartTime()));
+ }
+ if(task.getEndTime()!=null){
+ foldTask.setEndTime(sdf.format(task.getEndTime()));
+ }
childrens.add(foldTask);
} else {
-
+ Log.debug("getRoot: operation null");
}
}
+ Log.debug("childrens size:"+childrens.size());
root = new MonitorFolderDto("root", "-1", "root", "root",
"", 0, childrens);
Log.debug("Generated root");
diff --git a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/MonitorWidgetTD.gwt.xml b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/MonitorWidgetTD.gwt.xml
index b10d50a..57a7c5f 100644
--- a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/MonitorWidgetTD.gwt.xml
+++ b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/MonitorWidgetTD.gwt.xml
@@ -23,9 +23,9 @@
-
+
-