]> git.argeo.org Git - gpl/argeo-slc.git/blob - swt/org.argeo.tool.devops.e4/src/org/argeo/cms/ui/jcr/PropertyLabelProvider.java
Merge remote-tracking branch 'origin/unstable' into testing
[gpl/argeo-slc.git] / swt / org.argeo.tool.devops.e4 / src / org / argeo / cms / ui / jcr / PropertyLabelProvider.java
1 package org.argeo.cms.ui.jcr;
2
3 import java.text.DateFormat;
4 import java.text.SimpleDateFormat;
5
6 import javax.jcr.Property;
7 import javax.jcr.PropertyType;
8 import javax.jcr.RepositoryException;
9 import javax.jcr.Value;
10
11 import org.argeo.eclipse.ui.EclipseUiException;
12 import org.argeo.jcr.JcrUtils;
13 import org.eclipse.jface.viewers.ColumnLabelProvider;
14 import org.eclipse.jface.viewers.ViewerCell;
15
16 /** Default basic label provider for a given JCR Node's properties */
17 public class PropertyLabelProvider extends ColumnLabelProvider {
18 private static final long serialVersionUID = -5405794508731390147L;
19
20 // To be able to change column order easily
21 public static final int COLUMN_PROPERTY = 0;
22 public static final int COLUMN_VALUE = 1;
23 public static final int COLUMN_TYPE = 2;
24 public static final int COLUMN_ATTRIBUTES = 3;
25
26 private final static String DATE_TIME_FORMAT = "dd/MM/yyyy, HH:mm";
27
28 // Utils
29 protected DateFormat timeFormatter = new SimpleDateFormat(DATE_TIME_FORMAT);
30
31 public void update(ViewerCell cell) {
32 Object element = cell.getElement();
33 cell.setText(getColumnText(element, cell.getColumnIndex()));
34 }
35
36 public String getColumnText(Object element, int columnIndex) {
37 try {
38 if (element instanceof Property) {
39 Property prop = (Property) element;
40 if (prop.isMultiple()) {
41 switch (columnIndex) {
42 case COLUMN_PROPERTY:
43 return prop.getName();
44 case COLUMN_VALUE:
45 // Corresponding values are listed on children
46 return "";
47 case COLUMN_TYPE:
48 return JcrBrowserUtils.getPropertyTypeAsString(prop);
49 case COLUMN_ATTRIBUTES:
50 return JcrUtils.getPropertyDefinitionAsString(prop);
51 }
52 } else {
53 switch (columnIndex) {
54 case COLUMN_PROPERTY:
55 return prop.getName();
56 case COLUMN_VALUE:
57 return formatValueAsString(prop.getValue());
58 case COLUMN_TYPE:
59 return JcrBrowserUtils.getPropertyTypeAsString(prop);
60 case COLUMN_ATTRIBUTES:
61 return JcrUtils.getPropertyDefinitionAsString(prop);
62 }
63 }
64 } else if (element instanceof Value) {
65 Value val = (Value) element;
66 switch (columnIndex) {
67 case COLUMN_PROPERTY:
68 // Nothing to show
69 return "";
70 case COLUMN_VALUE:
71 return formatValueAsString(val);
72 case COLUMN_TYPE:
73 // listed on the parent
74 return "";
75 case COLUMN_ATTRIBUTES:
76 // Corresponding attributes are listed on the parent
77 return "";
78 }
79 }
80 } catch (RepositoryException re) {
81 throw new EclipseUiException("Cannot retrieve prop value on " + element, re);
82 }
83 return null;
84 }
85
86 private String formatValueAsString(Value value) {
87 // TODO enhance this method
88 try {
89 String strValue;
90
91 if (value.getType() == PropertyType.BINARY)
92 strValue = "<binary>";
93 else if (value.getType() == PropertyType.DATE)
94 strValue = timeFormatter.format(value.getDate().getTime());
95 else
96 strValue = value.getString();
97 return strValue;
98 } catch (RepositoryException e) {
99 throw new EclipseUiException("unexpected error while formatting value", e);
100 }
101 }
102 }