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