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