]> git.argeo.org Git - lgpl/argeo-commons.git/blob - SimpleJcrNodeLabelProvider.java
88585c3438708d28ceee00ecd148b41175990854
[lgpl/argeo-commons.git] / SimpleJcrNodeLabelProvider.java
1 package org.argeo.eclipse.ui.jcr.lists;
2
3 import java.text.DateFormat;
4 import java.text.DecimalFormat;
5 import java.text.NumberFormat;
6 import java.text.SimpleDateFormat;
7
8 import javax.jcr.Node;
9 import javax.jcr.PropertyType;
10 import javax.jcr.RepositoryException;
11 import javax.jcr.Value;
12
13 import org.argeo.ArgeoException;
14 import org.eclipse.jface.viewers.ColumnLabelProvider;
15
16 /**
17 * Base implementation of a label provider for widgets that display JCR Rows.
18 */
19 public class SimpleJcrNodeLabelProvider extends ColumnLabelProvider {
20 private static final long serialVersionUID = -5215787695436221993L;
21
22 private final static String DEFAULT_DATE_FORMAT = "EEE, dd MMM yyyy";
23 private final static String DEFAULT_NUMBER_FORMAT = "#,##0.0";
24
25 private DateFormat dateFormat;
26 private NumberFormat numberFormat;
27
28 final private String propertyName;
29
30 /**
31 * Default Label provider for a given property of a node. Using default
32 * pattern for date and number formating
33 */
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);
39 }
40
41 /**
42 * Label provider for a given property of a node optionally precising date
43 * and/or number format patterns
44 */
45 public SimpleJcrNodeLabelProvider(String propertyName,
46 String dateFormatPattern, String numberFormatPattern) {
47 this.propertyName = propertyName;
48 dateFormat = new SimpleDateFormat(
49 dateFormatPattern == null ? DEFAULT_DATE_FORMAT
50 : dateFormatPattern);
51 numberFormat = DecimalFormat.getInstance();
52 ((DecimalFormat) numberFormat)
53 .applyPattern(numberFormatPattern == null ? DEFAULT_NUMBER_FORMAT
54 : numberFormatPattern);
55 }
56
57 @Override
58 public String getText(Object element) {
59 try {
60 Node currNode = (Node) element;
61
62 if (currNode.hasProperty(propertyName)) {
63 if (currNode.getProperty(propertyName).isMultiple()) {
64 StringBuilder builder = new StringBuilder();
65 for (Value value : currNode.getProperty(propertyName)
66 .getValues()) {
67 String currStr = getSingleValueAsString(value);
68 if (notEmptyString(currStr))
69 builder.append(currStr).append("; ");
70 }
71 if (builder.length() > 0)
72 builder.deleteCharAt(builder.length() - 2);
73
74 return builder.toString();
75 } else
76 return getSingleValueAsString(currNode.getProperty(
77 propertyName).getValue());
78 } else
79 return "";
80 } catch (RepositoryException re) {
81 throw new ArgeoException("Unable to get text from row", re);
82 }
83 }
84
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();
102 default:
103 throw new ArgeoException("Unimplemented label provider "
104 + "for property type " + value.getType()
105 + " while getting property " + propertyName + " - value: "
106 + value.getString());
107
108 }
109 }
110
111 private boolean notEmptyString(String string) {
112 return string != null && !"".equals(string.trim());
113 }
114
115 public void setDateFormat(String dateFormatPattern) {
116 dateFormat = new SimpleDateFormat(dateFormatPattern);
117 }
118
119 public void setNumberFormat(String numberFormatPattern) {
120 ((DecimalFormat) numberFormat).applyPattern(numberFormatPattern);
121 }
122 }