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
206 ContextMenuItem menuActivateIncl = new ContextMenuItem("activateInclSubs");
207 menuActivateIncl.setLabel(msgs.get("tree.config.menu.activateInclSubs"));
208 menuActivateIncl.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_right_green_double.gif");
209 menuActivateIncl.setOnclick(tree.getJavascriptTree() + ".activateNode(" + Tree.ACTION_ACTIVATE + ",true);");
210 menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot("
211 + tree.getJavascriptTree()
212 + ")");
213 menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
214 + tree.getJavascriptTree()
215 + ")");
216
217 ContextMenuItem menuDeactivate = new ContextMenuItem("deactivate");
218 menuDeactivate.setLabel(msgs.get("tree.config.menu.deactivate"));
219 menuDeactivate.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_left_red.gif");
220 menuDeactivate.setOnclick(tree.getJavascriptTree() + ".deactivateNode(" + Tree.ACTION_DEACTIVATE + ");");
221 menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot("
222 + tree.getJavascriptTree()
223 + ")");
224 menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
225 + tree.getJavascriptTree()
226 + ")");
227
228 ContextMenuItem menuExport = new ContextMenuItem("export");
229 menuExport.setLabel(msgs.get("tree.menu.export"));
230 menuExport.setIcon(request.getContextPath() + "/.resources/icons/16/export1.gif");
231 menuExport.setOnclick(tree.getJavascriptTree() + ".exportNode();");
232 menuExport.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
233 + tree.getJavascriptTree()
234 + ")");
235
236 ContextMenuItem menuImport = new ContextMenuItem("import");
237 menuImport.setLabel(msgs.get("tree.menu.import"));
238 menuImport.setIcon(request.getContextPath() + "/.resources/icons/16/import2.gif");
239 menuImport.setOnclick(tree.getJavascriptTree() + ".importNode(this);");
240 menuImport.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData("
241 + tree.getJavascriptTree()
242 + ")");
243
244
245 if (!hasAnyActiveSubscriber()) {
246 menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)");
247 menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)");
248 menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)");
249 }
250
251 menuImport.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite("
252 + tree.getJavascriptTree()
253 + ")");
254
255 menuExport.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite("
256 + tree.getJavascriptTree()
257 + ")");
258
259 if (!browseMode) {
260 tree.addMenuItem(menuNewPage);
261 tree.addMenuItem(menuNewContentNode);
262 tree.addMenuItem(menuNewNodeData);
263
264 tree.addSeparator();
265 tree.addMenuItem(menuDelete);
266
267 tree.addSeparator();
268 tree.addMenuItem(menuCut);
269 tree.addMenuItem(menuCopy);
270
271 tree.addSeparator();
272 tree.addMenuItem(menuActivateExcl);
273 tree.addMenuItem(menuActivateIncl);
274 tree.addMenuItem(menuDeactivate);
275
276 tree.addSeparator();
277 tree.addMenuItem(menuExport);
278 tree.addMenuItem(menuImport);
279 }
280 else {
281 tree.addMenuItem(ContextMenuItem.getRefreshMenuItem(tree, msgs, request));
282 }
283
284 }
285
286
287
288
289
290 @Override
291 public void prepareFunctionBar(Tree tree, boolean browseMode, HttpServletRequest request) {
292 final Messages msgs = getMessages();
293 tree.addFunctionBarItemFromContextMenu("newFolder");
294 tree.addFunctionBarItemFromContextMenu("newNode");
295 tree.addFunctionBarItemFromContextMenu("newData");
296
297 tree.addFunctionBarItem(null);
298 tree.addFunctionBarItemFromContextMenu("activate");
299 tree.addFunctionBarItemFromContextMenu("deactivate");
300
301 tree.addFunctionBarItem(null);
302
303 tree.addFunctionBarItem(FunctionBarItem.getRefreshFunctionBarItem(tree, msgs, request));
304 }
305
306 }