1 package org
.argeo
.eclipse
.ui
.jcr
.lists
;
3 import java
.text
.DateFormat
;
4 import java
.text
.DecimalFormat
;
5 import java
.text
.NumberFormat
;
6 import java
.text
.SimpleDateFormat
;
9 import javax
.jcr
.PropertyType
;
10 import javax
.jcr
.RepositoryException
;
11 import javax
.jcr
.Value
;
13 import org
.argeo
.eclipse
.ui
.EclipseUiException
;
14 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
16 /** Base implementation of a label provider for controls that display JCR Nodes */
17 public class SimpleJcrNodeLabelProvider
extends ColumnLabelProvider
{
18 private static final long serialVersionUID
= -5215787695436221993L;
20 private final static String DEFAULT_DATE_FORMAT
= "EEE, dd MMM yyyy";
21 private final static String DEFAULT_NUMBER_FORMAT
= "#,##0.0";
23 private DateFormat dateFormat
;
24 private NumberFormat numberFormat
;
26 final private String propertyName
;
29 * Default Label provider for a given property of a node. Using default
30 * pattern for date and number formating
32 public SimpleJcrNodeLabelProvider(String propertyName
) {
33 this.propertyName
= propertyName
;
34 dateFormat
= new SimpleDateFormat(DEFAULT_DATE_FORMAT
);
35 numberFormat
= DecimalFormat
.getInstance();
36 ((DecimalFormat
) numberFormat
).applyPattern(DEFAULT_NUMBER_FORMAT
);
40 * Label provider for a given property of a node optionally precising date
41 * and/or number format patterns
43 public SimpleJcrNodeLabelProvider(String propertyName
,
44 String dateFormatPattern
, String numberFormatPattern
) {
45 this.propertyName
= propertyName
;
46 dateFormat
= new SimpleDateFormat(
47 dateFormatPattern
== null ? DEFAULT_DATE_FORMAT
49 numberFormat
= DecimalFormat
.getInstance();
50 ((DecimalFormat
) numberFormat
)
51 .applyPattern(numberFormatPattern
== null ? DEFAULT_NUMBER_FORMAT
52 : numberFormatPattern
);
56 public String
getText(Object element
) {
58 Node currNode
= (Node
) element
;
60 if (currNode
.hasProperty(propertyName
)) {
61 if (currNode
.getProperty(propertyName
).isMultiple()) {
62 StringBuilder builder
= new StringBuilder();
63 for (Value value
: currNode
.getProperty(propertyName
)
65 String currStr
= getSingleValueAsString(value
);
66 if (notEmptyString(currStr
))
67 builder
.append(currStr
).append("; ");
69 if (builder
.length() > 0)
70 builder
.deleteCharAt(builder
.length() - 2);
72 return builder
.toString();
74 return getSingleValueAsString(currNode
.getProperty(
75 propertyName
).getValue());
78 } catch (RepositoryException re
) {
79 throw new EclipseUiException("Unable to get text from row", re
);
83 private String
getSingleValueAsString(Value value
)
84 throws RepositoryException
{
85 switch (value
.getType()) {
86 case PropertyType
.STRING
:
87 return value
.getString();
88 case PropertyType
.BOOLEAN
:
89 return "" + value
.getBoolean();
90 case PropertyType
.DATE
:
91 return dateFormat
.format(value
.getDate().getTime());
92 case PropertyType
.LONG
:
93 return "" + value
.getLong();
94 case PropertyType
.DECIMAL
:
95 return numberFormat
.format(value
.getDecimal());
96 case PropertyType
.DOUBLE
:
97 return numberFormat
.format(value
.getDouble());
98 case PropertyType
.NAME
:
99 return value
.getString();
101 throw new EclipseUiException("Unimplemented label provider "
102 + "for property type " + value
.getType()
103 + " while getting property " + propertyName
+ " - value: "
104 + value
.getString());
109 private boolean notEmptyString(String string
) {
110 return string
!= null && !"".equals(string
.trim());
113 public void setDateFormat(String dateFormatPattern
) {
114 dateFormat
= new SimpleDateFormat(dateFormatPattern
);
117 public void setNumberFormat(String numberFormatPattern
) {
118 ((DecimalFormat
) numberFormat
).applyPattern(numberFormatPattern
);