]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/decorators/ResultFailedDecorator.java
Update decorators to show more explicitly PASSED / FAILED / ERROR status in the Resul...
[gpl/argeo-slc.git] / plugins / org.argeo.slc.client.ui / src / main / java / org / argeo / slc / client / ui / decorators / ResultFailedDecorator.java
index 64c759b77db6f8edbe66831f83aa86992d6a0d54..f5a7c98d191acf9eb601a84e3cb3e71b0e259da8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2012 Mathieu Baudier
+ * Copyright (C) 2007-2012 Argeo GmbH
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 package org.argeo.slc.client.ui.decorators;
 
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.argeo.slc.SlcException;
 import org.argeo.slc.client.ui.ClientUiPlugin;
+import org.argeo.slc.client.ui.SlcImages;
+import org.argeo.slc.client.ui.SlcUiConstants;
+import org.argeo.slc.client.ui.model.ResultFolder;
 import org.argeo.slc.client.ui.model.ResultParent;
+import org.argeo.slc.client.ui.model.SingleResultNode;
+import org.argeo.slc.jcr.SlcNames;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.DecorationOverlayIcon;
 import org.eclipse.jface.viewers.IDecoration;
@@ -25,14 +37,45 @@ import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.ISharedImages;
 
+/** Dynamically decorates the results tree. */
 public class ResultFailedDecorator extends LabelProvider implements
                ILabelDecorator {
 
+       // FIXME why not use? org.eclipse.jface.viewers.DecoratingLabelProvider
+
        // private final static Log log = LogFactory
        // .getLog(ResultFailedDecorator.class);
 
+       private final static DateFormat dateFormat = new SimpleDateFormat(
+                       SlcUiConstants.DEFAULT_DISPLAY_DATE_TIME_FORMAT);
+
+       // hack for SWT resource leak
+       // see http://www.eclipse.org/articles/swt-design-2/swt-design-2.html
+       // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=181215
+       private final Image passedFolder;
+       private final Image failedFolder;
+       private final Image failedSingleResult;
+       private final Image errorSingleResult;
+       private final Image passedSingleResult;
+
        public ResultFailedDecorator() {
                super();
+               ImageDescriptor failedDesc = ClientUiPlugin.getDefault().getWorkbench()
+                               .getSharedImages()
+                               .getImageDescriptor(ISharedImages.IMG_DEC_FIELD_ERROR);
+               failedFolder = new DecorationOverlayIcon(SlcImages.FOLDER, failedDesc,
+                               IDecoration.TOP_LEFT).createImage();
+               passedFolder = new DecorationOverlayIcon(SlcImages.FOLDER,
+                               SlcImages.EXECUTION_PASSED, IDecoration.TOP_LEFT).createImage();
+               failedSingleResult = new DecorationOverlayIcon(
+                               SlcImages.PROCESS_COMPLETED, failedDesc, IDecoration.TOP_LEFT)
+                               .createImage();
+               errorSingleResult = new DecorationOverlayIcon(
+                               SlcImages.PROCESS_COMPLETED, SlcImages.EXECUTION_ERROR,
+                               IDecoration.TOP_LEFT).createImage();
+               passedSingleResult = new DecorationOverlayIcon(
+                               SlcImages.PROCESS_COMPLETED, SlcImages.EXECUTION_PASSED,
+                               IDecoration.TOP_LEFT).createImage();
        }
 
        // Method to decorate Image
@@ -43,21 +86,69 @@ public class ResultFailedDecorator extends LabelProvider implements
                // decorates resource icon with basic decorations provided
                // by Eclipse
                if (object instanceof ResultParent) {
-                       if (!((ResultParent) object).isPassed()) {
-                               ImageDescriptor desc = ClientUiPlugin.getDefault()
-                                               .getWorkbench().getSharedImages()
-                                               .getImageDescriptor(ISharedImages.IMG_DEC_FIELD_ERROR);
-                               DecorationOverlayIcon decoratedImage = new DecorationOverlayIcon(
-                                               image, desc, IDecoration.TOP_LEFT);
-                               return decoratedImage.createImage();
-                       } else
-                               return null;
+                       if (((ResultParent) object).isPassed()) {
+                               if (object instanceof SingleResultNode)
+                                       return passedSingleResult;
+                               else if (object instanceof ResultFolder)
+                                       return passedFolder;
+                               else
+                                       return null;
+                       } else {
+                               // ImageDescriptor desc = ClientUiPlugin.getDefault()
+                               // .getWorkbench().getSharedImages()
+                               // .getImageDescriptor(ISharedImages.IMG_DEC_FIELD_ERROR);
+                               // DecorationOverlayIcon decoratedImage = new
+                               // DecorationOverlayIcon(
+                               // image, desc, IDecoration.TOP_LEFT);
+                               // return decoratedImage.createImage();
+                               if (object instanceof SingleResultNode) {
+                                       SingleResultNode srn = (SingleResultNode) object;
+                                       boolean isError = false;
+                                       try {
+                                               isError = srn.getNode()
+                                                               .getNode(SlcNames.SLC_AGGREGATED_STATUS)
+                                                               .hasProperty(SlcNames.SLC_ERROR_MESSAGE);
+                                       } catch (RepositoryException re) {
+                                               // Silent node might not exist
+                                       }
+                                       if (isError)
+                                               return errorSingleResult;
+                                       else
+                                               return failedSingleResult;
+
+                               } else
+                                       return failedFolder;
+                       }
                }
                return null;
        }
 
        // Method to decorate Text
        public String decorateText(String label, Object object) {
-               return null;
+               if (object instanceof SingleResultNode) {
+                       SingleResultNode srNode = (SingleResultNode) object;
+                       Node node = srNode.getNode();
+                       String decoration = null;
+                       try {
+                               if (node.hasProperty(SlcNames.SLC_COMPLETED))
+                                       decoration = dateFormat.format(node
+                                                       .getProperty(SlcNames.SLC_COMPLETED).getDate()
+                                                       .getTime());
+                       } catch (RepositoryException re) {
+                               throw new SlcException(
+                                               "Unexpected error defining text decoration for result",
+                                               re);
+                       }
+                       return label + " [" + decoration + "]";
+               } else
+                       return null;
        }
+
+       @Override
+       public void dispose() {
+               failedFolder.dispose();
+               failedSingleResult.dispose();
+               super.dispose();
+       }
+
 }