Updated background operation monitor

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-monitor-widget@112011 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Giancarlo Panichi 2015-02-13 13:39:34 +00:00 committed by Giancarlo Panichi
parent 8dfa46cbfc
commit b4dcc0c78a
9 changed files with 303 additions and 262 deletions

View File

@ -3,6 +3,7 @@ package org.gcube.portlets.user.td.monitorwidget.client;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.BackgroundOperationMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor; import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.task.JobS; import org.gcube.portlets.user.td.gwtservice.shared.task.JobS;
import org.gcube.portlets.user.td.gwtservice.shared.task.State; import org.gcube.portlets.user.td.gwtservice.shared.task.State;
@ -91,15 +92,20 @@ public class MonitorWidgetEntry implements EntryPoint {
} }
private void showBackgroundElapsed() { private void showBackgroundElapsed() {
ArrayList<OperationMonitor> backgroundOperationMonitorList = new ArrayList<OperationMonitor>(); ArrayList<BackgroundOperationMonitor> backgroundOperationMonitorList = new ArrayList<BackgroundOperationMonitor>();
for (int i = 0; i < 20; i++) { for (int i = 0; i < 20; i++) {
OperationMonitor operationMonitor = new OperationMonitor(String.valueOf(i), BackgroundOperationMonitor backgroundOperationMonitor=new
UIOperationsId.EditRow); BackgroundOperationMonitor();
operationMonitor.setTask(createTaskForTest(String.valueOf(i))); backgroundOperationMonitor.setTaskId(String.valueOf(i));
backgroundOperationMonitor.setOperationId(UIOperationsId.EditRow);
backgroundOperationMonitor.setTabularResourceId("1");
backgroundOperationMonitor.setTabularResourceName("TestTR");
backgroundOperationMonitor.setState(State.IN_PROGRESS);
backgroundOperationMonitor.setProgress(genProgress());
backgroundOperationMonitorList.add(operationMonitor); backgroundOperationMonitorList.add(backgroundOperationMonitor);
} }
monitorBackgroundWidget monitorBackgroundWidget
@ -107,11 +113,16 @@ public class MonitorWidgetEntry implements EntryPoint {
} }
private void showBackgroundInfoWidget() { private void showBackgroundInfoWidget() {
OperationMonitor operationMonitor = new OperationMonitor("1", BackgroundOperationMonitor backgroundOperationMonitor=new
UIOperationsId.EditRow); BackgroundOperationMonitor();
operationMonitor.setTask(createTaskForTest("1")); backgroundOperationMonitor.setTaskId("1");
backgroundOperationMonitor.setOperationId(UIOperationsId.EditRow);
backgroundOperationMonitor.setTabularResourceId("1");
backgroundOperationMonitor.setTabularResourceName("TestTR");
backgroundOperationMonitor.setState(State.IN_PROGRESS);
backgroundOperationMonitor.setProgress(genProgress());
monitorBackgroundInfoWidget = new MonitorBackgroundInfoDialog( monitorBackgroundInfoWidget = new MonitorBackgroundInfoDialog(
operationMonitor, eventBus); backgroundOperationMonitor, eventBus);
monitorBackgroundInfoWidget.show(); monitorBackgroundInfoWidget.show();
} }

View File

@ -2,7 +2,7 @@ package org.gcube.portlets.user.td.monitorwidget.client.background;
import java.util.ArrayList; import java.util.ArrayList;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor; import org.gcube.portlets.user.td.gwtservice.shared.monitor.BackgroundOperationMonitor;
import com.allen_sauer.gwt.log.client.Log; import com.allen_sauer.gwt.log.client.Log;
import com.google.web.bindery.event.shared.EventBus; import com.google.web.bindery.event.shared.EventBus;
@ -82,7 +82,7 @@ public class MonitorBackgroundDialog extends Window {
} }
public void updateBackgroundOperationMonitor(ArrayList<OperationMonitor> operationMonitorList) { public void updateBackgroundOperationMonitor(ArrayList<BackgroundOperationMonitor> operationMonitorList) {
if (monitorBackgroundPanel != null) { if (monitorBackgroundPanel != null) {
monitorBackgroundPanel.operationMonitorListUpdated(operationMonitorList); monitorBackgroundPanel.operationMonitorListUpdated(operationMonitorList);
} }

View File

@ -1,7 +1,7 @@
package org.gcube.portlets.user.td.monitorwidget.client.background; package org.gcube.portlets.user.td.monitorwidget.client.background;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor; import org.gcube.portlets.user.td.gwtservice.shared.monitor.BackgroundOperationMonitor;
import com.allen_sauer.gwt.log.client.Log; import com.allen_sauer.gwt.log.client.Log;
import com.google.web.bindery.event.shared.EventBus; import com.google.web.bindery.event.shared.EventBus;
@ -21,15 +21,16 @@ public class MonitorBackgroundInfoDialog extends Window {
private static final String WIDTH = "640px"; private static final String WIDTH = "640px";
private static final String HEIGHT = "408px"; private static final String HEIGHT = "408px";
protected EventBus eventBus; private EventBus eventBus;
protected MonitorBackgroundInfoPanel monitorBackgroundInfoPanel; private MonitorBackgroundInfoPanel monitorBackgroundInfoPanel;
protected OperationMonitor operationMonitor; private BackgroundOperationMonitor backgroundOperationMonitor;
public MonitorBackgroundInfoDialog(OperationMonitor operationMonitor, EventBus eventBus) { public MonitorBackgroundInfoDialog(BackgroundOperationMonitor backgroundOperationMonitor, EventBus eventBus) {
super(); super();
Log.debug("MonitorBackgroundInfoDialog"); Log.debug("MonitorBackgroundInfoDialog");
this.eventBus = eventBus; this.eventBus = eventBus;
this.operationMonitor =operationMonitor; this.backgroundOperationMonitor =backgroundOperationMonitor;
initWindow(); initWindow();
create(); create();
} }
@ -41,11 +42,11 @@ public class MonitorBackgroundInfoDialog extends Window {
setResizable(false); setResizable(false);
setModal(false); setModal(false);
setClosable(true); setClosable(true);
setHeadingText("Info Operation"); setHeadingText(backgroundOperationMonitor.getTabularResourceName());
} }
protected void create() { protected void create() {
monitorBackgroundInfoPanel = new MonitorBackgroundInfoPanel(this, operationMonitor,eventBus); monitorBackgroundInfoPanel = new MonitorBackgroundInfoPanel(this, backgroundOperationMonitor,eventBus);
add(monitorBackgroundInfoPanel); add(monitorBackgroundInfoPanel);
} }

View File

@ -3,8 +3,9 @@ package org.gcube.portlets.user.td.monitorwidget.client.background;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.BackgroundOperationMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor; 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.monitor.OperationMonitorSession;
import org.gcube.portlets.user.td.gwtservice.shared.task.WorkerState; 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.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.MonitorBaseDto;
@ -13,7 +14,6 @@ import org.gcube.portlets.user.td.monitorwidget.client.details.tree.MonitorTreeD
import org.gcube.portlets.user.td.monitorwidget.client.details.tree.MonitorValidationJobSDto; 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.resources.ResourceBundle;
import org.gcube.portlets.user.td.monitorwidget.client.utils.UtilsGXT3; import org.gcube.portlets.user.td.monitorwidget.client.utils.UtilsGXT3;
import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId;
import com.allen_sauer.gwt.log.client.Log; import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.AbstractCell;
@ -30,12 +30,12 @@ import com.sencha.gxt.data.shared.ModelKeyProvider;
import com.sencha.gxt.data.shared.TreeStore; import com.sencha.gxt.data.shared.TreeStore;
import com.sencha.gxt.widget.core.client.FramedPanel; import com.sencha.gxt.widget.core.client.FramedPanel;
import com.sencha.gxt.widget.core.client.button.TextButton; import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer;
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.BoxLayoutContainer.BoxLayoutData; import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack; import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutPack;
import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer;
import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign; import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer.HBoxLayoutAlign;
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.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.event.CollapseItemEvent; 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.CollapseItemEvent.CollapseItemHandler;
@ -54,31 +54,33 @@ import com.sencha.gxt.widget.core.client.treegrid.TreeGrid;
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a> * href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
* *
*/ */
public class MonitorBackgroundInfoPanel extends FramedPanel { public class MonitorBackgroundInfoPanel extends FramedPanel implements
protected static final String WIDTH = "618px"; MonitorBackgroundInfoUpdaterListener {
protected static final String HEIGHT = "400px"; private static final int STATUS_POLLING_DELAY = 1000;
protected static final String HEIGHTGRID = "290px";
private static final String WIDTH = "618px";
private static final String HEIGHT = "400px";
private static final String HEIGHTGRID = "290px";
protected static final int CC1WIDTH = 168; private static final int CC1WIDTH = 168;
protected static final int CC2WIDTH = 100; private static final int CC2WIDTH = 100;
protected static final int CC3WIDTH = 140; private static final int CC3WIDTH = 140;
protected static final int CC4WIDTH = 100; private static final int CC4WIDTH = 100;
protected MonitorBackgroundInfoDialog parent; private MonitorBackgroundInfoDialog parent;
protected MonitorBackgroundInfoPanel thisPanel;
private VerticalLayoutContainer con;
protected TRId trId; private MonitorTreeDataGenerator gen;
protected VerticalLayoutContainer con; private TreeStore<MonitorBaseDto> store;
protected ValidationsTasksMetadata validationsTasksMetadata; private TreeGrid<MonitorBaseDto> tree;
private OperationMonitor operationMonitor;
protected MonitorTreeDataGenerator gen;
protected TreeStore<MonitorBaseDto> store; private MonitorBackgroundInfoUpdater monitorBackgroundInfoUpdater;
protected TreeGrid<MonitorBaseDto> tree;
protected OperationMonitor operationMonitor;
protected EventBus eventBus;
protected MonitorBackgroundUpdater monitorBackgroundUpdater;
private TextButton btnClose; private TextButton btnClose;
private OperationMonitorSession operationMonitorSession;
class KeyProvider implements ModelKeyProvider<MonitorBaseDto> { class KeyProvider implements ModelKeyProvider<MonitorBaseDto> {
@Override @Override
@ -89,11 +91,13 @@ public class MonitorBackgroundInfoPanel extends FramedPanel {
} }
public MonitorBackgroundInfoPanel(MonitorBackgroundInfoDialog parent, public MonitorBackgroundInfoPanel(MonitorBackgroundInfoDialog parent,
OperationMonitor operationMonitor, EventBus eventBus) { BackgroundOperationMonitor backgroundOperationMonitor,
EventBus eventBus) {
super(); super();
this.parent = parent; this.parent = parent;
this.operationMonitor = operationMonitor; this.operationMonitorSession = new OperationMonitorSession(
this.eventBus = eventBus; backgroundOperationMonitor.getTaskId());
operationMonitorSession.setInBackground(true);
forceLayoutOnResize = true; forceLayoutOnResize = true;
init(); init();
create(); create();
@ -125,8 +129,8 @@ public class MonitorBackgroundInfoPanel extends FramedPanel {
@Override @Override
public void render(Context context, String value, SafeHtmlBuilder sb) { public void render(Context context, String value, SafeHtmlBuilder sb) {
sb.appendHtmlConstant("<span title='" sb.appendHtmlConstant("<span title='"
+ SafeHtmlUtils.htmlEscape(value) + "'>" + SafeHtmlUtils.htmlEscape(value) + SafeHtmlUtils.htmlEscape(value) + "'>"
+ "</span>"); + SafeHtmlUtils.htmlEscape(value) + "</span>");
} }
}); });
@ -367,11 +371,20 @@ public class MonitorBackgroundInfoPanel extends FramedPanel {
add(con, new MarginData(0)); add(con, new MarginData(0));
addMonitor();
forceLayout(); forceLayout();
tree.expandAll(); tree.expandAll();
} }
protected void addMonitor() {
monitorBackgroundInfoUpdater = new MonitorBackgroundInfoUpdater(operationMonitorSession);
monitorBackgroundInfoUpdater.addListener(this);
monitorBackgroundInfoUpdater.scheduleRepeating(STATUS_POLLING_DELAY);
monitorBackgroundInfoUpdater.run();
}
protected void close() { protected void close() {
if (parent != null) { if (parent != null) {
parent.close(); parent.close();
@ -406,6 +419,19 @@ public class MonitorBackgroundInfoPanel extends FramedPanel {
} }
public void update(OperationMonitor operationMonitor) {
this.operationMonitor = operationMonitor;
store.clear();
store.commitChanges();
addChildrensToStore();
store.commitChanges();
tree.expandAll();
forceLayout();
}
private void processFolder(MonitorFolderDto folder) { private void processFolder(MonitorFolderDto folder) {
for (MonitorBaseDto child : folder.getChildrens()) { for (MonitorBaseDto child : folder.getChildrens()) {
try { try {
@ -422,4 +448,18 @@ public class MonitorBackgroundInfoPanel extends FramedPanel {
} }
} }
@Override
public void backgroundOperationMonitorUpdated(
OperationMonitor operationMonitor) {
update(operationMonitor);
}
@Override
public void retrieveBackgroundOperationMonitorFailed(Throwable caught) {
Log.error("Error retrieving background operation monitor: "+caught.getLocalizedMessage());
UtilsGXT3.alert("Error", "Error generating informations: "+caught.getLocalizedMessage());
close();
}
} }

View File

@ -0,0 +1,88 @@
package org.gcube.portlets.user.td.monitorwidget.client.background;
import java.util.ArrayList;
import org.gcube.portlets.user.td.gwtservice.client.rpc.TDGWTServiceAsync;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitorSession;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class MonitorBackgroundInfoUpdater extends Timer {
protected ArrayList<MonitorBackgroundInfoUpdaterListener> listeners = new ArrayList<MonitorBackgroundInfoUpdaterListener>();
protected OperationMonitorSession operationMonitorSession;
public MonitorBackgroundInfoUpdater(
OperationMonitorSession operationMonitorSession) {
this.operationMonitorSession = operationMonitorSession;
}
/**
* {@inheritDoc}
*/
@Override
public void run() {
Log.debug("requesting operation in background ");
TDGWTServiceAsync.INSTANCE
.getBackgroundOperationMonitorForSpecificTask(
operationMonitorSession,
new AsyncCallback<OperationMonitor>() {
public void onFailure(Throwable caught) {
cancel();
Log.error("Error retrieving operation monitor",
caught);
fireRetrieveOperationMonitorFailed(caught);
}
public void onSuccess(OperationMonitor result) {
Log.debug("retrieved Operation Monitor");
fireOperationMonitorUpdated(result);
}
});
}
protected void fireOperationMonitorUpdated(OperationMonitor operationMonitor) {
for (MonitorBackgroundInfoUpdaterListener listener : listeners)
listener.backgroundOperationMonitorUpdated(operationMonitor);
}
protected void fireRetrieveOperationMonitorFailed(Throwable throwable) {
for (MonitorBackgroundInfoUpdaterListener listener : listeners)
listener.retrieveBackgroundOperationMonitorFailed(throwable);
}
/**
*
*
* @param listener
*/
public void addListener(MonitorBackgroundInfoUpdaterListener listener) {
listeners.add(listener);
}
/**
*
* @param listener
*/
public void removeListener(MonitorBackgroundInfoUpdaterListener listener) {
listeners.remove(listener);
}
}

View File

@ -0,0 +1,26 @@
package org.gcube.portlets.user.td.monitorwidget.client.background;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor;
/**
*
* @author giancarlo
* email: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public interface MonitorBackgroundInfoUpdaterListener {
/**
* Called when the operation is updated
*/
public void backgroundOperationMonitorUpdated(OperationMonitor operationMonitor);
/**
* Called when operation is failed
*/
public void retrieveBackgroundOperationMonitorFailed(Throwable caught);
}

View File

@ -4,15 +4,9 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException; 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.monitor.BackgroundOperationMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.task.State; import org.gcube.portlets.user.td.gwtservice.shared.task.State;
import org.gcube.portlets.user.td.gwtservice.shared.task.ValidationsTasksMetadata; 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.monitorwidget.client.resources.ResourceBundle;
import org.gcube.portlets.user.td.monitorwidget.client.utils.UtilsGXT3; 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.event.SessionExpiredEvent;
@ -21,35 +15,30 @@ import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId;
import com.allen_sauer.gwt.log.client.Log; import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor.Path;
import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler; 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.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.web.bindery.event.shared.EventBus; import com.google.web.bindery.event.shared.EventBus;
import com.sencha.gxt.cell.core.client.ProgressBarCell; 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.ValueProvider;
import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode; import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode;
import com.sencha.gxt.core.client.util.Margins; import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.data.shared.IconProvider; import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.data.shared.ModelKeyProvider; import com.sencha.gxt.data.shared.ModelKeyProvider;
import com.sencha.gxt.data.shared.TreeStore; import com.sencha.gxt.data.shared.PropertyAccess;
import com.sencha.gxt.widget.core.client.FramedPanel; import com.sencha.gxt.widget.core.client.FramedPanel;
import com.sencha.gxt.widget.core.client.container.MarginData; 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;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData; 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.grid.ColumnConfig; 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.grid.ColumnModel;
import com.sencha.gxt.widget.core.client.grid.Grid;
import com.sencha.gxt.widget.core.client.menu.Item; 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.Menu;
import com.sencha.gxt.widget.core.client.menu.MenuItem; import com.sencha.gxt.widget.core.client.menu.MenuItem;
import com.sencha.gxt.widget.core.client.treegrid.TreeGrid;
/** /**
* *
@ -62,9 +51,9 @@ public class MonitorBackgroundPanel extends FramedPanel implements
protected static final int STATUS_POLLING_DELAY = 5000; protected static final int STATUS_POLLING_DELAY = 5000;
protected static final String WIDTH = "640px"; protected static final String WIDTH = "640px";
protected static final String HEIGHT = "520px"; protected static final String HEIGHT = "520px";
protected static final int CC1WIDTH = 100; protected static final int CC1WIDTH = 104;
protected static final int CC2WIDTH = 60; protected static final int CC2WIDTH = 52;
protected static final int CC3WIDTH = 100; protected static final int CC3WIDTH = 104;
protected MonitorBackgroundDialog parent; protected MonitorBackgroundDialog parent;
protected ArrayList<MonitorBackgroundEventUIListener> monitorBackgroundEventUIListeners = new ArrayList<MonitorBackgroundEventUIListener>(); protected ArrayList<MonitorBackgroundEventUIListener> monitorBackgroundEventUIListeners = new ArrayList<MonitorBackgroundEventUIListener>();
@ -80,20 +69,24 @@ public class MonitorBackgroundPanel extends FramedPanel implements
protected VerticalLayoutContainer con; protected VerticalLayoutContainer con;
protected ValidationsTasksMetadata validationsTasksMetadata; protected ValidationsTasksMetadata validationsTasksMetadata;
protected MonitorTreeDataGenerator gen; protected ListStore<BackgroundOperationMonitor> store;
protected TreeStore<MonitorBaseDto> store; protected Grid<BackgroundOperationMonitor> grid;
protected TreeGrid<MonitorBaseDto> tree; protected ArrayList<BackgroundOperationMonitor> backgroundOperationMonitorList;
protected ArrayList<OperationMonitor> operationMonitorList;
protected EventBus eventBus; protected EventBus eventBus;
protected MonitorBackgroundUpdater monitorBackgroundUpdater; protected MonitorBackgroundUpdater monitorBackgroundUpdater;
class KeyProvider implements ModelKeyProvider<MonitorBaseDto> { public interface BackgroundOperationMonitorProperties extends
@Override PropertyAccess<BackgroundOperationMonitor> {
public String getKey(MonitorBaseDto item) {
return (item instanceof MonitorFolderDto ? "f-" : "v-") @Path("taskId")
+ item.getId(); ModelKeyProvider<BackgroundOperationMonitor> taskId();
}
ValueProvider<BackgroundOperationMonitor, String> tabularResourceName();
ValueProvider<BackgroundOperationMonitor, State> state();
ValueProvider<BackgroundOperationMonitor, Float> progress();
} }
public MonitorBackgroundPanel(EventBus eventBus) { public MonitorBackgroundPanel(EventBus eventBus) {
@ -126,91 +119,45 @@ public class MonitorBackgroundPanel extends FramedPanel implements
protected void create() { protected void create() {
con = new VerticalLayoutContainer(); con = new VerticalLayoutContainer();
con.setScrollMode(ScrollMode.AUTO); con.setScrollMode(ScrollMode.AUTO);
BackgroundOperationMonitorProperties props = GWT
store = new TreeStore<MonitorBaseDto>(new KeyProvider()); .create(BackgroundOperationMonitorProperties.class);
store = new ListStore<BackgroundOperationMonitor>(props.taskId());
addChildrensToStore(); addChildrensToStore();
ColumnConfig<MonitorBaseDto, String> cc1 = new ColumnConfig<MonitorBaseDto, String>( ColumnConfig<BackgroundOperationMonitor, String> cc1 = new ColumnConfig<BackgroundOperationMonitor, String>(
new ToStringValueProvider<MonitorBaseDto>("task"), CC1WIDTH, props.tabularResourceName());
"Task"); cc1.setHeader("Tabular Resource");
cc1.setHeader("Task");
cc1.setCell(new AbstractCell<String>() { cc1.setCell(new AbstractCell<String>() {
@Override @Override
public void render(Context context, String value, SafeHtmlBuilder sb) { public void render(Context context, String value, SafeHtmlBuilder sb) {
sb.appendHtmlConstant("<span title='" sb.appendHtmlConstant("<span title='"
+ SafeHtmlUtils.htmlEscape(value) + "'>" + SafeHtmlUtils.htmlEscape(value) + SafeHtmlUtils.htmlEscape(value) + "'>"
+ "</span>"); + SafeHtmlUtils.htmlEscape(value) + "</span>");
} }
}); });
ColumnConfig<MonitorBaseDto, String> cc2 = new ColumnConfig<MonitorBaseDto, String>( ColumnConfig<BackgroundOperationMonitor, State> cc2 = new ColumnConfig<BackgroundOperationMonitor, State>(
new ValueProvider<MonitorBaseDto, String>() { props.state());
@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"); cc2.setHeader("Status");
ColumnConfig<MonitorBaseDto, Double> cc3 = new ColumnConfig<MonitorBaseDto, Double>( ColumnConfig<BackgroundOperationMonitor, Double> cc3 = new ColumnConfig<BackgroundOperationMonitor, Double>(
new ValueProvider<MonitorBaseDto, Double>() { new ValueProvider<BackgroundOperationMonitor, Double>() {
@Override @Override
public Double getValue(MonitorBaseDto object) { public Double getValue(BackgroundOperationMonitor object) {
Double d = null; Double d = null;
if (object instanceof MonitorValidationJobSDto) { Float f = object.getProgress();
Float f = ((MonitorValidationJobSDto) object).getProgress(); d = new Double(f);
d = new Double(f);
}
if (object instanceof MonitorFolderDto) {
Float f = ((MonitorFolderDto) object).getProgress();
d = new Double(f);
}
return d; return d;
} }
@Override @Override
public void setValue(MonitorBaseDto object, Double value) { public void setValue(BackgroundOperationMonitor object,
if (object instanceof MonitorValidationJobSDto) { Double value) {
((MonitorValidationJobSDto) object) object.setProgress(value.floatValue());
.setProgress(value.floatValue());
}
if (object instanceof MonitorFolderDto) {
((MonitorFolderDto) object).setProgress(value
.floatValue());
}
} }
@Override @Override
@ -231,65 +178,25 @@ public class MonitorBackgroundPanel extends FramedPanel implements
cc3.setCell(progress); cc3.setCell(progress);
List<ColumnConfig<MonitorBaseDto, ?>> l = new ArrayList<ColumnConfig<MonitorBaseDto, ?>>(); List<ColumnConfig<BackgroundOperationMonitor, ?>> l = new ArrayList<ColumnConfig<BackgroundOperationMonitor, ?>>();
l.add(cc1); l.add(cc1);
l.add(cc2); l.add(cc2);
l.add(cc3); l.add(cc3);
ColumnModel<MonitorBaseDto> cm = new ColumnModel<MonitorBaseDto>(l); ColumnModel<BackgroundOperationMonitor> cm = new ColumnModel<BackgroundOperationMonitor>(
l);
tree = new TreeGrid<MonitorBaseDto>(store, cm, cc1); grid = new Grid<BackgroundOperationMonitor>(store, cm);
tree.getView().setAutoFill(true); grid.getView().setStripeRows(true);
tree.setBorders(false); grid.getView().setColumnLines(true);
tree.setLoadMask(true); grid.getView().setAutoFill(true);
tree.setColumnResize(true); grid.setBorders(false);
tree.getView().setAutoExpandColumn(cc1); grid.setLoadMask(true);
tree.getElement().setAttribute("height", "auto"); grid.setColumnReordering(false);
grid.setColumnResize(true);
IconProvider<MonitorBaseDto> iconProvider = new IconProvider<MonitorBaseDto>() {
@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<MonitorBaseDto>() {
@Override
public void onExpand(ExpandItemEvent<MonitorBaseDto> event) {
forceLayout();
}
});
tree.addCollapseHandler(new CollapseItemHandler<MonitorBaseDto>() {
@Override
public void onCollapse(CollapseItemEvent<MonitorBaseDto> event) {
forceLayout();
}
});
createContextMenu(); createContextMenu();
con.add(tree, new VerticalLayoutData(1, -1, new Margins(0))); con.add(grid, new VerticalLayoutData(1, -1, new Margins(0)));
add(con, new MarginData(0)); add(con, new MarginData(0));
@ -301,7 +208,6 @@ public class MonitorBackgroundPanel extends FramedPanel implements
protected void addMonitor() { protected void addMonitor() {
monitorBackgroundUpdater = new MonitorBackgroundUpdater(); monitorBackgroundUpdater = new MonitorBackgroundUpdater();
monitorBackgroundUpdater.addListener(this); monitorBackgroundUpdater.addListener(this);
addMonitorBackgroundEventUIListener(monitorBackgroundUpdater); addMonitorBackgroundEventUIListener(monitorBackgroundUpdater);
@ -331,29 +237,11 @@ public class MonitorBackgroundPanel extends FramedPanel implements
} }
protected void requestOperationOnKey(Context context) {
String key = (String) context.getKey();
@SuppressWarnings("unused")
MonitorBaseDto d = store.findModelWithKey(key);
}
private void addChildrensToStore() { private void addChildrensToStore() {
gen = new MonitorTreeDataGenerator(); if(backgroundOperationMonitorList!=null){
try { store.addAll(backgroundOperationMonitorList);
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);
}
} catch (Throwable e) {
Log.error("Error adding childrens to store :"
+ e.getLocalizedMessage());
e.printStackTrace();
}
} }
protected void createContextMenu() { protected void createContextMenu() {
@ -366,7 +254,7 @@ public class MonitorBackgroundPanel extends FramedPanel implements
@Override @Override
public void onSelection(SelectionEvent<Item> event) { public void onSelection(SelectionEvent<Item> event) {
MonitorBaseDto selected = tree.getSelectionModel() BackgroundOperationMonitor selected = grid.getSelectionModel()
.getSelectedItem(); .getSelectedItem();
Log.debug(selected.toString()); Log.debug(selected.toString());
requestMoreInfo(selected); requestMoreInfo(selected);
@ -380,7 +268,7 @@ public class MonitorBackgroundPanel extends FramedPanel implements
@Override @Override
public void onSelection(SelectionEvent<Item> event) { public void onSelection(SelectionEvent<Item> event) {
MonitorBaseDto selected = tree.getSelectionModel() BackgroundOperationMonitor selected = grid.getSelectionModel()
.getSelectedItem(); .getSelectedItem();
Log.debug(selected.toString()); Log.debug(selected.toString());
requestBacgroundAbort(selected); requestBacgroundAbort(selected);
@ -396,7 +284,7 @@ public class MonitorBackgroundPanel extends FramedPanel implements
@Override @Override
public void onSelection(SelectionEvent<Item> event) { public void onSelection(SelectionEvent<Item> event) {
MonitorBaseDto selected = tree.getSelectionModel() BackgroundOperationMonitor selected = grid.getSelectionModel()
.getSelectedItem(); .getSelectedItem();
Log.debug(selected.toString()); Log.debug(selected.toString());
requestBacgroundHidden(selected); requestBacgroundHidden(selected);
@ -409,56 +297,43 @@ public class MonitorBackgroundPanel extends FramedPanel implements
contextMenu.add(abortItem); contextMenu.add(abortItem);
contextMenu.add(hideItem); contextMenu.add(hideItem);
tree.setContextMenu(contextMenu); grid.setContextMenu(contextMenu);
} }
protected void requestMoreInfo(MonitorBaseDto selected) { protected void requestMoreInfo(BackgroundOperationMonitor selected) {
for (OperationMonitor operationMonitor : operationMonitorList) { Log.debug("Found Task Id: " + selected.getTaskId());
if (operationMonitor.getTaskId().compareTo(selected.getId()) == 0) { MonitorBackgroundInfoDialog monitorBackgroundInfoDialog = new MonitorBackgroundInfoDialog(
Log.debug("Found Task Id: " + operationMonitor.getTaskId()); selected, eventBus);
MonitorBackgroundInfoDialog monitorBackgroundInfoDialog = new MonitorBackgroundInfoDialog( monitorBackgroundInfoDialog.show();
operationMonitor, eventBus); return;
monitorBackgroundInfoDialog.show();
return; }
}
protected void requestBacgroundAbort(BackgroundOperationMonitor selected) {
Log.debug("Found Task Id: " + selected.getTaskId());
if (selected.getState() == State.IN_PROGRESS
|| selected.getState() == State.INITIALIZING
|| selected.getState() == State.VALIDATING_RULES) {
fireRequestAborted(selected.getTaskId());
} }
} }
protected void requestBacgroundAbort(MonitorBaseDto selected) { protected void requestBacgroundHidden(BackgroundOperationMonitor selected) {
for (OperationMonitor operationMonitor : operationMonitorList) { Log.debug("Found Task Id: " + selected.getTaskId());
if (operationMonitor.getTaskId().compareTo(selected.getId()) == 0) { fireRequestHidden(selected.getTaskId());
Log.debug("Found Task Id: " + operationMonitor.getTaskId()); return;
if (operationMonitor.getTask().getState() == State.IN_PROGRESS
|| operationMonitor.getTask().getState() == State.INITIALIZING
|| operationMonitor.getTask().getState() == State.VALIDATING_RULES) {
fireRequestAborted(operationMonitor.getTaskId());
}
return;
}
}
}
protected void requestBacgroundHidden(MonitorBaseDto selected) {
for (OperationMonitor operationMonitor : operationMonitorList) {
if (operationMonitor.getTaskId().compareTo(selected.getId()) == 0) {
Log.debug("Found Task Id: " + operationMonitor.getTaskId());
fireRequestHidden(operationMonitor.getTaskId());
return;
}
}
} }
@Override @Override
public void operationMonitorListUpdated( public void operationMonitorListUpdated(
ArrayList<OperationMonitor> operationMonitorList) { ArrayList<BackgroundOperationMonitor> operationMonitorList) {
this.operationMonitorList = operationMonitorList; this.backgroundOperationMonitorList = operationMonitorList;
store.clear(); store.clear();
store.commitChanges(); store.commitChanges();
addChildrensToStore(); addChildrensToStore();
store.commitChanges(); store.commitChanges();
// tree.expandAll();
forceLayout(); forceLayout();
} }

View File

@ -3,8 +3,8 @@ package org.gcube.portlets.user.td.monitorwidget.client.background;
import java.util.ArrayList; import java.util.ArrayList;
import org.gcube.portlets.user.td.gwtservice.client.rpc.TDGWTServiceAsync; import org.gcube.portlets.user.td.gwtservice.client.rpc.TDGWTServiceAsync;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.BackgroundOperationMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.BackgroundOperationMonitorSession; import org.gcube.portlets.user.td.gwtservice.shared.monitor.BackgroundOperationMonitorSession;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitorSession; import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitorSession;
import com.allen_sauer.gwt.log.client.Log; import com.allen_sauer.gwt.log.client.Log;
@ -35,7 +35,7 @@ public class MonitorBackgroundUpdater extends Timer implements MonitorBackground
public void run() { public void run() {
Log.debug("requesting list of operation in background "); Log.debug("requesting list of operation in background ");
TDGWTServiceAsync.INSTANCE TDGWTServiceAsync.INSTANCE
.getBackgroundOperationMonitor(backgroundOperationMonitorSession, new AsyncCallback<ArrayList<OperationMonitor>>() { .getBackgroundOperationMonitor(backgroundOperationMonitorSession, new AsyncCallback<ArrayList<BackgroundOperationMonitor>>() {
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
@ -47,7 +47,7 @@ public class MonitorBackgroundUpdater extends Timer implements MonitorBackground
fireRetrieveOperationMonitorListFailed(caught); fireRetrieveOperationMonitorListFailed(caught);
} }
public void onSuccess(ArrayList<OperationMonitor> result) { public void onSuccess(ArrayList<BackgroundOperationMonitor> result) {
Log.debug("retrieved Operation Monitor List: " Log.debug("retrieved Operation Monitor List: "
+ result.size()); + result.size());
@ -62,7 +62,7 @@ public class MonitorBackgroundUpdater extends Timer implements MonitorBackground
} }
protected void fireOperationMonitorListUpdated(ArrayList<OperationMonitor> operationMonitorList){ protected void fireOperationMonitorListUpdated(ArrayList<BackgroundOperationMonitor> operationMonitorList){
for (MonitorBackgroundUpdaterListener listener : listeners) for (MonitorBackgroundUpdaterListener listener : listeners)
listener.operationMonitorListUpdated(operationMonitorList); listener.operationMonitorListUpdated(operationMonitorList);
} }

View File

@ -2,7 +2,7 @@ package org.gcube.portlets.user.td.monitorwidget.client.background;
import java.util.ArrayList; import java.util.ArrayList;
import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor; import org.gcube.portlets.user.td.gwtservice.shared.monitor.BackgroundOperationMonitor;
/** /**
* *
@ -15,7 +15,7 @@ public interface MonitorBackgroundUpdaterListener {
/** /**
* Called when the list of opration is updated * Called when the list of opration is updated
*/ */
public void operationMonitorListUpdated(ArrayList<OperationMonitor> operationMonitorList); public void operationMonitorListUpdated(ArrayList<BackgroundOperationMonitor> operationMonitorList);
/** /**