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
.ArgeoException
;
14 import org
.eclipse
.jface
.viewers
.ColumnLabelProvider
;
17 * Base implementation of a label provider for widgets that display JCR Rows.
19 public class SimpleJcrNodeLabelProvider
extends ColumnLabelProvider
{
20 private static final long serialVersionUID
= -5215787695436221993L;
22 private final static String DEFAULT_DATE_FORMAT
= "EEE, dd MMM yyyy";
23 private final static String DEFAULT_NUMBER_FORMAT
= "#,##0.0";
25 private DateFormat dateFormat
;
26 private NumberFormat numberFormat
;
28 final private String propertyName
;
31 * Default Label provider for a given property of a node. Using default
32 * pattern for date and number formating
34 public SimpleJcrNodeLabelProvider(String propertyName
) {
35 this.propertyName
= propertyName
;
36 dateFormat
= new SimpleDateFormat(DEFAULT_DATE_FORMAT
);
37 numberFormat
= DecimalFormat
.getInstance();
38 ((DecimalFormat
) numberFormat
).applyPattern(DEFAULT_NUMBER_FORMAT
);
42 * Label provider for a given property of a node optionally precising date
43 * and/or number format patterns
45 public SimpleJcrNodeLabelProvider(String propertyName
,
46 String dateFormatPattern
, String numberFormatPattern
) {
47 this.propertyName
= propertyName
;
48 dateFormat
= new SimpleDateFormat(
49 dateFormatPattern
== null ? DEFAULT_DATE_FORMAT
51 numberFormat
= DecimalFormat
.getInstance();
52 ((DecimalFormat
) numberFormat
)
53 .applyPattern(numberFormatPattern
== null ? DEFAULT_NUMBER_FORMAT
54 : numberFormatPattern
);
58 public String
getText(Object element
) {
60 Node currNode
= (Node
) element
;
62 if (currNode
.hasProperty(propertyName
)) {
63 if (currNode
.getProperty(propertyName
).isMultiple()) {
64 StringBuilder builder
= new StringBuilder();
65 for (Value value
: currNode
.getProperty(propertyName
)
67 String currStr
= getSingleValueAsString(value
);
68 if (notEmptyString(currStr
))
69 builder
.append(currStr
).append("; ");
71 if (builder
.length() > 0)
72 builder
.deleteCharAt(builder
.length() - 2);
74 return builder
.toString();
76 return getSingleValueAsString(currNode
.getProperty(
77 propertyName
).getValue());
80 } catch (RepositoryException re
) {
81 throw new ArgeoException("Unable to get text from row", re
);
85 private String
getSingleValueAsString(Value value
)
86 throws RepositoryException
{
87 switch (value
.getType()) {
88 case PropertyType
.STRING
:
89 return value
.getString();
90 case PropertyType
.BOOLEAN
:
91 return "" + value
.getBoolean();
92 case PropertyType
.DATE
:
93 return dateFormat
.format(value
.getDate().getTime());
94 case PropertyType
.LONG
:
95 return "" + value
.getLong();
96 case PropertyType
.DECIMAL
:
97 return numberFormat
.format(value
.getDecimal());
98 case PropertyType
.DOUBLE
:
99 return numberFormat
.format(value
.getDouble());
100 case PropertyType
.NAME
:
101 return value
.getString();
103 throw new ArgeoException("Unimplemented label provider "
104 + "for property type " + value
.getType()
105 + " while getting property " + propertyName
+ " - value: "
106 + value
.getString());
111 private boolean notEmptyString(String string
) {
112 return string
!= null && !"".equals(string
.trim());
115 public void setDateFormat(String dateFormatPattern
) {
116 dateFormat
= new SimpleDateFormat(dateFormatPattern
);
119 public void setNumberFormat(String numberFormatPattern
) {
120 ((DecimalFormat
) numberFormat
).applyPattern(numberFormatPattern
);