]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/SimpleDynamicPages.java
5de40bb506ce67aac0280f5fd13e973551215e92
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / SimpleDynamicPages.java
1 package org.argeo.cms;
2
3 import java.text.DateFormat;
4 import java.text.SimpleDateFormat;
5
6 import javax.jcr.Node;
7 import javax.jcr.NodeIterator;
8 import javax.jcr.Property;
9 import javax.jcr.PropertyIterator;
10 import javax.jcr.PropertyType;
11 import javax.jcr.RepositoryException;
12 import javax.jcr.Value;
13
14 import org.argeo.jcr.JcrUtils;
15 import org.eclipse.rap.rwt.RWT;
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.layout.GridLayout;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Control;
20 import org.eclipse.swt.widgets.Label;
21
22 public class SimpleDynamicPages implements CmsUiProvider {
23
24 @Override
25 public Control createUi(Composite parent, Node context)
26 throws RepositoryException {
27 if (context == null)
28 throw new CmsException("Context cannot be null");
29 parent.setLayout(new GridLayout(2, false));
30
31 // parent
32 if (!context.getPath().equals("/")) {
33 new CmsLink("..", context.getParent().getPath()).createUi(parent,
34 context);
35 new Label(parent, SWT.NONE).setText(context.getParent()
36 .getPrimaryNodeType().getName());
37 }
38
39 // context
40 Label contextL = new Label(parent, SWT.NONE);
41 contextL.setData(RWT.MARKUP_ENABLED, true);
42 contextL.setText("<b>" + context.getName() + "</b>");
43 new Label(parent, SWT.NONE).setText(context.getPrimaryNodeType()
44 .getName());
45
46 // children
47 // Label childrenL = new Label(parent, SWT.NONE);
48 // childrenL.setData(RWT.MARKUP_ENABLED, true);
49 // childrenL.setText("<i>Children:</i>");
50 // childrenL.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, false,
51 // false, 2, 1));
52
53 for (NodeIterator nIt = context.getNodes(); nIt.hasNext();) {
54 Node child = nIt.nextNode();
55 new CmsLink(child.getName(), child.getPath()).createUi(parent,
56 context);
57
58 new Label(parent, SWT.NONE).setText(child.getPrimaryNodeType()
59 .getName());
60 }
61
62 // properties
63 // Label propsL = new Label(parent, SWT.NONE);
64 // propsL.setData(RWT.MARKUP_ENABLED, true);
65 // propsL.setText("<i>Properties:</i>");
66 // propsL.setLayoutData(new GridData(SWT.LEAD, SWT.CENTER, false, false,
67 // 2, 1));
68 for (PropertyIterator pIt = context.getProperties(); pIt.hasNext();) {
69 Property property = pIt.nextProperty();
70
71 Label label = new Label(parent, SWT.NONE);
72 label.setText(property.getName());
73 label.setToolTipText(JcrUtils
74 .getPropertyDefinitionAsString(property));
75
76 new Label(parent, SWT.NONE).setText(getPropAsString(property));
77 }
78
79 return null;
80 }
81
82 private String getPropAsString(Property property)
83 throws RepositoryException {
84 String result = "";
85 DateFormat timeFormatter = new SimpleDateFormat("");
86 if (property.isMultiple()) {
87 result = getMultiAsString(property, ", ");
88 } else {
89 Value value = property.getValue();
90 if (value.getType() == PropertyType.BINARY)
91 result = "<binary>";
92 else if (value.getType() == PropertyType.DATE)
93 result = timeFormatter.format(value.getDate().getTime());
94 else
95 result = value.getString();
96 }
97 return result;
98 }
99
100 private String getMultiAsString(Property property, String separator)
101 throws RepositoryException {
102 if (separator == null)
103 separator = "; ";
104 Value[] values = property.getValues();
105 StringBuilder builder = new StringBuilder();
106 for (Value val : values) {
107 String currStr = val.getString();
108 if (!"".equals(currStr.trim()))
109 builder.append(currStr).append(separator);
110 }
111 if (builder.lastIndexOf(separator) >= 0)
112 return builder.substring(0, builder.length() - separator.length());
113 else
114 return builder.toString();
115 }
116 }