1 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 ; 49 import java.io.FileOutputStream ; 50 import java.io.OutputStream ; 51 import java.util.Enumeration ; 52 import java.util.Hashtable ; 53 import java.util.List ; 54 import java.util.Vector ; 55 56 64 public class CmsAdminModuleNew extends CmsWorkplaceDefault { 65 66 69 private final String C_DONE = "done"; 70 private final String C_ERRORDEP = "errordep"; 71 private final String C_ERRORREPLACE = "errorreplace"; 72 private final String C_FILES = "files"; 73 private final String C_FROMERRORPAGE = "fromerrorpage"; 74 private final String C_MODULE = "moduleinstance"; 75 private final String C_MODULE_FILENAME = "modulefilename"; 76 77 80 private final String C_MODULE_NAV = "modulenav"; 81 private final String C_MODULE_THREAD = "modulethread"; 82 83 94 public byte[] getContent(CmsObject cms, String templateFile, String elementName, Hashtable parameters, String 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 errorNavigation = (String )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 step = (String )parameters.get("step"); 111 112 if("showResult".equals(step)){ 114 A_CmsReportThread doTheWork = (A_CmsReportThread)session.getValue(C_MODULE_THREAD); 115 if(doTheWork.isAlive()){ 116 xmlTemplateDocument.setData("endMethod", ""); 118 xmlTemplateDocument.setData("text", ""); 119 } else { 120 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 listentrys = ""; 138 if (modulefolder.exists()) { 139 String [] 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 String filename = null; 154 Enumeration files = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getFileNames(); 155 while (files.hasMoreElements()) { 156 filename = (String ) files.nextElement(); 157 } 158 if (filename != null) { 159 session.putValue(CmsWorkplaceDefault.C_PARA_RESOURCE, filename); 160 } 161 filename = (String ) session.getValue(CmsWorkplaceDefault.C_PARA_RESOURCE); 162 163 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 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 File discFile = 185 new File(OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(OpenCms.getSystemInfo().getPackagesRfsPath()+ File.separator + CmsSystemInfo.FOLDER_MODULES + filename)); 186 try { 187 188 OutputStream s = new FileOutputStream (discFile); 190 s.write(filecontent); 191 s.close(); 192 } catch (Exception 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 filename = (String ) 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 return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector); 210 } 211 212 222 public boolean isCacheable(CmsObject cms, String templateFile, String elementName, Hashtable parameters, String templateSelector) { 223 return false; 224 } 225 226 232 private String importModule(CmsObject cms, CmsXmlTemplateFile xmlDocument, I_CmsSession session, String zipName) throws CmsException { 233 String nav = (String )session.getValue(C_MODULE_NAV); 234 Vector conflictFiles = new Vector (); 235 CmsModule module = null; 236 boolean importNewModule = true; 237 238 if(nav == null) { 239 module = CmsModuleImportExportHandler.readModuleFromImport(zipName); 241 242 if(OpenCms.getModuleManager().hasModule(module.getName())) { 243 session.putValue(C_MODULE, module); 245 importNewModule = false; 246 } 247 List dependencies = OpenCms.getModuleManager().checkDependencies(module, CmsModuleManager.DEPENDENCY_MODE_IMPORT); 248 if(!dependencies.isEmpty()) { 249 xmlDocument.setData("name", module.getName()); 251 xmlDocument.setData("version", module.getVersion().toString()); 252 String 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 conflictFiles = new Vector (); 263 } 264 else { 265 if(C_FILES.equals(nav)) { 266 zipName = (String )session.getValue(C_MODULE_FILENAME); 267 module = (CmsModule)session.getValue(C_MODULE); 268 if (module != null) importNewModule = false; 269 conflictFiles = (Vector )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
|