X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=plugins%2Forg.argeo.slc.client.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdecorators%2FResultFailedDecorator.java;h=f5a7c98d191acf9eb601a84e3cb3e71b0e259da8;hb=0dcc341dafa9c72011b01491bfa8631b4e71ede2;hp=64c759b77db6f8edbe66831f83aa86992d6a0d54;hpb=d50c0fe50cd69947bc7146991afa0826a8c8f53b;p=gpl%2Fargeo-slc.git diff --git a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/decorators/ResultFailedDecorator.java b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/decorators/ResultFailedDecorator.java index 64c759b77..f5a7c98d1 100644 --- a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/decorators/ResultFailedDecorator.java +++ b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/decorators/ResultFailedDecorator.java @@ -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. @@ -15,8 +15,20 @@ */ 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(); + } + }