1 23 24 package org.infoglue.cms.applications.managementtool.actions; 25 26 import java.io.BufferedReader ; 27 import java.io.File ; 28 import java.io.FileInputStream ; 29 import java.io.InputStreamReader ; 30 import java.util.ArrayList ; 31 import java.util.Collection ; 32 import java.util.HashMap ; 33 import java.util.Iterator ; 34 import java.util.List ; 35 import java.util.Map ; 36 37 import org.apache.log4j.Logger; 38 import org.exolab.castor.jdo.Database; 39 import org.exolab.castor.jdo.TransactionNotInProgressException; 40 import org.exolab.castor.mapping.Mapping; 41 import org.exolab.castor.xml.Unmarshaller; 42 import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction; 43 import org.infoglue.cms.controllers.kernel.impl.simple.AvailableServiceBindingController; 44 import org.infoglue.cms.controllers.kernel.impl.simple.CastorDatabaseService; 45 import org.infoglue.cms.controllers.kernel.impl.simple.ContentController; 46 import org.infoglue.cms.controllers.kernel.impl.simple.ContentTypeDefinitionController; 47 import org.infoglue.cms.controllers.kernel.impl.simple.LanguageController; 48 import org.infoglue.cms.controllers.kernel.impl.simple.ServiceDefinitionController; 49 import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeTypeDefinitionController; 50 import org.infoglue.cms.entities.content.Content; 51 import org.infoglue.cms.entities.content.ContentVersion; 52 import org.infoglue.cms.entities.content.DigitalAsset; 53 import org.infoglue.cms.entities.content.impl.simple.ContentImpl; 54 import org.infoglue.cms.entities.management.AvailableServiceBinding; 55 import org.infoglue.cms.entities.management.ContentTypeDefinition; 56 import org.infoglue.cms.entities.management.Language; 57 import org.infoglue.cms.entities.management.Repository; 58 import org.infoglue.cms.entities.management.RepositoryLanguage; 59 import org.infoglue.cms.entities.management.ServiceDefinition; 60 import org.infoglue.cms.entities.management.SiteNodeTypeDefinition; 61 import org.infoglue.cms.entities.management.impl.simple.AvailableServiceBindingImpl; 62 import org.infoglue.cms.entities.management.impl.simple.ContentTypeDefinitionImpl; 63 import org.infoglue.cms.entities.management.impl.simple.InfoGlueExportImpl; 64 import org.infoglue.cms.entities.management.impl.simple.LanguageImpl; 65 import org.infoglue.cms.entities.management.impl.simple.RepositoryImpl; 66 import org.infoglue.cms.entities.management.impl.simple.ServiceDefinitionImpl; 67 import org.infoglue.cms.entities.management.impl.simple.SiteNodeTypeDefinitionImpl; 68 import org.infoglue.cms.entities.structure.Qualifyer; 69 import org.infoglue.cms.entities.structure.ServiceBinding; 70 import org.infoglue.cms.entities.structure.SiteNode; 71 import org.infoglue.cms.entities.structure.SiteNodeVersion; 72 import org.infoglue.cms.entities.structure.impl.simple.ServiceBindingImpl; 73 import org.infoglue.cms.entities.structure.impl.simple.SiteNodeImpl; 74 import org.infoglue.cms.entities.structure.impl.simple.SiteNodeVersionImpl; 75 import org.infoglue.cms.exception.SystemException; 76 import org.infoglue.cms.util.CmsPropertyHandler; 77 import org.infoglue.cms.util.FileUploadHelper; 78 79 import webwork.action.ActionContext; 80 81 86 87 public class ImportRepositoryAction extends InfoGlueAbstractAction 88 { 89 public final static Logger logger = Logger.getLogger(ImportRepositoryAction.class.getName()); 90 91 private String onlyLatestVersions = "true"; 92 93 98 99 public String doInput() throws Exception 100 { 101 return "input"; 102 } 103 104 107 108 protected String doExecute() throws SystemException 109 { 110 Database db = CastorDatabaseService.getDatabase(); 111 112 try 113 { 114 File file = FileUploadHelper.getUploadedFile(ActionContext.getContext().getMultiPartRequest()); 116 if(file == null || !file.exists()) 118 throw new SystemException("The file upload must have gone bad as no file reached the import utility."); 119 120 String encoding = "UTF-8"; 121 int version = 1; 122 123 125 FileInputStream fisTemp = new FileInputStream (file); 126 InputStreamReader readerTemp = new InputStreamReader (fisTemp, encoding); 127 BufferedReader bufferedReaderTemp = new BufferedReader (readerTemp); 128 String line = bufferedReaderTemp.readLine(); 129 int index = 0; 130 while(line != null && index < 50) 131 { 132 logger.info("line:" + line + '\n'); 133 if(line.indexOf("contentTypeDefinitionId") > -1) 134 { 135 logger.info("This was a new export..."); 136 version = 2; 137 break; 138 } 139 line = bufferedReaderTemp.readLine(); 140 index++; 141 } 142 143 bufferedReaderTemp.close(); 144 readerTemp.close(); 145 fisTemp.close(); 146 147 Mapping map = new Mapping(); 148 if(version == 1) 149 { 150 logger.info("MappingFile:" + CastorDatabaseService.class.getResource("/xml_mapping_site.xml").toString()); 151 map.loadMapping(CastorDatabaseService.class.getResource("/xml_mapping_site.xml").toString()); 152 } 153 else if(version == 2) 154 { 155 logger.info("MappingFile:" + CastorDatabaseService.class.getResource("/xml_mapping_site_2.5.xml").toString()); 156 map.loadMapping(CastorDatabaseService.class.getResource("/xml_mapping_site_2.5.xml").toString()); 157 } 158 159 db.begin(); 161 162 163 FileInputStream fis = new FileInputStream (file); 165 InputStreamReader reader = new InputStreamReader (fis, encoding); 166 168 Unmarshaller unmarshaller = new Unmarshaller(map); 169 unmarshaller.setWhitespacePreserve(true); 170 InfoGlueExportImpl infoGlueExportImplRead = (InfoGlueExportImpl)unmarshaller.unmarshal(reader); 171 Collection contentTypeDefinitions = infoGlueExportImplRead.getContentTypeDefinitions(); 172 logger.info("Found " + contentTypeDefinitions.size() + " content type definitions"); 173 174 SiteNode readSiteNode = infoGlueExportImplRead.getRootSiteNode(); 175 logger.info(readSiteNode.getName()); 176 Content readContent = infoGlueExportImplRead.getRootContent(); 177 logger.info(readContent.getName()); 178 179 Repository repositoryRead = readSiteNode.getRepository(); 180 logger.info(repositoryRead.getName()); 181 readContent.setRepository((RepositoryImpl)repositoryRead); 182 183 db.create(repositoryRead); 184 185 Collection repositoryLanguages = repositoryRead.getRepositoryLanguages(); 186 Iterator repositoryLanguagesIterator = repositoryLanguages.iterator(); 187 while(repositoryLanguagesIterator.hasNext()) 188 { 189 RepositoryLanguage repositoryLanguage = (RepositoryLanguage)repositoryLanguagesIterator.next(); 190 Language originalLanguage = repositoryLanguage.getLanguage(); 191 192 Language language = LanguageController.getController().getLanguageWithCode(originalLanguage.getLanguageCode(), db); 193 if(language == null) 194 { 195 db.create(originalLanguage); 196 language = originalLanguage; 197 } 198 199 repositoryLanguage.setLanguage(language); 200 repositoryLanguage.setRepository(repositoryRead); 201 202 db.create(repositoryLanguage); 203 204 logger.info("language:" + language); 205 logger.info("language.getRepositoryLanguages():" + language.getRepositoryLanguages()); 206 language.getRepositoryLanguages().add(repositoryLanguage); 207 } 208 209 readSiteNode.setRepository((RepositoryImpl)repositoryRead); 210 211 Map contentIdMap = new HashMap (); 212 Map siteNodeIdMap = new HashMap (); 213 214 List allContents = new ArrayList (); 215 createContents(readContent, contentIdMap, allContents, contentTypeDefinitions, version, db); 216 List allSiteNodes = new ArrayList (); 217 createStructure(readSiteNode, contentIdMap, siteNodeIdMap, allSiteNodes, db); 218 219 List allContentIds = new ArrayList (); 220 Iterator allContentsIterator = allContents.iterator(); 221 while(allContentsIterator.hasNext()) 222 { 223 Content content = (Content)allContentsIterator.next(); 224 allContentIds.add(content.getContentId()); 225 } 226 227 db.commit(); 228 db.close(); 229 230 Iterator allContentIdsIterator = allContentIds.iterator(); 231 while(allContentIdsIterator.hasNext()) 232 { 233 Integer contentId = (Integer )allContentIdsIterator.next(); 234 try 235 { 236 db = CastorDatabaseService.getDatabase(); 237 db.begin(); 238 239 Content content = ContentController.getContentController().getContentWithId(contentId, db); 240 updateContentVersions(content, contentIdMap, siteNodeIdMap); 241 242 db.commit(); 243 } 244 catch(Exception e) 245 { 246 try 247 { 248 db.rollback(); 249 } 250 catch(Exception e2) { e2.printStackTrace(); } 251 logger.error("An error occurred when updating content version for content: " + e.getMessage(), e); 252 } 253 finally 254 { 255 db.close(); 256 } 257 } 258 259 261 reader.close(); 262 263 266 } 267 catch ( Exception e) 268 { 269 try 270 { 271 db.rollback(); 272 db.close(); 273 } 274 catch (Exception e1) 275 { 276 logger.error("An error occurred when importing a repository: " + e.getMessage(), e); 277 throw new SystemException("An error occurred when importing a repository: " + e.getMessage(), e); 278 } 279 280 logger.error("An error occurred when importing a repository: " + e.getMessage(), e); 281 throw new SystemException("An error occurred when importing a repository: " + e.getMessage(), e); 282 } 283 284 return "success"; 285 } 286 287 288 295 private void createStructure(SiteNode siteNode, Map contentIdMap, Map siteNodeIdMap, List allSiteNodes, Database db) throws Exception 296 { 297 logger.info("siteNode:" + siteNode.getName()); 298 299 Integer originalSiteNodeId = siteNode.getSiteNodeId(); 300 301 logger.info("originalSiteNodeId:" + originalSiteNodeId); 302 303 SiteNodeTypeDefinition originalSiteNodeTypeDefinition = siteNode.getSiteNodeTypeDefinition(); 304 SiteNodeTypeDefinition siteNodeTypeDefinition = null; 305 if(originalSiteNodeTypeDefinition != null) 306 { 307 logger.info("originalSiteNodeTypeDefinition:" + originalSiteNodeTypeDefinition); 308 siteNodeTypeDefinition = SiteNodeTypeDefinitionController.getController().getSiteNodeTypeDefinitionWithName(siteNode.getSiteNodeTypeDefinition().getName(), db, false); 309 logger.info("siteNodeTypeDefinition:" + siteNodeTypeDefinition); 310 if(siteNodeTypeDefinition == null) 311 { 312 db.create(originalSiteNodeTypeDefinition); 313 siteNodeTypeDefinition = originalSiteNodeTypeDefinition; 314 } 315 316 siteNode.setSiteNodeTypeDefinition((SiteNodeTypeDefinitionImpl)siteNodeTypeDefinition); 317 } 318 319 String mappedMetaInfoContentId = "-1"; 320 if(siteNode.getMetaInfoContentId() != null) 321 { 322 if(contentIdMap.containsKey(siteNode.getMetaInfoContentId().toString())) 323 mappedMetaInfoContentId = (String )contentIdMap.get(siteNode.getMetaInfoContentId().toString()); 324 } 326 siteNode.setMetaInfoContentId(new Integer (mappedMetaInfoContentId)); 327 328 db.create(siteNode); 329 330 allSiteNodes.add(siteNode); 331 332 Integer newSiteNodeId = siteNode.getSiteNodeId(); 333 logger.info(originalSiteNodeId + ":" + newSiteNodeId); 334 siteNodeIdMap.put(originalSiteNodeId.toString(), newSiteNodeId.toString()); 335 336 Collection childSiteNodes = siteNode.getChildSiteNodes(); 337 if(childSiteNodes != null) 338 { 339 Iterator childSiteNodesIterator = childSiteNodes.iterator(); 340 while(childSiteNodesIterator.hasNext()) 341 { 342 SiteNode childSiteNode = (SiteNode)childSiteNodesIterator.next(); 343 childSiteNode.setRepository(siteNode.getRepository()); 344 childSiteNode.setParentSiteNode((SiteNodeImpl)siteNode); 345 createStructure(childSiteNode, contentIdMap, siteNodeIdMap, allSiteNodes, db); 346 } 347 } 348 349 Collection siteNodeVersions = siteNode.getSiteNodeVersions(); 350 351 if(onlyLatestVersions.equalsIgnoreCase("true")) 352 { 353 logger.info("org siteNodeVersions:" + siteNodeVersions.size()); 354 List selectedSiteNodeVersions = new ArrayList (); 355 Iterator realSiteNodeVersionsIterator = siteNodeVersions.iterator(); 356 while(realSiteNodeVersionsIterator.hasNext()) 357 { 358 SiteNodeVersion siteNodeVersion = (SiteNodeVersion)realSiteNodeVersionsIterator.next(); 359 Iterator selectedSiteNodeVersionsIterator = selectedSiteNodeVersions.iterator(); 360 boolean addVersion = true; 361 while(selectedSiteNodeVersionsIterator.hasNext()) 362 { 363 SiteNodeVersion currentSiteNodeVersion = (SiteNodeVersion)selectedSiteNodeVersionsIterator.next(); 364 if(siteNodeVersion.getIsActive().booleanValue() && siteNodeVersion.getSiteNodeVersionId().intValue() > currentSiteNodeVersion.getSiteNodeVersionId().intValue()) 365 { 366 logger.info("A later version was found... removing this one.."); 367 selectedSiteNodeVersionsIterator.remove(); 368 addVersion = true; 369 } 370 } 371 372 if(addVersion) 373 selectedSiteNodeVersions.add(siteNodeVersion); 374 } 375 376 siteNodeVersions = selectedSiteNodeVersions; 377 } 378 379 Iterator siteNodeVersionsIterator = siteNodeVersions.iterator(); 380 while(siteNodeVersionsIterator.hasNext()) 381 { 382 SiteNodeVersion siteNodeVersion = (SiteNodeVersion)siteNodeVersionsIterator.next(); 383 384 Collection serviceBindings = siteNodeVersion.getServiceBindings(); 385 386 siteNodeVersion.setOwningSiteNode((SiteNodeImpl)siteNode); 387 388 db.create(siteNodeVersion); 389 390 Iterator serviceBindingsIterator = serviceBindings.iterator(); 391 while(serviceBindingsIterator.hasNext()) 392 { 393 ServiceBinding serviceBinding = (ServiceBinding)serviceBindingsIterator.next(); 394 logger.info("serviceBinding:" + serviceBinding.getName()); 395 396 ServiceDefinition originalServiceDefinition = serviceBinding.getServiceDefinition(); 397 String serviceDefinitionName = originalServiceDefinition.getName(); 398 ServiceDefinition serviceDefinition = ServiceDefinitionController.getController().getServiceDefinitionWithName(serviceDefinitionName, db, false); 399 if(serviceDefinition == null) 400 { 401 db.create(originalServiceDefinition); 402 serviceDefinition = originalServiceDefinition; 403 } 405 406 serviceBinding.setServiceDefinition((ServiceDefinitionImpl)serviceDefinition); 407 408 AvailableServiceBinding originalAvailableServiceBinding = serviceBinding.getAvailableServiceBinding(); 409 String availableServiceBindingName = originalAvailableServiceBinding.getName(); 410 logger.info("availableServiceBindingName:" + availableServiceBindingName); 411 AvailableServiceBinding availableServiceBinding = AvailableServiceBindingController.getController().getAvailableServiceBindingWithName(availableServiceBindingName, db, false); 412 if(availableServiceBinding == null) 413 { 414 logger.info("There was no availableServiceBinding registered under:" + availableServiceBindingName); 415 logger.info("originalAvailableServiceBinding:" + originalAvailableServiceBinding.getName() + ":" + originalAvailableServiceBinding.getIsInheritable()); 416 db.create(originalAvailableServiceBinding); 417 availableServiceBinding = originalAvailableServiceBinding; 418 logger.info("Notifying:" + siteNodeTypeDefinition.getName() + " about the new availableServiceBinding " + availableServiceBinding.getName()); 419 if(siteNodeTypeDefinition != null) 420 { 421 siteNodeTypeDefinition.getAvailableServiceBindings().add((AvailableServiceBindingImpl)availableServiceBinding); 422 serviceDefinition.getAvailableServiceBindings().add((AvailableServiceBindingImpl)availableServiceBinding); 423 availableServiceBinding.getSiteNodeTypeDefinitions().add((SiteNodeTypeDefinitionImpl)siteNodeTypeDefinition); 424 availableServiceBinding.getServiceDefinitions().add((ServiceDefinitionImpl)serviceDefinition); 425 } 426 } 427 else 428 { 429 if(siteNodeTypeDefinition != null && !siteNodeTypeDefinition.getAvailableServiceBindings().contains(availableServiceBinding)) 430 { 431 siteNodeTypeDefinition.getAvailableServiceBindings().add((AvailableServiceBindingImpl)availableServiceBinding); 432 availableServiceBinding.getSiteNodeTypeDefinitions().add(siteNodeTypeDefinition); 433 } 434 } 435 436 serviceBinding.setAvailableServiceBinding((AvailableServiceBindingImpl)availableServiceBinding); 437 438 439 Collection qualifyers = serviceBinding.getBindingQualifyers(); 440 Iterator qualifyersIterator = qualifyers.iterator(); 441 while(qualifyersIterator.hasNext()) 442 { 443 Qualifyer qualifyer = (Qualifyer)qualifyersIterator.next(); 444 qualifyer.setServiceBinding((ServiceBindingImpl)serviceBinding); 445 446 String entityName = qualifyer.getName(); 447 String entityId = qualifyer.getValue(); 448 449 if(entityName.equalsIgnoreCase("contentId")) 450 { 451 String mappedContentId = (String )contentIdMap.get(entityId); 452 qualifyer.setValue((mappedContentId == null) ? entityId : mappedContentId); 453 } 454 else if(entityName.equalsIgnoreCase("siteNodeId")) 455 { 456 String mappedSiteNodeId = (String )siteNodeIdMap.get(entityId); 457 qualifyer.setValue((mappedSiteNodeId == null) ? entityId : mappedSiteNodeId); 458 } 459 } 460 461 serviceBinding.setSiteNodeVersion((SiteNodeVersionImpl)siteNodeVersion); 462 463 db.create(serviceBinding); 464 465 } 466 } 467 468 } 469 470 471 478 479 private List createContents(Content content, Map idMap, List allContents, Collection contentTypeDefinitions, int version, Database db) throws Exception 480 { 481 Integer originalContentId = content.getContentId(); 482 483 if(version == 2) 484 { 485 Integer contentTypeDefinitionId = ((ContentImpl)content).getContentTypeDefinitionId(); 486 if(contentTypeDefinitionId != null) 487 { 488 ContentTypeDefinition originalContentTypeDefinition = null; 489 Iterator contentTypeDefinitionsIterator = contentTypeDefinitions.iterator(); 490 while(contentTypeDefinitionsIterator.hasNext()) 491 { 492 ContentTypeDefinition contentTypeDefinitionCandidate = (ContentTypeDefinition)contentTypeDefinitionsIterator.next(); 493 if(contentTypeDefinitionCandidate.getId().intValue() == contentTypeDefinitionId.intValue()) 494 { 495 originalContentTypeDefinition = contentTypeDefinitionCandidate; 496 break; 497 } 498 } 499 500 if(originalContentTypeDefinition != null) 501 { 502 ContentTypeDefinition contentTypeDefinition = ContentTypeDefinitionController.getController().getContentTypeDefinitionWithName(originalContentTypeDefinition.getName(), db); 503 if(contentTypeDefinition == null) 504 { 505 db.create(originalContentTypeDefinition); 506 contentTypeDefinition = originalContentTypeDefinition; 507 } 508 509 content.setContentTypeDefinition((ContentTypeDefinitionImpl)contentTypeDefinition); 510 } 511 } 512 } 513 else if(version == 1) 514 { 515 ContentTypeDefinition originalContentTypeDefinition = content.getContentTypeDefinition(); 516 if(originalContentTypeDefinition != null) 517 { 518 ContentTypeDefinition contentTypeDefinition = ContentTypeDefinitionController.getController().getContentTypeDefinitionWithName(originalContentTypeDefinition.getName(), db); 519 if(contentTypeDefinition == null) 520 { 521 db.create(originalContentTypeDefinition); 522 contentTypeDefinition = originalContentTypeDefinition; 523 } 524 525 content.setContentTypeDefinition((ContentTypeDefinitionImpl)contentTypeDefinition); 526 } 527 } 528 529 logger.info("Creating content:" + content.getName()); 530 db.create(content); 531 532 allContents.add(content); 533 534 Integer newContentId = content.getContentId(); 535 idMap.put(originalContentId.toString(), newContentId.toString()); 536 537 Collection contentVersions = content.getContentVersions(); 538 539 if(onlyLatestVersions.equalsIgnoreCase("true")) 540 { 541 logger.info("org contentVersions:" + contentVersions.size()); 542 List selectedContentVersions = new ArrayList (); 543 Iterator realContentVersionsIterator = contentVersions.iterator(); 544 while(realContentVersionsIterator.hasNext()) 545 { 546 ContentVersion contentVersion = (ContentVersion)realContentVersionsIterator.next(); 547 Iterator selectedContentVersionsIterator = selectedContentVersions.iterator(); 548 boolean addLanguageVersion = true; 549 boolean noLanguageVersionFound = true; 550 while(selectedContentVersionsIterator.hasNext()) 551 { 552 ContentVersion currentContentVersion = (ContentVersion)selectedContentVersionsIterator.next(); 553 logger.info("" + currentContentVersion.getLanguage().getLanguageCode() + "=" + contentVersion.getLanguage().getLanguageCode()); 554 if(currentContentVersion.getLanguage().getLanguageCode().equals(contentVersion.getLanguage().getLanguageCode())) 555 { 556 noLanguageVersionFound = false; 557 558 logger.info("" + contentVersion.getIsActive() + "=" + contentVersion.getLanguage().getLanguageCode()); 559 if(contentVersion.getIsActive().booleanValue() && contentVersion.getContentVersionId().intValue() > currentContentVersion.getContentVersionId().intValue()) 560 { 561 logger.info("A later version was found... removing this one.."); 562 selectedContentVersionsIterator.remove(); 563 addLanguageVersion = true; 564 } 565 } 566 } 567 568 if(addLanguageVersion || noLanguageVersionFound) 569 selectedContentVersions.add(contentVersion); 570 } 571 572 contentVersions = selectedContentVersions; 573 } 574 575 logger.info("new contentVersions:" + contentVersions.size()); 576 Iterator contentVersionsIterator = contentVersions.iterator(); 578 while(contentVersionsIterator.hasNext()) 579 { 580 ContentVersion contentVersion = (ContentVersion)contentVersionsIterator.next(); 581 Language language = LanguageController.getController().getLanguageWithCode(contentVersion.getLanguage().getLanguageCode(), db); 582 logger.info("Creating contentVersion for language:" + contentVersion.getLanguage().getLanguageCode() + " on content " + content.getName()); 583 584 contentVersion.setOwningContent((ContentImpl)content); 585 contentVersion.setLanguage((LanguageImpl)language); 586 587 Collection digitalAssets = contentVersion.getDigitalAssets(); 588 if(digitalAssets != null) 589 { 590 List initialDigitalAssets = new ArrayList (); 591 592 Iterator digitalAssetsIterator = digitalAssets.iterator(); 593 while(digitalAssetsIterator.hasNext()) 594 { 595 DigitalAsset digitalAsset = (DigitalAsset)digitalAssetsIterator.next(); 596 597 List initialContentVersions = new ArrayList (); 598 initialContentVersions.add(contentVersion); 599 digitalAsset.setContentVersions(initialContentVersions); 600 601 db.create(digitalAsset); 602 603 initialDigitalAssets.add(digitalAsset); 604 } 605 606 contentVersion.setDigitalAssets(initialDigitalAssets); 607 } 608 609 db.create(contentVersion); 610 } 611 612 Collection childContents = content.getChildren(); 613 if(childContents != null) 614 { 615 Iterator childContentsIterator = childContents.iterator(); 616 while(childContentsIterator.hasNext()) 617 { 618 Content childContent = (Content)childContentsIterator.next(); 619 childContent.setRepository(content.getRepository()); 620 childContent.setParentContent((ContentImpl)content); 621 createContents(childContent, idMap, allContents, contentTypeDefinitions, version, db); 622 } 623 } 624 625 return allContents; 626 } 627 628 629 632 750 751 754 private void updateContentVersions(Content content, Map contentIdMap, Map siteNodeIdMap) throws Exception 755 { 756 logger.info("content:" + content.getName()); 757 758 Collection contentVersions = content.getContentVersions(); 759 760 if(onlyLatestVersions.equalsIgnoreCase("true")) 761 { 762 logger.info("org contentVersions:" + contentVersions.size()); 763 List selectedContentVersions = new ArrayList (); 764 Iterator realContentVersionsIterator = contentVersions.iterator(); 765 while(realContentVersionsIterator.hasNext()) 766 { 767 ContentVersion contentVersion = (ContentVersion)realContentVersionsIterator.next(); 768 Iterator selectedContentVersionsIterator = selectedContentVersions.iterator(); 769 boolean addLanguageVersion = true; 770 boolean noLanguageVersionFound = true; 771 while(selectedContentVersionsIterator.hasNext()) 772 { 773 ContentVersion currentContentVersion = (ContentVersion)selectedContentVersionsIterator.next(); 774 logger.info("" + currentContentVersion.getLanguage().getLanguageCode() + "=" + contentVersion.getLanguage().getLanguageCode()); 775 if(currentContentVersion.getLanguage().getLanguageCode().equals(contentVersion.getLanguage().getLanguageCode())) 776 { 777 noLanguageVersionFound = false; 778 779 logger.info("" + contentVersion.getIsActive() + "=" + contentVersion.getLanguage().getLanguageCode()); 780 if(contentVersion.getIsActive().booleanValue() && contentVersion.getContentVersionId().intValue() > currentContentVersion.getContentVersionId().intValue()) 781 { 782 logger.info("A later version was found... removing this one.."); 783 selectedContentVersionsIterator.remove(); 784 addLanguageVersion = true; 785 } 786 } 787 } 788 789 if(addLanguageVersion || noLanguageVersionFound) 790 selectedContentVersions.add(contentVersion); 791 } 792 793 contentVersions = selectedContentVersions; 794 } 795 796 797 Iterator contentVersionIterator = contentVersions.iterator(); 798 while(contentVersionIterator.hasNext()) 799 { 800 ContentVersion contentVersion = (ContentVersion)contentVersionIterator.next(); 801 String contentVersionValue = contentVersion.getVersionValue(); 802 803 contentVersionValue = contentVersionValue.replaceAll("contentId=\"", "contentId=\"oldContentId_"); 804 contentVersionValue = contentVersionValue.replaceAll("\\?contentId=", "\\?contentId=oldContentId_"); 805 contentVersionValue = contentVersionValue.replaceAll("getInlineAssetUrl\\(", "getInlineAssetUrl\\(oldContentId_"); 806 contentVersionValue = contentVersionValue.replaceAll("languageId,", "languageId,oldContentId_"); 807 contentVersionValue = contentVersionValue.replaceAll("entity=\"Content\" entityId=\"", "entity=\"Content\" entityId=\"oldContentId_"); 808 contentVersionValue = contentVersionValue.replaceAll("siteNodeId=\"", "siteNodeId=\"oldSiteNodeId_"); 810 contentVersionValue = contentVersionValue.replaceAll("getPageUrl\\((\\d)", "getPageUrl\\(oldSiteNodeId_$1"); 811 contentVersionValue = contentVersionValue.replaceAll("entity=\"SiteNode\" entityId=\"", "entity=\"SiteNode\" entityId=\"oldSiteNodeId_"); 812 814 contentVersionValue = this.prepareAllRelations(contentVersionValue); 815 816 817 819 Iterator contentIdMapIterator = contentIdMap.keySet().iterator(); 820 while (contentIdMapIterator.hasNext()) 821 { 822 String oldContentId = (String )contentIdMapIterator.next(); 823 String newContentId = (String )contentIdMap.get(oldContentId); 824 825 827 contentVersionValue = contentVersionValue.replaceAll("contentId=\"oldContentId_" + oldContentId + "\"", "contentId=\"" + newContentId + "\""); 828 contentVersionValue = contentVersionValue.replaceAll("\\?contentId=oldContentId_" + oldContentId + "&", "\\?contentId=" + newContentId + "&"); 829 contentVersionValue = contentVersionValue.replaceAll("getInlineAssetUrl\\(oldContentId_" + oldContentId + ",", "getInlineAssetUrl\\(" + newContentId + ","); 830 contentVersionValue = contentVersionValue.replaceAll("languageId,oldContentId_" + oldContentId + "\\)", "languageId," + newContentId + "\\)"); 831 contentVersionValue = contentVersionValue.replaceAll("entity=\"Content\" entityId=\"oldContentId_" + oldContentId + "\"", "entity=\"Content\" entityId=\"" + newContentId + "\""); 832 contentVersionValue = contentVersionValue.replaceAll("<id>oldContentId_" + oldContentId + "</id>", "<id>" + newContentId + "</id>"); 833 } 836 837 Iterator siteNodeIdMapIterator = siteNodeIdMap.keySet().iterator(); 838 while (siteNodeIdMapIterator.hasNext()) 839 { 840 String oldSiteNodeId = (String )siteNodeIdMapIterator.next(); 841 String newSiteNodeId = (String )siteNodeIdMap.get(oldSiteNodeId); 842 843 845 contentVersionValue = contentVersionValue.replaceAll("siteNodeId=\"oldSiteNodeId_" + oldSiteNodeId + "\"", "siteNodeId=\"" + newSiteNodeId + "\""); 846 contentVersionValue = contentVersionValue.replaceAll("getPageUrl\\(oldSiteNodeId_" + oldSiteNodeId + ",", "getPageUrl\\(" + newSiteNodeId + ","); 847 contentVersionValue = contentVersionValue.replaceAll("entity=\"SiteNode\" entityId=\"oldSiteNodeId_" + oldSiteNodeId + "\"", "entity=\"SiteNode\" entityId=\"" + newSiteNodeId + "\""); 848 contentVersionValue = contentVersionValue.replaceAll("<id>oldSiteNodeId_" + oldSiteNodeId + "</id>", "<id>" + newSiteNodeId + "</id>"); 850 } 851 852 854 contentVersionValue = contentVersionValue.replaceAll("oldContentId_", ""); 856 contentVersionValue = contentVersionValue.replaceAll("oldSiteNodeId_", ""); 857 858 logger.info("new contentVersionValue:" + contentVersionValue); 859 contentVersion.setVersionValue(contentVersionValue); 860 } 861 } 862 863 private String prepareAllRelations(String xml) throws Exception 864 { 865 StringBuffer newXML = new StringBuffer (); 866 867 logger.info("xml: " + xml); 868 869 String after = xml; 870 String before = ""; 871 String qualifyer = ""; 872 boolean changed = false; 873 874 int startIndex = xml.indexOf("<qualifyer"); 875 while(startIndex > -1) 876 { 877 int stopIndex = xml.indexOf("</qualifyer>", startIndex); 878 if(stopIndex > -1) 879 { 880 changed = true; 881 before = xml.substring(0, startIndex); 882 after = xml.substring(stopIndex + 12); 883 qualifyer = xml.substring(startIndex, stopIndex + 12); 884 890 String newQualifyer = qualifyer; 891 892 if(qualifyer.indexOf("entity='Content'") > 0) 893 newQualifyer = qualifyer.replaceAll("<id>", "<id>oldContentId_"); 894 else if(qualifyer.indexOf("entity='SiteNode'") > 0) 895 newQualifyer = qualifyer.replaceAll("<id>", "<id>oldSiteNodeId_"); 896 897 newXML.append(before); 898 newXML.append(newQualifyer); 899 xml = after; 901 } 902 else 903 { 904 throw new Exception ("Error in xml - qualifyer tag broken in " + xml); 905 } 906 907 startIndex = xml.indexOf("<qualifyer"); 908 } 909 910 newXML.append(after); 911 912 if(changed) 913 logger.info("newXML:" + newXML); 914 915 return newXML.toString(); 916 } 917 918 public String getOnlyLatestVersions() { 919 return onlyLatestVersions; 920 } 921 922 public void setOnlyLatestVersions(String onlyLatestVersions) { 923 this.onlyLatestVersions = onlyLatestVersions; 924 } 925 926 } 996 | Popular Tags |