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.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
// 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;
}
.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();
+ }
+
}