]> git.argeo.org Git - gpl/argeo-slc.git/blob - ResultFailedDecorator.java
9d91cc5449aa84416a888207819987c024d96299
[gpl/argeo-slc.git] / ResultFailedDecorator.java
1 package org.argeo.slc.client.ui.decorators;
2
3 import java.text.DateFormat;
4 import java.text.SimpleDateFormat;
5
6 import javax.jcr.Node;
7 import javax.jcr.RepositoryException;
8
9 import org.argeo.slc.SlcException;
10 import org.argeo.slc.SlcNames;
11 import org.argeo.slc.client.ui.ClientUiPlugin;
12 import org.argeo.slc.client.ui.SlcImages;
13 import org.argeo.slc.client.ui.SlcUiConstants;
14 import org.argeo.slc.client.ui.model.ResultFolder;
15 import org.argeo.slc.client.ui.model.ResultParent;
16 import org.argeo.slc.client.ui.model.SingleResultNode;
17 import org.eclipse.jface.resource.ImageDescriptor;
18 import org.eclipse.jface.viewers.DecorationOverlayIcon;
19 import org.eclipse.jface.viewers.IDecoration;
20 import org.eclipse.jface.viewers.ILabelDecorator;
21 import org.eclipse.jface.viewers.LabelProvider;
22 import org.eclipse.swt.graphics.Image;
23 import org.eclipse.ui.ISharedImages;
24
25 /** Dynamically decorates the results tree. */
26 public class ResultFailedDecorator extends LabelProvider implements
27 ILabelDecorator {
28
29 // FIXME why not use? org.eclipse.jface.viewers.DecoratingLabelProvider
30
31 // private final static Log log = LogFactory
32 // .getLog(ResultFailedDecorator.class);
33
34 private final static DateFormat dateFormat = new SimpleDateFormat(
35 SlcUiConstants.DEFAULT_DISPLAY_DATE_TIME_FORMAT);
36
37 // hack for SWT resource leak
38 // see http://www.eclipse.org/articles/swt-design-2/swt-design-2.html
39 // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=181215
40 private final Image passedFolder;
41 private final Image failedFolder;
42 private final Image failedSingleResult;
43 private final Image errorSingleResult;
44 private final Image passedSingleResult;
45
46 public ResultFailedDecorator() {
47 super();
48 ImageDescriptor failedDesc = ClientUiPlugin.getDefault().getWorkbench()
49 .getSharedImages()
50 .getImageDescriptor(ISharedImages.IMG_DEC_FIELD_ERROR);
51 failedFolder = new DecorationOverlayIcon(SlcImages.FOLDER, failedDesc,
52 IDecoration.TOP_LEFT).createImage();
53 passedFolder = new DecorationOverlayIcon(SlcImages.FOLDER,
54 SlcImages.EXECUTION_PASSED, IDecoration.TOP_LEFT).createImage();
55 failedSingleResult = new DecorationOverlayIcon(
56 SlcImages.PROCESS_COMPLETED, failedDesc, IDecoration.TOP_LEFT)
57 .createImage();
58 errorSingleResult = new DecorationOverlayIcon(
59 SlcImages.PROCESS_COMPLETED, SlcImages.EXECUTION_ERROR,
60 IDecoration.TOP_LEFT).createImage();
61 passedSingleResult = new DecorationOverlayIcon(
62 SlcImages.PROCESS_COMPLETED, SlcImages.EXECUTION_PASSED,
63 IDecoration.TOP_LEFT).createImage();
64 }
65
66 // Method to decorate Image
67 public Image decorateImage(Image image, Object object) {
68
69 // This method returns an annotated image or null if the
70 // image need not be decorated. Returning a null image
71 // decorates resource icon with basic decorations provided
72 // by Eclipse
73 if (object instanceof ResultParent) {
74 if (((ResultParent) object).isPassed()) {
75 if (object instanceof SingleResultNode)
76 return passedSingleResult;
77 else if (object instanceof ResultFolder)
78 return passedFolder;
79 else
80 return null;
81 } else {
82 // ImageDescriptor desc = ClientUiPlugin.getDefault()
83 // .getWorkbench().getSharedImages()
84 // .getImageDescriptor(ISharedImages.IMG_DEC_FIELD_ERROR);
85 // DecorationOverlayIcon decoratedImage = new
86 // DecorationOverlayIcon(
87 // image, desc, IDecoration.TOP_LEFT);
88 // return decoratedImage.createImage();
89 if (object instanceof SingleResultNode) {
90 SingleResultNode srn = (SingleResultNode) object;
91 boolean isError = false;
92 try {
93 isError = srn.getNode()
94 .getNode(SlcNames.SLC_AGGREGATED_STATUS)
95 .hasProperty(SlcNames.SLC_ERROR_MESSAGE);
96 } catch (RepositoryException re) {
97 // Silent node might not exist
98 }
99 if (isError)
100 return errorSingleResult;
101 else
102 return failedSingleResult;
103
104 } else
105 return failedFolder;
106 }
107 }
108 return null;
109 }
110
111 // Method to decorate Text
112 public String decorateText(String label, Object object) {
113 if (object instanceof SingleResultNode) {
114 SingleResultNode srNode = (SingleResultNode) object;
115 Node node = srNode.getNode();
116 String decoration = null;
117 try {
118 if (node.hasProperty(SlcNames.SLC_COMPLETED))
119 decoration = dateFormat.format(node
120 .getProperty(SlcNames.SLC_COMPLETED).getDate()
121 .getTime());
122 } catch (RepositoryException re) {
123 throw new SlcException(
124 "Unexpected error defining text decoration for result",
125 re);
126 }
127 return label + " [" + decoration + "]";
128 } else
129 return null;
130 }
131
132 @Override
133 public void dispose() {
134 failedFolder.dispose();
135 failedSingleResult.dispose();
136 super.dispose();
137 }
138
139 }