1 28 29 package com.opencms.workplace; 30 31 import org.opencms.file.CmsObject; 32 import org.opencms.importexport.CmsVfsImportExportHandler; 33 import org.opencms.main.CmsException; 34 import org.opencms.main.CmsLog; 35 import org.opencms.main.OpenCms; 36 import org.opencms.report.A_CmsReportThread; 37 import org.opencms.workplace.threads.CmsDatabaseImportThread; 38 import org.opencms.workplace.threads.CmsExportThread; 39 40 import com.opencms.core.I_CmsSession; 41 import com.opencms.legacy.CmsCosImportExportHandler; 42 import com.opencms.legacy.CmsLegacyException; 43 import com.opencms.legacy.CmsLegacyModuleAction; 44 import com.opencms.legacy.CmsXmlTemplateLoader; 45 46 import java.io.File ; 47 import java.io.FileOutputStream ; 48 import java.io.OutputStream ; 49 import java.util.Arrays ; 50 import java.util.Enumeration ; 51 import java.util.Hashtable ; 52 import java.util.Iterator ; 53 import java.util.StringTokenizer ; 54 import java.util.Vector ; 55 56 66 public class CmsAdminDatabase extends CmsWorkplaceDefault { 67 68 private static String C_DATABASE_THREAD = "databse_im_export_thread"; 69 70 78 private String copyFileToServer( 79 CmsObject cms, 80 I_CmsSession session ) 81 throws CmsException{ 82 String filename = null; 84 Enumeration files = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getFileNames(); 85 while(files.hasMoreElements()) { 86 filename = (String )files.nextElement(); 87 } 88 if(filename != null) { 89 session.putValue(CmsWorkplaceDefault.C_PARA_RESOURCE, filename); 90 } 91 filename = (String )session.getValue(CmsWorkplaceDefault.C_PARA_RESOURCE); 92 93 byte[] filecontent = new byte[0]; 95 if(filename != null) { 96 filecontent = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getFile(filename); 97 } 98 if(filecontent != null) { 99 session.putValue(CmsWorkplaceDefault.C_PARA_FILECONTENT, filecontent); 100 } 101 filecontent = (byte[])session.getValue(CmsWorkplaceDefault.C_PARA_FILECONTENT); 102 File discFolder = new File (OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(OpenCms.getSystemInfo().getPackagesRfsPath() + File.separator)); 104 if(!discFolder.exists()) { 105 boolean success = discFolder.mkdir(); 106 if(CmsLog.getLog(this).isWarnEnabled() && (!success)) { 107 CmsLog.getLog(this).warn("Couldn't create folder " + discFolder.getAbsolutePath()); 108 } 109 } 110 111 File discFile = new File (OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(OpenCms.getSystemInfo().getPackagesRfsPath() + File.separator + filename)); 113 try { 114 115 OutputStream s = new FileOutputStream (discFile); 117 s.write(filecontent); 118 s.close(); 119 } 120 catch(Exception e) { 121 throw new CmsLegacyException("[" + this.getClass().getName() + "] " + e.getMessage()); 122 } 123 return filename; 124 } 125 126 137 public byte[] getContent( 138 CmsObject cms, 139 String templateFile, 140 String elementName, 141 Hashtable parameters, 142 String templateSelector 143 ) throws CmsException { 144 if(C_DEBUG && CmsLog.getLog(this).isDebugEnabled()) { 145 CmsLog.getLog(this).debug("Getting content of element " 146 + ((elementName == null) ? "<root>" : elementName)); 147 CmsLog.getLog(this).debug("Template file is: " + templateFile); 148 CmsLog.getLog(this).debug("Delected template section is: " 149 + ((templateSelector == null) ? "<default>" : templateSelector)); 150 } 151 152 CmsXmlWpTemplateFile xmlTemplateDocument = new CmsXmlWpTemplateFile(cms, templateFile); 153 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 154 CmsXmlLanguageFile lang = xmlTemplateDocument.getLanguageFile(); 155 156 String fileName = (String )parameters.get("filename"); 159 String existingFile = (String )parameters.get("existingfile"); 160 String action = (String )parameters.get("action"); 161 String allResources = (String )parameters.get("ALLRES"); 162 String allModules = (String )parameters.get("ALLMOD"); 163 String step = (String )parameters.get("step"); 164 165 if("showResult".equals(action)){ 168 A_CmsReportThread doTheWork = (A_CmsReportThread)session.getValue(C_DATABASE_THREAD); 170 if(doTheWork.isAlive()){ 172 xmlTemplateDocument.setData("endMethod", ""); 173 xmlTemplateDocument.setData("text", ""); 174 }else{ 175 xmlTemplateDocument.setData("endMethod", xmlTemplateDocument.getDataValue("endMethod")); 176 xmlTemplateDocument.setData("autoUpdate",""); 177 xmlTemplateDocument.setData("text", lang.getLanguageValue("database.label.importend")); 178 session.removeValue(C_DATABASE_THREAD); 179 } 180 xmlTemplateDocument.setData("data", doTheWork.getReportUpdate()); 181 return startProcessing(cms, xmlTemplateDocument, elementName, parameters, "updateReport"); 182 }else if("showExportResult".equals(action)){ 183 A_CmsReportThread doTheWork = (A_CmsReportThread)session.getValue(C_DATABASE_THREAD); 185 if(doTheWork.isAlive()){ 187 xmlTemplateDocument.setData("endMethod", ""); 188 xmlTemplateDocument.setData("text", ""); 189 }else{ 190 xmlTemplateDocument.setData("endMethod", xmlTemplateDocument.getDataValue("endMethod")); 191 xmlTemplateDocument.setData("autoUpdate",""); 192 xmlTemplateDocument.setData("text", lang.getLanguageValue("database.label.exportend")); 193 session.removeValue(C_DATABASE_THREAD); 194 } 195 xmlTemplateDocument.setData("data", doTheWork.getReportUpdate()); 196 return startProcessing(cms, xmlTemplateDocument, elementName, parameters, "updateReport"); 197 } 198 199 if(action == null) { 200 if(!cms.getRequestContext().currentProject().isOnlineProject()) { 203 xmlTemplateDocument.setData("nounchanged", 204 xmlTemplateDocument.getProcessedDataValue("nounchangedbox", this, parameters)); 205 } 206 if(cms.isAdmin()) { 207 xmlTemplateDocument.setData("userdata", 208 xmlTemplateDocument.getProcessedDataValue("userdatabox", this, parameters)); 209 } 210 xmlTemplateDocument.setData("moduleselect", this.getModuleSelectbox(cms, xmlTemplateDocument)); 211 } 212 213 try { 214 if("export".equals(action)) { 215 Vector resourceNames = parseResources(allResources); 217 String [] exportPaths = new String [resourceNames.size()]; 218 for(int i = 0;i < resourceNames.size();i++) { 219 if(lang.getLanguageValue("title.rootfolder").equals(resourceNames.elementAt(i))) { 222 resourceNames.setElementAt("/", i); 223 } 224 exportPaths[i] = (String )resourceNames.elementAt(i); 225 } 226 227 long contentAge = 0; 229 String contentAgePara = (String )parameters.get("contentage"); 230 if (contentAgePara != null && (! "".equals(contentAgePara)) && (! "(none)".equals(contentAgePara))) { 231 try { 232 contentAge = Long.parseLong(contentAgePara); 233 } catch (NumberFormatException numEx) { 234 contentAge = 0; 236 } 237 } 238 239 boolean excludeSystem = false; 240 if (parameters.get("nosystem") != null) { 241 excludeSystem = true; 242 } 243 boolean excludeUnchanged = false; 244 if (parameters.get("nounchanged") != null) { 245 excludeUnchanged = true; 246 } 247 boolean exportUserdata = false; 248 if (parameters.get("userdata") != null) { 249 exportUserdata = true; 250 } 251 252 CmsVfsImportExportHandler vfsExportHandler = new CmsVfsImportExportHandler(); 254 vfsExportHandler.setFileName(OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(OpenCms.getSystemInfo().getPackagesRfsPath() + File.separator + fileName)); 255 vfsExportHandler.setExportPaths(Arrays.asList(exportPaths)); 256 vfsExportHandler.setIncludeSystem(!excludeSystem); 257 vfsExportHandler.setIncludeUnchanged(!excludeUnchanged); 258 vfsExportHandler.setExportUserdata(exportUserdata); 259 vfsExportHandler.setContentAge(contentAge); 260 vfsExportHandler.setDescription("Database VFS export to " + vfsExportHandler.getFileName()); 261 A_CmsReportThread doExport = new CmsExportThread(cms, vfsExportHandler, true); 262 263 doExport.start(); 264 session.putValue(C_DATABASE_THREAD, doExport); 265 xmlTemplateDocument.setData("time", "10"); 266 xmlTemplateDocument.setData("contentage", "" + contentAge); 267 xmlTemplateDocument.setData("currenttime", "" + System.currentTimeMillis()); 268 templateSelector = "showresult"; 269 270 } else if("exportmoduledata".equals(action)) { 271 Vector channelNames = parseResources(allResources); 273 String [] exportChannels = new String [channelNames.size()]; 274 for (int i = 0;i < channelNames.size();i++) { 275 if(lang.getLanguageValue("title.rootfolder").equals(channelNames.elementAt(i))) { 278 channelNames.setElementAt("/", i); 279 } 280 exportChannels[i] = (String )channelNames.elementAt(i); 281 } 282 283 Vector moduleNames = parseResources(allModules); 285 String [] exportModules = new String [moduleNames.size()]; 286 for (int i = 0;i < moduleNames.size();i++) { 287 exportModules[i] = (String )moduleNames.elementAt(i); 288 } 289 290 CmsCosImportExportHandler cosExportHandler = new CmsCosImportExportHandler(); 292 cosExportHandler.setFileName(OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(OpenCms.getSystemInfo().getPackagesRfsPath() + File.separator + fileName)); 293 cosExportHandler.setExportChannels(exportChannels); 294 cosExportHandler.setExportModules(exportModules); 295 cosExportHandler.setDescription("Database COS export to " + cosExportHandler.getFileName()); 296 A_CmsReportThread doExport = new CmsExportThread(cms, cosExportHandler, true); 297 298 doExport.start(); 299 session.putValue(C_DATABASE_THREAD, doExport); 300 xmlTemplateDocument.setData("time", "10"); 301 xmlTemplateDocument.setData("currenttime", "" + System.currentTimeMillis()); 302 templateSelector = "showresult"; 303 304 } else if("import".equals(action)) { 305 if ("local".equals(step) || "server".equals(step)){ 307 templateSelector = step; 308 } else if("localupload".equals(step)){ 309 existingFile = copyFileToServer(cms, session); 311 step = "go"; 312 } 313 if ("go".equals(step) ){ 314 A_CmsReportThread doImport = new CmsDatabaseImportThread(cms, 316 OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(OpenCms.getSystemInfo().getPackagesRfsPath() + existingFile), true); 317 doImport.start(); 318 session.putValue(C_DATABASE_THREAD, doImport); 319 xmlTemplateDocument.setData("time", "10"); 320 templateSelector = "showresult"; 321 } 322 } 323 } catch (CmsException exc) { 324 xmlTemplateDocument.setData("details", CmsException.getStackTraceAsString(exc)); 325 templateSelector = "error"; 326 } 327 328 return startProcessing (cms, xmlTemplateDocument, elementName, parameters, templateSelector); 330 } 331 332 351 public Integer getExportFiles( 352 CmsObject cms, 353 CmsXmlLanguageFile lang, 354 Vector values, 355 Vector names, 356 Hashtable parameters 357 ) throws CmsException { 358 String exportpath = OpenCms.getSystemInfo().getPackagesRfsPath(); 360 exportpath = OpenCms.getSystemInfo().getAbsoluteRfsPathRelativeToWebInf(exportpath); 361 File folder = new File (exportpath); 362 if (!folder.exists()) { 363 folder.mkdirs(); 364 } 365 String [] list = folder.list(); 367 for (int i = 0; i < list.length; i++) { 368 try { 369 File diskFile = new File (exportpath, list[i]); 370 if (diskFile.isFile() && diskFile.getName().endsWith(".zip")) { 372 values.addElement(list[i]); 373 names.addElement(list[i]); 374 } else if (diskFile.isDirectory() 375 && !diskFile.getName().equalsIgnoreCase("modules") 376 && ((new File (diskFile + File.separator + "manifest.xml")).exists())) { 377 values.addElement(list[i] + "/"); 378 names.addElement(list[i]); 379 } 380 } catch (Throwable t) { 381 } 383 } 384 return new Integer (0); 385 } 386 387 397 public boolean isCacheable( 398 CmsObject cms, 399 String templateFile, 400 String elementName, 401 Hashtable parameters, 402 String templateSelector 403 ) { 404 return false; 405 } 406 407 421 public int getModules( 422 CmsObject cms, 423 CmsXmlLanguageFile lang, 424 Vector names, 425 Vector values, 426 Hashtable parameters 427 ) throws CmsException { 428 Iterator it = CmsLegacyModuleAction.getLegacyModulePublishClasses().iterator(); 430 while (it.hasNext()) { 432 String name = (String )it.next(); 433 String value = name; 434 names.addElement(name); 435 values.addElement(value); 436 } 437 return 0; 438 } 439 440 451 public String getModuleSelectbox( 452 CmsObject cms, 453 CmsXmlWpTemplateFile template 454 ) throws CmsException { 455 StringBuffer selectBox = new StringBuffer (); 456 if (template.hasData("selectoption")) { 457 Iterator it = CmsLegacyModuleAction.getLegacyModulePublishClasses().iterator(); 459 while (it.hasNext()) { 460 String name = (String )it.next(); 461 String value = name; 462 template.setData("name", name); 463 template.setData("value", value); 464 try { 465 selectBox.append(template.getProcessedDataValue("selectoption", this)); 466 } catch (Exception e) { 467 } 469 } 470 } 471 return selectBox.toString(); 472 } 473 474 480 private Vector parseResources( 481 String resources 482 ) { 483 Vector ret = new Vector (); 484 if (resources != null) { 485 StringTokenizer resTokenizer = new StringTokenizer (resources, ";"); 486 while (resTokenizer.hasMoreElements()) { 487 String path = (String )resTokenizer.nextElement(); 488 ret.addElement(path); 489 } 490 } 491 return ret; 492 } 493 } 494 | Popular Tags |