]> 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 e714756485e284368969f6c3ad5e17611619e0e3..f5a7c98d191acf9eb601a84e3cb3e71b0e259da8 100644 (file)
@@ -23,7 +23,9 @@ 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;
@@ -35,17 +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
@@ -56,15 +86,39 @@ 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;
        }
@@ -82,11 +136,19 @@ public class ResultFailedDecorator extends LabelProvider implements
                                                        .getTime());
                        } catch (RepositoryException re) {
                                throw new SlcException(
-                                               "Unexpected error defining text decoration for result", re);
+                                               "Unexpected error defining text decoration for result",
+                                               re);
                        }
                        return label + " [" + decoration + "]";
                } else
                        return null;
        }
 
+       @Override
+       public void dispose() {
+               failedFolder.dispose();
+               failedSingleResult.dispose();
+               super.dispose();
+       }
+
 }