1 23 24 package org.infoglue.cmsinstaller; 25 26 import java.io.File ; 27 import java.io.FileInputStream ; 28 import java.io.FileReader ; 29 import java.io.FileWriter ; 30 import java.io.InputStreamReader ; 31 import java.io.Reader ; 32 import java.io.Writer ; 33 import java.util.ArrayList ; 34 import java.util.Collection ; 35 import java.util.Date ; 36 import java.util.HashMap ; 37 import java.util.Iterator ; 38 import java.util.List ; 39 import java.util.Map ; 40 41 import org.exolab.castor.jdo.Database; 42 import org.exolab.castor.jdo.JDO; 43 import org.exolab.castor.mapping.Mapping; 44 import org.exolab.castor.xml.Marshaller; 45 import org.exolab.castor.xml.Unmarshaller; 46 import org.infoglue.cms.applications.common.VisualFormatter; 47 import org.infoglue.cms.applications.common.actions.WebworkAbstractAction; 48 import org.infoglue.cms.controllers.kernel.impl.simple.AvailableServiceBindingController; 49 import org.infoglue.cms.controllers.kernel.impl.simple.CastorDatabaseService; 50 import org.infoglue.cms.controllers.kernel.impl.simple.CmsJDOCallback; 51 import org.infoglue.cms.controllers.kernel.impl.simple.ContentController; 52 import org.infoglue.cms.controllers.kernel.impl.simple.ContentTypeDefinitionController; 53 import org.infoglue.cms.controllers.kernel.impl.simple.LanguageController; 54 import org.infoglue.cms.controllers.kernel.impl.simple.RepositoryController; 55 import org.infoglue.cms.controllers.kernel.impl.simple.ServiceDefinitionController; 56 import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeController; 57 import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeTypeDefinitionController; 58 import org.infoglue.cms.entities.content.Content; 59 import org.infoglue.cms.entities.content.ContentVersion; 60 import org.infoglue.cms.entities.content.DigitalAsset; 61 import org.infoglue.cms.entities.content.impl.simple.ContentImpl; 62 import org.infoglue.cms.entities.content.impl.simple.DigitalAssetImpl; 63 import org.infoglue.cms.entities.management.AvailableServiceBinding; 64 import org.infoglue.cms.entities.management.ContentTypeDefinition; 65 import org.infoglue.cms.entities.management.Language; 66 import org.infoglue.cms.entities.management.Repository; 67 import org.infoglue.cms.entities.management.RepositoryLanguage; 68 import org.infoglue.cms.entities.management.ServiceDefinition; 69 import org.infoglue.cms.entities.management.SiteNodeTypeDefinition; 70 import org.infoglue.cms.entities.management.impl.simple.AvailableServiceBindingImpl; 71 import org.infoglue.cms.entities.management.impl.simple.ContentTypeDefinitionImpl; 72 import org.infoglue.cms.entities.management.impl.simple.InfoGlueExportImpl; 73 import org.infoglue.cms.entities.management.impl.simple.LanguageImpl; 74 import org.infoglue.cms.entities.management.impl.simple.RepositoryImpl; 75 import org.infoglue.cms.entities.management.impl.simple.ServiceDefinitionImpl; 76 import org.infoglue.cms.entities.management.impl.simple.SiteNodeTypeDefinitionImpl; 77 import org.infoglue.cms.entities.structure.Qualifyer; 78 import org.infoglue.cms.entities.structure.ServiceBinding; 79 import org.infoglue.cms.entities.structure.SiteNode; 80 import org.infoglue.cms.entities.structure.SiteNodeVersion; 81 import org.infoglue.cms.entities.structure.impl.simple.ServiceBindingImpl; 82 import org.infoglue.cms.entities.structure.impl.simple.SiteNodeImpl; 83 import org.infoglue.cms.entities.structure.impl.simple.SiteNodeVersionImpl; 84 import org.infoglue.cms.exception.SystemException; 85 import org.infoglue.cms.util.CmsPropertyHandler; 86 import org.infoglue.cms.util.FileUploadHelper; 87 88 93 94 public class InitialDataInstaller 95 { 96 public Database getDatabase() throws Exception 97 { 98 try 99 { 100 JDO jdo = new JDO(); 101 jdo.setDatabaseName("INFOGLUE_CMS"); 102 File file = new File ("localConfigs/database.xml"); 103 jdo.setConfiguration(file.toString()); 105 jdo.setClassLoader(CastorDatabaseService.class.getClassLoader()); 107 jdo.setCallbackInterceptor(new CmsJDOCallback() ); 108 return jdo.getDatabase(); 109 } 110 catch(Exception e) 111 { 112 e.printStackTrace(); 113 throw e; 114 } 115 } 116 117 120 121 public void importRepository(File file) throws Exception 122 { 123 CmsPropertyHandler.setApplicationName("cms"); 124 CmsPropertyHandler.setPropertyFile(new File ("classes/cms.properties")); 125 126 Database db = getDatabase(); 127 128 try 129 { 130 Mapping map = new Mapping(); 131 File xmlMappingFile = new File ("classes/xml_mapping_site.xml"); 132 map.loadMapping(xmlMappingFile.toString()); 134 135 db.begin(); 137 138 String encoding = "UTF-8"; 140 FileInputStream fis = new FileInputStream (file); 141 InputStreamReader reader = new InputStreamReader (fis, encoding); 142 144 Unmarshaller unmarshaller = new Unmarshaller(map); 145 unmarshaller.setWhitespacePreserve(true); 146 InfoGlueExportImpl infoGlueExportImplRead = (InfoGlueExportImpl)unmarshaller.unmarshal(reader); 147 SiteNode readSiteNode = infoGlueExportImplRead.getRootSiteNode(); 148 Content readContent = infoGlueExportImplRead.getRootContent(); 150 152 Repository repositoryRead = readSiteNode.getRepository(); 153 System.out.println("Importing " + repositoryRead.getName()); 154 readContent.setRepository((RepositoryImpl)repositoryRead); 155 156 db.create(repositoryRead); 157 158 Collection repositoryLanguages = repositoryRead.getRepositoryLanguages(); 159 Iterator repositoryLanguagesIterator = repositoryLanguages.iterator(); 160 while(repositoryLanguagesIterator.hasNext()) 161 { 162 RepositoryLanguage repositoryLanguage = (RepositoryLanguage)repositoryLanguagesIterator.next(); 163 Language originalLanguage = repositoryLanguage.getLanguage(); 164 165 Language language = LanguageController.getController().getLanguageWithName(originalLanguage.getName(), db); 166 if(language == null) 167 { 168 db.create(originalLanguage); 169 language = originalLanguage; 170 } 171 172 repositoryLanguage.setLanguage(language); 173 repositoryLanguage.setRepository(repositoryRead); 174 175 db.create(repositoryLanguage); 176 177 language.getRepositoryLanguages().add(repositoryLanguage); 180 } 181 182 readSiteNode.setRepository((RepositoryImpl)repositoryRead); 183 184 Map contentIdMap = new HashMap (); 185 Map siteNodeIdMap = new HashMap (); 186 189 List allContents = new ArrayList (); 190 createContents(readContent, contentIdMap, allContents, db); 191 List allSiteNodes = new ArrayList (); 193 createStructure(readSiteNode, contentIdMap, siteNodeIdMap, allSiteNodes, db); 194 195 updateContentVersions(allContents, contentIdMap, siteNodeIdMap); 196 reader.close(); 197 198 db.commit(); 199 200 db.begin(); 201 SiteNodeTypeDefinition siteNodeTypeDefinition = SiteNodeTypeDefinitionController.getController().getSiteNodeTypeDefinitionWithName(readSiteNode.getSiteNodeTypeDefinition().getName(), db, false); 202 Iterator availableServiceBindingsIterator = siteNodeTypeDefinition.getAvailableServiceBindings().iterator(); 205 while(availableServiceBindingsIterator.hasNext()) 206 { 207 AvailableServiceBinding anAvailableServiceBinding = (AvailableServiceBinding)availableServiceBindingsIterator.next(); 208 } 210 db.commit(); 211 212 db.close(); 213 214 } 215 catch ( Exception e) 216 { 217 e.printStackTrace(); 218 db.rollback(); 219 throw e; 220 } 221 } 222 223 224 231 private void createStructure(SiteNode siteNode, Map contentIdMap, Map siteNodeIdMap, List allSiteNodes, Database db) throws Exception 232 { 233 Integer originalSiteNodeId = siteNode.getSiteNodeId(); 234 235 SiteNodeTypeDefinition originalSiteNodeTypeDefinition = siteNode.getSiteNodeTypeDefinition(); 236 SiteNodeTypeDefinition siteNodeTypeDefinition = SiteNodeTypeDefinitionController.getController().getSiteNodeTypeDefinitionWithName(siteNode.getSiteNodeTypeDefinition().getName(), db, false); 237 if(siteNodeTypeDefinition == null) 239 { 240 db.create(originalSiteNodeTypeDefinition); 242 siteNodeTypeDefinition = originalSiteNodeTypeDefinition; 243 } 244 245 siteNode.setSiteNodeTypeDefinition((SiteNodeTypeDefinitionImpl)siteNodeTypeDefinition); 246 247 String mappedMetaInfoContentId = (String )contentIdMap.get(siteNode.getMetaInfoContentId().toString()); 248 siteNode.setMetaInfoContentId(new Integer (mappedMetaInfoContentId)); 250 251 db.create(siteNode); 252 253 allSiteNodes.add(siteNode); 254 255 Integer newSiteNodeId = siteNode.getSiteNodeId(); 256 siteNodeIdMap.put(originalSiteNodeId.toString(), newSiteNodeId.toString()); 258 259 Collection childSiteNodes = siteNode.getChildSiteNodes(); 260 if(childSiteNodes != null) 261 { 262 Iterator childSiteNodesIterator = childSiteNodes.iterator(); 263 while(childSiteNodesIterator.hasNext()) 264 { 265 SiteNode childSiteNode = (SiteNode)childSiteNodesIterator.next(); 266 childSiteNode.setRepository(siteNode.getRepository()); 267 childSiteNode.setParentSiteNode((SiteNodeImpl)siteNode); 268 createStructure(childSiteNode, contentIdMap, siteNodeIdMap, allSiteNodes, db); 269 } 270 } 271 272 Collection siteNodeVersions = siteNode.getSiteNodeVersions(); 273 Iterator siteNodeVersionsIterator = siteNodeVersions.iterator(); 274 while(siteNodeVersionsIterator.hasNext()) 275 { 276 SiteNodeVersion siteNodeVersion = (SiteNodeVersion)siteNodeVersionsIterator.next(); 277 278 Collection serviceBindings = siteNodeVersion.getServiceBindings(); 279 280 siteNodeVersion.setOwningSiteNode((SiteNodeImpl)siteNode); 281 282 db.create(siteNodeVersion); 283 284 Iterator serviceBindingsIterator = serviceBindings.iterator(); 285 while(serviceBindingsIterator.hasNext()) 286 { 287 ServiceBinding serviceBinding = (ServiceBinding)serviceBindingsIterator.next(); 288 289 ServiceDefinition originalServiceDefinition = serviceBinding.getServiceDefinition(); 290 String serviceDefinitionName = originalServiceDefinition.getName(); 291 ServiceDefinition serviceDefinition = ServiceDefinitionController.getController().getServiceDefinitionWithName(serviceDefinitionName, db, false); 293 if(serviceDefinition == null) 294 { 295 db.create(originalServiceDefinition); 296 serviceDefinition = originalServiceDefinition; 297 } 299 300 serviceBinding.setServiceDefinition((ServiceDefinitionImpl)serviceDefinition); 301 302 AvailableServiceBinding originalAvailableServiceBinding = serviceBinding.getAvailableServiceBinding(); 303 String availableServiceBindingName = originalAvailableServiceBinding.getName(); 304 AvailableServiceBinding availableServiceBinding = AvailableServiceBindingController.getController().getAvailableServiceBindingWithName(availableServiceBindingName, db, false); 306 if(availableServiceBinding == null) 308 { 309 db.create(originalAvailableServiceBinding); 311 availableServiceBinding = originalAvailableServiceBinding; 312 siteNodeTypeDefinition.getAvailableServiceBindings().add((AvailableServiceBindingImpl)availableServiceBinding); 314 serviceDefinition.getAvailableServiceBindings().add((AvailableServiceBindingImpl)availableServiceBinding); 315 availableServiceBinding.getSiteNodeTypeDefinitions().add((SiteNodeTypeDefinitionImpl)siteNodeTypeDefinition); 316 availableServiceBinding.getServiceDefinitions().add((ServiceDefinitionImpl)serviceDefinition); 317 } 318 else 319 { 320 if(!siteNodeTypeDefinition.getAvailableServiceBindings().contains(availableServiceBinding)) 321 { 322 siteNodeTypeDefinition.getAvailableServiceBindings().add((AvailableServiceBindingImpl)availableServiceBinding); 323 availableServiceBinding.getSiteNodeTypeDefinitions().add(siteNodeTypeDefinition); 324 } 325 } 326 327 Iterator availableServiceBindingsIterator = siteNodeTypeDefinition.getAvailableServiceBindings().iterator(); 329 while(availableServiceBindingsIterator.hasNext()) 330 { 331 AvailableServiceBinding anAvailableServiceBinding = (AvailableServiceBinding)availableServiceBindingsIterator.next(); 332 } 334 335 serviceBinding.setAvailableServiceBinding((AvailableServiceBindingImpl)availableServiceBinding); 336 337 338 Collection qualifyers = serviceBinding.getBindingQualifyers(); 339 Iterator qualifyersIterator = qualifyers.iterator(); 340 while(qualifyersIterator.hasNext()) 341 { 342 Qualifyer qualifyer = (Qualifyer)qualifyersIterator.next(); 343 qualifyer.setServiceBinding((ServiceBindingImpl)serviceBinding); 344 345 String entityName = qualifyer.getName(); 346 String entityId = qualifyer.getValue(); 347 348 if(entityName.equalsIgnoreCase("contentId")) 349 { 350 String mappedContentId = (String )contentIdMap.get(entityId); 351 qualifyer.setValue(mappedContentId); 352 } 353 else if(entityName.equalsIgnoreCase("siteNodeId")) 354 { 355 String mappedSiteNodeId = (String )siteNodeIdMap.get(entityId); 356 qualifyer.setValue(mappedSiteNodeId); 357 } 358 } 359 360 serviceBinding.setSiteNodeVersion((SiteNodeVersionImpl)siteNodeVersion); 361 362 db.create(serviceBinding); 363 364 } 365 } 366 367 } 368 369 370 377 private void createContents(Content content, Map idMap, List allContents, Database db) throws Exception 378 { 379 Integer originalContentId = content.getContentId(); 380 381 ContentTypeDefinition originalContentTypeDefinition = content.getContentTypeDefinition(); 382 if(originalContentTypeDefinition != null) 383 { 384 ContentTypeDefinition contentTypeDefinition = ContentTypeDefinitionController.getController().getContentTypeDefinitionWithName(originalContentTypeDefinition.getName(), db); 385 if(contentTypeDefinition == null) 386 { 387 db.create(originalContentTypeDefinition); 388 contentTypeDefinition = originalContentTypeDefinition; 389 } 390 391 content.setContentTypeDefinition((ContentTypeDefinitionImpl)contentTypeDefinition); 392 } 393 394 db.create(content); 395 396 allContents.add(content); 397 398 Integer newContentId = content.getContentId(); 399 System.out.println("content:" + originalContentId + "(" + content.getName() + ")-->" + newContentId); 400 idMap.put(originalContentId.toString(), newContentId.toString()); 401 402 Collection contentVersions = content.getContentVersions(); 403 Iterator contentVersionsIterator = contentVersions.iterator(); 404 while(contentVersionsIterator.hasNext()) 405 { 406 ContentVersion contentVersion = (ContentVersion)contentVersionsIterator.next(); 407 Language language = LanguageController.getController().getLanguageWithName(contentVersion.getLanguage().getName(), db); 408 409 contentVersion.setOwningContent((ContentImpl)content); 410 contentVersion.setLanguage((LanguageImpl)language); 411 412 Collection digitalAssets = contentVersion.getDigitalAssets(); 413 if(digitalAssets != null) 414 { 415 List initialDigitalAssets = new ArrayList (); 416 417 Iterator digitalAssetsIterator = digitalAssets.iterator(); 418 while(digitalAssetsIterator.hasNext()) 419 { 420 DigitalAsset digitalAsset = (DigitalAsset)digitalAssetsIterator.next(); 421 422 425 List initialContentVersions = new ArrayList (); 426 initialContentVersions.add(contentVersion); 427 digitalAsset.setContentVersions(initialContentVersions); 428 429 db.create(digitalAsset); 430 431 initialDigitalAssets.add(digitalAsset); 432 } 433 434 contentVersion.setDigitalAssets(initialDigitalAssets); 435 } 436 437 db.create(contentVersion); 438 } 439 440 Collection childContents = content.getChildren(); 441 if(childContents != null) 442 { 443 Iterator childContentsIterator = childContents.iterator(); 444 while(childContentsIterator.hasNext()) 445 { 446 Content childContent = (Content)childContentsIterator.next(); 447 childContent.setRepository(content.getRepository()); 448 childContent.setParentContent((ContentImpl)content); 449 createContents(childContent, idMap, allContents, db); 450 } 451 } 452 } 453 454 457 private void updateContentVersions(List allContents, Map contentIdMap, Map siteNodeIdMap) 458 { 459 Iterator allContentsIterator = allContents.iterator(); 461 boolean debug = false; 462 463 while(allContentsIterator.hasNext()) 464 { 465 Content content = (Content)allContentsIterator.next(); 466 if(content.getName().indexOf("officestand2") > -1 || content.getName().indexOf("Startpage article") > -1) 467 debug = false; 469 else 470 debug = false; 471 472 Iterator contentVersionIterator = content.getContentVersions().iterator(); 473 while(contentVersionIterator.hasNext()) 474 { 475 ContentVersion contentVersion = (ContentVersion)contentVersionIterator.next(); 476 String contentVersionValue = contentVersion.getVersionValue(); 477 if(debug) 478 System.out.println(contentVersionValue); 479 480 Iterator contentIdMapIterator = contentIdMap.keySet().iterator(); 481 while (contentIdMapIterator.hasNext()) 482 { 483 String oldContentId = (String )contentIdMapIterator.next(); 484 String newContentId = (String )contentIdMap.get(oldContentId); 485 if(debug) 486 System.out.println("replacing " + oldContentId + "-->" + newContentId); 487 contentVersionValue = contentVersionValue.replaceAll("contentId=\"" + oldContentId + "\"", "contentId=\"" + newContentId + "\""); 488 contentVersionValue = contentVersionValue.replaceAll("contentId=" + oldContentId + "&", "contentId=" + newContentId + "&"); 489 contentVersionValue = contentVersionValue.replaceAll("getInlineAssetUrl\\(" + oldContentId + ",", "getInlineAssetUrl\\(" + newContentId + ","); 490 contentVersionValue = contentVersionValue.replaceAll("languageId," + oldContentId + "\\)", "languageId," + newContentId + "\\)"); 491 contentVersionValue = contentVersionValue.replaceAll("entity=\"Content\" entityId=\"" + oldContentId + "\"", "entity=\"Content\" entityId=\"" + newContentId + "\""); 492 contentVersionValue = contentVersionValue.replaceAll("entity='Content'><id>" + oldContentId + "</id>", "entity='Content'><id>" + newContentId + "</id>"); 493 } 495 496 Iterator siteNodeIdMapIterator = siteNodeIdMap.keySet().iterator(); 497 while (siteNodeIdMapIterator.hasNext()) 498 { 499 String oldSiteNodeId = (String )siteNodeIdMapIterator.next(); 500 String newSiteNodeId = (String )siteNodeIdMap.get(oldSiteNodeId); 501 contentVersionValue = contentVersionValue.replaceAll("siteNodeId=\"" + oldSiteNodeId + "\"", "siteNodeId=\"" + newSiteNodeId + "\""); 502 contentVersionValue = contentVersionValue.replaceAll("getPageUrl\\(" + oldSiteNodeId + ",", "getPageUrl\\(" + newSiteNodeId + ","); 503 contentVersionValue = contentVersionValue.replaceAll("entity=\"SiteNode\" entityId=\"" + oldSiteNodeId + "\"", "entity=\"SiteNode\" entityId=\"" + newSiteNodeId + "\""); 504 contentVersionValue = contentVersionValue.replaceAll("entity='SiteNode'><id>" + oldSiteNodeId + "</id>", "entity='SiteNode'><id>" + newSiteNodeId + "</id>"); 505 } 506 507 contentVersion.setVersionValue(contentVersionValue); 509 } 510 } 511 } 512 513 } 514 | Popular Tags |