KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > opencms > workplace > CmsAdminModuleNew


1 /*
2 * File : $Source: /usr/local/cvs/opencms/src-modules/com/opencms/workplace/CmsAdminModuleNew.java,v $
3 * Date : $Date: 2005/06/27 23:22:07 $
4 * Version: $Revision: 1.6 $
5 *
6 * This library is part of OpenCms -
7 * the Open Source Content Mananagement System
8 *
9 * Copyright (C) 2001 The OpenCms Group
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 OpenCms, please see the
22 * OpenCms Website: http://www.opencms.org
23 *
24 * You should have received a copy of the GNU Lesser General Public
25 * License along with this library; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 */

28
29 package com.opencms.workplace;
30
31 import org.opencms.file.CmsObject;
32 import org.opencms.main.CmsException;
33 import org.opencms.main.CmsLog;
34 import org.opencms.main.CmsSystemInfo;
35 import org.opencms.main.OpenCms;
36 import org.opencms.module.CmsModule;
37 import org.opencms.module.CmsModuleImportExportHandler;
38 import org.opencms.module.CmsModuleManager;
39 import org.opencms.report.A_CmsReportThread;
40 import org.opencms.workplace.threads.CmsDatabaseImportThread;
41 import org.opencms.workplace.threads.CmsModuleReplaceThread;
42
43 import com.opencms.core.I_CmsSession;
44 import com.opencms.legacy.CmsLegacyException;
45 import com.opencms.legacy.CmsXmlTemplateLoader;
46 import com.opencms.template.CmsXmlTemplateFile;
47
48 import java.io.File JavaDoc;
49 import java.io.FileOutputStream JavaDoc;
50 import java.io.OutputStream JavaDoc;
51 import java.util.Enumeration JavaDoc;
52 import java.util.Hashtable JavaDoc;
53 import java.util.List JavaDoc;
54 import java.util.Vector JavaDoc;
55
56 /**
57  * Template class for displaying OpenCms workplace admin module screens.
58  *
59  * Creation date: (01.09.00 12:55:58)
60  * @author Hanjo Riege
61  *
62  * @deprecated Will not be supported past the OpenCms 6 release.
63  */

