1 package org.argeo.eclipse.ui.jcr;
2
3 import java.util.Calendar;
4
5 import javax.jcr.Node;
6 import javax.jcr.PropertyType;
7 import javax.jcr.RepositoryException;
8
9 import org.argeo.eclipse.ui.EclipseUiException;
10 import org.argeo.eclipse.ui.jcr.lists.NodeViewerComparator;
11 import org.argeo.eclipse.ui.jcr.lists.RowViewerComparator;
12 import org.eclipse.jface.viewers.TableViewer;
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.events.SelectionAdapter;
15 import org.eclipse.swt.events.SelectionEvent;
16 import org.eclipse.swt.widgets.Table;
17
18
19 public class JcrUiUtils {
20
21
22
23
24
25
26
27
28 public static boolean setJcrProperty(Node node, String propName,
29 int propertyType, Object value) {
30 try {
31 switch (propertyType) {
32 case PropertyType.STRING:
33 if ("".equals((String) value)
34 && (!node.hasProperty(propName) || node
35 .hasProperty(propName)
36 && "".equals(node.getProperty(propName)
37 .getString())))
38
39
40 return false;
41 else if (node.hasProperty(propName)
42 && node.getProperty(propName).getString()
43 .equals((String) value))
44
45 return false;
46 else {
47 node.setProperty(propName, (String) value);
48 return true;
49 }
50 case PropertyType.BOOLEAN:
51 if (node.hasProperty(propName)
52 && node.getProperty(propName).getBoolean() == (Boolean) value)
53
54 return false;
55 else {
56 node.setProperty(propName, (Boolean) value);
57 return true;
58 }
59 case PropertyType.DATE:
60 if (node.hasProperty(propName)
61 && node.getProperty(propName).getDate()
62 .equals((Calendar) value))
63
64 return false;
65 else {
66 node.setProperty(propName, (Calendar) value);
67 return true;
68 }
69 case PropertyType.LONG:
70 Long lgValue = (Long) value;
71
72 if (lgValue == null)
73 lgValue = 0L;
74
75 if (node.hasProperty(propName)
76 && node.getProperty(propName).getLong() == lgValue)
77
78 return false;
79 else {
80 node.setProperty(propName, lgValue);
81 return true;
82 }
83
84 default:
85 throw new EclipseUiException("Unimplemented property save");
86 }
87 } catch (RepositoryException re) {
88 throw new EclipseUiException("Unexpected error while setting property",
89 re);
90 }
91 }
92
93
94
95
96
97 public static SelectionAdapter getRowSelectionAdapter(final int index,
98 final int propertyType, final String selectorName,
99 final String propertyName, final RowViewerComparator comparator,
100 final TableViewer viewer) {
101 SelectionAdapter selectionAdapter = new SelectionAdapter() {
102 private static final long serialVersionUID = -5738918304901437720L;
103
104 @Override
105 public void widgetSelected(SelectionEvent e) {
106 Table table = viewer.getTable();
107 comparator.setColumn(propertyType, selectorName, propertyName);
108 int dir = table.getSortDirection();
109 if (table.getSortColumn() == table.getColumn(index)) {
110 dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
111 } else {
112 dir = SWT.DOWN;
113 }
114 table.setSortDirection(dir);
115 table.setSortColumn(table.getColumn(index));
116 viewer.refresh();
117 }
118 };
119 return selectionAdapter;
120 }
121
122
123
124
125
126 public static SelectionAdapter getNodeSelectionAdapter(final int index,
127 final int propertyType, final String propertyName,
128 final NodeViewerComparator comparator, final TableViewer viewer) {
129 SelectionAdapter selectionAdapter = new SelectionAdapter() {
130 private static final long serialVersionUID = -1683220869195484625L;
131
132 @Override
133 public void widgetSelected(SelectionEvent e) {
134 Table table = viewer.getTable();
135 comparator.setColumn(propertyType, propertyName);
136 int dir = table.getSortDirection();
137 if (table.getSortColumn() == table.getColumn(index)) {
138 dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
139 } else {
140 dir = SWT.DOWN;
141 }
142 table.setSortDirection(dir);
143 table.setSortColumn(table.getColumn(index));
144 viewer.refresh();
145 }
146 };
147 return selectionAdapter;
148 }
149 }