From 9d1f1303e3eed521085954099a4b7263bf4558fd Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Thu, 28 Aug 2014 11:18:30 +0000 Subject: [PATCH] Updated OperationMonitor git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-monitor-widget@99324 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/MonitorBarUpdater.java | 6 +- .../monitorwidget/client/MonitorDialog.java | 66 +++- .../monitorwidget/client/MonitorUpdater.java | 20 +- .../client/MonitorUpdaterListener.java | 9 +- .../client/details/MonitorDetailPanel.java | 299 ++++++++++++++++++ .../client/details/tree/MonitorBaseDto.java | 37 +++ .../client/details/tree/MonitorFolderDto.java | 61 ++++ .../tree/MonitorTreeDataGenerator.java | 78 +++++ .../tree/MonitorValidationJobSDto.java | 109 +++++++ .../client/resources/ResourceBundle.java | 56 +++- .../monitorwidget/client/resources/basket.png | Bin 0 -> 591 bytes .../client/resources/basket_32.png | Bin 0 -> 1183 bytes .../td/monitorwidget/client/resources/cog.png | Bin 0 -> 844 bytes .../monitorwidget/client/resources/cog_32.png | Bin 0 -> 1787 bytes .../monitorwidget/client/resources/error.png | Bin 0 -> 843 bytes .../client/resources/error_32.png | Bin 0 -> 1871 bytes .../client/resources/magnifier-zoom-in.png | Bin 0 -> 586 bytes .../client/resources/magnifier-zoom-in_32.png | Bin 0 -> 1254 bytes .../client/resources/magnifier-zoom-out.png | Bin 0 -> 597 bytes .../resources/magnifier-zoom-out_32.png | Bin 0 -> 1337 bytes .../td/monitorwidget/client/resources/ok.png | Bin 0 -> 814 bytes .../monitorwidget/client/resources/ok_32.png | Bin 0 -> 1665 bytes .../client/resources/table-validation.png | Bin 0 -> 881 bytes .../client/resources/table-validation_32.png | Bin 0 -> 1740 bytes .../monitorwidget/client/resources/basket.png | Bin 0 -> 591 bytes .../client/resources/basket_32.png | Bin 0 -> 1183 bytes .../td/monitorwidget/client/resources/cog.png | Bin 0 -> 844 bytes .../monitorwidget/client/resources/cog_32.png | Bin 0 -> 1787 bytes .../monitorwidget/client/resources/error.png | Bin 0 -> 843 bytes .../client/resources/error_32.png | Bin 0 -> 1871 bytes .../client/resources/magnifier-zoom-in.png | Bin 0 -> 586 bytes .../client/resources/magnifier-zoom-in_32.png | Bin 0 -> 1254 bytes .../client/resources/magnifier-zoom-out.png | Bin 0 -> 597 bytes .../resources/magnifier-zoom-out_32.png | Bin 0 -> 1337 bytes .../td/monitorwidget/client/resources/ok.png | Bin 0 -> 814 bytes .../monitorwidget/client/resources/ok_32.png | Bin 0 -> 1665 bytes .../client/resources/table-validation.png | Bin 0 -> 881 bytes .../client/resources/table-validation_32.png | Bin 0 -> 1740 bytes 38 files changed, 703 insertions(+), 38 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/MonitorDetailPanel.java create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorBaseDto.java create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorFolderDto.java create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorTreeDataGenerator.java create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorValidationJobSDto.java create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/basket.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/basket_32.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/cog.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/cog_32.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/error.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/error_32.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-in.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-in_32.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-out.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-out_32.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/ok.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/ok_32.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation.png create mode 100644 src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation_32.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/basket.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/basket_32.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/cog.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/cog_32.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/error.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/error_32.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-in.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-in_32.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-out.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-out_32.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/ok.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/ok_32.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation.png create mode 100644 src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation_32.png diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorBarUpdater.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorBarUpdater.java index 8bb0a99..f9a0559 100644 --- a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorBarUpdater.java +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorBarUpdater.java @@ -33,7 +33,7 @@ public class MonitorBarUpdater implements MonitorUpdaterListener { * {@inheritDoc} */ @Override - public void monitorComplete(TRId trId) { + public void monitorComplete(TRId trId, OperationMonitor operationMonitor) { Log.info("Completed"); progressBar.updateProgress(1, "Completed"); @@ -43,7 +43,7 @@ public class MonitorBarUpdater implements MonitorUpdaterListener { * {@inheritDoc} */ @Override - public void monitorFailed(Throwable caught, String reason, String failureDetails) { + public void monitorFailed(Throwable caught, String reason, String failureDetails, OperationMonitor operationMonitor) { Log.info("Failed"); progressBar.updateText("Failed"); } @@ -81,7 +81,7 @@ public class MonitorBarUpdater implements MonitorUpdaterListener { } @Override - public void monitorStopped(TRId trId,String reason, String details) { + public void monitorStopped(TRId trId,String reason, String details, OperationMonitor operationMonitor) { Log.debug("Operation Stopped: ["+trId.toString()+", "+reason+", "+details+"]"); progressBar.updateText("Validations failed"); 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 cf76df7..2a0ee43 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 @@ -5,6 +5,7 @@ import java.util.ArrayList; 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.OperationMonitorSession; +import org.gcube.portlets.user.td.monitorwidget.client.details.MonitorDetailPanel; 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; @@ -21,6 +22,7 @@ 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.SelectEvent; import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; +import com.sencha.gxt.widget.core.client.form.FieldSet; /** * AddColumnProgressDialog is a Dialog that show progress of AddColumn @@ -35,29 +37,42 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener { private static final String WIDTH = "400px"; private static final String HEIGHT = "120px"; private EventBus eventBus; + private String taskId; private MonitorUpdater progressUpdater; private TextButton ok; private TRId trId; private String reason; private String details; + protected boolean backgroundBtnEnabled=true; protected ToolButton backgroundBtn; protected ArrayList listeners = new ArrayList(); + private MonitorDetailPanel monitorDetailPanel; + public MonitorDialog(String taskId, EventBus eventBus) { this.eventBus = eventBus; + this.taskId=taskId; + trId = null; + initWindow(); + create(); + + + } + + protected void initWindow(){ setWidth(WIDTH); setHeight(HEIGHT); setBodyBorder(false); setResizable(true); setModal(true); - setHeadingText("Add Column Progress"); - - trId = null; - + setHeadingText("Progress"); + } + + protected void create(){ FramedPanel panel = new FramedPanel(); panel.setHeaderVisible(false); panel.setBodyBorder(false); @@ -65,7 +80,27 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener { VerticalLayoutContainer v = new VerticalLayoutContainer(); ProgressBar progressBar = new ProgressBar(); - + + FieldSet detailsSet = new FieldSet(); + detailsSet.setHeadingText("Details"); + detailsSet.setCollapsible(true); + + monitorDetailPanel=new MonitorDetailPanel(eventBus); + detailsSet.add(monitorDetailPanel); + + /*TextField + + FlowLayoutContainer progressDetailContainer = new FlowLayoutContainer(); + progressDetailContainer.setScrollMode(ScrollMode.ALWAYS); + MarginData layoutData = new MarginData(new Margins(0, 5, 0, 0)); + c.add(new TextButton("Button 1"), layoutData); + c.add(new TextButton("Button 2"), layoutData); + c.add(new TextButton("Button 3"), layoutData); + Viewport v = new Viewport(); + v.add(c); + RootPanel.get().add(v); + */ + ok = new TextButton("OK"); ok.addSelectHandler(new SelectHandler() { @@ -77,7 +112,9 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener { v.add(progressBar, new VerticalLayoutData(1, 1, new Margins(5, 5, 5, 5))); - + + v.add(detailsSet,new VerticalLayoutData(1, 1, new Margins(5, 5, 5, 5))); + panel.add(v); panel.addButton(ok); add(panel); @@ -91,7 +128,6 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener { progressUpdater.scheduleRepeating(STATUS_POLLING_DELAY); show(); ok.setVisible(false); - } public void addProgressDialogListener(MonitorDialogListener listener) { @@ -103,19 +139,23 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener { } @Override - public void monitorInitializing(OperationMonitor result) { - // TODO Auto-generated method stub + public void monitorInitializing(OperationMonitor operationMonitor) { + if(monitorDetailPanel!=null){ + monitorDetailPanel.update(operationMonitor); + } } @Override public void monitorUpdate(OperationMonitor operationMonitor) { - // TODO Auto-generated method stub + if(monitorDetailPanel!=null){ + monitorDetailPanel.update(operationMonitor); + } } @Override - public void monitorComplete(TRId trId) { + public void monitorComplete(TRId trId, OperationMonitor operationMonitor) { Log.debug("Operation Complete return: " + trId.toString()); this.trId = trId; fireOperationComplete(trId); @@ -123,7 +163,7 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener { } @Override - public void monitorFailed(Throwable caught, String reason, String details) { + public void monitorFailed(Throwable caught, String reason, String details, OperationMonitor operationMonitor) { if (caught instanceof TDGWTSessionExpiredException) { eventBus.fireEvent(new SessionExpiredEvent( SessionExpiredType.EXPIREDONSERVER)); @@ -143,7 +183,7 @@ public class MonitorDialog extends Window implements MonitorUpdaterListener { } @Override - public void monitorStopped(TRId trId, String reason, String details) { + public void monitorStopped(TRId trId, String reason, String details, OperationMonitor operationMonitor) { Log.debug("Operation Stopped: [" + trId.toString() + ", " + reason + ", " + details + "]"); this.trId = trId; 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 b47e160..7a30a4c 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 @@ -45,7 +45,7 @@ public class MonitorUpdater extends Timer implements MonitorDialogEventUIListene caught); String message = getStack(caught); fireMonitorFailed(caught, - "Failed getting operation updates", message); + "Failed getting operation updates", message, null); } public void onSuccess(OperationMonitor result) { @@ -91,7 +91,7 @@ public class MonitorUpdater extends Timer implements MonitorDialogEventUIListene cancel(); Log.info("Fisnish :" + result.getTrId()); - fireMonitorComplete(result.getTrId()); + fireMonitorComplete(result); break; default: Log.info("Unknow State"); @@ -122,7 +122,7 @@ public class MonitorUpdater extends Timer implements MonitorDialogEventUIListene details = "Operation failed"; } - fireMonitorFailed(th, reason, details); + fireMonitorFailed(th, reason, details,result); } protected void stopMessage(OperationMonitor result) { @@ -137,7 +137,7 @@ public class MonitorUpdater extends Timer implements MonitorDialogEventUIListene details = "Operation stopped"; } - fireMonitorStopped(result.getTrId(),reason, details); + fireMonitorStopped(result.getTrId(),reason, details,result); } @@ -169,20 +169,20 @@ public class MonitorUpdater extends Timer implements MonitorDialogEventUIListene listener.monitorValidate(result); } - protected void fireMonitorComplete(TRId trId) { + protected void fireMonitorComplete(OperationMonitor result) { for (MonitorUpdaterListener listener : listeners) - listener.monitorComplete(trId); + listener.monitorComplete(result.getTrId(), result); } protected void fireMonitorFailed(Throwable caught, String failure, - String failureDetails) { + String failureDetails, OperationMonitor operationMonitor) { for (MonitorUpdaterListener listener : listeners) - listener.monitorFailed(caught, failure, failureDetails); + listener.monitorFailed(caught, failure, failureDetails, operationMonitor); } - protected void fireMonitorStopped(TRId trId, String reason, String details) { + protected void fireMonitorStopped(TRId trId, String reason, String details, OperationMonitor operationMonitor) { for (MonitorUpdaterListener listener : listeners) - listener.monitorStopped(trId,reason, details); + listener.monitorStopped(trId,reason, details, operationMonitor); } protected void fireMonitorAborted() { diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorUpdaterListener.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorUpdaterListener.java index 64c3fbc..7379fd0 100644 --- a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorUpdaterListener.java +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/MonitorUpdaterListener.java @@ -34,8 +34,9 @@ public interface MonitorUpdaterListener { /** * Called when the operation is complete. + * @param operationMonitor TODO */ - public void monitorComplete(TRId trId); + public void monitorComplete(TRId trId, OperationMonitor operationMonitor); /** * Called when the operation is failed. @@ -43,8 +44,9 @@ public interface MonitorUpdaterListener { * @param caught * @param reason * @param details + * @param operationMonitor TODO */ - public void monitorFailed(Throwable caught, String reason, String details); + public void monitorFailed(Throwable caught, String reason, String details, OperationMonitor operationMonitor); /** * Called when the operation is stopped @@ -52,8 +54,9 @@ public interface MonitorUpdaterListener { * @param trId * @param reason * @param details + * @param operationMonitor TODO */ - public void monitorStopped(TRId trId, String reason, String details); + public void monitorStopped(TRId trId, String reason, String details, OperationMonitor operationMonitor); /** 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 new file mode 100644 index 0000000..500aafb --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/MonitorDetailPanel.java @@ -0,0 +1,299 @@ +package org.gcube.portlets.user.td.monitorwidget.client.details; + +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.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.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.dom.ScrollSupport.ScrollMode; +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; + +public class MonitorDetailPanel extends FramedPanel { + protected String WIDTH = "380px"; + protected String HEIGHT = "200px"; + protected MonitorDetailPanel thisPanel; + + protected Menu contextMenu; + protected MenuItem resumeItem; + protected MenuItem resolveItem; + + protected TRId trId; + protected VerticalLayoutContainer con; + protected EventBus eventBus; + protected ValidationsTasksMetadata validationsTasksMetadata; + + protected MonitorTreeDataGenerator gen; + protected TreeStore store; + protected TreeGrid tree; + private OperationMonitor operationMonitor; + + class KeyProvider implements ModelKeyProvider { + @Override + public String getKey(MonitorBaseDto item) { + return (item instanceof MonitorFolderDto ? "f-" : "v-") + + item.getId(); + } + } + + /** + * + * @param eventBus + */ + public MonitorDetailPanel(EventBus eventBus) { + super(); + Log.debug("MonitorDetailPanel"); + this.eventBus = eventBus; + this.thisPanel = this; + forceLayoutOnResize = true; + init(); + draw(); + + } + + protected void draw() { + if (tree != null) { + remove(tree); + } + if(operationMonitor!=null){ + createTreeData(); + } + } + + protected void init() { + setWidth(WIDTH); + setHeight(HEIGHT); + setHeaderVisible(false); + setBodyBorder(false); + forceLayoutOnResize = true; + } + + protected void createTreeData() { + gen = new MonitorTreeDataGenerator(operationMonitor); + create(); + } + + protected void create() { + con = new VerticalLayoutContainer(); + con.setScrollMode(ScrollMode.AUTO); + + store = new TreeStore(new KeyProvider()); + + MonitorFolderDto root = gen.getRoot(); + for (MonitorBaseDto base : root.getChildrens()) { + store.add(base); + if (base instanceof MonitorFolderDto) { + processFolder(store, (MonitorFolderDto) base); + } + } + + ColumnConfig cc1 = new ColumnConfig( + new ToStringValueProvider("task"), 168, "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 Double getValue(MonitorBaseDto object) { + Double d = null; + if (object instanceof MonitorValidationJobSDto) { + Float f = ((MonitorValidationJobSDto) 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()); + } + } + + @Override + public String getPath() { + return "progress"; + } + }, 140, "Progress"); + cc2.setHeader("Progress"); + + ProgressBarCell progress = new ProgressBarCell() { + @Override + public boolean handlesSelection() { + return true; + } + }; + progress.setProgressText("{0}% Complete"); + progress.setWidth(140); + cc2.setCell(progress); + + List> l = new ArrayList>(); + l.add(cc1); + l.add(cc2); + 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)); + con.add(tree, new VerticalLayoutData(1, -1)); + + add(con, new MarginData(0)); + + forceLayout(); + + } + + protected void requestOperationOnKey(Context context) { + String key = (String) context.getKey(); + @SuppressWarnings("unused") + MonitorBaseDto d = store.findModelWithKey(key); + + } + + + + public void update(OperationMonitor operationMonitor) { + this.operationMonitor = operationMonitor; + draw(); + + } + + + + private void processFolder(TreeStore store, + MonitorFolderDto folder) { + for (MonitorBaseDto child : folder.getChildrens()) { + store.add(folder, child); + if (child instanceof MonitorFolderDto) { + processFolder(store, (MonitorFolderDto) child); + } + } + } + + + +} diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorBaseDto.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorBaseDto.java new file mode 100644 index 0000000..4631ab9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorBaseDto.java @@ -0,0 +1,37 @@ +package org.gcube.portlets.user.td.monitorwidget.client.details.tree; + +import java.io.Serializable; + +/** + * + * @author giancarlo + * email: g.panichi@isti.cnr.it + * + */ +public class MonitorBaseDto implements Serializable { + + private static final long serialVersionUID = -5535466371215737037L; + protected String id; + + public MonitorBaseDto() { + + } + + public MonitorBaseDto(String id) { + this.id = id; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + @Override + public String toString() { + return "BaseDto [id=" + id + "]"; + } + +} 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 new file mode 100644 index 0000000..6831c14 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorFolderDto.java @@ -0,0 +1,61 @@ +package org.gcube.portlets.user.td.monitorwidget.client.details.tree; + +import java.util.ArrayList; + +/** + * + * @author giancarlo + * email: g.panichi@isti.cnr.it + * + */ +public class MonitorFolderDto extends MonitorBaseDto { + + private static final long serialVersionUID = 4644048540524701598L; + protected String description; + protected ArrayList childrens; + protected String type; + + public MonitorFolderDto(){ + + } + + public MonitorFolderDto(String type,String id,String description, ArrayList childrens){ + super(id); + this.type=type; + this.description=description; + this.childrens=childrens; + } + + + + public ArrayList getChildrens() { + return childrens; + } + + public void setChildrens(ArrayList childrens) { + this.childrens = childrens; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + + @Override + public String toString() { + return description; + } + +} 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 new file mode 100644 index 0000000..3e33bc4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorTreeDataGenerator.java @@ -0,0 +1,78 @@ +package org.gcube.portlets.user.td.monitorwidget.client.details.tree; + +import java.util.ArrayList; + +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.TaskS; +import org.gcube.portlets.user.td.gwtservice.shared.task.ValidationsJobS; + +import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.i18n.client.DateTimeFormat; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public class MonitorTreeDataGenerator { + protected DateTimeFormat sdf = DateTimeFormat + .getFormat("yyyy-MM-dd HH:mm:ss"); + + protected MonitorFolderDto root; + + public MonitorTreeDataGenerator(OperationMonitor operationMonitor) { + Log.debug("MonitorTreeDataGenerator"); + ArrayList childrens = new ArrayList(); + if (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(), + validations); + jobs.add(foldJob); + } + MonitorFolderDto foldTask = new MonitorFolderDto("task", + task.getId(), sdf.format(task.getStartTime()), jobs); + childrens.add(foldTask); + + root = new MonitorFolderDto("root", "-1", "root", childrens); + Log.debug("Generated root"); + // printRecorsive(root); + + } else { + root = new MonitorFolderDto("root", "-1", "root", childrens); + Log.debug("Generated root without childrens"); + } + } + + public MonitorFolderDto getRoot() { + return root; + } + + protected void printRecorsive(MonitorFolderDto root) { + for (MonitorBaseDto base : root.getChildrens()) { + Log.debug("+++"); + Log.debug("Children:" + base.toString()); + if (base instanceof MonitorFolderDto) { + printRecorsive((MonitorFolderDto) base); + } + Log.debug("---"); + + } + } + +} diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorValidationJobSDto.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorValidationJobSDto.java new file mode 100644 index 0000000..1936129 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/details/tree/MonitorValidationJobSDto.java @@ -0,0 +1,109 @@ +package org.gcube.portlets.user.td.monitorwidget.client.details.tree; + +import org.gcube.portlets.user.td.gwtservice.shared.task.InvocationS; +import org.gcube.portlets.user.td.gwtservice.shared.task.WorkerState; + +/** + * + * @author giancarlo + * email: g.panichi@isti.cnr.it + * + */ +public class MonitorValidationJobSDto extends MonitorBaseDto { + + private static final long serialVersionUID = -4353641080571614057L; + + protected WorkerState workerState; + protected float progress; + protected String description; + protected Throwable errorMessage; + protected String humanReadableStatus; + protected InvocationS invocation; + + + + + public MonitorValidationJobSDto(){ + + } + + /** + * + * @param id + * @param workerState + * @param progress + * @param description + * @param errorMessage + * @param humanReadableStatus + * @param invocation + */ + public MonitorValidationJobSDto(String id, WorkerState workerState, float progress, + String description, Throwable errorMessage, + String humanReadableStatus, InvocationS invocation) { + super(id); + this.workerState = workerState; + this.progress = progress; + this.description = description; + this.errorMessage = errorMessage; + this.humanReadableStatus = humanReadableStatus; + this.invocation = invocation; + } + + + public WorkerState getWorkerState() { + return workerState; + } + + public void setWorkerState(WorkerState workerState) { + this.workerState = workerState; + } + + public float getProgress() { + return progress; + } + + public void setProgress(float progress) { + this.progress = progress; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Throwable getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(Throwable errorMessage) { + this.errorMessage = errorMessage; + } + + public String getHumanReadableStatus() { + return humanReadableStatus; + } + + public void setHumanReadableStatus(String humanReadableStatus) { + this.humanReadableStatus = humanReadableStatus; + } + + public InvocationS getInvocation() { + return invocation; + } + + public void setInvocation(InvocationS invocation) { + this.invocation = invocation; + } + + @Override + public String toString() { + return description; + } + + + + +} diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/ResourceBundle.java b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/ResourceBundle.java index 3103403..866179a 100644 --- a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/ResourceBundle.java +++ b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/ResourceBundle.java @@ -1,19 +1,57 @@ package org.gcube.portlets.user.td.monitorwidget.client.resources; - - import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.ClientBundle; - +import com.google.gwt.resources.client.ImageResource; public interface ResourceBundle extends ClientBundle { - - public static final ResourceBundle INSTANCE=GWT.create(ResourceBundle.class); - + + public static final ResourceBundle INSTANCE = GWT + .create(ResourceBundle.class); + @Source("MonitorWidgetTD.css") MonitorCSS monitorCss(); - - + + @Source("error.png") + ImageResource error(); + + @Source("error_32.png") + ImageResource error32(); + + @Source("ok.png") + ImageResource ok(); + + @Source("ok_32.png") + ImageResource ok32(); + + @Source("table-validation.png") + ImageResource tableValidation(); + + @Source("table-validation_32.png") + ImageResource tableValidation32(); + + @Source("cog.png") + ImageResource cog(); + + @Source("cog_32.png") + ImageResource cog32(); + + @Source("basket.png") + ImageResource basket(); + + @Source("basket_32.png") + ImageResource basket32(); + + @Source("magnifier-zoom-in_32.png") + ImageResource magnifierZoomIn32(); + + @Source("magnifier-zoom-in.png") + ImageResource magnifierZoomIn(); + + @Source("magnifier-zoom-out_32.png") + ImageResource magnifierZoomOut32(); + + @Source("magnifier-zoom-out.png") + ImageResource magnifierZoomOut(); } - \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/basket.png b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/basket.png new file mode 100644 index 0000000000000000000000000000000000000000..1f36a679992195d33b2b54671dfe5d4407d5f02c GIT binary patch literal 591 zcmV-V0woCQOjwV4WLP!n*8kZf^_QbL3( z@ewkGyno=4M1mj@n^7_(Lz1E3@IaeI$n4;cK`2VKLV3L8-gEA`E?PxftYg1$rtjf< zKJYyNCtk);M)}$6iwZCWN`YyL7mYiq_s0%+u(`dyv>bgLU0Sd}1BhTo;qJFm^WM#; z{|wl8vK^0|TXyVTye_2KvZ$e#fb4zDl9qE_%_uiv

mnlBL{yYg+RXeM5kE$VXe$iEowc_Yv{(d_F(V%m){L5-_vF%$^X!(OP?^X*NvL+^klsk0Jm7Qp&MX zYDH`9777L5Fbua;D*4Rpmdj;dYwcDl6`z^iTCL`5tph3LFM=PqFO^bPk6GuddcB@J d?2G?f-vNG>d8dgYlNJB~002ovPDHLkV1lwF2DktK literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/basket_32.png b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/basket_32.png new file mode 100644 index 0000000000000000000000000000000000000000..8c77bf1b7d6e416baf1cd7e883f3179ad6962e03 GIT binary patch literal 1183 zcmV;Q1YrA#P)q`;Qyl?}F`9=ejc9>?YwpK-WVB5WPU8 z-$`IUIXL*r{39c<>+|ooS?HH79bsGeWQZWN0053Xs!;{EZE$OwzI7xkYLwx_70WN_Ix zruV)WRIAl9L{w4LXRWmm5hMgsnE;^S1kH1c;h7oCjD%dndR2W%RVy7G9jAis?(WLm z+}tS<=~LCudU|?J1Hjp{XCv=DHf-2X0)S$%7y&?UZ*K_zW@ct0?>)9|-C6>G>FMbR z0CKrp2>^~BJsJT(e}8`o0FE3v5;^A}BJbuyNzY%O_5pxXR2cz4w8t`g%W8e^Vb*k3|GTRP#7V z(nax!8bm}ds_NyDk&%l)T_yD19}|&b0K9qg=F>AXGZ8a4cx;Sm@K{7JFfdR8fWwCm zM?{37p`j8096EF;GR9!Xjvb{W#OcY&$yb@VPef+ZxV1{i%(KZU`tIi8gXRDLh{$Uq z0`Gk>9jo1j)6>%}VHnx zn3!0{%x|dbY<n9`^|yWe`Y>jzvhlFqN%B=tE#&C5#5g0$HvB1FR4JH x!rRPzE&ZRTHGQe)ZkVRIYa%jqhiw1*_BYTOo*IfqrfC2G002ovPDHLkV1kS%Hp&11 literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/cog.png b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/cog.png new file mode 100644 index 0000000000000000000000000000000000000000..46f1d133239b7a03a5cdfeb1274cf4cc238c47c0 GIT binary patch literal 844 zcmV-S1GD^zP)52sz2XvQV6x#Y_B03PSM*B__d)88hGeP4?1F-7bCL zJ-qNdyuS~_{~({wZxYcLQc4IRP_NggW@cvo`Y(??O)SfLC8g||n3(uEm&@&^QmN;f zropytRIAkyAq1CF{=^vjZgzII4gktiaX1`)qpIp+E|+^Pr9>bQKp+snKV6J7#@;0o zi7D50^D8SWTC)SovcA`K{nw$PA?A4=PEJl>7)HY|3-9QnwHj`2ZXl&ZdwV-HO+zRY!ok4-j*pKQP1DQ(0L$m| zzZ227M1;P+J{X1p$8k_76#l4GDlY&a7z}1dMn=++NCdT74cpt>AR-VER4FA=sT88o zC~CD@v$EqjFX!jyF9EiUIuKUTo zg%I$4AHMH5c|-(N2m#x+K|~lB7(hH8M@L5oIOo4*GMN{usxrn{wyUcPj4|BZ-C=!w z9Yh2n#J`WUy1F_Zi^blLjg3WJ*M;LaxVX3g5uvlQ6P$Bsnufi-JroLs%-Y)8A^-$F ziWy_?Mn^}Vg~MSq8Vx9lf|iyRw6?ZF*L8$KA!wS0L?VH+v$J$EnZ*A7{*D3wL^RAf ze-@9&A%wv0?k;X`ZyUO#)in+PDO(8_n&YtH@WwY7O?EC@I WQknobVLd-Odwc)NId9>dgNPu6fc2h;{(11=!AD=~Pybc| zobz9C&i_b6$TZG5gb+V|i@z@t=9>?pa3qH%QRJ0O%)_K=e&=I z{z60pmo8oMeKi3I4#2+RG}PVQeF^{=W2WScF{IOJq|<3r87sIDqD4^@5K%)inH)HO z{(KgRECN>WKp=p+x;p7RbnDiwQ&Is5EX|S!Cb-+}Mq67ODk>@w0~4b@dvL$Fr&e>~=doefoq%BJmp`#4lVf7g}3e;cz&xe*JpP%*-Gj zkC!mUzT2^5$Bz#lJct8;BEkFn`**JFnZ2p038kf_0ANb}?%g|Rng+Mq4IzY?3qlAp z07X%-w6p}nFtBmsMmQV}XqpC1(;$REI2^`@41V7!;(GfCL z%S^(quC5|QQTm9erKF?;e!m}#u`Ci&fy^yX6a|{5nFQXye~*EIft=tu2}ly0^S=7} z`j(1{3X^~&F*i4dsi`R}E-soqp`xM!rKP1=(GwARdU}vbrLw>QK)HMO?mi;Am)TYU zpt-pjLWora#>dBD7{*UTbYyvX`91*HY_{KV&d*j=Rr%}d>!E2HbX_;EPoF-;n>TN= zS~n3vXN;NIZZ)sh3sqIk8t0rN7K_0!jGvOpySsZI5#4KQYC=s-O;(e!cDraaiuw8Z9}XQl)SYYV+S}WI zC@wAzZ{4~Tx~{`!vt?bSojrT@X9ZR!n3+u0%$Bt-lWlQv5vr>8=K==+&iVa?g@sj7 zTKh#Vzp9i!9|7xg>!i!KtiWFrm};%*d`rIMbUKktCU<>7f!{lw&YXa`h;q)Mbar;` zV~pL)>~NKpm1Yl+IWRjri)b|ZiZS-< zxs#QEW))tE;p2u%Ms->(;G9ZEY=lJ|8M8D^XNb zWHuiwiP_m%yn6KtMAW)v%N7g`4L!_DzzXhixv*{9HmGX$p-D=cYw%=tL664+o6Ux| zZ{I=)(HaZ}F+4o{FpGc{-0gN_=gyt5+wEDIY|RNtA|JTC`g}gvY&MLJjzS30x@prU zJb(WDAz(R@5mB=cqM3*g35p5uIr{chG8HQiNG+7IOp6|R#t}n`}d=;un({SiWMl+HG{zYFZ8#jB%*uiO z{{EM{ckh0|82iJ>$cR=|RfW;fQ9OC_M1FLfP9~GF>FMdsb#--EyLPQP`v(RFU>F93 z5QmAVWMN^!H#Rl~zu%9WH*e+yU$q5t9XodHHs}06DwRt0^z`8Iq$m-vHAIV%+1Xq7Ki2jt>zAZ!T&)2S9`_I?<`{u7>B6`9(w^>K3JX5R? d$QfzA^*`Lg%^D28A5Q=P002ovPDHLkV1jk{U0nbG literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/error.png b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/error.png new file mode 100644 index 0000000000000000000000000000000000000000..910af47f92fdd70c9e8c841bad02d4f27cc62ed5 GIT binary patch literal 843 zcmV-R1GM~!P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^r2 z3^qAF&DXF1000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0007}Nklb87G+Pew0r|M`;6zxm{HaPWFMC8gJ-Tx|85nJCnGJ<)D2>t^(Z=g9~A#l z>~OCx^=+!c^iV&hM_wSis1goOM(M)$Z^e<8D0<{AQgWFux7BuIzEid-0fsvm3FYVeOpCJ ziKAWnG1hg+q4ivc+ZSY;F)L_p0D)jY1cH7+iE$XF66x#mSgZMt=N)0k+R|Fs?9P(p{LI!}t&3;Kw|5(Vy`wE- zLxpL&J)rpykkZ7&vyYhQeGe%NkeY@o-HSkRxyi(B0PyJKCdkcuJ27^zAtD{_x{RDk z*0U2}n+e#w5Vmv(n-`EC0CuRkNd)pEY&czY-6w*Pn)We>cMpy@l8Kp~v_LqLU38Sd zN&*^S1!fJv0-ylWU}ykDV|TC0FT=0;$gou#M7mH2BLrst`tG4%odlBxTZ==M2FL;} zF#!?+%n%|ZG!+^wM5~n28J~Q^q%|z1K*|Cs4Yn+3rNPRAr8QVDa?%7LZBA%)>L>cG VIqnGG-tYhb002ovPDHLkV1mtPc5eUx literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/error_32.png b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/error_32.png new file mode 100644 index 0000000000000000000000000000000000000000..d5336c03f4dc208916b7ba3b1f7e044f6a23aefc GIT binary patch literal 1871 zcmV-V2e9~wP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^r2 z3^oV_CX>@2HM@dakSAh-}000K6Nkl)>*k5&fCg)xb-7k+tJ&;Jcz z_s%N;klQG51#pE0Mgd-U_)BLDV4sD0_s%Q(-SuO+f6F}w*G^CU`y0Rg+~j#x;N?fR zws#L(gmzez5TXQ$9fYt2;Q5CyJ--UP^yt{|jdFKB9Dmjf`;9BV`_j9f z|M0vh@Vmc`wiigF%Cl`rM}zv{8XALZC{&wxo^3PPD8Mr>-F5B(zVX!;c==b`7MZaF zc~_F8QQrDvI>yh~!ouAhxAx_tdF&QA>le6ve8CDkq}14D`mRiZ)%or{N5 ztac;$O(C|;=OqPuetmV*(2WMQYTt5oE*>_|j^gPw^}%7Q4J?!A(J^P#{7 z_x$R(RH52`F@mV8{xUy4>?Ixi*~>fLDLNt%+#|QdI6cA>Iofhc?_;Jwui}^<=JxHD& zQ+??$#YUebFXFo6%Int*oH4*_f7rfoJ0kqnxYQYHi&hbrns_>8esVt$pVrVLNDrd) zuq7Q08q0=BI_g2vt--?xz|#+Y;eQ8Mb@OAq_QxBVg4>WNbuLzY=>}6iV@fB$r`thK z1CSp_*%Zo8SoiYvR_Pj$Aq2NQ{oqJ*%MW&+VG6`*$ghi%4psYyiHi-?nnZK|XfG4U zgSi%Geu>f#ZU&&tyYlunVS zqB&S+^|m2aU$c_tV1vBnC_jQ{Q+RelT^FsUSZxURVnBC3^P@|8&p-iND|~xgtVY#= zHI|gR@$86c?w<(5T_mNLN>7DKPnD#Uupk8Kdw71_l8z?L&s}11sS-)PJvY{VTBP{& z$s3Q~NDg(R+f77;N{>t2 zcyrf&-rTj1W0S{;l0c9F4(WR+pP^9eqOoixAt^}mt!At{J@_X8-gx}x8gP%Ka#Cul zHn0|DbMo|kbaF4yuKW-MW{=KsV0?-LT{#->Un{3xZ>!i9?j8Lf71u6sg zJazwY?Y{ze#CjRmhPW7Y^sNeoO22t_)HL@ht{Fs%s|89yEg)?VrJxKaMM{y+q1FVR z&sw>&*SaoT8KR^Zx%;)A`}$ARz?*;hCRui}ZqnT@S)tsm`URUz%7K8z{Y2Hxp!r=U zMs@LVmaH8DiRwTTl1`$Kx4&QkAps0|PTwUPIkInDGgI%I;O-}XIP^-EpPc^MPxiI} z@>GOi%ccA(3$Z$ShpbrbQ=WcgA*w;=*XMgfj&P)$#^<4XNPx)G6s0MVIqputfeh3_ zo>6M_sj+mq%^v@qex2sS!E-DMR_bi%#NnxkG`mKy?#b_TJr$?3 ztxn+H`7+e(p>bv=_aJxN)ehv2=MJuUyWq=l7dqw3k=k?l!ua>ReWXKXX70LI#jaOk zi^C@6`ZAIh&MFoXASbjl401wf?=D0E;h3rYF2dwEBFuM5L%8LbIWplmW{&4M^Zil= zUl#djaOb-~=|4|PQkzGoxIS)KuzZ@;DZeDFZS}E}Sjoiq{slOIm>)&+t<3-c002ov JPDHLkV1jz?kL>^e literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-in.png b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-in.png new file mode 100644 index 0000000000000000000000000000000000000000..2c6a9847b9139caf15ea43ecfcb799b61f3ede20 GIT binary patch literal 586 zcmV-Q0=4~#P)B=q8d9G9rTf3oL@6 zR((MP)nYb6n~=zzU__f%VcG{{P%eTmbGh)3imbi#jV-r|aM4<66sw5pkQnVabGWK^LqPBQ%q`E;YtcWn8T2R(Z$qpXM{7b@ytQ%QuV54YbWFh($;;o<2=>r#6FR=8AM z;gb_bW>pad(foPEfHA_MT{Vc2q68%X)=Fb}EXsV=;vA@RI0yGe&lM(%&DRrmTAYN2 z{;LC#0zjHBt% zn>-djaFofx=Pb=lcTa8`Pb8CQ5#V=9Ch_XNH*{^;QF%6A-%NTa#p2wTyKSB63xyRn z0O*IU!-=K2>F)GUirTt^ICbZL_5F?RwsN${g33O1?5<|Kkr1Y5jlQltr# zoCNh!(2|q21W$XjrGkfCL{EhlBw`y|NI+UD^g{$uQp*3dCa8$6Ts_j8_Cn81emhvTI~$$TANSz*&7Fx-EU!2ycr*S9=JZtxd25 zsI)Et(Xfq3*u^7p7k5(2xIUK!hy$tiTLN(KZxc8@mEKF~Q%UH4D2!Od1_~J zCP-r2K*X^S4ch>KRK~~0m)`;n0~&^)F))VsBFS(Si6H*#D*cT zlsE8=0s4I$prRM(t__a$JLzl8nFAgL{`19Y@Hfa;q|)!H{gDsLd5 zV!pF$3to7DiWq2|sN7?VMLKUG>l@)=2Jb!`a1 zvd@O*N2lMckDUZntzQ{^Nv0HrhWO&0FIUV&m4LK~6v9rhULLr$?tHDDQ^8TLYt8G; zL=Az`%LT!s*2o-M+4Bl^l@DR()~(f=#F?opFm-04LV(g7DR@2s2)4bpdGI8x>UoX1 zsjXRauFgzU2pH-cNlz|jeMG`8B94VZZ5vk111i|h&i+^#IAd73^E1;|D%efU`q~7j z&qZNwp#Twxgl#lgR$X&J)tea|VE)HqzB=vq>G^8ilkTIlzZ?N^Kmd9+wP15+GpuqOpx_B9 z)uM27E{)4KQaJzX{<_#NB)(oBfwJPst`UMqj3KVxx{I%_%;V?ZGsxr%@QXyz5O;G0 z+_;m*x$oyN^-~gtX3d^Y4EMMXM4+tEiJJqWbwpxM(AQNPkeg<(qy<314D_K75m3E2|S4UM`yhjZ($JRr0?Z0ed!dk zOGz}x+R(dWH$qJ=B=&jp=DpRw-H-s~5V7LjK}wVUaw$YQg=ljddY^qc`2UdhB@!z= zH!MIoL|ZWvgz)nC;o@mzm;QtuazF?Y9bnfA&kdP@)tVUYaZ_+lO6-FWnA1Sg@i#u4 zeYN)54JA-k|LCljf;TAW1Bw~ZEQ2~$Aou?hehrmKz)mD~-Lw7wU;i5Y1zrCpitpqP Qy#N3J07*qoM6N<$f>iTPxc~qF literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-out.png b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-out.png new file mode 100644 index 0000000000000000000000000000000000000000..1df88307612e378e18253f1015bc9d5714daabf7 GIT binary patch literal 597 zcmV-b0;>IqP)ZG4hQ~G*00U*RQ8fm^lGh+D=jFIlnUhTl~d8gwt&RD+< zF67AwfWHat627sgeFqA!Sn%8*6afwA-wIWM@-bMD~q?*JP>E3Vf^ z9E!@2^8_WJq*S{BG}hN3T5fEa;7MvZceJ5;=TbqV1;iMPffED07~jWuKE?}>a_v+5 zHfaHb0F)Mt0nAUcF`&O?2`+acuJ_})i0cu)|FoQ79WcI}58A>N4!&0chylI2hIQv5 zw(nzk0hZ@udp_FtH;(W)xzHJ^AaUeCEp7n$K)@I(LpEUtMkg~wK0bK!xp2E97DF~I zvFmhnIA2ixW9cPwMUOo@EFx7l*__MhWQIn2jt2SA-n`ZtkHt!!O?Ln=_;U8V64Mt1 z(yFzfw2VjRAL#}&bGGT&8D_>`v${AxG_!lUdp*epz@HS0VK=X}#%uQ0U2SSo+*JsC<;v&zRY?nfrl>qh`XS+h+Q+ zGtGyicjsp&Cp!lYaPiZP7tHjUN#kaQB)a0gRwm4}BxkSueIaR~}}pC})4cqHUbt<4w94KU8uMsEpt`9F5x;-?!gnDjeIjDIIjDe}Rf znTmE|BrYTIeTV{&Lf!|UR!{irja8g8oZ0m3)MN7x4KTN;e3)!pGt;r}j|P;70-V8G z%aJ%`4s@N6vgg3}7%AlNJh*+Y$+cVSm~=fnTz%^2Pd}aP2f*LF$tU$`GaU;9I5ZT1 z`imn-oT#-N0>;Wk3SkbJ##>(vpV_YiJph@VHZ#hl08h|N)K^?tLz;?a$MAsfl?#{* zCr-n>f^#T!S?e514P1&+LvCxo>&<=S z@*lV5U2hjiI$|dBK{lTB5f`9#d|xCrL@x(SS~e4LVu0}dy~PEn)xp~PKY^_sqjtQv1J3k` zq{mkq2~j>I3cT$(uvL7E1O9K{-DUH(97ylyL4OBKAIQY=N(UK4d7lB#d!V=wYRA2= zvUZHMJE)zxVsX4}TSpjPkTc~CCqC`CSjpW%9V z4CFk9BA-L0O#I)gEw0|EVKR=~K40{k3v-udC&K*z?D`wN^M`-EiE&oI#F0V9%0;}* zWkA^u=|0QE&E*X~yHUfLout#b9sJW1Tdq=n(M zz9)qLpiY3fBfCj+Fuqraf`*v^E6kh zL_@Sg{0ku*r-t`4m0_~A7%d!>1UP7cFh9=*n}8P>lsAc;%^^cq_K7nKNnyK z$pUz8o92P!z|OcdI}z3hFGzM0k%^l_()pjhz4YSNxd-aNW=x%1ifhEvLccLtUFO=D v-s_nC;=iHSH!2nUO69p-<^Q+wKNH^ogsZz5>n^e600000NkvXXu0mjfaT1Th literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/ok.png b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/ok.png new file mode 100644 index 0000000000000000000000000000000000000000..3d93f52a3f0360cc018843d35d965cd38d9ef96b GIT binary patch literal 814 zcmV+}1JV46P)Px#24YJ`L;yDcdH^xv`Z84j000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^n; z5DGQi60vLm00OQ_L_t(I%T1Hdi`7*a#y{tKzgO|*j58C|pf-jG*(Qw2EZP+PShX;4 z(b2`E1dZ8?Ve?uQnttvii{-840n;ukcsSu!csOL9zAeukN}Q< zf8^PAw0?Lr8qJvJFe^ecL$V^4$d<7XW^JObuguKNJyip!ZC={CW7l2t+wY9*ISJu7 zLIi%(&GB$Loo@X4^AEQ#p1b&H4bVzWYhx}gUPx;<`eCjlGC4~0@L+9y6$m;}bN9ac z(s(?=+(spV8RkyTnWi15jA35lo17biJ_q+6Vr6}qvzN~x844jYY5-G4QABOZn1q{Q zG8$zb+xa;6Y}-RsB?iNP_)FK32{obukUNrN6xUv-M`JA}(e)1d79OI}nBP}^AFcmiPq_v5G z5QckTmf5~#fp~{`^;`XUr_r7&(`k$`;yWxr8Z`v!%|)`pTAVb6=;IKY57nK@ta+;Q#;t07*qoM6N<$g0b9w%>V!Z literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/ok_32.png b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/ok_32.png new file mode 100644 index 0000000000000000000000000000000000000000..dae05cd72c8b6b9f48841290b17508e751869d4c GIT binary patch literal 1665 zcmV-{27dX8P)Px#24YJ`L;yDcdH^xv`Z84j000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^n; z5DF3C5mmha00sd`L_t(o!_Ajph+S6|#((RaGc!phGn1yxwDu_=mWWbpu>_S?s#ptZ zDHKt$SWzGJAxN##iZ+52eNdZb z&ROg8Vej*2Zbtf6dM}52?m2t!wf48Z^{utxmGn8NAH6JgKDGbj{e3llaq8)R?Yi%` z-?%o~*cS>EK|~M=B9wmfbB{pE??dT+^gqH0r8#ba@-q(|JLmOHz>z(Fy<@!tA%397 zuWs8~E?IaWg7C3HjSOx4Y;f2K>kQ|yaCu?H3Seh`cogf5f9uHCcN6iOxy|#u=5<%$ zazF$^$&Gxs{(o{j@<`G<3#8%6c;@pb*Ldn@kA+;%?EldBuILd^MB72vc#R~iD$;`b zKgPw#F@|>%lE6lD6tqo4(=saAWhJU z@EDCr@%I>bw6JxNt8Tn5xv031gvyiX;51=n0f3oPM2VOEV2Y>^j?4%Jr5S|b1=MF> zL>0_bGq@X-3al&%Wi&h>E#3WqyQ7Y5C^0yccO<;~b_ApCcc@6at?LPk#S-`4@=flz z?yiK&q(yC7gKk|CD(f7ONQ>vx=~B$Y@giNJ>=1!`xKEHflbG<~-5;U$noAchW6xV| z=iOJ{%p@8VDI-Kq+eT9eglF=MNTt9l;n7`V9Y{v|)C*^MZU@T?mm;Oic-6Mc*}d~k zEYB}zZe=8zK;hE}bmB22UTcw`<=vA=8j-jkS&$-vrP*zK^7_xv=8b?TtYGEn6C6MN zpDa`w#7k2MbPp9n+H`{zB7BIshkDW~f~cLHOFNk>=Mch7m>JKV`7ie${x*gUT9LCO ze2N2|lDTqRQQmFZ`L<0Lu~aP3%CkC>c+du?&aUzPH{M1N7(#-osCeL4``J3Xi080% zT0sn{I6@%DzYBpSDV5;d3 z*{yu`oqNe@1rntdJpB8ISX(=p)7rCEBqu;wH>R_Ip`;4Y&>{sV&z|6XeJ+iV00YFu z^A~gH4R=%fB-saK#J^~@!y51nf$WFroE@+`k>Ng-&w<;%bLA}7zT zQdp5mX1US@W|lVqhVjo6f2VHi+!JI@dCr_J5F2Jebj71nffRy}GdH`5dk=ku)pM&T zBVgI2vWj+_IB;m+kk*}6C=$mIsB3ICK%mck0t3RlZ!pw|y+65=nV(eJuaI z`Yfx@pTOnm>WHV2gm)UdkrJj#*Tqe}dU=*;+6<>V5B=^S2M*sy-P9Oh4v$P8&m{I9k!xtXA_8kk#8j4EoCr~rB@aLNeGck7%v5s}WtpL7V1EoXMVXYz zMnFt;M3K|3YbGOt_Jun2eM)H)mhxJoDrhQbn#uZ>98a|(y4K8@UD%vSnCBHXK* zWv*Ha+qd!d+ipqfWsIcsCA#BrBg(k4ih45X8`kit5Xe=9r6N?#&fxA@I$y%Ljk@Cv zjCYzZ6V>J!irEs62t!Mqg7%+JJowQg5pi{0*OJ24A2tN_0DWKG!ig+cJ^4aC{KG+I zsDM@#{Q901yZ!^$tUnpi@WCi`ZCRH4!VKK7!Y~ySb>NjzhG8;HLSa}KRt6T9Q?9@i zL?ofI2uy*6Q$#_aV?o>m@Z9IM{?Pc|Ki>MX98TZ*v1?vAC-VORIPM8<^^I9o00000 LNkvXXu0mjf;u0X? literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation.png b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation.png new file mode 100644 index 0000000000000000000000000000000000000000..eee1001c248f2dd3c0bd0016489a9676fe5e4c0f GIT binary patch literal 881 zcmV-%1CIQOP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^n` z4g()melqz000QwzL_t(I%Waa)YusfJ$3M?+e@S*XyKT+J#1(wcL3{GisDkJrSP*lOCJ`*fXlfDhB`pzcvNg>MX_C$Uo@ZV>Y;tp8 zm|XRpcX3745jE5e5ku7wGt8VMj-z3BSK1%F_25>Rm|m@C!Kaqi z;)t2Ks3WR~b(=-^T)IOfAv%^|f8?j9U)2X_a$v73QA zUhS)K{KGl!yt!P>Rou_cES>XR|ukHrw5>%9AO0N4iCuQpAb^hIqG-^3(+d>`!Sq6vtbJlkfr4Z=J z122vaAZnOFF8c}t*ES<3o@p|1uEmLGn{1`)w2OkXKP>awlTCJtND^cD#-jIBTD?|o z9mw}l;ZCF0!^F83wMx$T>?ID}bA|H3euf?qzS;T*bs<_pGY!wbUJU#(zc8NfqXO92 zNxboNlQT2dc;!fg+4fa_{B8zHfsRI^Ml#PZbI)pd@Dg`ty2sfa8nqtI%(SSNOMLPD zGUiJ3L=h4igpJ(|Ub_DnC!abM+MPD3h-CW@1F*537(3czyHH*|d<)SNYDS|nNT-O5 z4v%u=t|$2V(pQKGqKVwh5i=ZU)N?+YZE>KS^X2&^>JJHx@*r=HzRkk*KN;#DVsUkm z3zyH6H!2jdLzbkA(ZO%*3S&oar6b)93XlA?zR1O^^V~ahAHxTmO#k*R>)Y!ji6l+r zj)o#?sPy%6?D2++r10{i4HnmacgsB#vE!f5eHs>5uJFL^4|8^Yl9HE58c8CAljFbC zLzYb~EbWXC+*OpMPNn{L-*aQ_n|{6U6Cq@DQipbIlZO&Tiu4cGSzTUP4gl|baY4!wQhW00000NkvXX Hu0mjfA_kdb literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation_32.png b/src/main/java/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation_32.png new file mode 100644 index 0000000000000000000000000000000000000000..c253439bd781138517e8133632a95e1361cefacf GIT binary patch literal 1740 zcmV;-1~d7IP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^n` z4gxUev_9bg00vA+L_t(o!_Al9Z(K(e$3JuT?yl`PP8>VbaZBo|t&n08XruzAiK&Px z-U_@_w51^6iAp?F;)w^82VRQAUjUH+l?o#9!zHLl4N=onDMX0U1Se6NrcqKgmfP6f zIQH({JLeo8X72Uf^-2f{5Gza9XJ+o4GvD()-!m8fAAUy{?0@d_@X-YTTru#olQ$n$ zwRu&WFf&vQHBeK`h;|q^tk<@RZ5G#Sc)yspa@_|8U;NRxW={j8MF55KPFGFMT;+wh zkq+2AJWUlbdIB*u#0;}yjUlSmtk))0WgghsAHYPXtM<$nCS2wX!XKDXB*^;5;zY5+ zO1oI&;#gQQTumaTuPx4&ug@F{_OAtih4_cG$I=-V6#L=CFYK zR%ew)l5cEgh7s~fd~P`DoeM!k+mv-#k9;r4=mrI#XxNo@p7FhhfAAkIyK76Uj5JeB z4Xr?sP$8HWx&ANIy_t(?vxw9n4#dcsX~K_>-=JP|K`2~BFd~?)GBD`>>X@i;Xm$)L zda?AOcoNfdewHeEpFr0Dk_; zBF@3npPL#8@h@Ht^G_ZeJb!g@l{8J!=xehM5K~Z8f&*uRVFuyy@@3vxc^ef02OqMA znsRKRiC2vhu81gxaceyz0k-a3!C`#+=-0lPGy2m$9oP^M2Q=zQdGcmG!2!>oT%?np zr`vdw#?UaT9x=s@Do&NRZVPIHiXtY63ZjadAg1ixEr_ahI@^v&t2LSSa6mPxUPyxL z%O?&<6iKc#wtWZFGxr8(gcB=eoKK7{xz!_><@971mS~iv<4b{@y z2sY*zqtkBV3#gsoH3TE7h!v8~!> zxvkjcX)(lUFVwBhBljO7NfI26x8Hw@v+uqc0=4j79|shR-LP=j zs3*K|s=@&WzkKaImexBAHw_^W?Y5DV{hGIMDUVR}S3C_?8-?g2&_4bNtdD zIdk>(GFf+y-^ECC3kIyLuWDE#tYapyys06S5WvGFKxi=o&JBArtTe^)Ie110A zS8lXe&vK*@nJ*y?YjT_Uh2OH4ukp~#XBnyw^UjA?IC0^4xVB3y(L$`PPY2Axy?wZz zIBesFTdUQ2Zn#NO11l7t0H+A%jm$b6`};ggYfC(~?@PRN_7CKe2i;J`ixd(ZwLp3T zxY?}NCZ0WV(JX$L6sQy$p=y{@w(VMD*H|qynOx9(woCQOjwV4WLP!n*8kZf^_QbL3( z@ewkGyno=4M1mj@n^7_(Lz1E3@IaeI$n4;cK`2VKLV3L8-gEA`E?PxftYg1$rtjf< zKJYyNCtk);M)}$6iwZCWN`YyL7mYiq_s0%+u(`dyv>bgLU0Sd}1BhTo;qJFm^WM#; z{|wl8vK^0|TXyVTye_2KvZ$e#fb4zDl9qE_%_uiv

mnlBL{yYg+RXeM5kE$VXe$iEowc_Yv{(d_F(V%m){L5-_vF%$^X!(OP?^X*NvL+^klsk0Jm7Qp&MX zYDH`9777L5Fbua;D*4Rpmdj;dYwcDl6`z^iTCL`5tph3LFM=PqFO^bPk6GuddcB@J d?2G?f-vNG>d8dgYlNJB~002ovPDHLkV1lwF2DktK literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/basket_32.png b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/basket_32.png new file mode 100644 index 0000000000000000000000000000000000000000..8c77bf1b7d6e416baf1cd7e883f3179ad6962e03 GIT binary patch literal 1183 zcmV;Q1YrA#P)q`;Qyl?}F`9=ejc9>?YwpK-WVB5WPU8 z-$`IUIXL*r{39c<>+|ooS?HH79bsGeWQZWN0053Xs!;{EZE$OwzI7xkYLwx_70WN_Ix zruV)WRIAl9L{w4LXRWmm5hMgsnE;^S1kH1c;h7oCjD%dndR2W%RVy7G9jAis?(WLm z+}tS<=~LCudU|?J1Hjp{XCv=DHf-2X0)S$%7y&?UZ*K_zW@ct0?>)9|-C6>G>FMbR z0CKrp2>^~BJsJT(e}8`o0FE3v5;^A}BJbuyNzY%O_5pxXR2cz4w8t`g%W8e^Vb*k3|GTRP#7V z(nax!8bm}ds_NyDk&%l)T_yD19}|&b0K9qg=F>AXGZ8a4cx;Sm@K{7JFfdR8fWwCm zM?{37p`j8096EF;GR9!Xjvb{W#OcY&$yb@VPef+ZxV1{i%(KZU`tIi8gXRDLh{$Uq z0`Gk>9jo1j)6>%}VHnx zn3!0{%x|dbY<n9`^|yWe`Y>jzvhlFqN%B=tE#&C5#5g0$HvB1FR4JH x!rRPzE&ZRTHGQe)ZkVRIYa%jqhiw1*_BYTOo*IfqrfC2G002ovPDHLkV1kS%Hp&11 literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/cog.png b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/cog.png new file mode 100644 index 0000000000000000000000000000000000000000..46f1d133239b7a03a5cdfeb1274cf4cc238c47c0 GIT binary patch literal 844 zcmV-S1GD^zP)52sz2XvQV6x#Y_B03PSM*B__d)88hGeP4?1F-7bCL zJ-qNdyuS~_{~({wZxYcLQc4IRP_NggW@cvo`Y(??O)SfLC8g||n3(uEm&@&^QmN;f zropytRIAkyAq1CF{=^vjZgzII4gktiaX1`)qpIp+E|+^Pr9>bQKp+snKV6J7#@;0o zi7D50^D8SWTC)SovcA`K{nw$PA?A4=PEJl>7)HY|3-9QnwHj`2ZXl&ZdwV-HO+zRY!ok4-j*pKQP1DQ(0L$m| zzZ227M1;P+J{X1p$8k_76#l4GDlY&a7z}1dMn=++NCdT74cpt>AR-VER4FA=sT88o zC~CD@v$EqjFX!jyF9EiUIuKUTo zg%I$4AHMH5c|-(N2m#x+K|~lB7(hH8M@L5oIOo4*GMN{usxrn{wyUcPj4|BZ-C=!w z9Yh2n#J`WUy1F_Zi^blLjg3WJ*M;LaxVX3g5uvlQ6P$Bsnufi-JroLs%-Y)8A^-$F ziWy_?Mn^}Vg~MSq8Vx9lf|iyRw6?ZF*L8$KA!wS0L?VH+v$J$EnZ*A7{*D3wL^RAf ze-@9&A%wv0?k;X`ZyUO#)in+PDO(8_n&YtH@WwY7O?EC@I WQknobVLd-Odwc)NId9>dgNPu6fc2h;{(11=!AD=~Pybc| zobz9C&i_b6$TZG5gb+V|i@z@t=9>?pa3qH%QRJ0O%)_K=e&=I z{z60pmo8oMeKi3I4#2+RG}PVQeF^{=W2WScF{IOJq|<3r87sIDqD4^@5K%)inH)HO z{(KgRECN>WKp=p+x;p7RbnDiwQ&Is5EX|S!Cb-+}Mq67ODk>@w0~4b@dvL$Fr&e>~=doefoq%BJmp`#4lVf7g}3e;cz&xe*JpP%*-Gj zkC!mUzT2^5$Bz#lJct8;BEkFn`**JFnZ2p038kf_0ANb}?%g|Rng+Mq4IzY?3qlAp z07X%-w6p}nFtBmsMmQV}XqpC1(;$REI2^`@41V7!;(GfCL z%S^(quC5|QQTm9erKF?;e!m}#u`Ci&fy^yX6a|{5nFQXye~*EIft=tu2}ly0^S=7} z`j(1{3X^~&F*i4dsi`R}E-soqp`xM!rKP1=(GwARdU}vbrLw>QK)HMO?mi;Am)TYU zpt-pjLWora#>dBD7{*UTbYyvX`91*HY_{KV&d*j=Rr%}d>!E2HbX_;EPoF-;n>TN= zS~n3vXN;NIZZ)sh3sqIk8t0rN7K_0!jGvOpySsZI5#4KQYC=s-O;(e!cDraaiuw8Z9}XQl)SYYV+S}WI zC@wAzZ{4~Tx~{`!vt?bSojrT@X9ZR!n3+u0%$Bt-lWlQv5vr>8=K==+&iVa?g@sj7 zTKh#Vzp9i!9|7xg>!i!KtiWFrm};%*d`rIMbUKktCU<>7f!{lw&YXa`h;q)Mbar;` zV~pL)>~NKpm1Yl+IWRjri)b|ZiZS-< zxs#QEW))tE;p2u%Ms->(;G9ZEY=lJ|8M8D^XNb zWHuiwiP_m%yn6KtMAW)v%N7g`4L!_DzzXhixv*{9HmGX$p-D=cYw%=tL664+o6Ux| zZ{I=)(HaZ}F+4o{FpGc{-0gN_=gyt5+wEDIY|RNtA|JTC`g}gvY&MLJjzS30x@prU zJb(WDAz(R@5mB=cqM3*g35p5uIr{chG8HQiNG+7IOp6|R#t}n`}d=;un({SiWMl+HG{zYFZ8#jB%*uiO z{{EM{ckh0|82iJ>$cR=|RfW;fQ9OC_M1FLfP9~GF>FMdsb#--EyLPQP`v(RFU>F93 z5QmAVWMN^!H#Rl~zu%9WH*e+yU$q5t9XodHHs}06DwRt0^z`8Iq$m-vHAIV%+1Xq7Ki2jt>zAZ!T&)2S9`_I?<`{u7>B6`9(w^>K3JX5R? d$QfzA^*`Lg%^D28A5Q=P002ovPDHLkV1jk{U0nbG literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/error.png b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/error.png new file mode 100644 index 0000000000000000000000000000000000000000..910af47f92fdd70c9e8c841bad02d4f27cc62ed5 GIT binary patch literal 843 zcmV-R1GM~!P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^r2 z3^qAF&DXF1000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0007}Nklb87G+Pew0r|M`;6zxm{HaPWFMC8gJ-Tx|85nJCnGJ<)D2>t^(Z=g9~A#l z>~OCx^=+!c^iV&hM_wSis1goOM(M)$Z^e<8D0<{AQgWFux7BuIzEid-0fsvm3FYVeOpCJ ziKAWnG1hg+q4ivc+ZSY;F)L_p0D)jY1cH7+iE$XF66x#mSgZMt=N)0k+R|Fs?9P(p{LI!}t&3;Kw|5(Vy`wE- zLxpL&J)rpykkZ7&vyYhQeGe%NkeY@o-HSkRxyi(B0PyJKCdkcuJ27^zAtD{_x{RDk z*0U2}n+e#w5Vmv(n-`EC0CuRkNd)pEY&czY-6w*Pn)We>cMpy@l8Kp~v_LqLU38Sd zN&*^S1!fJv0-ylWU}ykDV|TC0FT=0;$gou#M7mH2BLrst`tG4%odlBxTZ==M2FL;} zF#!?+%n%|ZG!+^wM5~n28J~Q^q%|z1K*|Cs4Yn+3rNPRAr8QVDa?%7LZBA%)>L>cG VIqnGG-tYhb002ovPDHLkV1mtPc5eUx literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/error_32.png b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/error_32.png new file mode 100644 index 0000000000000000000000000000000000000000..d5336c03f4dc208916b7ba3b1f7e044f6a23aefc GIT binary patch literal 1871 zcmV-V2e9~wP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^r2 z3^oV_CX>@2HM@dakSAh-}000K6Nkl)>*k5&fCg)xb-7k+tJ&;Jcz z_s%N;klQG51#pE0Mgd-U_)BLDV4sD0_s%Q(-SuO+f6F}w*G^CU`y0Rg+~j#x;N?fR zws#L(gmzez5TXQ$9fYt2;Q5CyJ--UP^yt{|jdFKB9Dmjf`;9BV`_j9f z|M0vh@Vmc`wiigF%Cl`rM}zv{8XALZC{&wxo^3PPD8Mr>-F5B(zVX!;c==b`7MZaF zc~_F8QQrDvI>yh~!ouAhxAx_tdF&QA>le6ve8CDkq}14D`mRiZ)%or{N5 ztac;$O(C|;=OqPuetmV*(2WMQYTt5oE*>_|j^gPw^}%7Q4J?!A(J^P#{7 z_x$R(RH52`F@mV8{xUy4>?Ixi*~>fLDLNt%+#|QdI6cA>Iofhc?_;Jwui}^<=JxHD& zQ+??$#YUebFXFo6%Int*oH4*_f7rfoJ0kqnxYQYHi&hbrns_>8esVt$pVrVLNDrd) zuq7Q08q0=BI_g2vt--?xz|#+Y;eQ8Mb@OAq_QxBVg4>WNbuLzY=>}6iV@fB$r`thK z1CSp_*%Zo8SoiYvR_Pj$Aq2NQ{oqJ*%MW&+VG6`*$ghi%4psYyiHi-?nnZK|XfG4U zgSi%Geu>f#ZU&&tyYlunVS zqB&S+^|m2aU$c_tV1vBnC_jQ{Q+RelT^FsUSZxURVnBC3^P@|8&p-iND|~xgtVY#= zHI|gR@$86c?w<(5T_mNLN>7DKPnD#Uupk8Kdw71_l8z?L&s}11sS-)PJvY{VTBP{& z$s3Q~NDg(R+f77;N{>t2 zcyrf&-rTj1W0S{;l0c9F4(WR+pP^9eqOoixAt^}mt!At{J@_X8-gx}x8gP%Ka#Cul zHn0|DbMo|kbaF4yuKW-MW{=KsV0?-LT{#->Un{3xZ>!i9?j8Lf71u6sg zJazwY?Y{ze#CjRmhPW7Y^sNeoO22t_)HL@ht{Fs%s|89yEg)?VrJxKaMM{y+q1FVR z&sw>&*SaoT8KR^Zx%;)A`}$ARz?*;hCRui}ZqnT@S)tsm`URUz%7K8z{Y2Hxp!r=U zMs@LVmaH8DiRwTTl1`$Kx4&QkAps0|PTwUPIkInDGgI%I;O-}XIP^-EpPc^MPxiI} z@>GOi%ccA(3$Z$ShpbrbQ=WcgA*w;=*XMgfj&P)$#^<4XNPx)G6s0MVIqputfeh3_ zo>6M_sj+mq%^v@qex2sS!E-DMR_bi%#NnxkG`mKy?#b_TJr$?3 ztxn+H`7+e(p>bv=_aJxN)ehv2=MJuUyWq=l7dqw3k=k?l!ua>ReWXKXX70LI#jaOk zi^C@6`ZAIh&MFoXASbjl401wf?=D0E;h3rYF2dwEBFuM5L%8LbIWplmW{&4M^Zil= zUl#djaOb-~=|4|PQkzGoxIS)KuzZ@;DZeDFZS}E}Sjoiq{slOIm>)&+t<3-c002ov JPDHLkV1jz?kL>^e literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-in.png b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-in.png new file mode 100644 index 0000000000000000000000000000000000000000..2c6a9847b9139caf15ea43ecfcb799b61f3ede20 GIT binary patch literal 586 zcmV-Q0=4~#P)B=q8d9G9rTf3oL@6 zR((MP)nYb6n~=zzU__f%VcG{{P%eTmbGh)3imbi#jV-r|aM4<66sw5pkQnVabGWK^LqPBQ%q`E;YtcWn8T2R(Z$qpXM{7b@ytQ%QuV54YbWFh($;;o<2=>r#6FR=8AM z;gb_bW>pad(foPEfHA_MT{Vc2q68%X)=Fb}EXsV=;vA@RI0yGe&lM(%&DRrmTAYN2 z{;LC#0zjHBt% zn>-djaFofx=Pb=lcTa8`Pb8CQ5#V=9Ch_XNH*{^;QF%6A-%NTa#p2wTyKSB63xyRn z0O*IU!-=K2>F)GUirTt^ICbZL_5F?RwsN${g33O1?5<|Kkr1Y5jlQltr# zoCNh!(2|q21W$XjrGkfCL{EhlBw`y|NI+UD^g{$uQp*3dCa8$6Ts_j8_Cn81emhvTI~$$TANSz*&7Fx-EU!2ycr*S9=JZtxd25 zsI)Et(Xfq3*u^7p7k5(2xIUK!hy$tiTLN(KZxc8@mEKF~Q%UH4D2!Od1_~J zCP-r2K*X^S4ch>KRK~~0m)`;n0~&^)F))VsBFS(Si6H*#D*cT zlsE8=0s4I$prRM(t__a$JLzl8nFAgL{`19Y@Hfa;q|)!H{gDsLd5 zV!pF$3to7DiWq2|sN7?VMLKUG>l@)=2Jb!`a1 zvd@O*N2lMckDUZntzQ{^Nv0HrhWO&0FIUV&m4LK~6v9rhULLr$?tHDDQ^8TLYt8G; zL=Az`%LT!s*2o-M+4Bl^l@DR()~(f=#F?opFm-04LV(g7DR@2s2)4bpdGI8x>UoX1 zsjXRauFgzU2pH-cNlz|jeMG`8B94VZZ5vk111i|h&i+^#IAd73^E1;|D%efU`q~7j z&qZNwp#Twxgl#lgR$X&J)tea|VE)HqzB=vq>G^8ilkTIlzZ?N^Kmd9+wP15+GpuqOpx_B9 z)uM27E{)4KQaJzX{<_#NB)(oBfwJPst`UMqj3KVxx{I%_%;V?ZGsxr%@QXyz5O;G0 z+_;m*x$oyN^-~gtX3d^Y4EMMXM4+tEiJJqWbwpxM(AQNPkeg<(qy<314D_K75m3E2|S4UM`yhjZ($JRr0?Z0ed!dk zOGz}x+R(dWH$qJ=B=&jp=DpRw-H-s~5V7LjK}wVUaw$YQg=ljddY^qc`2UdhB@!z= zH!MIoL|ZWvgz)nC;o@mzm;QtuazF?Y9bnfA&kdP@)tVUYaZ_+lO6-FWnA1Sg@i#u4 zeYN)54JA-k|LCljf;TAW1Bw~ZEQ2~$Aou?hehrmKz)mD~-Lw7wU;i5Y1zrCpitpqP Qy#N3J07*qoM6N<$f>iTPxc~qF literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-out.png b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/magnifier-zoom-out.png new file mode 100644 index 0000000000000000000000000000000000000000..1df88307612e378e18253f1015bc9d5714daabf7 GIT binary patch literal 597 zcmV-b0;>IqP)ZG4hQ~G*00U*RQ8fm^lGh+D=jFIlnUhTl~d8gwt&RD+< zF67AwfWHat627sgeFqA!Sn%8*6afwA-wIWM@-bMD~q?*JP>E3Vf^ z9E!@2^8_WJq*S{BG}hN3T5fEa;7MvZceJ5;=TbqV1;iMPffED07~jWuKE?}>a_v+5 zHfaHb0F)Mt0nAUcF`&O?2`+acuJ_})i0cu)|FoQ79WcI}58A>N4!&0chylI2hIQv5 zw(nzk0hZ@udp_FtH;(W)xzHJ^AaUeCEp7n$K)@I(LpEUtMkg~wK0bK!xp2E97DF~I zvFmhnIA2ixW9cPwMUOo@EFx7l*__MhWQIn2jt2SA-n`ZtkHt!!O?Ln=_;U8V64Mt1 z(yFzfw2VjRAL#}&bGGT&8D_>`v${AxG_!lUdp*epz@HS0VK=X}#%uQ0U2SSo+*JsC<;v&zRY?nfrl>qh`XS+h+Q+ zGtGyicjsp&Cp!lYaPiZP7tHjUN#kaQB)a0gRwm4}BxkSueIaR~}}pC})4cqHUbt<4w94KU8uMsEpt`9F5x;-?!gnDjeIjDIIjDe}Rf znTmE|BrYTIeTV{&Lf!|UR!{irja8g8oZ0m3)MN7x4KTN;e3)!pGt;r}j|P;70-V8G z%aJ%`4s@N6vgg3}7%AlNJh*+Y$+cVSm~=fnTz%^2Pd}aP2f*LF$tU$`GaU;9I5ZT1 z`imn-oT#-N0>;Wk3SkbJ##>(vpV_YiJph@VHZ#hl08h|N)K^?tLz;?a$MAsfl?#{* zCr-n>f^#T!S?e514P1&+LvCxo>&<=S z@*lV5U2hjiI$|dBK{lTB5f`9#d|xCrL@x(SS~e4LVu0}dy~PEn)xp~PKY^_sqjtQv1J3k` zq{mkq2~j>I3cT$(uvL7E1O9K{-DUH(97ylyL4OBKAIQY=N(UK4d7lB#d!V=wYRA2= zvUZHMJE)zxVsX4}TSpjPkTc~CCqC`CSjpW%9V z4CFk9BA-L0O#I)gEw0|EVKR=~K40{k3v-udC&K*z?D`wN^M`-EiE&oI#F0V9%0;}* zWkA^u=|0QE&E*X~yHUfLout#b9sJW1Tdq=n(M zz9)qLpiY3fBfCj+Fuqraf`*v^E6kh zL_@Sg{0ku*r-t`4m0_~A7%d!>1UP7cFh9=*n}8P>lsAc;%^^cq_K7nKNnyK z$pUz8o92P!z|OcdI}z3hFGzM0k%^l_()pjhz4YSNxd-aNW=x%1ifhEvLccLtUFO=D v-s_nC;=iHSH!2nUO69p-<^Q+wKNH^ogsZz5>n^e600000NkvXXu0mjfaT1Th literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/ok.png b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/ok.png new file mode 100644 index 0000000000000000000000000000000000000000..3d93f52a3f0360cc018843d35d965cd38d9ef96b GIT binary patch literal 814 zcmV+}1JV46P)Px#24YJ`L;yDcdH^xv`Z84j000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^n; z5DGQi60vLm00OQ_L_t(I%T1Hdi`7*a#y{tKzgO|*j58C|pf-jG*(Qw2EZP+PShX;4 z(b2`E1dZ8?Ve?uQnttvii{-840n;ukcsSu!csOL9zAeukN}Q< zf8^PAw0?Lr8qJvJFe^ecL$V^4$d<7XW^JObuguKNJyip!ZC={CW7l2t+wY9*ISJu7 zLIi%(&GB$Loo@X4^AEQ#p1b&H4bVzWYhx}gUPx;<`eCjlGC4~0@L+9y6$m;}bN9ac z(s(?=+(spV8RkyTnWi15jA35lo17biJ_q+6Vr6}qvzN~x844jYY5-G4QABOZn1q{Q zG8$zb+xa;6Y}-RsB?iNP_)FK32{obukUNrN6xUv-M`JA}(e)1d79OI}nBP}^AFcmiPq_v5G z5QckTmf5~#fp~{`^;`XUr_r7&(`k$`;yWxr8Z`v!%|)`pTAVb6=;IKY57nK@ta+;Q#;t07*qoM6N<$g0b9w%>V!Z literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/ok_32.png b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/ok_32.png new file mode 100644 index 0000000000000000000000000000000000000000..dae05cd72c8b6b9f48841290b17508e751869d4c GIT binary patch literal 1665 zcmV-{27dX8P)Px#24YJ`L;yDcdH^xv`Z84j000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^n; z5DF3C5mmha00sd`L_t(o!_Ajph+S6|#((RaGc!phGn1yxwDu_=mWWbpu>_S?s#ptZ zDHKt$SWzGJAxN##iZ+52eNdZb z&ROg8Vej*2Zbtf6dM}52?m2t!wf48Z^{utxmGn8NAH6JgKDGbj{e3llaq8)R?Yi%` z-?%o~*cS>EK|~M=B9wmfbB{pE??dT+^gqH0r8#ba@-q(|JLmOHz>z(Fy<@!tA%397 zuWs8~E?IaWg7C3HjSOx4Y;f2K>kQ|yaCu?H3Seh`cogf5f9uHCcN6iOxy|#u=5<%$ zazF$^$&Gxs{(o{j@<`G<3#8%6c;@pb*Ldn@kA+;%?EldBuILd^MB72vc#R~iD$;`b zKgPw#F@|>%lE6lD6tqo4(=saAWhJU z@EDCr@%I>bw6JxNt8Tn5xv031gvyiX;51=n0f3oPM2VOEV2Y>^j?4%Jr5S|b1=MF> zL>0_bGq@X-3al&%Wi&h>E#3WqyQ7Y5C^0yccO<;~b_ApCcc@6at?LPk#S-`4@=flz z?yiK&q(yC7gKk|CD(f7ONQ>vx=~B$Y@giNJ>=1!`xKEHflbG<~-5;U$noAchW6xV| z=iOJ{%p@8VDI-Kq+eT9eglF=MNTt9l;n7`V9Y{v|)C*^MZU@T?mm;Oic-6Mc*}d~k zEYB}zZe=8zK;hE}bmB22UTcw`<=vA=8j-jkS&$-vrP*zK^7_xv=8b?TtYGEn6C6MN zpDa`w#7k2MbPp9n+H`{zB7BIshkDW~f~cLHOFNk>=Mch7m>JKV`7ie${x*gUT9LCO ze2N2|lDTqRQQmFZ`L<0Lu~aP3%CkC>c+du?&aUzPH{M1N7(#-osCeL4``J3Xi080% zT0sn{I6@%DzYBpSDV5;d3 z*{yu`oqNe@1rntdJpB8ISX(=p)7rCEBqu;wH>R_Ip`;4Y&>{sV&z|6XeJ+iV00YFu z^A~gH4R=%fB-saK#J^~@!y51nf$WFroE@+`k>Ng-&w<;%bLA}7zT zQdp5mX1US@W|lVqhVjo6f2VHi+!JI@dCr_J5F2Jebj71nffRy}GdH`5dk=ku)pM&T zBVgI2vWj+_IB;m+kk*}6C=$mIsB3ICK%mck0t3RlZ!pw|y+65=nV(eJuaI z`Yfx@pTOnm>WHV2gm)UdkrJj#*Tqe}dU=*;+6<>V5B=^S2M*sy-P9Oh4v$P8&m{I9k!xtXA_8kk#8j4EoCr~rB@aLNeGck7%v5s}WtpL7V1EoXMVXYz zMnFt;M3K|3YbGOt_Jun2eM)H)mhxJoDrhQbn#uZ>98a|(y4K8@UD%vSnCBHXK* zWv*Ha+qd!d+ipqfWsIcsCA#BrBg(k4ih45X8`kit5Xe=9r6N?#&fxA@I$y%Ljk@Cv zjCYzZ6V>J!irEs62t!Mqg7%+JJowQg5pi{0*OJ24A2tN_0DWKG!ig+cJ^4aC{KG+I zsDM@#{Q901yZ!^$tUnpi@WCi`ZCRH4!VKK7!Y~ySb>NjzhG8;HLSa}KRt6T9Q?9@i zL?ofI2uy*6Q$#_aV?o>m@Z9IM{?Pc|Ki>MX98TZ*v1?vAC-VORIPM8<^^I9o00000 LNkvXXu0mjf;u0X? literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation.png b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation.png new file mode 100644 index 0000000000000000000000000000000000000000..eee1001c248f2dd3c0bd0016489a9676fe5e4c0f GIT binary patch literal 881 zcmV-%1CIQOP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^n` z4g()melqz000QwzL_t(I%Waa)YusfJ$3M?+e@S*XyKT+J#1(wcL3{GisDkJrSP*lOCJ`*fXlfDhB`pzcvNg>MX_C$Uo@ZV>Y;tp8 zm|XRpcX3745jE5e5ku7wGt8VMj-z3BSK1%F_25>Rm|m@C!Kaqi z;)t2Ks3WR~b(=-^T)IOfAv%^|f8?j9U)2X_a$v73QA zUhS)K{KGl!yt!P>Rou_cES>XR|ukHrw5>%9AO0N4iCuQpAb^hIqG-^3(+d>`!Sq6vtbJlkfr4Z=J z122vaAZnOFF8c}t*ES<3o@p|1uEmLGn{1`)w2OkXKP>awlTCJtND^cD#-jIBTD?|o z9mw}l;ZCF0!^F83wMx$T>?ID}bA|H3euf?qzS;T*bs<_pGY!wbUJU#(zc8NfqXO92 zNxboNlQT2dc;!fg+4fa_{B8zHfsRI^Ml#PZbI)pd@Dg`ty2sfa8nqtI%(SSNOMLPD zGUiJ3L=h4igpJ(|Ub_DnC!abM+MPD3h-CW@1F*537(3czyHH*|d<)SNYDS|nNT-O5 z4v%u=t|$2V(pQKGqKVwh5i=ZU)N?+YZE>KS^X2&^>JJHx@*r=HzRkk*KN;#DVsUkm z3zyH6H!2jdLzbkA(ZO%*3S&oar6b)93XlA?zR1O^^V~ahAHxTmO#k*R>)Y!ji6l+r zj)o#?sPy%6?D2++r10{i4HnmacgsB#vE!f5eHs>5uJFL^4|8^Yl9HE58c8CAljFbC zLzYb~EbWXC+*OpMPNn{L-*aQ_n|{6U6Cq@DQipbIlZO&Tiu4cGSzTUP4gl|baY4!wQhW00000NkvXX Hu0mjfA_kdb literal 0 HcmV?d00001 diff --git a/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation_32.png b/src/main/resources/org/gcube/portlets/user/td/monitorwidget/client/resources/table-validation_32.png new file mode 100644 index 0000000000000000000000000000000000000000..c253439bd781138517e8133632a95e1361cefacf GIT binary patch literal 1740 zcmV;-1~d7IP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^n` z4gxUev_9bg00vA+L_t(o!_Al9Z(K(e$3JuT?yl`PP8>VbaZBo|t&n08XruzAiK&Px z-U_@_w51^6iAp?F;)w^82VRQAUjUH+l?o#9!zHLl4N=onDMX0U1Se6NrcqKgmfP6f zIQH({JLeo8X72Uf^-2f{5Gza9XJ+o4GvD()-!m8fAAUy{?0@d_@X-YTTru#olQ$n$ zwRu&WFf&vQHBeK`h;|q^tk<@RZ5G#Sc)yspa@_|8U;NRxW={j8MF55KPFGFMT;+wh zkq+2AJWUlbdIB*u#0;}yjUlSmtk))0WgghsAHYPXtM<$nCS2wX!XKDXB*^;5;zY5+ zO1oI&;#gQQTumaTuPx4&ug@F{_OAtih4_cG$I=-V6#L=CFYK zR%ew)l5cEgh7s~fd~P`DoeM!k+mv-#k9;r4=mrI#XxNo@p7FhhfAAkIyK76Uj5JeB z4Xr?sP$8HWx&ANIy_t(?vxw9n4#dcsX~K_>-=JP|K`2~BFd~?)GBD`>>X@i;Xm$)L zda?AOcoNfdewHeEpFr0Dk_; zBF@3npPL#8@h@Ht^G_ZeJb!g@l{8J!=xehM5K~Z8f&*uRVFuyy@@3vxc^ef02OqMA znsRKRiC2vhu81gxaceyz0k-a3!C`#+=-0lPGy2m$9oP^M2Q=zQdGcmG!2!>oT%?np zr`vdw#?UaT9x=s@Do&NRZVPIHiXtY63ZjadAg1ixEr_ahI@^v&t2LSSa6mPxUPyxL z%O?&<6iKc#wtWZFGxr8(gcB=eoKK7{xz!_><@971mS~iv<4b{@y z2sY*zqtkBV3#gsoH3TE7h!v8~!> zxvkjcX)(lUFVwBhBljO7NfI26x8Hw@v+uqc0=4j79|shR-LP=j zs3*K|s=@&WzkKaImexBAHw_^W?Y5DV{hGIMDUVR}S3C_?8-?g2&_4bNtdD zIdk>(GFf+y-^ECC3kIyLuWDE#tYapyys06S5WvGFKxi=o&JBArtTe^)Ie110A zS8lXe&vK*@nJ*y?YjT_Uh2OH4ukp~#XBnyw^UjA?IC0^4xVB3y(L$`PPY2Axy?wZz zIBesFTdUQ2Zn#NO11l7t0H+A%jm$b6`};ggYfC(~?@PRN_7CKe2i;J`ixd(ZwLp3T zxY?}NCZ0WV(JX$L6sQy$p=y{@w(VMD*H|qynOx9(