64 public class CmsAdminModuleNew extends CmsWorkplaceDefault {
65
66     /**
67      * the different templateselectors.
68      */

69     private final String JavaDoc C_DONE = "done";
70     private final String JavaDoc C_ERRORDEP = "errordep";
71     private final String JavaDoc C_ERRORREPLACE = "errorreplace";
72     private final String JavaDoc C_FILES = "files";
73     private final String JavaDoc C_FROMERRORPAGE = "fromerrorpage";
74     private final String JavaDoc C_MODULE = "moduleinstance";
75     private final String JavaDoc C_MODULE_FILENAME = "modulefilename";
76
77     /**
78      * const for session entrys.
79      */

80     private final String JavaDoc C_MODULE_NAV = "modulenav";
81     private final String JavaDoc C_MODULE_THREAD = "modulethread";
82
83     /**
84      * Gets the content of a defined section in a given template file and its subtemplates
85      * with the given parameters.
86      *
87      * @see #getContent(CmsObject, String, String, Hashtable, String)
88      * @param cms CmsObject Object for accessing system resources.
89      * @param templateFile Filename of the template file.
90      * @param elementName Element name of this template in our parent template.
91      * @param parameters Hashtable with all template class parameters.
92      * @param templateSelector template section that should be processed.
93      */

94     public byte[] getContent(CmsObject cms, String JavaDoc templateFile, String JavaDoc elementName, Hashtable JavaDoc parameters, String JavaDoc templateSelector) throws CmsException {
95         if(CmsLog.getLog(this).isDebugEnabled() && C_DEBUG) {
96             CmsLog.getLog(this).debug("Getting content of element " + ((elementName==null)?"<root>":elementName));
97             CmsLog.getLog(this).debug("Template file is: " + templateFile);
98             CmsLog.getLog(this).debug("Selected template section is: " + ((templateSelector==null)?"<default>":templateSelector));
99         }
100
101         CmsXmlWpTemplateFile xmlTemplateDocument = new CmsXmlWpTemplateFile(cms, templateFile);
102
103         I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true);
104         String JavaDoc errorNavigation = (String JavaDoc)parameters.get(C_FROMERRORPAGE);
105         if(errorNavigation != null) {
106             templateSelector = importModule(cms, xmlTemplateDocument, session, null);
107             return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector);
108         }
109
110         String JavaDoc step = (String JavaDoc)parameters.get("step");
111
112         // first look if there is already a thread running.
113
if("showResult".equals(step)){
114             A_CmsReportThread doTheWork = (A_CmsReportThread)session.getValue(C_MODULE_THREAD);
115             if(doTheWork.isAlive()){
116                 // thread is still running
117
xmlTemplateDocument.setData("endMethod", "");
118                 xmlTemplateDocument.setData("text", "");
119             } else {
120                 // thread is finished, activate the buttons
121
xmlTemplateDocument.setData("endMethod", xmlTemplateDocument.getDataValue("endMethod"));
122                 xmlTemplateDocument.setData("autoUpdate","");
123                 xmlTemplateDocument.setData("text", xmlTemplateDocument.getLanguageFile().getLanguageValue("module.lable.importend"));
124                 session.removeValue(C_MODULE_THREAD);
125             }
126             xmlTemplateDocument.setData("data", doTheWork.getReportUpdate());
127             return startProcessing(cms, xmlTemplateDocument, elementName, parameters, "updateReport");
128         } else if ("server".equals(step)) {
129             File modulefolder = new File(OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(OpenCms.getSystemInfo().getPackagesRfsPath() + File.separator + CmsSystemInfo.FOLDER_MODULES));
130             if (!modulefolder.exists()) {
131                 boolean success = modulefolder.mkdir();
132                 if (CmsLog.getLog(this).isWarnEnabled()
133                     && (!success)) {
134                     CmsLog.getLog(this).warn("Could not create folder " + modulefolder.getAbsolutePath());
135                 }
136             }
137             String JavaDoc listentrys = "";
138             if (modulefolder.exists()) {
139                 String JavaDoc[] modules = modulefolder.list();
140                 for (int i = 0; i < modules.length; i++) {
141                     xmlTemplateDocument.setData("modulname", modules[i]);
142                     listentrys += xmlTemplateDocument.getProcessedDataValue("optionentry");
143                 }
144             }
145             xmlTemplateDocument.setData("entries", listentrys);
146             templateSelector = "server";
147
148         } else if ("local".equals(step)) {
149             templateSelector = "local";
150
151         } else if ("localupload".equals(step)) {
152             // get the filename
153
String JavaDoc filename = null;
154             Enumeration JavaDoc files = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getFileNames();
155             while (files.hasMoreElements()) {
156                 filename = (String JavaDoc) files.nextElement();
157             }
158             if (filename != null) {
159                 session.putValue(CmsWorkplaceDefault.C_PARA_RESOURCE, filename);
160             }
161             filename = (String JavaDoc) session.getValue(CmsWorkplaceDefault.C_PARA_RESOURCE);
162
163             // get the filecontent
164
byte[] filecontent = new byte[0];
165             if (filename != null) {
166                 filecontent = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getFile(filename);
167             }
168             if (filecontent != null) {
169                 session.putValue(CmsWorkplaceDefault.C_PARA_FILECONTENT, filecontent);
170             }
171             filecontent = (byte[]) session.getValue(CmsWorkplaceDefault.C_PARA_FILECONTENT);
172
173             // first create the folder if it doesnt exists
174
File discFolder = new File(OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(OpenCms.getSystemInfo().getPackagesRfsPath() + File.separator + CmsSystemInfo.FOLDER_MODULES));
175             if (!discFolder.exists()) {
176                 boolean success = discFolder.mkdir();
177                 if (CmsLog.getLog(this).isWarnEnabled()
178                     && (!success)) {
179                     CmsLog.getLog(this).warn("Could not create folder " + discFolder.getAbsolutePath());
180                 }
181             }
182
183             // now write the file into the modules dierectory in the exportpaht
184
File discFile =
185                 new File(OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(OpenCms.getSystemInfo().getPackagesRfsPath()+ File.separator + CmsSystemInfo.FOLDER_MODULES + filename));
186             try {
187
188                 // write the new file to disk
189
OutputStream JavaDoc s = new FileOutputStream JavaDoc(discFile);
190                 s.write(filecontent);
191                 s.close();
192             } catch (Exception JavaDoc e) {
193                 throw new CmsLegacyException("[" + this.getClass().getName() + "] " + e.getMessage());
194             }
195             session.removeValue(C_MODULE_NAV);
196             templateSelector = importModule(cms, xmlTemplateDocument, session, OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(OpenCms.getSystemInfo().getPackagesRfsPath() + CmsSystemInfo.FOLDER_MODULES + filename));
197                         
198         } else if ("serverupload".equals(step)) {
199             String JavaDoc filename = (String JavaDoc) parameters.get("moduleselect");
200             session.removeValue(C_MODULE_NAV);
201             if ((filename == null) || ("".equals(filename))) {
202                 templateSelector = C_DONE;
203             } else {
204                 templateSelector = importModule(cms, xmlTemplateDocument, session, OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(OpenCms.getSystemInfo().getPackagesRfsPath() + CmsSystemInfo.FOLDER_MODULES + filename));
205             }
206         }
207
208         // Now load the template file and start the processing
209
return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector);
210     }
211
212     /**
213      * Indicates if the results of this class are cacheable.
214      *
215      * @param cms CmsObject Object for accessing system resources
216      * @param templateFile Filename of the template file
217      * @param elementName Element name of this template in our parent template.
218      * @param parameters Hashtable with all template class parameters.
219      * @param templateSelector template section that should be processed.
220      * @return <EM>true</EM> if cacheable, <EM>false</EM> otherwise.
221      */

