KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > opencms > workplace > editors > directedit > CmsDirectEditDefaultProvider


1 /*
2  * File : $Source: /usr/local/cvs/opencms/src/org/opencms/workplace/editors/directedit/CmsDirectEditDefaultProvider.java,v $
3  * Date : $Date: 2006/10/26 12:25:34 $
4  * Version: $Revision: 1.2 $
5  *
6  * This library is part of OpenCms -
7  * the Open Source Content Mananagement System
8  *
9  * Copyright (C) 2002 - 2005 Alkacon Software (http://www.alkacon.com)
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19  * Lesser General Public License for more details.
20  *
21  * For further information about Alkacon Software, please see the
22  * company website: http://www.alkacon.com
23  *
24  * For further information about OpenCms, please see the
25  * project website: http://www.opencms.org
26  *
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30  */

31
32 package org.opencms.workplace.editors.directedit;
33
34 import org.opencms.cache.CmsMemoryObjectCache;
35 import org.opencms.file.CmsFile;
36 import org.opencms.file.CmsObject;
37 import org.opencms.file.CmsProject;
38 import org.opencms.file.CmsProperty;
39 import org.opencms.file.CmsPropertyDefinition;
40 import org.opencms.i18n.CmsEncoder;
41 import org.opencms.main.CmsException;
42 import org.opencms.main.CmsLog;
43 import org.opencms.main.OpenCms;
44 import org.opencms.util.CmsMacroResolver;
45 import org.opencms.workplace.CmsWorkplace;
46 import org.opencms.workplace.editors.Messages;
47
48 import javax.servlet.jsp.JspException JavaDoc;
49 import javax.servlet.jsp.PageContext JavaDoc;
50
51 import org.apache.commons.logging.Log;
52
53 /**
54  * Provider for the OpenCms default graphical "direct edit" buttons.<p>
55  *
56  * Since OpenCms version 6.2.3,
57  * this provider is configured as the standard direct edit provider in a common OpenCms installation.<p>
58  *
59  * This provider DOES NOT support {@link CmsDirectEditMode#MANUAL} mode.<p>
60  *
61  * @author Alexander Kandzior
62  *
63  * @version $Revision: 1.2 $
64  *
65  * @since 6.2.3
66  */

