From 56b58160239e55838b5b897292a1405237a2f28c Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Tue, 9 Sep 2014 17:17:22 +0000 Subject: [PATCH] Minor Update git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-monitor-widget@99644 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../monitorwidget/client/MonitorDialog.java | 2 +- .../background/MonitorBackgroundDialog.java | 32 +- .../MonitorBackgroundEventUIListener.java | 22 + .../background/MonitorBackgroundPanel.java | 437 ++++++++++++++++++ .../background/MonitorBackgroundUpdater.java | 114 +++++ .../MonitorBackgroundUpdaterListener.java | 28 ++ .../client/details/MonitorDetailPanel.java | 4 +- .../tree/MonitorTreeDataGenerator.java | 71 ++- 8 files changed, 677 insertions(+), 33 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundEventUIListener.java create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundPanel.java create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundUpdater.java create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundUpdaterListener.java diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorDialog.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorDialog.java index 53ad8d3..99802f6 100644 --- a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorDialog.java +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorDialog.java @@ -36,7 +36,7 @@ import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; */ public class MonitorDialog extends Window implements MonitorUpdaterListener { - public static final int STATUS_POLLING_DELAY = 1000; + private static final int STATUS_POLLING_DELAY = 1000; private static final String WIDTH = "640px"; private static final String HEIGHT = "378px"; private static final String PANELWIDTH = "620px"; 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 90384c1..01ec5ea 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,8 +1,5 @@ package org.gcube.portlets.user.td.monitorwidget.client.background; -import org.gcube.portlets.user.td.monitorwidget.client.details.MonitorDetailPanel; -import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId; - import com.google.web.bindery.event.shared.EventBus; import com.sencha.gxt.widget.core.client.Window; @@ -15,26 +12,15 @@ import com.sencha.gxt.widget.core.client.Window; */ public class MonitorBackgroundDialog extends Window { - private static final String WIDTH = "640px"; - private static final String HEIGHT = "378px"; - private static final String PANELWIDTH = "620px"; - private static final String PANELHEIGHT = "308px"; - private static final String PROGRESSWIDTH = "618px"; + private static final String WIDTH = "400px"; + private static final String HEIGHT = "520px"; - private EventBus eventBus; - private String taskId; + protected EventBus eventBus; + protected MonitorBackgroundPanel monitorBackgroundPanel; - private TRId trId; - - - - - private MonitorDetailPanel monitorDetailPanel; - - public MonitorBackgroundDialog(String taskId, EventBus eventBus) { + public MonitorBackgroundDialog(EventBus eventBus) { this.eventBus = eventBus; - this.taskId=taskId; - trId = null; + initWindow(); create(); @@ -46,13 +32,15 @@ public class MonitorBackgroundDialog extends Window { setHeight(HEIGHT); setBodyBorder(false); setResizable(true); - setModal(true); + setModal(false); setClosable(true); setHeadingText("Background Operations Monitor"); } protected void create(){ - + monitorBackgroundPanel = new MonitorBackgroundPanel(eventBus); + add(monitorBackgroundPanel); + show(); } /** diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundEventUIListener.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundEventUIListener.java new file mode 100644 index 0000000..815c3e2 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundEventUIListener.java @@ -0,0 +1,22 @@ +package org.gcube.portlets.user.td.monitorwidget.client.background; + +public interface MonitorBackgroundEventUIListener { + /** + * Called when the task is aborted + * + */ + public void requestAborted(String taskId); + + + /** + * Called when the task is resumed + * + */ + public void requestResume(String taskId); + + + + + + +} 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 new file mode 100644 index 0000000..06b1bcc --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundPanel.java @@ -0,0 +1,437 @@ +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.google.gwt.cell.client.AbstractCell; +import com.google.gwt.cell.client.Cell.Context; +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.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; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class MonitorBackgroundPanel extends FramedPanel implements MonitorBackgroundUpdaterListener { + protected static final int STATUS_POLLING_DELAY = 2000; + 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 ArrayList monitorBackgroundEventUIListeners = new ArrayList(); + + protected MonitorBackgroundPanel thisPanel; + + protected Menu contextMenu; + protected MenuItem resumeItem; + protected MenuItem resolveItem; + + protected TRId trId; + protected VerticalLayoutContainer con; + protected ValidationsTasksMetadata validationsTasksMetadata; + + protected MonitorTreeDataGenerator gen; + protected TreeStore store; + protected TreeGrid tree; + protected ArrayList operationMonitorList; + + 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 MonitorBackgroundPanel(EventBus eventBus) { + super(); + 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); + + + 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(); + + } + }); + + // 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(); + forceLayout(); + + } + + + protected void addMonitor() { + monitorBackgroundUpdater = new MonitorBackgroundUpdater(); + + monitorBackgroundUpdater.addListener(this); + monitorBackgroundUpdater.scheduleRepeating(STATUS_POLLING_DELAY); + + addMonitorBackgroundEventUIListener(monitorBackgroundUpdater); + + } + + + public void addMonitorBackgroundEventUIListener( + MonitorBackgroundEventUIListener listener) { + monitorBackgroundEventUIListeners.add(listener); + } + + public void removeMonitorBackgroundEventUIListener( + MonitorBackgroundEventUIListener listener) { + monitorBackgroundEventUIListeners.remove(listener); + } + + public void update() { + forceLayout(); + } + + + + protected void close() { + /* + * if (parent != null) { parent.close(); } + */ + } + + + protected void requestOperationOnKey(Context context) { + String key = (String) context.getKey(); + @SuppressWarnings("unused") + MonitorBaseDto d = store.findModelWithKey(key); + + } + + + + private void addChildrensToStore() { + gen = new MonitorTreeDataGenerator(); + + MonitorFolderDto root = gen.getRoot(operationMonitorList); + for (MonitorBaseDto base : root.getChildrens()) { + store.add(base); + if (base instanceof MonitorFolderDto) { + processFolder(store, (MonitorFolderDto) base); + } + } + } + + private void processFolder(TreeStore store, + MonitorFolderDto folder) { + for (MonitorBaseDto child : folder.getChildrens()) { + store.add(folder, child); + if (child instanceof MonitorFolderDto) { + processFolder(store, (MonitorFolderDto) child); + } + } + } + + + @Override + public void operationMonitorListUpdated( + ArrayList operationMonitorList) { + store.clear(); + store.commitChanges(); + addChildrensToStore(); + store.commitChanges(); + tree.expandAll(); + forceLayout(); + + } + + + @Override + public void retrieveOperationMonitorListFailed(Throwable caught) { + // TODO Auto-generated method stub + + } + + + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundUpdater.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundUpdater.java new file mode 100644 index 0000000..2cba223 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundUpdater.java @@ -0,0 +1,114 @@ +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.BackgroundOperationMonitorSession; +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" + * g.panichi@isti.cnr.it + * + */ +public class MonitorBackgroundUpdater extends Timer implements MonitorBackgroundEventUIListener { + + protected ArrayList listeners = new ArrayList(); + protected BackgroundOperationMonitorSession backgroundOperationMonitorSession; + + public MonitorBackgroundUpdater(){ + backgroundOperationMonitorSession=new BackgroundOperationMonitorSession(); + } + + + /** + * {@inheritDoc} + */ + @Override + public void run() { + Log.debug("requesting list of operation in background "); + TDGWTServiceAsync.INSTANCE + .getBackgroundOperationMonitor(backgroundOperationMonitorSession, new AsyncCallback>() { + + + public void onFailure(Throwable caught) { + cancel(); + + Log.error("Error retrieving operation monitor list", + caught); + + fireRetrieveOperationMonitorListFailed(caught); + } + + public void onSuccess(ArrayList result) { + Log.debug("retrieved Operation Monitor List: " + + result.size()); + + fireOperationMonitorListUpdated(result); + + } + + + + }); + + } + + + protected void fireOperationMonitorListUpdated(ArrayList operationMonitorList){ + for (MonitorBackgroundUpdaterListener listener : listeners) + listener.operationMonitorListUpdated(operationMonitorList); + } + + protected void fireRetrieveOperationMonitorListFailed(Throwable throwable){ + for (MonitorBackgroundUpdaterListener listener : listeners) + listener.retrieveOperationMonitorListFailed(throwable); + } + + + + /** + * + * + * @param listener + */ + public void addListener(MonitorBackgroundUpdaterListener listener) { + listeners.add(listener); + } + + + /** + * + * @param listener + */ + public void removeListener(MonitorBackgroundUpdaterListener listener) { + listeners.remove(listener); + } + + + @Override + public void requestAborted(String taskId) { + OperationMonitorSession operationMonitorSession=new OperationMonitorSession(taskId); + operationMonitorSession.setAbort(true); + backgroundOperationMonitorSession.addToOperationMonitorSessionList(operationMonitorSession); + } + + + @Override + public void requestResume(String taskId) { + // TODO Auto-generated method stub + + } + + + + + +} diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundUpdaterListener.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundUpdaterListener.java new file mode 100644 index 0000000..0d99406 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/background/MonitorBackgroundUpdaterListener.java @@ -0,0 +1,28 @@ +package org.gcube.portlets.user.td.monitorwidget.client.background; + +import java.util.ArrayList; + +import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor; + +/** + * + * @author giancarlo + * email: g.panichi@isti.cnr.it + * + */ +public interface MonitorBackgroundUpdaterListener { + + /** + * Called when the list of opration is updated + */ + public void operationMonitorListUpdated(ArrayList operationMonitorList); + + + /** + * Called when operation is failed + */ + public void retrieveOperationMonitorListFailed(Throwable caught); + + + +} diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/MonitorDetailPanel.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/MonitorDetailPanel.java index 23d4e4f..3f5162b 100644 --- a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/MonitorDetailPanel.java +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/MonitorDetailPanel.java @@ -362,9 +362,9 @@ public class MonitorDetailPanel extends FramedPanel { } private void addChildrensToStore() { - gen = new MonitorTreeDataGenerator(operationMonitor); + gen = new MonitorTreeDataGenerator(); - MonitorFolderDto root = gen.getRootNoTask(); + MonitorFolderDto root = gen.getRootNoTask(operationMonitor); for (MonitorBaseDto base : root.getChildrens()) { store.add(base); if (base instanceof MonitorFolderDto) { 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 4f9c1de..c93b055 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 @@ -21,15 +21,16 @@ public class MonitorTreeDataGenerator { .getFormat("yyyy-MM-dd HH:mm:ss"); protected MonitorFolderDto root; - protected OperationMonitor operationMonitor; - public MonitorTreeDataGenerator(OperationMonitor operationMonitor) { + protected boolean singleOperation; + + public MonitorTreeDataGenerator() { Log.debug("MonitorTreeDataGenerator"); - this.operationMonitor = operationMonitor; } - public MonitorFolderDto getRoot() { + public MonitorFolderDto getRoot(OperationMonitor operationMonitor) { ArrayList childrens = new ArrayList(); + if (operationMonitor != null && operationMonitor.getTask() != null) { TaskS task = operationMonitor.getTask(); ArrayList jobs = new ArrayList(); @@ -72,8 +73,8 @@ public class MonitorTreeDataGenerator { return root; } - - public MonitorFolderDto getRootNoTask(){ + + public MonitorFolderDto getRootNoTask(OperationMonitor operationMonitor) { ArrayList jobs = new ArrayList(); if (operationMonitor != null && operationMonitor.getTask() != null) { TaskS task = operationMonitor.getTask(); @@ -95,7 +96,7 @@ public class MonitorTreeDataGenerator { validations); jobs.add(foldJob); } - + root = new MonitorFolderDto("root", "-1", "root", "root", "", 0, jobs); Log.debug("Generated root"); @@ -109,7 +110,61 @@ public class MonitorTreeDataGenerator { return root; } - + + public MonitorFolderDto getRoot( + ArrayList operationMonitorList) { + ArrayList childrens = new ArrayList(); + if (operationMonitorList != null && operationMonitorList.size() > 0) { + for (OperationMonitor operationMonitor : operationMonitorList) { + if (operationMonitor != null + && operationMonitor.getTask() != null) { + TaskS task = operationMonitor.getTask(); + ArrayList jobs = new ArrayList(); + for (JobS job : task.getJobs()) { + ArrayList validations = new ArrayList(); + + for (ValidationsJobS v : job.getValidationsJobS()) { + MonitorValidationJobSDto validationDto = new MonitorValidationJobSDto( + task.getId() + "-" + job.getId() + "-" + + v.getId(), v.getWorkerState(), + v.getProgress(), v.getDescription(), + v.getErrorMessage(), + v.getHumanReadableStatus(), + job.getInvocation()); + + validations.add(validationDto); + } + MonitorFolderDto foldJob = new MonitorFolderDto("job", + task.getId() + "-" + job.getId(), + job.getDescription(), job.getWorkerState() + .toString(), + job.getHumaReadableStatus(), job.getProgress(), + validations); + jobs.add(foldJob); + } + MonitorFolderDto foldTask = new MonitorFolderDto("task", + task.getId(), task.getId() + " [Date:" + + sdf.format(task.getStartTime()) + "]", + task.getState().toString(), "", task.getProgress(), + jobs); + childrens.add(foldTask); + } else { + + } + } + root = new MonitorFolderDto("root", "-1", "root", "root", + "", 0, childrens); + Log.debug("Generated root"); + + } else { + root = new MonitorFolderDto("root", "-1", "root", "root", + "", 0, childrens); + Log.debug("Generated root without childrens"); + } + + return root; + + } protected void printRecorsive(MonitorFolderDto root) { for (MonitorBaseDto base : root.getChildrens()) {