1 package org
.argeo
.slc
.client
.ui
.decorators
;
3 import java
.text
.DateFormat
;
4 import java
.text
.SimpleDateFormat
;
7 import javax
.jcr
.RepositoryException
;
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
;
25 /** Dynamically decorates the results tree. */
26 public class ResultFailedDecorator
extends LabelProvider
implements
29 // FIXME why not use? org.eclipse.jface.viewers.DecoratingLabelProvider
31 // private final static Log log = LogFactory
32 // .getLog(ResultFailedDecorator.class);
34 private final static DateFormat dateFormat
= new SimpleDateFormat(
35 SlcUiConstants
.DEFAULT_DISPLAY_DATE_TIME_FORMAT
);
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
;
46 public ResultFailedDecorator() {
48 ImageDescriptor failedDesc
= ClientUiPlugin
.getDefault().getWorkbench()
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
)
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();
66 // Method to decorate Image
67 public Image
decorateImage(Image image
, Object object
) {
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
73 if (object
instanceof ResultParent
) {
74 if (((ResultParent
) object
).isPassed()) {
75 if (object
instanceof SingleResultNode
)
76 return passedSingleResult
;
77 else if (object
instanceof ResultFolder
)
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;
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
100 return errorSingleResult
;
102 return failedSingleResult
;
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;
118 if (node
.hasProperty(SlcNames
.SLC_COMPLETED
))
119 decoration
= dateFormat
.format(node
120 .getProperty(SlcNames
.SLC_COMPLETED
).getDate()
122 } catch (RepositoryException re
) {
123 throw new SlcException(
124 "Unexpected error defining text decoration for result",
127 return label
+ " [" + decoration
+ "]";
133 public void dispose() {
134 failedFolder
.dispose();
135 failedSingleResult
.dispose();