67 public class CmsDirectEditDefaultProvider extends A_CmsDirectEditProvider implements I_CmsDirectEditProvider {
68
69     /** The log object for this class. */
70     private static final Log LOG = CmsLog.getLog(CmsDirectEditDefaultProvider.class);
71
72     /** Indicates the permissions for the last element the was opened. */
73     protected int m_lastPermissionMode;
74
75     /** The include file used by this provider. */
76     private String JavaDoc m_headerInclude;
77
78     /**
79      * Returns the end HTML for a disabled direct edit button.<p>
80      *
81      * @return the end HTML for a disabled direct edit button
82      */

83     public String JavaDoc endDirectEditDisabled() {
84
85         return "</div>\n<!-- EDIT BLOCK END (DISABLED) -->\n";
86     }
87
88     /**
89      * Returns the end HTML for an enabled direct edit button.<p>
90      *
91      * @return the end HTML for an enabled direct edit button
92      */

93     public String JavaDoc endDirectEditEnabled() {
94
95         return "</div>\n<!-- EDIT BLOCK END (ENABLED) -->\n";
96     }
97
98     /**
99      * Returns the direct edit include HTML to insert in the page beginning.<p> t
100      *
101      * @param params the parameters for the direct edit includes
102      *
103      * @return the direct edit include HTML to insert in the page beginning
104      */

105     public String JavaDoc getDirectEditIncludes(CmsDirectEditParams params) {
106
107         String JavaDoc closeLink = getLink(params.getLinkForClose());
108         String JavaDoc deleteLink = getLink(params.getLinkForDelete());
109         String JavaDoc titleForNew = m_messages.key(Messages.GUI_EDITOR_TITLE_NEW_0);
110         String JavaDoc skinUri = CmsWorkplace.getSkinUri();
111
112         // resolve macros in include header
113
CmsMacroResolver resolver = CmsMacroResolver.newInstance();
114         resolver.addMacro("closeLink", closeLink);
115         resolver.addMacro("deleteLink", deleteLink);
116         resolver.addMacro("titleForNew", titleForNew);
117         resolver.addMacro("skinUri", skinUri);
118
119         return resolver.resolveMacros(m_headerInclude);
120     }
121
122     /**
123      * @see org.opencms.workplace.editors.directedit.A_CmsDirectEditProvider#init(org.opencms.file.CmsObject, org.opencms.workplace.editors.directedit.CmsDirectEditMode, java.lang.String)
124      */

125     public void init(CmsObject cms, CmsDirectEditMode mode, String JavaDoc fileName) {
126
127         super.init(cms, mode, fileName);
128
129         // check if the selected include file is available in the cache
130
CmsMemoryObjectCache cache = CmsMemoryObjectCache.getInstance();
131         m_headerInclude = (String JavaDoc)cache.getCachedObject(CmsDirectEditDefaultProvider.class, m_fileName);
132
133         if (m_headerInclude == null) {
134             // the file is not available in the cache
135
try {
136                 CmsFile file = m_cms.readFile(m_fileName);
137                 // get the encoding for the resource
138
CmsProperty p = m_cms.readPropertyObject(file, CmsPropertyDefinition.PROPERTY_CONTENT_ENCODING, true);
139                 String JavaDoc e = p.getValue();
140                 if (e == null) {
141                     e = OpenCms.getSystemInfo().getDefaultEncoding();
142                 }
143                 // create a String with the right encoding
144
m_headerInclude = CmsEncoder.createString(file.getContents(), e);
145                 // store this in the cache
146
cache.putCachedObject(CmsDirectEditDefaultProvider.class, m_fileName, m_headerInclude);
147
148             } catch (CmsException e) {
149                 // this should better not happen
150
m_headerInclude = "";
151                 LOG.error(Messages.get().getBundle().key(Messages.LOG_DIRECT_EDIT_NO_HEADER_1, fileName), e);
152             }
153         }
154     }
155
156     /**
157      * @see org.opencms.workplace.editors.directedit.I_CmsDirectEditProvider#insertDirectEditEnd(javax.servlet.jsp.PageContext)
158      */

159     public void insertDirectEditEnd(PageContext JavaDoc context) throws JspException JavaDoc {
160
161         String JavaDoc content;
162         switch (m_lastPermissionMode) {
163
164             case 1: // disabled
165
content = endDirectEditDisabled();
166                 break;
167             case 2: // enabled
168
content = endDirectEditEnabled();
169                 break;
170             default: // inactive or undefined
171
content = null;
172         }
173         m_lastPermissionMode = 0;
174         print(context, content);
175     }
176
177     /**
178      * @see org.opencms.workplace.editors.directedit.I_CmsDirectEditProvider#insertDirectEditIncludes(javax.servlet.jsp.PageContext, org.opencms.workplace.editors.directedit.CmsDirectEditParams)
179      */

180     public void insertDirectEditIncludes(PageContext JavaDoc context, CmsDirectEditParams params) throws JspException JavaDoc {
181
182         print(context, getDirectEditIncludes(params));
183     }
184
185     /**
186      * @see org.opencms.workplace.editors.directedit.I_CmsDirectEditProvider#insertDirectEditStart(javax.servlet.jsp.PageContext, org.opencms.workplace.editors.directedit.CmsDirectEditParams)
187      */

188     public boolean insertDirectEditStart(PageContext JavaDoc context, CmsDirectEditParams params) throws JspException JavaDoc {
189
190         String JavaDoc content;
191         // check the direct edit permissions of the current user
192
CmsDirectEditResourceInfo resourceInfo = getResourceInfo(params.getResourceName());
193         // check the permission mode
194
m_lastPermissionMode = resourceInfo.getPermissions().getPermission();
195         switch (m_lastPermissionMode) {
196             case 1: // disabled
197
content = startDirectEditDisabled(params, resourceInfo);
198                 break;
199             case 2: // enabled
200
content = startDirectEditEnabled(params, resourceInfo);
201                 break;
202             default: // inactive or undefined
203
content = null;
204         }
205         print(context, content);
206         return content != null;
207     }
208
209     /**
210      * Returns <code>false</code> because the default provider does not support manual button placement.<p>
211      *
212      * @see org.opencms.workplace.editors.directedit.I_CmsDirectEditProvider#isManual(org.opencms.workplace.editors.directedit.CmsDirectEditMode)
213      */

214     public boolean isManual(CmsDirectEditMode mode) {
215
216         return false;
217     }
218
219     /**
220      * @see org.opencms.workplace.editors.directedit.I_CmsDirectEditProvider#newInstance()
221      */

222     public I_CmsDirectEditProvider newInstance() {
223
224         CmsDirectEditDefaultProvider result = new CmsDirectEditDefaultProvider();
225         result.m_configurationParameters = m_configurationParameters;
226         return result;
227     }
228
229     /**
230      * Returns the start HTML for a disabled direct edit button.<p>
231      *
232      * @param params the direct edit parameters
233      * @param resourceInfo contains information about the resource to edit
234      *
235      * @return the start HTML for a disabled direct edit button
236      */

237     public String JavaDoc startDirectEditDisabled(CmsDirectEditParams params, CmsDirectEditResourceInfo resourceInfo) {
238
239         String JavaDoc editId = getNextDirectEditId();
240         StringBuffer JavaDoc result = new StringBuffer JavaDoc(256);
241
242         result.append("<!-- EDIT BLOCK START (DISABLED): ");
243         result.append(params.m_resourceName);
244         result.append(" [");
245         result.append(resourceInfo.getResource().getState());
246         result.append("] ");
247         if (!resourceInfo.getLock().isNullLock()) {
248             result.append(" locked ");
249             try {
250                 CmsProject project = m_cms.readProject(resourceInfo.getLock().getProjectId());
251                 result.append(project.getName());
252             } catch (CmsException e) {
253                 result.append(resourceInfo.getLock().getProjectId());
254             }
255         }
256         result.append(" -->\n");
257
258         result.append("<script type=\"text/javascript\">\n");
259         result.append("registerButtonOcms(\"").append(editId).append("\");\n");
260         result.append("</script>\n");
261         result.append("<div class=\"ocms_de_bt\" id=\"buttons_").append(editId).append("\">\n");
262         result.append("<span onmouseover=\"activateOcms(\'").append(editId).append(
263             "\');\" onmouseout=\"deactivateOcms(\'").append(editId).append("\');\">\n");
264         result.append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"table_").append(editId).append(
265             "\"><tr>\n");
266         result.append("<td class=\"ocms_de\"><span class=\"ocms_disabled\">");
267         if (m_editButtonStyle == 1) {
268             result.append("<span class=\"ocms_combobutton\" style=\"background-image: url(\'").append(
269                 CmsWorkplace.getSkinUri()).append("buttons/directedit_in.png\');\">&nbsp;").append(
270                 m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_LOCKED_0)).append("</span>");
271         } else if (m_editButtonStyle == 2) {
272             result.append("<span class=\"ocms_combobutton\" style=\"padding-left: 4px;\">").append(
273                 m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_LOCKED_0)).append("</span>");
274         } else {
275             result.append("<img border=\"0\" SRC=\"").append(CmsWorkplace.getSkinUri()).append(
276                 "buttons/directedit_in.png\" title=\"").append(
277                 m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_LOCKED_0)).append("\" alt=\"\">");
278         }
279         result.append("</span></td>\n");
280         result.append("</tr></table>\n");
281         result.append("</span>\n");
282         result.append("</div>\n");
283         result.append("<div id=\"").append(editId).append("\" class=\"ocms_de_norm\">\n");
284
285         return result.toString();
286     }
287
288     /**
289      * Returns the start HTML for an enabled direct edit button.<p>
290      *
291      * @param params the direct edit parameters
292      * @param resourceInfo contains information about the resource to edit
293      *
294      * @return the start HTML for an enabled direct edit button
295      */

