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=7878f85a25977a893aeba405dd0c87f28b1f0420;hpb=9aa71322cd6bc61cd7da179ed21e3bcbefb21cff;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 7878f85a2..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. @@ -23,6 +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; @@ -34,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( - "yyyy-MM-dd HH:mm"); + 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 @@ -55,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; } @@ -81,11 +136,19 @@ public class ResultFailedDecorator extends LabelProvider implements .getTime()); } catch (RepositoryException re) { throw new SlcException( - "Unexpected 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(); + } + }