1 28 29 package com.opencms.workplace; 30 31 import org.opencms.file.CmsObject; 32 import org.opencms.file.types.CmsResourceTypeFolder; 33 import org.opencms.main.CmsException; 34 import org.opencms.main.CmsLog; 35 import org.opencms.main.OpenCms; 36 import org.opencms.module.CmsModule; 37 import org.opencms.module.CmsModuleDependency; 38 import org.opencms.module.CmsModuleVersion; 39 import org.opencms.util.CmsDateUtil; 40 41 import com.opencms.core.I_CmsSession; 42 import com.opencms.legacy.CmsXmlTemplateLoader; 43 import com.opencms.template.CmsXmlTemplateFile; 44 45 import java.text.SimpleDateFormat ; 46 import java.util.ArrayList ; 47 import java.util.Date ; 48 import java.util.HashMap ; 49 import java.util.Hashtable ; 50 import java.util.Iterator ; 51 import java.util.List ; 52 import java.util.Map ; 53 import java.util.StringTokenizer ; 54 import java.util.Vector ; 55 56 65 public class CmsAdminModuleAdmin extends CmsWorkplaceDefault { 66 private final String C_FROM = "from"; 67 private final String C_VERSION = "version"; 68 private final String C_GROUP = "group"; 69 private final String C_MODULENAME = "modulename"; 70 private final String C_DESCRIPTION = "description"; 71 private final String C_MAINTENANCE = "maintenance"; 72 private final String C_PUBLISHCLASS = "publishclass"; 73 private final String C_AUTHOR = "author"; 74 private final String C_EMAIL = "email"; 75 private final String C_DATE = "date"; 76 private final String C_DEPENDENCY = "dependencies"; 77 private final String C_ALLDEPS = "alldeps"; 78 private final String C_ONEDEP = "dependentry"; 79 private final String C_OPTIONENTRY = "optionentry"; 80 private final String C_NAME_PARAMETER = "module"; 81 82 88 private void fillHashtable(CmsObject cms, Hashtable table, String module) { 89 table.put(CmsWorkplaceDefault.C_MODULE_PACKETNAME, module); 90 table.put(C_VERSION, getStringValue(OpenCms.getModuleManager().getModule(module).getVersion().toString())); 91 table.put(C_GROUP, getStringValue(OpenCms.getModuleManager().getModule(module).getGroup())); 92 table.put(C_MODULENAME, getStringValue(OpenCms.getModuleManager().getModule(module).getNiceName())); 93 table.put(C_DESCRIPTION, getStringValue(OpenCms.getModuleManager().getModule(module).getDescription())); 94 table.put(C_MAINTENANCE, getStringValue(OpenCms.getModuleManager().getModule(module).getActionClass())); 95 table.put(C_PUBLISHCLASS, getStringValue(OpenCms.getModuleManager().getModule(module).getActionClass())); 96 table.put(C_AUTHOR, getStringValue(OpenCms.getModuleManager().getModule(module).getAuthorName())); 97 table.put(C_EMAIL, getStringValue(OpenCms.getModuleManager().getModule(module).getAuthorEmail())); 98 table.put(C_DATE, getStringValue(CmsDateUtil.getDateShort(OpenCms.getModuleManager().getModule(module).getDateCreated()))); 99 100 Vector stringDeps = new Vector (); 102 List moduleDependencies = OpenCms.getModuleManager().getModule(module).getDependencies(); 103 for (int i=0; i<moduleDependencies.size(); i++) { 104 CmsModuleDependency dep = (CmsModuleDependency)moduleDependencies.get(i); 105 stringDeps.addElement(dep.getName() + " Version:" + dep.getVersion() + " - *"); 106 } 107 table.put(C_DEPENDENCY, stringDeps); 108 109 Vector paraNames = new Vector (); 111 Vector paraDescr = new Vector (); 112 Vector paraTyp = new Vector (); 113 Vector paraVal = new Vector (); 114 Map params = OpenCms.getModuleManager().getModule(module).getParameters(); 115 Iterator it = params.keySet().iterator(); 116 while(it.hasNext()) { 117 String key = (String )it.next(); 118 String value = (String )params.get(key); 119 paraNames.addElement(key); 120 paraDescr.addElement(""); 121 paraVal.addElement(getStringValue(value)); 122 paraTyp.addElement(""); 123 } 124 table.put(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_PROP_NAMES, paraNames); 125 table.put(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_PROP_DESCR, paraDescr); 126 table.put(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_PROP_TYP, paraTyp); 127 table.put(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_PROP_VAL, paraVal); 128 } 129 130 141 public byte[] getContent(CmsObject cms, String templateFile, String elementName, Hashtable parameters, String templateSelector) throws CmsException { 142 if(CmsLog.getLog(this).isDebugEnabled() && C_DEBUG) { 143 CmsLog.getLog(this).debug("Getting content of element " + ((elementName==null)?"<root>":elementName)); 144 CmsLog.getLog(this).debug("Template file is: " + templateFile); 145 CmsLog.getLog(this).debug("Selected template section is: " + ((templateSelector==null)?"<default>":templateSelector)); 146 } 147 CmsXmlTemplateFile templateDocument = getOwnTemplateFile(cms, templateFile, elementName, parameters, templateSelector); 148 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 149 String stepTo = ""; 150 String from = (String )parameters.get(C_FROM); 151 String packetName = (String )parameters.get(C_NAME_PARAMETER); 152 Hashtable sessionData = new Hashtable (); 153 if((from == null) || "".equals(from)) { 154 155 session.removeValue(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_DATA); 157 fillHashtable(cms, sessionData, packetName); 158 session.putValue(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_DATA, sessionData); 159 stepTo = "firstpage"; 160 }else { 161 sessionData = (Hashtable )session.getValue(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_DATA); 162 if("first".equals(from)) { 163 164 sessionData.put(C_VERSION, getStringValue((String )parameters.get(C_VERSION))); 166 sessionData.put(C_MODULENAME, getStringValue((String )parameters.get(C_MODULENAME))); 167 sessionData.put(C_DESCRIPTION, getStringValue((String )parameters.get(C_DESCRIPTION))); 168 sessionData.put(C_MAINTENANCE, getStringValue((String )parameters.get(C_MAINTENANCE))); 169 sessionData.put(C_PUBLISHCLASS, getStringValue((String )parameters.get(C_PUBLISHCLASS))); 170 sessionData.put(C_AUTHOR, getStringValue((String )parameters.get(C_AUTHOR))); 171 sessionData.put(C_EMAIL, getStringValue((String )parameters.get(C_EMAIL))); 172 sessionData.put(C_DATE, getStringValue((String )parameters.get(C_DATE))); 173 174 session.putValue(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_DATA, sessionData); 175 stepTo = "deps"; 176 } 177 if("deps".equals(from)) { 178 179 String allData = (String )parameters.get(C_ALLDEPS); 181 Vector allDeps = new Vector (); 182 allDeps = parseAllDeps(getStringValue(allData)); 183 sessionData.put(C_DEPENDENCY, allDeps); 184 session.putValue(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_DATA, sessionData); 185 186 String back = (String )parameters.get("back"); 188 if((back == null) || ("".equals(back))) { 189 stepTo = "props"; 190 } 191 else { 192 stepTo = "firstpage"; 193 } 194 } 195 if("props".equals(from)) { 196 stepTo = "deps"; 197 } 198 if("edit".equals(from)) { 199 stepTo = "props"; 200 } 201 if("propsready".equals(from)) { 202 203 updateTheModule(cms, sessionData, packetName); 205 session.removeValue(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_DATA); 206 templateSelector = "done"; 207 } 208 } 209 if("firstpage".equals(stepTo)) { 210 211 templateDocument.setData(CmsWorkplaceDefault.C_MODULE_PACKETNAME, (String )sessionData.get(CmsWorkplaceDefault.C_MODULE_PACKETNAME)); 213 templateDocument.setData(C_VERSION, (String )sessionData.get(C_VERSION)); 214 templateDocument.setData(C_MODULENAME, (String )sessionData.get(C_MODULENAME)); 215 templateDocument.setData(C_DESCRIPTION, (String )sessionData.get(C_DESCRIPTION)); 216 templateDocument.setData(C_MAINTENANCE, (String )sessionData.get(C_MAINTENANCE)); 217 templateDocument.setData(C_PUBLISHCLASS, (String )sessionData.get(C_PUBLISHCLASS)); 218 templateDocument.setData(C_AUTHOR, (String )sessionData.get(C_AUTHOR)); 219 templateDocument.setData(C_EMAIL, (String )sessionData.get(C_EMAIL)); 220 templateDocument.setData(C_DATE, (String )sessionData.get(C_DATE)); 221 222 templateDocument.setData("moduletype", "checked"); 223 templateSelector = ""; 224 } 225 if("deps".equals(stepTo)) { 226 227 templateDocument.setData(CmsWorkplaceDefault.C_MODULE_PACKETNAME, (String )sessionData.get(CmsWorkplaceDefault.C_MODULE_PACKETNAME)); 229 Vector deps = (Vector )sessionData.get(C_DEPENDENCY); 230 String entrys = ""; 231 for(int i = 0;i < deps.size();i++) { 232 templateDocument.setData(C_ONEDEP, (String )deps.elementAt(i)); 233 entrys += templateDocument.getProcessedDataValue(C_OPTIONENTRY); 234 } 235 templateDocument.setData(C_ALLDEPS, entrys); 236 templateSelector = "dependencies"; 237 } 238 if("props".equals(stepTo)) { 239 240 templateSelector = "properties"; 242 } 243 244 return startProcessing(cms, templateDocument, elementName, parameters, templateSelector); 246 } 247 248 254 private String getStringValue(String param) { 255 if(param == null) { 256 return ""; 257 } 258 return param; 259 } 260 261 271 public boolean isCacheable(CmsObject cms, String templateFile, String elementName, Hashtable parameters, String templateSelector) { 272 return false; 273 } 274 275 280 private Vector parseAllDeps(String resources) { 281 Vector ret = new Vector (); 282 if(resources != null) { 283 StringTokenizer resTokenizer = new StringTokenizer (resources, ";"); 284 while(resTokenizer.hasMoreElements()) { 285 String path = (String )resTokenizer.nextElement(); 286 ret.addElement(path); 287 } 288 } 289 return ret; 290 } 291 292 299 private void tryToCreateFolder(CmsObject cms, String folder, String newFolder) { 300 try { 301 cms.createResource(folder + newFolder, CmsResourceTypeFolder.RESOURCE_TYPE_ID); 302 }catch(Exception e) { 303 } 304 } 305 306 312 private void updateTheModule(CmsObject cms, Hashtable table, String module) { 313 SimpleDateFormat dateFormat = new java.text.SimpleDateFormat ("dd.MM.yyyy"); 314 String name = (String )table.get(CmsWorkplaceDefault.C_MODULE_PACKETNAME); 315 316 try { 317 318 CmsModuleVersion version = new CmsModuleVersion((String )table.get(C_VERSION)); 320 321 String niceName = (String )table.get(C_MODULENAME); 323 String group = (String )table.get(C_GROUP); 324 String description = (String )table.get(C_DESCRIPTION); 325 String moduleClass = (String )table.get(C_PUBLISHCLASS); 326 String moduleAuthor = (String )table.get(C_AUTHOR); 327 String moduleEmail = (String )table.get(C_EMAIL); 328 329 String date = (String )table.get(C_DATE); 331 long moduleDateCreated = 0; 332 try { 333 moduleDateCreated = dateFormat.parse(date).getTime(); 334 }catch(Exception exc) { 335 moduleDateCreated = (new Date ()).getTime(); 336 } 337 338 Vector stringDeps = (Vector )table.get(C_DEPENDENCY); 340 List dependencies = new ArrayList (); 341 342 for(int i = 0;i < stringDeps.size();i++) { 343 String complString = (String )stringDeps.elementAt(i); 344 complString = complString.substring(0, complString.lastIndexOf("-") - 1); 345 String min = complString.substring(complString.lastIndexOf(":") + 1); 346 String depName = (complString.substring(0, complString.lastIndexOf("Version:") - 1)).trim(); 347 348 dependencies.add(new CmsModuleDependency(depName, new CmsModuleVersion(String.valueOf(min)))); 349 } 350 351 Vector paraNames = (Vector )table.get(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_PROP_NAMES); 353 Vector paraVal = (Vector )table.get(CmsWorkplaceDefault.C_SESSION_MODULE_ADMIN_PROP_VAL); 354 355 Map parameters = new HashMap (); 356 for (int i=0; i<paraNames.size(); i++) { 357 String key = (String )paraNames.get(i); 358 parameters.put(key, paraVal.get(i)); 359 } 360 361 CmsModule currentModule = OpenCms.getModuleManager().getModule(name); 362 363 CmsModule updatedModule = 364 new CmsModule( 365 name, 366 niceName, 367 group, 368 moduleClass, 369 description, 370 version, 371 moduleAuthor, 372 moduleEmail, 373 moduleDateCreated, 374 currentModule.getUserInstalled(), 375 currentModule.getDateInstalled(), 376 dependencies, 377 currentModule.getExportPoints(), 378 currentModule.getResources(), 379 parameters); 380 381 updatedModule.setResourceTypes(currentModule.getResourceTypes()); 382 updatedModule.setExplorerTypes(currentModule.getExplorerTypes()); 383 384 OpenCms.getModuleManager().updateModule(cms, updatedModule); 385 386 } catch (CmsException e) { 387 if(CmsLog.getLog(this).isErrorEnabled()) { 388 CmsLog.getLog(this).error("Error in module administration", e); 389 } 390 } 391 } 392 } 393
| Popular Tags
|