296     public String JavaDoc startDirectEditEnabled(CmsDirectEditParams params, CmsDirectEditResourceInfo resourceInfo) {
297
298         String JavaDoc editLocale = m_cms.getRequestContext().getLocale().toString();
299         String JavaDoc editId = getNextDirectEditId();
300         StringBuffer JavaDoc result = new StringBuffer JavaDoc(512);
301
302         String JavaDoc uri = m_cms.getRequestContext().getUri();
303
304         String JavaDoc editLink = getLink(params.getLinkForEdit());
305         String JavaDoc editNewLink = CmsEncoder.encode(params.getLinkForNew());
306
307         result.append("<!-- EDIT BLOCK START (ENABLED): ");
308         result.append(params.m_resourceName);
309         result.append(" [");
310         result.append(resourceInfo.getResource().getState());
311         result.append("]");
312         if (!resourceInfo.getLock().isNullLock()) {
313             result.append(" locked ");
314             try {
315                 CmsProject project = m_cms.readProject(resourceInfo.getLock().getProjectId());
316                 result.append(project.getName());
317             } catch (CmsException e) {
318                 result.append(resourceInfo.getLock().getProjectId());
319             }
320         }
321         result.append(" -->\n");
322
323         result.append("<script type=\"text/javascript\">\n");
324         result.append("registerButtonOcms(\"").append(editId).append("\");\n");
325         result.append("</script>\n");
326         result.append("<div class=\"ocms_de_bt\" id=\"buttons_").append(editId).append("\">\n");
327         result.append("<form name=\"form_").append(editId).append("\" id=\"form_").append(editId).append(
328             "\" method=\"post\" action=\"").append(editLink).append("\" class=\"ocms_nomargin\" target=\"_top\">\n");
329         result.append("<input type=\"hidden\" name=\"resource\" value=\"").append(params.getResourceName()).append(
330             "\">\n");
331         result.append("<input type=\"hidden\" name=\"directedit\" value=\"true\">\n");
332         result.append("<input type=\"hidden\" name=\"elementlanguage\" value=\"").append(editLocale).append("\">\n");
333         result.append("<input type=\"hidden\" name=\"elementname\" value=\"").append(params.getElement()).append(
334             "\">\n");
335         result.append("<input type=\"hidden\" name=\"backlink\" value=\"").append(uri).append("\">\n");
336         result.append("<input type=\"hidden\" name=\"newlink\">\n");
337         result.append("<input type=\"hidden\" name=\"closelink\">\n");
338         result.append("<input type=\"hidden\" name=\"redirect\" value=\"true\">\n");
339         result.append("<input type=\"hidden\" name=\"editortitle\">\n");
340         result.append("</form>\n");
341         result.append("<span onmouseover=\"activateOcms(\'").append(editId).append(
342             "\');\" onmouseout=\"deactivateOcms(\'").append(editId).append("\');\">\n");
343         result.append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"table_").append(editId).append(
344             "\"><tr>\n");
345         if (params.getButtonSelection().isShowEdit()) {
346             result.append("<td class=\"ocms_de\"><a HREF=\"#\" onclick=\"javascript:submitOcms(\'").append(editId).append(
347                 "\', \'").append(CmsDirectEditButtonSelection.VALUE_EDIT).append(
348                 "\');\" class=\"ocms_button\"><span class=\"ocms_over\" onmouseover=\"className=\'ocms_over\'\" onmouseout=\"className=\'ocms_over\'\" onmousedown=\"className=\'ocms_push\'\" onmouseup=\"className=\'ocms_over\'\">");
349             if (m_editButtonStyle == 1) {
350                 result.append("<span id=\"bt_").append(editId).append(
351                     "\" class=\"ocms_combobutton\" style=\"background-image: url(\'").append(CmsWorkplace.getSkinUri()).append(
352                     "buttons/directedit_cl.png\');\">&nbsp;").append(
353                     m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_EDIT_0)).append("</span>");
354             } else if (m_editButtonStyle == 2) {
355                 result.append("<span class=\"ocms_combobutton\" style=\"padding-left: 4px;\">").append(
356                     m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_EDIT_0)).append("</span>");
357             } else {
358                 result.append("<span id=\"bt_").append(editId).append(
359                     "\" class=\"ocms_combobutton\" style=\"padding-left: 15px; padding-right: 1px; background-image: url(\'").append(
360                     CmsWorkplace.getSkinUri()).append(
361                     "buttons/directedit_cl.png\'); background-position: 0px 0px;\" title=\"").append(
362                     m_messages.key(Messages.GUI_EDITOR_FRONTEND_BUTTON_EDIT_0)).append("\">&nbsp;</span>");
363             }
364             result.append("</span></a></td>\n");
365         }
366         if (params.getButtonSelection().isShowDelete()) {
367             result.append("<td class=\"ocms_de\"><a HREF=\"#\" onclick=\"javascript:submitOcms(\'").append(editId).append(
368                 "\', \'").append(CmsDirectEditButtonSelection.VALUE_DELETE).append(
369                 "\');\" class=\"ocms_button\"><span class=\"ocms_over\" onmouseover=\"className=\'ocms_over\'\" onmouseout=\"className=\'ocms_over\'\" onmousedown=\"className=\'ocms_push\'\" onmouseup=\"className=\'ocms_over\'\">");
370             if (m_editButtonStyle == 1) {
371                 result.append("<span id=\"del_").append(editId).append(
372                     "\" class=\"ocms_combobutton\" style=\"background-image: url(\'").append(CmsWorkplace.getSkinUri()).append(
373                     "buttons/deletecontent.png\');\">&nbsp;").append(m_messages.key(Messages.GUI_BUTTON_DELETE_0)).append(
374                     "</span>");
375             } else if (m_editButtonStyle == 2) {
376                 result.append("<span class=\"ocms_combobutton\" style=\"padding-left: 4px;\">").append(
377                     m_messages.key(Messages.GUI_BUTTON_DELETE_0)).append("</span>");
378             } else {
379                 result.append("<img border=\"0\" SRC=\"").append(CmsWorkplace.getSkinUri()).append(
380                     "buttons/deletecontent.png\" title=\"").append(m_messages.key(Messages.GUI_BUTTON_DELETE_0)).append(
381                     "\" alt=\"\">");
382             }
383             result.append("</span></a></td>\n");
384         }
385         if (params.getButtonSelection().isShowNew()) {
386             result.append("<td class=\"ocms_de\"><a HREF=\"#\" onclick=\"javascript:submitOcms(\'").append(editId).append(
387                 "\', \'").append(CmsDirectEditButtonSelection.VALUE_NEW).append("\', \'").append(editNewLink).append(
388                 "\');\" class=\"ocms_button\"><span class=\"ocms_over\" onmouseover=\"className=\'ocms_over\'\" onmouseout=\"className=\'ocms_over\'\" onmousedown=\"className=\'ocms_push\'\" onmouseup=\"className=\'ocms_over\'\">");
389             if (m_editButtonStyle == 1) {
390                 result.append("<span id=\"new_").append(editId).append(
391                     "\" class=\"ocms_combobutton\" style=\"background-image: url(\'").append(CmsWorkplace.getSkinUri()).append(
392                     "buttons/new.png\');\">&nbsp;").append(m_messages.key(Messages.GUI_BUTTON_NEW_0)).append("</span>");
393             } else if (m_editButtonStyle == 2) {
394                 result.append("<span class=\"ocms_combobutton\" style=\"padding-left: 4px;\">").append(
395                     m_messages.key(Messages.GUI_BUTTON_NEW_0)).append("</span>");
396             } else {
397                 result.append("<img border=\"0\" SRC=\"").append(CmsWorkplace.getSkinUri()).append(
398                     "buttons/new.png\" title=\"").append(m_messages.key(Messages.GUI_BUTTON_NEW_0)).append(
399                     "\" alt=\"\">");
400             }
401             result.append("</span></a></td>");
402         }
403         result.append("</tr></table>\n");
404         result.append("</span>\n");
405         result.append("</div>\n");
406         result.append("<div id=\"").append(editId).append("\" class=\"ocms_de_norm\">");
407         return result.toString();
408     }
409 }
Popular Tags