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.Tree;
41  import info.magnolia.cms.gui.control.TreeColumn;
42  import info.magnolia.cms.i18n.Messages;
43  import info.magnolia.module.admininterface.AbstractTreeConfiguration;
44  
45  import javax.servlet.http.HttpServletRequest;
46  
47  
48  /**
49   * @author Philipp Bracher
50   * @version $Revision$ ($Author$)
51   */
52  public class WebsiteTreeConfiguration extends AbstractTreeConfiguration {
53  
54      /**
55       * @see info.magnolia.module.admininterface.AdminTreeConfiguration#prepareTree(info.magnolia.cms.gui.control.Tree,
56       * boolean, javax.servlet.http.HttpServletRequest)
57       */
58      @Override
59      public void prepareTree(final Tree tree, boolean browseMode, HttpServletRequest request) {
60          final Messages msgs = getMessages();
61  
62          tree.setIconOndblclick("mgnlTreeMenuItemOpen(" + tree.getJavascriptTree() + ");");
63  
64          tree.addItemType(ItemType.CONTENT.getSystemName(), false);
65          tree.addIcon(ItemType.DELETED_NODE_MIXIN, "/.resources/icons/16/document_deleted.gif");
66  
67          TreeColumn column0 = TreeColumn.createLabelColumn(tree, msgs.get("tree.web.page"), true);
68          column0.setWidth(3);
69  
70          TreeColumn columnIcons = TreeColumn.createActivationColumn(tree, msgs.get("tree.web.status"));
71          columnIcons.setIconsPermission(true);
72  
73          TreeColumn column1 = TreeColumn.createNodeDataColumn(tree, msgs.get("tree.web.title"), "title", true);
74          column1.setWidth(2);
75  
76          TreeColumn column2 = new TemplateColumn(tree.getJavascriptTree(), request);
77          column2.setName(MetaData.TEMPLATE);
78          column2.setIsMeta(true);
79          column2.setWidth(2);
80          column2.setTitle(msgs.get("tree.web.template")); //$NON-NLS-1$
81          // must render this column specially
82          column2.setHtmlRenderer(new TemplateTreeColumnHtmlRenderer());
83  
84          // todo: key/value -> column2.addKeyValue("sampleBasic","Samples: Basic Template");
85          // todo: preselection (set on createPage)
86  
87          TreeColumn column3 = TreeColumn.createMetaDataColumn(tree, msgs.get("tree.web.date"), MetaData.LAST_MODIFIED, "yy-MM-dd, HH:mm");
88          column3.setWidth(2);
89  
90          tree.addColumn(column0);
91  
92          if (!browseMode) {
93              tree.addColumn(column1);
94              if (isAdminInstance() || hasAnyActiveSubscriber()) {
95                  tree.addColumn(columnIcons);
96              }
97              tree.addColumn(column2);
98              tree.addColumn(column3);
99          }
100 
101     }
102 
103     /**
104      * @see info.magnolia.module.admininterface.AdminTreeConfiguration#prepareContextMenu(info.magnolia.cms.gui.control.Tree,
105      * boolean, javax.servlet.http.HttpServletRequest)
106      */
107     @Override
108     public void prepareContextMenu(Tree tree, boolean browseMode, HttpServletRequest request) {
109         final Messages msgs = getMessages();
110         ContextMenuItem menuOpen = new ContextMenuItem("open");
111         menuOpen.setLabel(msgs.get("tree.web.menu.open")); //$NON-NLS-1$
112         menuOpen.setIcon(request.getContextPath() + "/.resources/icons/16/document_plain_earth.gif"); //$NON-NLS-1$
113         menuOpen.setOnclick("mgnlTreeMenuItemOpen(" + tree.getJavascriptTree() + ");"); //$NON-NLS-1$ //$NON-NLS-2$
114         menuOpen.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
115                 + tree.getJavascriptTree()
116                 + ")"); //$NON-NLS-1$
117 
118         ContextMenuItem menuNewPage = new ContextMenuItem("new");
119         menuNewPage.setLabel(msgs.get("tree.web.menu.new")); //$NON-NLS-1$
120         menuNewPage.setIcon(request.getContextPath() + "/.resources/icons/16/document_plain_earth_add.gif"); //$NON-NLS-1$
121 
122         menuNewPage.setOnclick(tree.getJavascriptTree() + ".createNode('" + ItemType.PAGE.getSystemName() + "');"); //$NON-NLS-1$ //$NON-NLS-2$
123         menuNewPage.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
124                 + tree.getJavascriptTree()
125                 + ")"); //$NON-NLS-1$
126         menuNewPage.addJavascriptCondition("new mgnlTreeMenuItemConditionNotDeleted(" + tree.getJavascriptTree() + ")");
127 
128         ContextMenuItem menuDelete = new ContextMenuItem("delete");
129         menuDelete.setLabel(msgs.get("tree.web.menu.delete")); //$NON-NLS-1$
130         menuDelete.setIcon(request.getContextPath() + "/.resources/icons/16/delete2.gif"); //$NON-NLS-1$
131         menuDelete.setOnclick(tree.getJavascriptTree() + ".deleteNode("+(!isEnableDeleteConfirmation()) +");"); //$NON-NLS-1$
132         menuDelete.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
133                 + tree.getJavascriptTree()
134                 + ")"); //$NON-NLS-1$
135         menuDelete.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
136                 + tree.getJavascriptTree()
137                 + ")"); //$NON-NLS-1$
138         menuDelete.addJavascriptCondition("new mgnlTreeMenuItemConditionNotDeleted(" + tree.getJavascriptTree() + ")");
139 
140         ContextMenuItem menuMove = new ContextMenuItem("move");
141         menuMove.setLabel(msgs.get("tree.web.menu.move")); //$NON-NLS-1$
142         menuMove.setIcon(request.getContextPath() + "/.resources/icons/16/up_down.gif"); //$NON-NLS-1$
143         menuMove.setOnclick(tree.getJavascriptTree() + ".cutNode();"); //$NON-NLS-1$
144         menuMove.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
145                 + tree.getJavascriptTree()
146                 + ")"); //$NON-NLS-1$
147         menuMove.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
148                 + tree.getJavascriptTree()
149                 + ")"); //$NON-NLS-1$
150         menuMove.addJavascriptCondition("new mgnlTreeMenuItemConditionNotDeleted(" + tree.getJavascriptTree() + ")");
151 
152         ContextMenuItem menuCopy = new ContextMenuItem("copy");
153         menuCopy.setLabel(msgs.get("tree.web.menu.copy")); //$NON-NLS-1$
154         menuCopy.setIcon(request.getContextPath() + "/.resources/icons/16/copy.gif"); //$NON-NLS-1$
155         menuCopy.setOnclick(tree.getJavascriptTree() + ".copyNode();"); //$NON-NLS-1$
156         menuCopy.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
157                 + tree.getJavascriptTree()
158                 + ")"); //$NON-NLS-1$
159         menuCopy.addJavascriptCondition("new mgnlTreeMenuItemConditionNotDeleted(" + tree.getJavascriptTree() + ")");
160 
161         ContextMenuItem menuVersions = new ContextMenuItem("versions");
162         menuVersions.setLabel(msgs.get("versions")); //$NON-NLS-1$
163         menuVersions.setIcon(request.getContextPath() + "/.resources/icons/16/elements1.gif"); //$NON-NLS-1$
164         menuVersions.setOnclick("mgnl.admininterface.WebsiteTree.showVersions(" + tree.getJavascriptTree() + ");"); //$NON-NLS-1$ //$NON-NLS-2$
165         menuVersions.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
166                 + tree.getJavascriptTree()
167                 + ")"); //$NON-NLS-1$
168 
169         ContextMenuItem menuActivateExcl = new ContextMenuItem("activate");
170         menuActivateExcl.setLabel(msgs.get("tree.web.menu.activate")); //$NON-NLS-1$
171         menuActivateExcl.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_right_green.gif"); //$NON-NLS-1$
172 
173         menuActivateExcl.setOnclick(tree.getJavascriptTree() + ".activateNode(" + Tree.ACTION_ACTIVATE + ",false);"); //$NON-NLS-1$ //$NON-NLS-2$
174         menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
175                 + tree.getJavascriptTree()
176                 + ")"); //$NON-NLS-1$
177         menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
178                 + tree.getJavascriptTree()
179                 + ")"); //$NON-NLS-1$
180 
181         ContextMenuItem menuActivateIncl = new ContextMenuItem("activateInclSubs");
182         menuActivateIncl.setLabel(msgs.get("tree.web.menu.activateInclSubs")); //$NON-NLS-1$
183         menuActivateIncl.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_right_green_double.gif"); //$NON-NLS-1$
184         menuActivateIncl.setOnclick(tree.getJavascriptTree() + ".activateNode(" + Tree.ACTION_ACTIVATE + ",true);"); //$NON-NLS-1$ //$NON-NLS-2$
185         menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
186                 + tree.getJavascriptTree()
187                 + ")"); //$NON-NLS-1$
188         menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
189                 + tree.getJavascriptTree()
190                 + ")"); //$NON-NLS-1$
191         menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionNotDeleted(" + tree.getJavascriptTree() + ")");
192 
193         ContextMenuItem menuDeactivate = new ContextMenuItem("deactivate");
194         menuDeactivate.setLabel(msgs.get("tree.web.menu.deactivate")); //$NON-NLS-1$
195         menuDeactivate.setIcon(request.getContextPath() + "/.resources/icons/16/arrow_left_red.gif"); //$NON-NLS-1$
196         menuDeactivate.setOnclick(tree.getJavascriptTree() + ".deactivateNode(" + Tree.ACTION_DEACTIVATE + ");"); //$NON-NLS-1$ //$NON-NLS-2$
197         menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionSelectedNotRoot(" //$NON-NLS-1$
198                 + tree.getJavascriptTree()
199                 + ")"); //$NON-NLS-1$
200         menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
201                 + tree.getJavascriptTree()
202                 + ")"); //$NON-NLS-1$
203         menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionNotDeleted(" + tree.getJavascriptTree() + ")");
204 
205         ContextMenuItem menuExport = new ContextMenuItem("export");
206         menuExport.setLabel(msgs.get("tree.menu.export")); //$NON-NLS-1$
207         menuExport.setIcon(request.getContextPath() + "/.resources/icons/16/export1.gif"); //$NON-NLS-1$
208         menuExport.setOnclick(tree.getJavascriptTree() + ".exportNode();"); //$NON-NLS-1$
209 
210         ContextMenuItem menuImport = new ContextMenuItem("import");
211         menuImport.setLabel(msgs.get("tree.menu.import")); //$NON-NLS-1$
212         menuImport.setIcon(request.getContextPath() + "/.resources/icons/16/import2.gif"); //$NON-NLS-1$
213         menuImport.setOnclick(tree.getJavascriptTree() + ".importNode(this);"); //$NON-NLS-1$
214 
215         // is there a subscriber?
216         if (!hasAnyActiveSubscriber()) {
217             menuActivateExcl.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)"); //$NON-NLS-1$
218             menuActivateIncl.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)"); //$NON-NLS-1$
219             menuDeactivate.addJavascriptCondition("new mgnlTreeMenuItemConditionBoolean(false)"); //$NON-NLS-1$
220         }
221 
222         menuImport.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
223                 + tree.getJavascriptTree()
224                 + ")"); //$NON-NLS-1$
225         menuImport.addJavascriptCondition("new mgnlTreeMenuItemConditionNotDeleted(" + tree.getJavascriptTree() + ")");
226 
227         menuExport.addJavascriptCondition("new mgnlTreeMenuItemConditionPermissionWrite(" //$NON-NLS-1$
228                 + tree.getJavascriptTree()
229                 + ")"); //$NON-NLS-1$
230         menuExport.addJavascriptCondition("new mgnlTreeMenuItemConditionNotDeleted(" + tree.getJavascriptTree() + ")");
231 
232         if (!browseMode) {
233             tree.addMenuItem(menuOpen);
234             tree.addMenuItem(menuNewPage);
235 
236             tree.addSeparator();
237             tree.addMenuItem(menuDelete);
238 
239             tree.addSeparator();
240             tree.addMenuItem(menuMove);
241             tree.addMenuItem(menuCopy);
242 
243             tree.addSeparator();
244             tree.addMenuItem(menuVersions);
245 
246             tree.addSeparator();
247             tree.addMenuItem(menuActivateExcl);
248             tree.addMenuItem(menuActivateIncl);
249             tree.addMenuItem(menuDeactivate);
250 
251             tree.addSeparator();
252             tree.addMenuItem(menuExport);
253             tree.addMenuItem(menuImport);
254         }
255         else {
256             tree.addMenuItem(ContextMenuItem.getRefreshMenuItem(tree, msgs, request));
257         }
258 
259     }
260 
261     /**
262      * @see info.magnolia.module.admininterface.AdminTreeConfiguration#prepareFunctionBar(info.magnolia.cms.gui.control.Tree,
263      * boolean, javax.servlet.http.HttpServletRequest)
264      */
265     @Override
266     public void prepareFunctionBar(Tree tree, boolean browseMode, HttpServletRequest request) {
267         tree.addFunctionBarItemFromContextMenu("open");
268         tree.addFunctionBarItemFromContextMenu("new");
269         tree.addFunctionBarItem(null);
270         tree.addFunctionBarItemFromContextMenu("activate");
271         tree.addFunctionBarItemFromContextMenu("deactivate");
272         tree.addFunctionBarItem(null);
273 
274         tree.addFunctionBarItem(FunctionBarItem.getRefreshFunctionBarItem(tree, getMessages(), request));
275 
276         tree.getFunctionBar().setSearchable(true);
277         tree.getFunctionBar().setOnSearchFunction("mgnl.admininterface.WebsiteTree.search");
278     }
279 }