View Javadoc

1   /**
2    * This file Copyright (c) 2003-2014 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  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   * @author Philipp Bracher
55   * @version $Revision$ ($Author$)
56   */
57  public class ConfigTreeConfiguration extends AbstractTreeConfiguration {
58  
59      /**
60       * @see info.magnolia.module.admininterface.AdminTreeConfiguration#prepareTree(info.magnolia.cms.gui.control.Tree,
61       * boolean, javax.servlet.http.HttpServletRequest)
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"); //$NON-NLS-1$
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")); //$NON-NLS-1$
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")); //$NON-NLS-1$
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)"); //$NON-NLS-1$
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          // todo: typeSelect.setOptions(PropertyType.TYPENAME_DATE,Integer.toString(PropertyType.DATE));
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")); //$NON-NLS-1$
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"); //$NON-NLS-1$
114         column4.setWidth(2);
115         column4.setTitle(msgs.get("tree.config.date")); //$NON-NLS-1$
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      * @see info.magnolia.module.admininterface.AdminTreeConfiguration#prepareContextMenu(info.magnolia.cms.gui.control.Tree,
132      * boolean, javax.servlet.http.HttpServletRequest)
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")); //$NON-NLS-1$
140         menuNewPage.setIcon(request.getContextPath() + "/.resources/icons/16/folder_cubes.gif"); //$NON-NLS-1$
141         menuNewPage.setOnclick(tree.getJavascriptTree() + ".createNode('" + ItemType.CONTENT.getSystemName() + "');"); //$NON-NLS-1$ //$NON-NLS-2$
142         menuNewPage.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
143             + tree.getJavascriptTree()
144             + ")"); //$NON-NLS-1$
145         menuNewPage.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotContentNode(" //$NON-NLS-1$
146             + tree.getJavascriptTree()
147             + ")"); //$NON-NLS-1$
148 
149         ContextMenuItem menuNewContentNode = new ContextMenuItem("newNode");
150         menuNewContentNode.setLabel(msgs.get("tree.config.menu.newNode")); //$NON-NLS-1$
151         menuNewContentNode.setIcon(request.getContextPath() + "/.resources/icons/16/cubes.gif"); //$NON-NLS-1$
152         menuNewContentNode.setOnclick(tree.getJavascriptTree() + ".createNode('" //$NON-NLS-1$
153             + ItemType.CONTENTNODE.getSystemName()
154             + "');"); //$NON-NLS-1$
155         menuNewContentNode.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
156             + tree.getJavascriptTree()
157             + ")"); //$NON-NLS-1$
158 
159         ContextMenuItem menuNewNodeData = new ContextMenuItem("newData");
160         menuNewNodeData.setLabel(msgs.get("tree.config.menu.newNodeData")); //$NON-NLS-1$
161         menuNewNodeData.setIcon(request.getContextPath() + "/.resources/icons/16/cube_green.gif"); //$NON-NLS-1$
162         menuNewNodeData.setOnclick(tree.getJavascriptTree() + ".createNode('" + Tree.ITEM_TYPE_NODEDATA + "');"); //$NON-NLS-1$ //$NON-NLS-2$
163         menuNewNodeData.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
164             + tree.getJavascriptTree()
165             + ")"); //$NON-NLS-1$
166 
167         ContextMenuItem menuDelete = new ContextMenuItem("delete");
168         menuDelete.setLabel(msgs.get("tree.config.menu.delete")); //$NON-NLS-1$
169         menuDelete.setIcon(request.getContextPath() + "/.resources/icons/16/delete2.gif"); //$NON-NLS-1$
170         menuDelete.setOnclick(tree.getJavascriptTree() + ".deleteNode();"); //$NON-NLS-1$
171         menuDelete.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
172             + tree.getJavascriptTree()
173             + ")"); //$NON-NLS-1$
174 
175         ContextMenuItem menuCopy = new ContextMenuItem("copy");
176         menuCopy.setLabel(msgs.get("tree.config.menu.copy")); //$NON-NLS-1$
177         menuCopy.setIcon(request.getContextPath() + "/.resources/icons/16/copy.gif"); //$NON-NLS-1$
178         menuCopy.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
179             + tree.getJavascriptTree()
180             + ")"); //$NON-NLS-1$
181         menuCopy.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
182             + tree.getJavascriptTree()
183             + ")"); //$NON-NLS-1$
184         menuCopy.setOnclick(tree.getJavascriptTree() + ".copyNode();"); //$NON-NLS-1$
185 
186         ContextMenuItem menuCut = new ContextMenuItem("move");
187         menuCut.setLabel(msgs.get("tree.config.menu.move")); //$NON-NLS-1$
188         menuCut.setIcon(request.getContextPath() + "/.resources/icons/16/up_down.gif"); //$NON-NLS-1$
189         menuCut
190             .addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" + tree.getJavascriptTree() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
191         menuCut.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
192             + tree.getJavascriptTree()
193             + ")"); //$NON-NLS-1$
194         menuCut.setOnclick(tree.getJavascriptTree() + ".cutNode();"); //$NON-NLS-1$
195 
196         ContextMenuItem menuActivateExcl = new ContextMenuItem("activate");
197         menuActivateExcl.setLabel(msgs.get("tree.config.menu.activate")); //$NON-NLS-1$
198         menuActivateExcl.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_right_green.gif"); //$NON-NLS-1$
199         menuActivateExcl.setOnclick(tree.getJavascriptTree() + ".activateNode(" + Tree.ACTION_ACTIVATE + ",false);"); //$NON-NLS-1$ //$NON-NLS-2$
200         menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
201             + tree.getJavascriptTree()
202             + ")"); //$NON-NLS-1$
203         menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
204             + tree.getJavascriptTree()
205             + ")"); //$NON-NLS-1$
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")); //$NON-NLS-1$
214         menuActivateIncl.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_right_green_double.gif"); //$NON-NLS-1$
215         menuActivateIncl.setOnclick(tree.getJavascriptTree() + ".activateNode(" + Tree.ACTION_ACTIVATE + ",true);"); //$NON-NLS-1$ //$NON-NLS-2$
216         menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
217             + tree.getJavascriptTree()
218             + ")"); //$NON-NLS-1$
219         menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
220             + tree.getJavascriptTree()
221             + ")"); //$NON-NLS-1$
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")); //$NON-NLS-1$
230         menuDeactivate.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_left_red.gif"); //$NON-NLS-1$
231         menuDeactivate.setOnclick(tree.getJavascriptTree() + ".deactivateNode(" + Tree.ACTION_DEACTIVATE + ");"); //$NON-NLS-1$ //$NON-NLS-2$
232         menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
233             + tree.getJavascriptTree()
234             + ")"); //$NON-NLS-1$
235         menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
236             + tree.getJavascriptTree()
237             + ")"); //$NON-NLS-1$
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")); //$NON-NLS-1$
246         menuExport.setIcon(request.getContextPath() + "/.resources/icons/16/export1.gif"); //$NON-NLS-1$
247         menuExport.setOnclick(tree.getJavascriptTree() + ".exportNode();"); //$NON-NLS-1$
248         menuExport.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
249             + tree.getJavascriptTree()
250             + ")"); //$NON-NLS-1$
251 
252         ContextMenuItem menuImport = new ContextMenuItem("import");
253         menuImport.setLabel(msgs.get("tree.menu.import")); //$NON-NLS-1$
254         menuImport.setIcon(request.getContextPath() + "/.resources/icons/16/import2.gif"); //$NON-NLS-1$
255         menuImport.setOnclick(tree.getJavascriptTree() + ".importNode(this);"); //$NON-NLS-1$
256         menuImport.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotNodeData(" //$NON-NLS-1$
257             + tree.getJavascriptTree()
258             + ")"); //$NON-NLS-1$
259 
260         // is it possible to activate?
261         if (!hasAnyActiveSubscriber()) {
262             menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)"); //$NON-NLS-1$
263             menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)"); //$NON-NLS-1$
264             menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)"); //$NON-NLS-1$
265         }
266 
267         menuImport.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
268             + tree.getJavascriptTree()
269             + ")"); //$NON-NLS-1$
270 
271         menuExport.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
272             + tree.getJavascriptTree()
273             + ")"); //$NON-NLS-1$
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      * @see info.magnolia.module.admininterface.AdminTreeConfiguration#prepareFunctionBar(info.magnolia.cms.gui.control.Tree,
304      * boolean, javax.servlet.http.HttpServletRequest)
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         // null is separator :)
313         tree.addFunctionBarItem(null);
314         tree.addFunctionBarItemFromContextMenu("activate");
315         tree.addFunctionBarItemFromContextMenu("deactivate");
316         // null is separator :)
317         tree.addFunctionBarItem(null);
318 
319         tree.addFunctionBarItem(FunctionBarItem.getRefreshFunctionBarItem(tree, msgs, request));
320     }
321 
322 }