1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.admininterface.trees;
35
36 import info.magnolia.cms.core.ItemType;
37 import info.magnolia.cms.core.MetaData;
38 import info.magnolia.cms.gui.control.ContextMenuItem;
39 import info.magnolia.cms.gui.control.FunctionBarItem;
40 import info.magnolia.cms.gui.control.Select;
41 import info.magnolia.cms.gui.control.Tree;
42 import info.magnolia.cms.gui.control.TreeColumn;
43 import info.magnolia.cms.i18n.Messages;
44 import info.magnolia.module.admininterface.AbstractTreeConfiguration;
45
46 import javax.jcr.PropertyType;
47 import javax.servlet.http.HttpServletRequest;
48
49 import org.apache.commons.lang.StringUtils;
50
51
52
53
54
55
56 public class ConfigTreeConfiguration extends AbstractTreeConfiguration {
57
58
59
60
61
62 @Override
63 public void prepareTree(Tree tree, boolean browseMode, HttpServletRequest request) {
64 final Messages msgs = getMessages();
65
66 tree.setIconPage(Tree.ICONDOCROOT + "folder_cubes.gif");
67
68 tree.addItemType(ItemType.CONTENT.getSystemName(), false);
69 tree.addItemType(ItemType.CONTENTNODE.getSystemName(), false);
70 tree.addItemType(Tree.ITEM_TYPE_NODEDATA);
71 TreeColumn column0 = new TreeColumn(tree.getJavascriptTree(), request);
72 column0.setHtmlEdit();
73 column0.setIsLabel(true);
74 column0.setWidth(3);
75
76 TreeColumn column1 = new TreeColumn(tree.getJavascriptTree(), request);
77 column1.setName(StringUtils.EMPTY);
78 column1.setTitle(msgs.get("tree.config.value"));
79 column1.setIsNodeDataValue(true);
80 column1.setWidth(3);
81 column1.setHtmlEdit();
82
83 TreeColumn column2 = new TreeColumn(tree.getJavascriptTree(), request);
84 column2.setName(StringUtils.EMPTY);
85 column2.setTitle(msgs.get("tree.config.type"));
86 column2.setIsNodeDataType(true);
87 column2.setWidth(1);
88 Select typeSelect = new Select();
89 typeSelect.setName(tree.getJavascriptTree() + TreeColumn.EDIT_NAMEADDITION);
90 typeSelect.setSaveInfo(false);
91 typeSelect.setCssClass(TreeColumn.EDIT_CSSCLASS_SELECT);
92 typeSelect.setEvent(
93 "onblur", tree.getJavascriptTree() + ".saveNodeData(this.value,this.options[this.selectedIndex].text)");
94 typeSelect.setOptions(PropertyType.TYPENAME_STRING, Integer.toString(PropertyType.STRING));
95 typeSelect.setOptions(PropertyType.TYPENAME_BOOLEAN, Integer.toString(PropertyType.BOOLEAN));
96 typeSelect.setOptions(PropertyType.TYPENAME_LONG, Integer.toString(PropertyType.LONG));
97 typeSelect.setOptions(PropertyType.TYPENAME_DOUBLE, Integer.toString(PropertyType.DOUBLE));
98
99 column2.setHtmlEdit(typeSelect.getHtml());
100
101 TreeColumn columnIcons = new TreeColumn(tree.getJavascriptTree(), request);
102 columnIcons.setCssClass(StringUtils.EMPTY);
103 columnIcons.setTitle(msgs.get("tree.config.status"));
104 columnIcons.setWidth(1);
105 columnIcons.setIsIcons(true);
106 columnIcons.setIconsActivation(true);
107 columnIcons.setIconsPermission(true);
108
109 TreeColumn column4 = new TreeColumn(tree.getJavascriptTree(), request);
110 column4.setName(MetaData.LAST_MODIFIED);
111 column4.setIsMeta(true);
112 column4.setDateFormat("yy-MM-dd, HH:mm");
113 column4.setWidth(2);
114 column4.setTitle(msgs.get("tree.config.date"));
115
116 tree.addColumn(column0);
117
118 if (!browseMode) {
119 tree.addColumn(column1);
120 tree.addColumn(column2);
121
122 if (isAdminInstance() || hasAnyActiveSubscriber()) {
123 tree.addColumn(columnIcons);
124 }
125 tree.addColumn(column4);
126 }
127 }
128
129
130
131
132
133 @Override
134 public void prepareContextMenu(Tree tree, boolean browseMode, HttpServletRequest request) {
135 final Messages msgs = getMessages();
136
137 ContextMenuItem menuNewPage = new ContextMenuItem("newFolder");
138 menuNewPage.setLabel(msgs.get("tree.config.menu.newFolder"));
139 menuNewPage.setIcon(request.getContextPath() + "/.resources/icons/16/folder_cubes.gif");
140 menuNewPage.setOnclick(tree.getJavascriptTree() + ".createNode('" + ItemType.CONTENT.getSystemName() + "');");
141 menuNewPage.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
142 + tree.getJavascriptTree()
143 + ")");
144 menuNewPage.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotContentNode("
145 + tree.getJavascriptTree()
146 + ")");
147
148 ContextMenuItem menuNewContentNode = new ContextMenuItem("newNode");
149 menuNewContentNode.setLabel(msgs.get("tree.config.menu.newNode"));
150 menuNewContentNode.setIcon(request.getContextPath() + "/.resources/icons/16/cubes.gif");
151 menuNewContentNode.setOnclick(tree.getJavascriptTree() + ".createNode('"
152 + ItemType.CONTENTNODE.getSystemName()
153 + "');");
154 menuNewContentNode.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
155 + tree.getJavascriptTree()
156 + ")");
157
158 ContextMenuItem menuNewNodeData = new ContextMenuItem("newData");
159 menuNewNodeData.setLabel(msgs.get("tree.config.menu.newNodeData"));
160 menuNewNodeData.setIcon(request.getContextPath() + "/.resources/icons/16/cube_green.gif");
161 menuNewNodeData.setOnclick(tree.getJavascriptTree() + ".createNode('" + Tree.ITEM_TYPE_NODEDATA + "');");
162 menuNewNodeData.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
163 + tree.getJavascriptTree()
164 + ")");
165
166 ContextMenuItem menuDelete = new ContextMenuItem("delete");
167 menuDelete.setLabel(msgs.get("tree.config.menu.delete"));
168 menuDelete.setIcon(request.getContextPath() + "/.resources/icons/16/delete2.gif");
169 menuDelete.setOnclick(tree.getJavascriptTree() + ".deleteNode();");
170 menuDelete.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot("
171 + tree.getJavascriptTree()
172 + ")");
173
174 ContextMenuItem menuCopy = new ContextMenuItem("copy");
175 menuCopy.setLabel(msgs.get("tree.config.menu.copy"));
176 menuCopy.setIcon(request.getContextPath() + "/.resources/icons/16/copy.gif");
177 menuCopy.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot("
178 + tree.getJavascriptTree()
179 + ")");
180 menuCopy.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
181 + tree.getJavascriptTree()
182 + ")");
183 menuCopy.setOnclick(tree.getJavascriptTree() + ".copyNode();");
184
185 ContextMenuItem menuCut = new ContextMenuItem("move");
186 menuCut.setLabel(msgs.get("tree.config.menu.move"));
187 menuCut.setIcon(request.getContextPath() + "/.resources/icons/16/up_down.gif");
188 menuCut
189 .addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" + tree.getJavascriptTree() + ")");
190 menuCut.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
191 + tree.getJavascriptTree()
192 + ")");
193 menuCut.setOnclick(tree.getJavascriptTree() + ".cutNode();");
194
195 ContextMenuItem menuActivateExcl = new ContextMenuItem("activate");
196 menuActivateExcl.setLabel(msgs.get("tree.config.menu.activate"));
197 menuActivateExcl.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_right_green.gif");
198 menuActivateExcl.setOnclick(tree.getJavascriptTree() + ".activateNode(" + Tree.ACTION_ACTIVATE + ",false);");
199 menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot("
200 + tree.getJavascriptTree()
201 + ")");
202 menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
203 + tree.getJavascriptTree()
204 + ")");
205 menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedItemDepth("
206 + tree.getJavascriptTree() + ", 3"
207 + ")");
208
209 ContextMenuItem menuActivateIncl = new ContextMenuItem("activateInclSubs");
210 menuActivateIncl.setLabel(msgs.get("tree.config.menu.activateInclSubs"));
211 menuActivateIncl.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_right_green_double.gif");
212 menuActivateIncl.setOnclick(tree.getJavascriptTree() + ".activateNode(" + Tree.ACTION_ACTIVATE + ",true);");
213 menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot("
214 + tree.getJavascriptTree()
215 + ")");
216 menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
217 + tree.getJavascriptTree()
218 + ")");
219 menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedItemDepth("
220 + tree.getJavascriptTree() + ", 3"
221 + ")");
222
223 ContextMenuItem menuDeactivate = new ContextMenuItem("deactivate");
224 menuDeactivate.setLabel(msgs.get("tree.config.menu.deactivate"));
225 menuDeactivate.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_left_red.gif");
226 menuDeactivate.setOnclick(tree.getJavascriptTree() + ".deactivateNode(" + Tree.ACTION_DEACTIVATE + ");");
227 menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot("
228 + tree.getJavascriptTree()
229 + ")");
230 menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
231 + tree.getJavascriptTree()
232 + ")");
233 menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedItemDepth("
234 + tree.getJavascriptTree() + ", 3"
235 + ")");
236
237 ContextMenuItem menuExport = new ContextMenuItem("export");
238 menuExport.setLabel(msgs.get("tree.menu.export"));
239 menuExport.setIcon(request.getContextPath() + "/.resources/icons/16/export1.gif");
240 menuExport.setOnclick(tree.getJavascriptTree() + ".exportNode();");
241 menuExport.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
242 + tree.getJavascriptTree()
243 + ")");
244
245 ContextMenuItem menuImport = new ContextMenuItem("import");
246 menuImport.setLabel(msgs.get("tree.menu.import"));
247 menuImport.setIcon(request.getContextPath() + "/.resources/icons/16/import2.gif");
248 menuImport.setOnclick(tree.getJavascriptTree() + ".importNode(this);");
249 menuImport.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
250 + tree.getJavascriptTree()
251 + ")");
252
253
254 if (!hasAnyActiveSubscriber()) {
255 menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)");
256 menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)");
257 menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)");
258 }
259
260 menuImport.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite("
261 + tree.getJavascriptTree()
262 + ")");
263
264 menuExport.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite("
265 + tree.getJavascriptTree()
266 + ")");
267
268 if (!browseMode) {
269 tree.addMenuItem(menuNewPage);
270 tree.addMenuItem(menuNewContentNode);
271 tree.addMenuItem(menuNewNodeData);
272
273 tree.addSeparator();
274 tree.addMenuItem(menuDelete);
275
276 tree.addSeparator();
277 tree.addMenuItem(menuCut);
278 tree.addMenuItem(menuCopy);
279
280 tree.addSeparator();
281 tree.addMenuItem(menuActivateExcl);
282 tree.addMenuItem(menuActivateIncl);
283 tree.addMenuItem(menuDeactivate);
284
285 tree.addSeparator();
286 tree.addMenuItem(menuExport);
287 tree.addMenuItem(menuImport);
288 }
289 else {
290 tree.addMenuItem(ContextMenuItem.getRefreshMenuItem(tree, msgs, request));
291 }
292
293 }
294
295
296
297
298
299 @Override
300 public void prepareFunctionBar(Tree tree, boolean browseMode, HttpServletRequest request) {
301 final Messages msgs = getMessages();
302 tree.addFunctionBarItemFromContextMenu("newFolder");
303 tree.addFunctionBarItemFromContextMenu("newNode");
304 tree.addFunctionBarItemFromContextMenu("newData");
305
306 tree.addFunctionBarItem(null);
307 tree.addFunctionBarItemFromContextMenu("activate");
308 tree.addFunctionBarItemFromContextMenu("deactivate");
309
310 tree.addFunctionBarItem(null);
311
312 tree.addFunctionBarItem(FunctionBarItem.getRefreshFunctionBarItem(tree, msgs, request));
313 }
314
315 }