View Javadoc

1   /**
2    * This file Copyright (c) 2003-2011 Magnolia International
3    * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10   * This file is distributed in the hope that it will be
11   * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12   * implied warranty of MERCHANTABILITY or FITNESS FOR A
13   * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14   * Redistribution, except as permitted by whichever of the GPL
15   * or MNA you select, is prohibited.
16   *
17   * 1. For the GPL license (GPL), you can redistribute and/or
18   * modify this file under the terms of the GNU General
19   * Public License, Version 3, as published by the Free Software
20   * Foundation.  You should have received a copy of the GNU
21   * General Public License, Version 3 along with this program;
22   * if not, write to the Free Software Foundation, Inc., 51
23   * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24   *
25   * 2. For the Magnolia Network Agreement (MNA), this file
26   * and the accompanying materials are made available under the
27   * terms of the MNA which accompanies this distribution, and
28   * is available at http://www.magnolia-cms.com/mna.html
29   *
30   * Any modifications to this file must keep this entire header
31   * intact.
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   * @author Philipp Bracher
54   * @version $Revision: 49513 $ ($Author: tmattsson $)
55   */
56  public class ConfigTreeConfiguration extends AbstractTreeConfiguration {
57  
58      /**
59       * @see info.magnolia.module.admininterface.AdminTreeConfiguration#prepareTree(info.magnolia.cms.gui.control.Tree,
60       * boolean, javax.servlet.http.HttpServletRequest)
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"); //$NON-NLS-1$
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")); //$NON-NLS-1$
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")); //$NON-NLS-1$
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)"); //$NON-NLS-1$
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          // todo: typeSelect.setOptions(PropertyType.TYPENAME_DATE,Integer.toString(PropertyType.DATE));
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")); //$NON-NLS-1$
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"); //$NON-NLS-1$
113         column4.setWidth(2);
114         column4.setTitle(msgs.get("tree.config.date")); //$NON-NLS-1$
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      * @see info.magnolia.module.admininterface.AdminTreeConfiguration#prepareContextMenu(info.magnolia.cms.gui.control.Tree,
131      * boolean, javax.servlet.http.HttpServletRequest)
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")); //$NON-NLS-1$
139         menuNewPage.setIcon(request.getContextPath() + "/.resources/icons/16/folder_cubes.gif"); //$NON-NLS-1$
140         menuNewPage.setOnclick(tree.getJavascriptTree() + ".createNode('" + ItemType.CONTENT.getSystemName() + "');"); //$NON-NLS-1$ //$NON-NLS-2$
141         menuNewPage.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
142             + tree.getJavascriptTree()
143             + ")"); //$NON-NLS-1$
144         menuNewPage.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotContentNode(" //$NON-NLS-1$
145             + tree.getJavascriptTree()
146             + ")"); //$NON-NLS-1$
147 
148         ContextMenuItem menuNewContentNode = new ContextMenuItem("newNode");
149         menuNewContentNode.setLabel(msgs.get("tree.config.menu.newNode")); //$NON-NLS-1$
150         menuNewContentNode.setIcon(request.getContextPath() + "/.resources/icons/16/cubes.gif"); //$NON-NLS-1$
151         menuNewContentNode.setOnclick(tree.getJavascriptTree() + ".createNode('" //$NON-NLS-1$
152             + ItemType.CONTENTNODE.getSystemName()
153             + "');"); //$NON-NLS-1$
154         menuNewContentNode.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
155             + tree.getJavascriptTree()
156             + ")"); //$NON-NLS-1$
157 
158         ContextMenuItem menuNewNodeData = new ContextMenuItem("newData");
159         menuNewNodeData.setLabel(msgs.get("tree.config.menu.newNodeData")); //$NON-NLS-1$
160         menuNewNodeData.setIcon(request.getContextPath() + "/.resources/icons/16/cube_green.gif"); //$NON-NLS-1$
161         menuNewNodeData.setOnclick(tree.getJavascriptTree() + ".createNode('" + Tree.ITEM_TYPE_NODEDATA + "');"); //$NON-NLS-1$ //$NON-NLS-2$
162         menuNewNodeData.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
163             + tree.getJavascriptTree()
164             + ")"); //$NON-NLS-1$
165 
166         ContextMenuItem menuDelete = new ContextMenuItem("delete");
167         menuDelete.setLabel(msgs.get("tree.config.menu.delete")); //$NON-NLS-1$
168         menuDelete.setIcon(request.getContextPath() + "/.resources/icons/16/delete2.gif"); //$NON-NLS-1$
169         menuDelete.setOnclick(tree.getJavascriptTree() + ".deleteNode();"); //$NON-NLS-1$
170         menuDelete.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
171             + tree.getJavascriptTree()
172             + ")"); //$NON-NLS-1$
173 
174         ContextMenuItem menuCopy = new ContextMenuItem("copy");
175         menuCopy.setLabel(msgs.get("tree.config.menu.copy")); //$NON-NLS-1$
176         menuCopy.setIcon(request.getContextPath() + "/.resources/icons/16/copy.gif"); //$NON-NLS-1$
177         menuCopy.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
178             + tree.getJavascriptTree()
179             + ")"); //$NON-NLS-1$
180         menuCopy.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
181             + tree.getJavascriptTree()
182             + ")"); //$NON-NLS-1$
183         menuCopy.setOnclick(tree.getJavascriptTree() + ".copyNode();"); //$NON-NLS-1$
184 
185         ContextMenuItem menuCut = new ContextMenuItem("move");
186         menuCut.setLabel(msgs.get("tree.config.menu.move")); //$NON-NLS-1$
187         menuCut.setIcon(request.getContextPath() + "/.resources/icons/16/up_down.gif"); //$NON-NLS-1$
188         menuCut
189             .addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" + tree.getJavascriptTree() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
190         menuCut.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
191             + tree.getJavascriptTree()
192             + ")"); //$NON-NLS-1$
193         menuCut.setOnclick(tree.getJavascriptTree() + ".cutNode();"); //$NON-NLS-1$
194 
195         ContextMenuItem menuActivateExcl = new ContextMenuItem("activate");
196         menuActivateExcl.setLabel(msgs.get("tree.config.menu.activate")); //$NON-NLS-1$
197         menuActivateExcl.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_right_green.gif"); //$NON-NLS-1$
198         menuActivateExcl.setOnclick(tree.getJavascriptTree() + ".activateNode(" + Tree.ACTION_ACTIVATE + ",false);"); //$NON-NLS-1$ //$NON-NLS-2$
199         menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
200             + tree.getJavascriptTree()
201             + ")"); //$NON-NLS-1$
202         menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
203             + tree.getJavascriptTree()
204             + ")"); //$NON-NLS-1$
205 
206         ContextMenuItem menuActivateIncl = new ContextMenuItem("activateInclSubs");
207         menuActivateIncl.setLabel(msgs.get("tree.config.menu.activateInclSubs")); //$NON-NLS-1$
208         menuActivateIncl.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_right_green_double.gif"); //$NON-NLS-1$
209         menuActivateIncl.setOnclick(tree.getJavascriptTree() + ".activateNode(" + Tree.ACTION_ACTIVATE + ",true);"); //$NON-NLS-1$ //$NON-NLS-2$
210         menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
211             + tree.getJavascriptTree()
212             + ")"); //$NON-NLS-1$
213         menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
214             + tree.getJavascriptTree()
215             + ")"); //$NON-NLS-1$
216 
217         ContextMenuItem menuDeactivate = new ContextMenuItem("deactivate");
218         menuDeactivate.setLabel(msgs.get("tree.config.menu.deactivate")); //$NON-NLS-1$
219         menuDeactivate.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_left_red.gif"); //$NON-NLS-1$
220         menuDeactivate.setOnclick(tree.getJavascriptTree() + ".deactivateNode(" + Tree.ACTION_DEACTIVATE + ");"); //$NON-NLS-1$ //$NON-NLS-2$
221         menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
222             + tree.getJavascriptTree()
223             + ")"); //$NON-NLS-1$
224         menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
225             + tree.getJavascriptTree()
226             + ")"); //$NON-NLS-1$
227 
228         ContextMenuItem menuExport = new ContextMenuItem("export");
229         menuExport.setLabel(msgs.get("tree.menu.export")); //$NON-NLS-1$
230         menuExport.setIcon(request.getContextPath() + "/.resources/icons/16/export1.gif"); //$NON-NLS-1$
231         menuExport.setOnclick(tree.getJavascriptTree() + ".exportNode();"); //$NON-NLS-1$
232         menuExport.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
233             + tree.getJavascriptTree()
234             + ")"); //$NON-NLS-1$
235 
236         ContextMenuItem menuImport = new ContextMenuItem("import");
237         menuImport.setLabel(msgs.get("tree.menu.import")); //$NON-NLS-1$
238         menuImport.setIcon(request.getContextPath() + "/.resources/icons/16/import2.gif"); //$NON-NLS-1$
239         menuImport.setOnclick(tree.getJavascriptTree() + ".importNode(this);"); //$NON-NLS-1$
240         menuImport.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
241             + tree.getJavascriptTree()
242             + ")"); //$NON-NLS-1$
243 
244         // is it possible to activate?
245         if (!hasAnyActiveSubscriber()) {
246             menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)"); //$NON-NLS-1$
247             menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)"); //$NON-NLS-1$
248             menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)"); //$NON-NLS-1$
249         }
250 
251         menuImport.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
252             + tree.getJavascriptTree()
253             + ")"); //$NON-NLS-1$
254 
255         menuExport.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
256             + tree.getJavascriptTree()
257             + ")"); //$NON-NLS-1$
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      * @see info.magnolia.module.admininterface.AdminTreeConfiguration#prepareFunctionBar(info.magnolia.cms.gui.control.Tree,
288      * boolean, javax.servlet.http.HttpServletRequest)
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         // null is separator :)
297         tree.addFunctionBarItem(null);
298         tree.addFunctionBarItemFromContextMenu("activate");
299         tree.addFunctionBarItemFromContextMenu("deactivate");
300         // null is separator :)
301         tree.addFunctionBarItem(null);
302 
303         tree.addFunctionBarItem(FunctionBarItem.getRefreshFunctionBarItem(tree, msgs, request));
304     }
305 
306 }