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