222     public boolean isCacheable(CmsObject cms, String JavaDoc templateFile, String JavaDoc elementName, Hashtable JavaDoc parameters, String JavaDoc templateSelector) {
223         return false;
224     }
225
226     /**
227      * Imports the file zipName.
228      * Creation date: (05.09.00 10:17:56)
229      * @param zipName the complete path and name of the zip-file to import.
230      * @return the new templateSelector.
231      */

232     private String JavaDoc importModule(CmsObject cms, CmsXmlTemplateFile xmlDocument, I_CmsSession session, String JavaDoc zipName) throws CmsException {
233         String JavaDoc nav = (String JavaDoc)session.getValue(C_MODULE_NAV);
234         Vector JavaDoc conflictFiles = new Vector JavaDoc();
235         CmsModule module = null;
236         boolean importNewModule = true;
237
238         if(nav == null) {
239             // this is the first go. Try to import the module and if it dont't work return the corresponding errorpage
240
module = CmsModuleImportExportHandler.readModuleFromImport(zipName);
241             
242             if(OpenCms.getModuleManager().hasModule(module.getName())) {
243                 // simple module, start module replacement
244
session.putValue(C_MODULE, module);
245                 importNewModule = false;
246             }
247             List JavaDoc dependencies = OpenCms.getModuleManager().checkDependencies(module, CmsModuleManager.DEPENDENCY_MODE_IMPORT);
248             if(!dependencies.isEmpty()) {
249                 // there are dependences not fulfilled
250
xmlDocument.setData("name", module.getName());
251                 xmlDocument.setData("version", module.getVersion().toString());
252                 String JavaDoc preconditions = "";
253                 for(int i = 0;i < dependencies.size(); i++) {
254                     preconditions += "<br><br>" + dependencies.get(i);
255                 }
256                 xmlDocument.setData("precondition", preconditions);
257                 session.removeValue(C_MODULE_NAV);
258                 return C_ERRORDEP;
259             }
260         
261             // simple module, no "confict file" check performed
262
conflictFiles = new Vector JavaDoc();
263         }
264         else {
265             if(C_FILES.equals(nav)) {
266                 zipName = (String JavaDoc)session.getValue(C_MODULE_FILENAME);
267                 module = (CmsModule)session.getValue(C_MODULE);
268                 if (module != null) importNewModule = false;
269                 conflictFiles = (Vector JavaDoc)session.getValue(com.opencms.core.I_CmsConstants.C_SESSION_MODULE_VECTOR);
270                 session.removeValue(C_MODULE);
271                 session.removeValue(C_MODULE_NAV);
272             }
273         }
274             
275         if (importNewModule) {
276             A_CmsReportThread doTheImport = new CmsDatabaseImportThread(cms, zipName, true);
277             doTheImport.start();
278             session.putValue(C_MODULE_THREAD, doTheImport);
279         } else {
280             A_CmsReportThread doTheReplace = new CmsModuleReplaceThread(cms, module.getName(), zipName, true);
281             doTheReplace.start();
282             session.putValue(C_MODULE_THREAD, doTheReplace);
283         }
284         xmlDocument.setData("time", "5");
285         return "showresult";
286     }
287 }
288
Popular Tags