1 31 32 package com.opencms.legacy; 33 34 import org.opencms.configuration.CmsConfigurationManager; 35 import org.opencms.db.CmsDbPool; 36 import org.opencms.db.CmsPublishList; 37 import org.opencms.file.CmsObject; 38 import org.opencms.file.CmsProject; 39 import org.opencms.file.CmsRequestContext; 40 import org.opencms.main.CmsException; 41 import org.opencms.main.CmsLog; 42 import org.opencms.main.OpenCms; 43 import org.opencms.module.A_CmsModuleAction; 44 import org.opencms.module.CmsModule; 45 import org.opencms.report.I_CmsReport; 46 import org.opencms.util.CmsStringUtil; 47 import org.opencms.util.CmsUUID; 48 49 import com.opencms.defaults.master.genericsql.*; 50 51 import java.util.ArrayList ; 52 import java.util.Collections ; 53 import java.util.HashMap ; 54 import java.util.Iterator ; 55 import java.util.List ; 56 import java.util.Map ; 57 import java.util.Vector ; 58 59 67 public class CmsLegacyModuleAction extends A_CmsModuleAction { 68 69 70 public static final String C_PARAM_PUBLISH_CLASSES = "publishclasses"; 71 72 73 public static final String C_PARAM_MAINTANANCE_CLASSES = "maintananceclasses"; 74 75 76 public static final String C_LEGACY_MODULE_NAME = "org.opencms.legacy.compatibility"; 77 78 84 private static List splitClassNames(String value) { 85 86 ArrayList result = new ArrayList (); 87 88 if (value == null) { 89 return result; 90 } 91 92 String [] names = CmsStringUtil.splitAsArray(value, ';'); 93 for (int i=0; i<names.length; i++) { 94 String name = names[i].trim(); 95 if (CmsStringUtil.isNotEmpty(name)) { 96 result.add(name); 97 } 98 } 99 100 return result; 101 } 102 103 108 public static List getLegacyModulePublishClasses() { 109 110 CmsModule module = OpenCms.getModuleManager().getModule(C_LEGACY_MODULE_NAME); 111 if (module == null) { 112 return Collections.EMPTY_LIST; 114 } 115 116 return splitClassNames(module.getParameter(C_PARAM_PUBLISH_CLASSES)); 117 } 118 119 122 public void initialize(CmsObject adminCms, CmsConfigurationManager configurationManager, CmsModule module) { 123 124 Map config = adminCms.getConfigurations(); 125 String dbName = config.get(CmsDbPool.KEY_DATABASE_NAME).toString().toLowerCase(); 126 String poolUrl = config.get("db.cos.pool").toString(); 127 128 CmsDbAccess dbAccess = new CmsDbAccess(poolUrl); 129 boolean masterAvailable = dbAccess.checkTables(); 130 131 if (CmsLog.getLog(this).isDebugEnabled()) { 132 CmsLog.getLog(this).debug("Checking master module tables for " + dbName 133 + " - " + ((masterAvailable) ? "found" : "not found")); 134 } 135 136 if (!masterAvailable) { 137 if (CmsLog.getLog(this).isDebugEnabled()) { 138 CmsLog.getLog(this).debug("Calling master module table setup script for " + dbName); 139 } 140 141 String [] modulePath = (String [])module.getResources().toArray(new String [1]); 142 143 String scriptPath; 144 if (dbName.toLowerCase().startsWith("mysql")) { 145 scriptPath = modulePath[0] + "setup/mysql.sql"; 147 } else { 148 scriptPath = modulePath[0] + "setup/" + dbName + ".sql"; 149 } 150 151 try { 152 String updateScript = new String (adminCms.readFile(scriptPath).getContents()); 153 154 HashMap replacers = new HashMap (); 155 for (Iterator i = module.getParameters().keySet().iterator(); i.hasNext();) { 156 String param = (String )i.next(), value = null; 157 if (param.startsWith("$")) { 158 value = (String )module.getParameters().get(param); 159 replacers.put(param, value); 160 } 161 } 162 dbAccess.updateDatabase(updateScript, replacers); 163 } catch (CmsException exc) { 164 if (CmsLog.getLog(this).isErrorEnabled()) { 165 CmsLog.getLog(this).error( 166 "Error while creating master module tables", 167 exc); 168 } 169 } 170 171 if (CmsLog.getLog(this).isInfoEnabled()) { 172 CmsLog.getLog(this).info( 173 ". Legacy initialization: Created master module tables"); 174 } 175 } 176 } 177 178 181 public void publishProject(CmsObject cms, CmsPublishList publishList, int backupTagId, I_CmsReport report) { 182 183 CmsRequestContext context = cms.getRequestContext(); 184 185 if (!publishList.isDirectPublish() 186 && context.currentProject().getType() != CmsProject.PROJECT_TYPE_TEMPORARY) { 187 188 List legacyPublishClasses = getLegacyModulePublishClasses(); 189 if (legacyPublishClasses.isEmpty()) { 190 return; 192 } 193 194 long publishDate = System.currentTimeMillis(); 195 boolean backupEnabled = OpenCms.getSystemInfo().isVersionHistoryEnabled(); 196 197 if (backupEnabled) { 198 try { 199 publishDate = cms.readBackupProject(backupTagId).getPublishingDate(); 200 } catch (CmsException e) { 201 } 203 204 if (publishDate == 0) { 205 publishDate = System.currentTimeMillis(); 206 } 207 } 208 209 Vector changedResources = new Vector (); 210 Vector changedModuleMasters = new Vector (); 211 212 for (int i = 0; i < legacyPublishClasses.size(); i++) { 213 try { 217 Class.forName((String )legacyPublishClasses.get(i)).getMethod( 220 "publishProject", 221 new Class [] { 222 CmsObject.class, 223 CmsUUID.class, 224 Boolean .class, 225 Integer .class, 226 Integer .class, 227 Long .class, 228 Vector .class, 229 Vector .class}).invoke( 230 null, 231 new Object [] { 232 cms, 233 publishList.getPublishHistoryId(), 234 new Boolean (OpenCms.getSystemInfo().isVersionHistoryEnabled()), 235 new Integer (context.currentProject().getId()), 236 new Integer (backupTagId), 237 new Long (publishDate), 238 changedResources, 239 changedModuleMasters}); 240 } catch (ClassNotFoundException ec) { 241 report.println(Messages.get().container(Messages.RPT_NONEXISTENT_PUBLISH_CLASS_FOR_MODULE_1, 242 legacyPublishClasses.get(i)), I_CmsReport.FORMAT_WARNING); 243 if (CmsLog.getLog(this).isErrorEnabled()) { 244 CmsLog.getLog(this).error( 245 "Error calling publish class of module " + (String )legacyPublishClasses.get(i), 246 ec); 247 } 248 } catch (Throwable t) { 249 report.println(t); 250 if (CmsLog.getLog(this).isErrorEnabled()) { 251 CmsLog.getLog(this).error( 252 "Error while publishing data of module " + (String )legacyPublishClasses.get(i), 253 t); 254 } 255 } 256 } 257 } 258 } 259 }
| Popular Tags
|