/* =============================================================================== * * Part of the InfoGlue Content Management Platform (www.infoglue.org) * * =============================================================================== * * Copyright (C) * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2, as published by the * Free Software Foundation. See the file LICENSE.html for more information. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple * Place, Suite 330 / Boston, MA 02111-1307 / USA. * * =============================================================================== */ package org.infoglue.cms.controllers.kernel.impl.simple; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.exolab.castor.jdo.Database; import org.exolab.castor.mapping.Mapping; import org.exolab.castor.xml.Unmarshaller; import org.infoglue.cms.entities.content.Content; import org.infoglue.cms.entities.content.ContentCategory; import org.infoglue.cms.entities.content.ContentVersion; import org.infoglue.cms.entities.content.DigitalAsset; import org.infoglue.cms.entities.content.impl.simple.ContentImpl; import org.infoglue.cms.entities.content.impl.simple.ContentVersionImpl; import org.infoglue.cms.entities.kernel.BaseEntityVO; import org.infoglue.cms.entities.management.AccessRight; import org.infoglue.cms.entities.management.AccessRightGroup; import org.infoglue.cms.entities.management.AccessRightRole; import org.infoglue.cms.entities.management.AvailableServiceBinding; import org.infoglue.cms.entities.management.Category; import org.infoglue.cms.entities.management.CategoryVO; import org.infoglue.cms.entities.management.ContentTypeDefinition; import org.infoglue.cms.entities.management.InterceptionPoint; import org.infoglue.cms.entities.management.Language; import org.infoglue.cms.entities.management.Repository; import org.infoglue.cms.entities.management.RepositoryLanguage; import org.infoglue.cms.entities.management.ServiceDefinition; import org.infoglue.cms.entities.management.SiteNodeTypeDefinition; import org.infoglue.cms.entities.management.impl.simple.AvailableServiceBindingImpl; import org.infoglue.cms.entities.management.impl.simple.CategoryImpl; import org.infoglue.cms.entities.management.impl.simple.ContentTypeDefinitionImpl; import org.infoglue.cms.entities.management.impl.simple.InfoGlueExportImpl; import org.infoglue.cms.entities.management.impl.simple.LanguageImpl; import org.infoglue.cms.entities.management.impl.simple.RepositoryImpl; import org.infoglue.cms.entities.management.impl.simple.ServiceDefinitionImpl; import org.infoglue.cms.entities.management.impl.simple.SiteNodeTypeDefinitionImpl; import org.infoglue.cms.entities.structure.Qualifyer; import org.infoglue.cms.entities.structure.ServiceBinding; import org.infoglue.cms.entities.structure.SiteNode; import org.infoglue.cms.entities.structure.SiteNodeVersion; import org.infoglue.cms.entities.structure.impl.simple.ServiceBindingImpl; import org.infoglue.cms.entities.structure.impl.simple.SiteNodeImpl; import org.infoglue.cms.entities.structure.impl.simple.SiteNodeVersionImpl; import org.infoglue.cms.exception.SystemException; import com.opensymphony.module.propertyset.PropertySet; import com.opensymphony.module.propertyset.PropertySetManager; /** * This class handles Importing of a repository - not finished by a long shot. * * @author mattias */ public class ImportController extends BaseController { public final static Logger logger = Logger.getLogger(ImportController.class.getName()); /** * Factory method to get object */ public static ImportController getController() { return new ImportController(); } public void importRepository(Database db, Mapping map, File file, String encoding, int version, String onlyLatestVersions, boolean isCopyAction, Map contentIdMap, Map siteNodeIdMap, List allContentIds, Map replaceMap, Boolean mergeExistingRepositories) throws Exception { FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis); InputStreamReader reader = new InputStreamReader(bis, encoding); Unmarshaller unmarshaller = new Unmarshaller(map); unmarshaller.setWhitespacePreserve(true); unmarshaller.setValidation(false); InfoGlueExportImpl infoGlueExportImplRead = (InfoGlueExportImpl)unmarshaller.unmarshal(reader); //if(mergeExistingRepositories && !isCopyAction) // mergeCopyRepository(db, infoGlueExportImplRead, version, onlyLatestVersions, isCopyAction, contentIdMap, siteNodeIdMap, allContentIds, replaceMap, mergeExistingRepositories); //else copyRepository(db, infoGlueExportImplRead, version, onlyLatestVersions, isCopyAction, contentIdMap, siteNodeIdMap, allContentIds, replaceMap); reader.close(); } public void mergeCopyRepository(Database db, InfoGlueExportImpl infoGlueExportImplRead, int version, String onlyLatestVersions, boolean isCopyAction, Map contentIdMap, Map siteNodeIdMap, List allContentIds, Map replaceMap) throws Exception { Collection contentTypeDefinitions = infoGlueExportImplRead.getContentTypeDefinitions(); logger.info("Found " + contentTypeDefinitions.size() + " content type definitions"); Collection categories = infoGlueExportImplRead.getCategories(); logger.info("Found " + categories.size() + " categories"); Map categoryIdMap = new HashMap(); Map contentTypeIdMap = new HashMap(); if(!isCopyAction) { importCategories(categories, null, categoryIdMap, db); updateContentTypeDefinitions(contentTypeDefinitions, categoryIdMap); } List readSiteNodes = infoGlueExportImplRead.getRootSiteNode(); List readContents = infoGlueExportImplRead.getRootContent(); Map repositoryIdMap = new HashMap(); Map siteNodeVersionIdMap = new HashMap(); List allContents = new ArrayList(); List allSiteNodes = new ArrayList(); Map<String, AvailableServiceBinding> readAvailableServiceBindings = new HashMap<String, AvailableServiceBinding>(); Map repositoryContentMap = new HashMap(); Iterator readContentsIteratorDebug = readContents.iterator(); while(readContentsIteratorDebug.hasNext()) { Content readContentCandidate = (Content)readContentsIteratorDebug.next(); repositoryContentMap.put("" + readContentCandidate.getRepositoryId(), readContentCandidate); } Iterator readSiteNodesIterator = readSiteNodes.iterator(); while(readSiteNodesIterator.hasNext()) { SiteNode readSiteNode = (SiteNode)readSiteNodesIterator.next(); Repository repositoryRead = readSiteNode.getRepository(); logger.info(repositoryRead.getName()); repositoryRead.setName(substituteStrings(repositoryRead.getName(), replaceMap)); repositoryRead.setDescription(substituteStrings(repositoryRead.getDescription(), replaceMap)); repositoryRead.setDnsName(substituteStrings(repositoryRead.getDnsName(), replaceMap)); Content readContent = null; readContent = (Content)repositoryContentMap.get("" + repositoryRead.getId()); //logger.info("readContent:" + readContent.getName() + ":" + readContent.getId()); readContent.setRepository((RepositoryImpl)repositoryRead); Integer repositoryIdBefore = repositoryRead.getId(); db.create(repositoryRead); Integer repositoryIdAfter = repositoryRead.getId(); repositoryIdMap.put("" + repositoryIdBefore, "" + repositoryIdAfter); Collection repositoryLanguages = repositoryRead.getRepositoryLanguages(); Iterator repositoryLanguagesIterator = repositoryLanguages.iterator(); while(repositoryLanguagesIterator.hasNext()) { RepositoryLanguage repositoryLanguage = (RepositoryLanguage)repositoryLanguagesIterator.next(); Language originalLanguage = repositoryLanguage.getLanguage(); Language language = LanguageController.getController().getLanguageWithCode(originalLanguage.getLanguageCode(), db); if(language == null) { db.create(originalLanguage); language = originalLanguage; } repositoryLanguage.setLanguage(language); repositoryLanguage.setRepository(repositoryRead); db.create(repositoryLanguage); logger.info("language:" + language); logger.info("language.getRepositoryLanguages():" + language.getRepositoryLanguages()); language.getRepositoryLanguages().add(repositoryLanguage); } readSiteNode.setRepository((RepositoryImpl)repositoryRead); logger.info("***************************************\nreadContent:" + readContent.getName()); createContents(readContent, contentIdMap, contentTypeIdMap, allContents, Collections.unmodifiableCollection(contentTypeDefinitions), categoryIdMap, version, db, onlyLatestVersions, isCopyAction, replaceMap); createStructure(readSiteNode, contentIdMap, siteNodeIdMap, siteNodeVersionIdMap, readAvailableServiceBindings, allSiteNodes, db, onlyLatestVersions, replaceMap); } //List allContentIds = new ArrayList(); Iterator allContentsIterator = allContents.iterator(); while(allContentsIterator.hasNext()) { Content content = (Content)allContentsIterator.next(); allContentIds.add(content.getContentId()); } //TEST Map args = new HashMap(); args.put("globalKey", "infoglue"); PropertySet ps = PropertySetManager.getInstance("jdbc", args); Map<String,String> repositoryProperties = infoGlueExportImplRead.getRepositoryProperties(); Iterator<String> repositoryPropertiesIterator = repositoryProperties.keySet().iterator(); while(repositoryPropertiesIterator.hasNext()) { String key = repositoryPropertiesIterator.next(); String value = repositoryProperties.get(key); String[] splittedString = key.split("_"); if(splittedString.length == 3) { String oldRepId = splittedString[1]; key = key.replaceAll(oldRepId, (String)repositoryIdMap.get(oldRepId)); if(value != null && !value.equals("null")) { if(key.indexOf("_WYSIWYGConfig") > -1 || key.indexOf("_StylesXML") > -1 || key.indexOf("_extraProperties") > -1) ps.setData(key, value.getBytes("utf-8")); else ps.setString(key, value); } } } Map<String,String> contentProperties = infoGlueExportImplRead.getContentProperties(); Iterator<String> contentPropertiesIterator = contentProperties.keySet().iterator(); while(contentPropertiesIterator.hasNext()) { String key = contentPropertiesIterator.next(); String value = contentProperties.get(key); String[] splittedString = key.split("_"); if(splittedString.length == 3) { String oldContentId = splittedString[1]; key = key.replaceAll(oldContentId, (String)contentIdMap.get(oldContentId)); if(value != null && !value.equals("null")) ps.setString(key, value); } } Map<String,String> siteNodeProperties = infoGlueExportImplRead.getSiteNodeProperties(); Iterator<String> siteNodePropertiesIterator = siteNodeProperties.keySet().iterator(); while(siteNodePropertiesIterator.hasNext()) { String key = siteNodePropertiesIterator.next(); String value = siteNodeProperties.get(key); String[] splittedString = key.split("_"); if(splittedString.length == 3) { String oldSiteNodeId = splittedString[1]; key = key.replaceAll(oldSiteNodeId, (String)siteNodeIdMap.get(oldSiteNodeId)); if(value != null && !value.equals("null")) ps.setString(key, value); } } Collection<AccessRight> accessRights = infoGlueExportImplRead.getAccessRights(); Iterator<AccessRight> accessRightsIterator = accessRights.iterator(); while(accessRightsIterator.hasNext()) { AccessRight accessRight = accessRightsIterator.next(); InterceptionPoint interceptionPoint = InterceptionPointController.getController().getInterceptionPointWithName(accessRight.getInterceptionPointName(), db); accessRight.setInterceptionPoint(interceptionPoint); if(interceptionPoint.getName().indexOf("Content") > -1) accessRight.setParameters((String)contentIdMap.get(accessRight.getParameters())); else if(interceptionPoint.getName().indexOf("SiteNodeVersion") > -1) accessRight.setParameters((String)siteNodeVersionIdMap.get(accessRight.getParameters())); else if(interceptionPoint.getName().indexOf("SiteNode") > -1) accessRight.setParameters((String)siteNodeIdMap.get(accessRight.getParameters())); else if(interceptionPoint.getName().indexOf("Repository") > -1) accessRight.setParameters((String)repositoryIdMap.get(accessRight.getParameters())); db.create(accessRight); Iterator accessRightRoleIterator = accessRight.getRoles().iterator(); while(accessRightRoleIterator.hasNext()) { AccessRightRole accessRightRole = (AccessRightRole)accessRightRoleIterator.next(); accessRightRole.setAccessRight(accessRight); db.create(accessRightRole); } Iterator accessRightGroupIterator = accessRight.getGroups().iterator(); while(accessRightGroupIterator.hasNext()) { AccessRightGroup accessRightGroup = (AccessRightGroup)accessRightGroupIterator.next(); accessRightGroup.setAccessRight(accessRight); db.create(accessRightGroup); } } } public void copyRepository(Database db, InfoGlueExportImpl infoGlueExportImplRead, int version, String onlyLatestVersions, boolean isCopyAction, Map contentIdMap, Map siteNodeIdMap, List allContentIds, Map replaceMap) throws Exception { Collection contentTypeDefinitions = infoGlueExportImplRead.getContentTypeDefinitions(); logger.info("Found " + contentTypeDefinitions.size() + " content type definitions"); Collection categories = infoGlueExportImplRead.getCategories(); logger.info("Found " + categories.size() + " categories"); Map categoryIdMap = new HashMap(); Map contentTypeIdMap = new HashMap(); if(!isCopyAction) { importCategories(categories, null, categoryIdMap, db); updateContentTypeDefinitions(contentTypeDefinitions, categoryIdMap); } List readSiteNodes = infoGlueExportImplRead.getRootSiteNode(); //SiteNode readSiteNode = infoGlueExportImplRead.getRootSiteNode(); //logger.info(readSiteNode.getName()); List readContents = infoGlueExportImplRead.getRootContent(); //Content readContent = infoGlueExportImplRead.getRootContent(); //logger.info(readContent.getName()); Map repositoryIdMap = new HashMap(); //Map contentIdMap = new HashMap(); Map siteNodeVersionIdMap = new HashMap(); //Map siteNodeIdMap = new HashMap(); List allContents = new ArrayList(); List allSiteNodes = new ArrayList(); Map<String, AvailableServiceBinding> readAvailableServiceBindings = new HashMap<String, AvailableServiceBinding>(); Map repositoryContentMap = new HashMap(); Iterator readContentsIteratorDebug = readContents.iterator(); while(readContentsIteratorDebug.hasNext()) { Content readContentCandidate = (Content)readContentsIteratorDebug.next(); repositoryContentMap.put("" + readContentCandidate.getRepositoryId(), readContentCandidate); //logger.info("readContentCandidate debug...:" + readContentCandidate.getName() + ":" + readContentCandidate.getId() + ":" + readContentCandidate.getRepositoryId()); } Iterator readSiteNodesIterator = readSiteNodes.iterator(); while(readSiteNodesIterator.hasNext()) { SiteNode readSiteNode = (SiteNode)readSiteNodesIterator.next(); Repository repositoryRead = readSiteNode.getRepository(); logger.info(repositoryRead.getName()); repositoryRead.setName(substituteStrings(repositoryRead.getName(), replaceMap)); repositoryRead.setDescription(substituteStrings(repositoryRead.getDescription(), replaceMap)); repositoryRead.setDnsName(substituteStrings(repositoryRead.getDnsName(), replaceMap)); Content readContent = null; readContent = (Content)repositoryContentMap.get("" + repositoryRead.getId()); //logger.info("readContent:" + readContent.getName() + ":" + readContent.getId()); readContent.setRepository((RepositoryImpl)repositoryRead); Integer repositoryIdBefore = repositoryRead.getId(); db.create(repositoryRead); Integer repositoryIdAfter = repositoryRead.getId(); repositoryIdMap.put("" + repositoryIdBefore, "" + repositoryIdAfter); Collection repositoryLanguages = repositoryRead.getRepositoryLanguages(); Iterator repositoryLanguagesIterator = repositoryLanguages.iterator(); while(repositoryLanguagesIterator.hasNext()) { RepositoryLanguage repositoryLanguage = (RepositoryLanguage)repositoryLanguagesIterator.next(); Language originalLanguage = repositoryLanguage.getLanguage(); Language language = LanguageController.getController().getLanguageWithCode(originalLanguage.getLanguageCode(), db); if(language == null) { db.create(originalLanguage); language = originalLanguage; } repositoryLanguage.setLanguage(language); repositoryLanguage.setRepository(repositoryRead); db.create(repositoryLanguage); logger.info("language:" + language); logger.info("language.getRepositoryLanguages():" + language.getRepositoryLanguages()); language.getRepositoryLanguages().add(repositoryLanguage); } readSiteNode.setRepository((RepositoryImpl)repositoryRead); logger.info("***************************************\nreadContent:" + readContent.getName()); createContents(readContent, contentIdMap, contentTypeIdMap, allContents, Collections.unmodifiableCollection(contentTypeDefinitions), categoryIdMap, version, db, onlyLatestVersions, isCopyAction, replaceMap); createStructure(readSiteNode, contentIdMap, siteNodeIdMap, siteNodeVersionIdMap, readAvailableServiceBindings, allSiteNodes, db, onlyLatestVersions, replaceMap); } //List allContentIds = new ArrayList(); Iterator allContentsIterator = allContents.iterator(); while(allContentsIterator.hasNext()) { Content content = (Content)allContentsIterator.next(); allContentIds.add(content.getContentId()); } //TEST Map args = new HashMap(); args.put("globalKey", "infoglue"); PropertySet ps = PropertySetManager.getInstance("jdbc", args); Map<String,String> repositoryProperties = infoGlueExportImplRead.getRepositoryProperties(); Iterator<String> repositoryPropertiesIterator = repositoryProperties.keySet().iterator(); while(repositoryPropertiesIterator.hasNext()) { String key = repositoryPropertiesIterator.next(); String value = repositoryProperties.get(key); String[] splittedString = key.split("_"); if(splittedString.length == 3) { String oldRepId = splittedString[1]; String replacement = (String)repositoryIdMap.get(oldRepId); if(replacement != null) key = key.replaceAll(oldRepId, replacement); if(value != null && !value.equals("null")) { if(key.indexOf("_WYSIWYGConfig") > -1 || key.indexOf("_StylesXML") > -1 || key.indexOf("_extraProperties") > -1) ps.setData(key, value.getBytes("utf-8")); else ps.setString(key, value); } } } Map<String,String> contentProperties = infoGlueExportImplRead.getContentProperties(); Iterator<String> contentPropertiesIterator = contentProperties.keySet().iterator(); while(contentPropertiesIterator.hasNext()) { String key = contentPropertiesIterator.next(); String value = contentProperties.get(key); String[] splittedString = key.split("_"); if(splittedString.length == 3) { String oldContentId = splittedString[1]; String replacement = (String)contentIdMap.get(oldContentId); if(replacement != null) key = key.replaceAll(oldContentId, replacement); if(value != null && !value.equals("null")) ps.setString(key, value); } } Map<String,String> siteNodeProperties = infoGlueExportImplRead.getSiteNodeProperties(); Iterator<String> siteNodePropertiesIterator = siteNodeProperties.keySet().iterator(); while(siteNodePropertiesIterator.hasNext()) { String key = siteNodePropertiesIterator.next(); String value = siteNodeProperties.get(key); String[] splittedString = key.split("_"); if(splittedString.length == 3) { String oldSiteNodeId = splittedString[1]; String replacement = (String)siteNodeIdMap.get(oldSiteNodeId); if(replacement != null) key = key.replaceAll(oldSiteNodeId, replacement); if(value != null && !value.equals("null")) ps.setString(key, value); } } Collection<AccessRight> accessRights = infoGlueExportImplRead.getAccessRights(); Iterator<AccessRight> accessRightsIterator = accessRights.iterator(); while(accessRightsIterator.hasNext()) { AccessRight accessRight = accessRightsIterator.next(); InterceptionPoint interceptionPoint = InterceptionPointController.getController().getInterceptionPointWithName(accessRight.getInterceptionPointName(), db); if(interceptionPoint != null) { accessRight.setInterceptionPoint(interceptionPoint); if(interceptionPoint.getName().indexOf("Content") > -1) accessRight.setParameters((String)contentIdMap.get(accessRight.getParameters())); else if(interceptionPoint.getName().indexOf("SiteNodeVersion") > -1) accessRight.setParameters((String)siteNodeVersionIdMap.get(accessRight.getParameters())); else if(interceptionPoint.getName().indexOf("SiteNode") > -1) accessRight.setParameters((String)siteNodeIdMap.get(accessRight.getParameters())); else if(interceptionPoint.getName().indexOf("Repository") > -1) accessRight.setParameters((String)repositoryIdMap.get(accessRight.getParameters())); db.create(accessRight); Iterator accessRightRoleIterator = accessRight.getRoles().iterator(); while(accessRightRoleIterator.hasNext()) { AccessRightRole accessRightRole = (AccessRightRole)accessRightRoleIterator.next(); accessRightRole.setAccessRight(accessRight); db.create(accessRightRole); } Iterator accessRightGroupIterator = accessRight.getGroups().iterator(); while(accessRightGroupIterator.hasNext()) { AccessRightGroup accessRightGroup = (AccessRightGroup)accessRightGroupIterator.next(); accessRightGroup.setAccessRight(accessRight); db.create(accessRightGroup); } } } } private String substituteStrings(String originalValue, Map<String,String> replaceMap) { String newValue = originalValue; Iterator<String> replaceMapIterator = replaceMap.keySet().iterator(); while(replaceMapIterator.hasNext()) { String key = replaceMapIterator.next(); String value = replaceMap.get(key); newValue = newValue.replaceAll(key, value); } return newValue; } private void updateContentTypeDefinitions(Collection contentTypeDefinitions, Map categoryIdMap) { Iterator contentTypeDefinitionsIterator = contentTypeDefinitions.iterator(); while(contentTypeDefinitionsIterator.hasNext()) { ContentTypeDefinition contentTypeDefinition = (ContentTypeDefinition)contentTypeDefinitionsIterator.next(); String schema = contentTypeDefinition.getSchemaValue(); Iterator categoryIdMapIterator = categoryIdMap.keySet().iterator(); while(categoryIdMapIterator.hasNext()) { Integer oldId = (Integer)categoryIdMapIterator.next(); Integer newId = (Integer)categoryIdMap.get(oldId); schema = schema.replaceAll("<categoryId>" + oldId + "</categoryId>", "<categoryId>new_" + newId + "</categoryId>"); } schema = schema.replaceAll("<categoryId>new_", "<categoryId>"); contentTypeDefinition.setSchemaValue(schema); } } private void importCategories(Collection categories, CategoryVO parentCategory, Map categoryIdMap, Database db) throws SystemException { logger.info("We want to create a list of categories if not existing under the parent category " + parentCategory); Iterator categoryIterator = categories.iterator(); while(categoryIterator.hasNext()) { CategoryVO categoryVO = (CategoryVO)categoryIterator.next(); CategoryVO newParentCategory = null; List<CategoryVO> existingCategories = null; if(parentCategory != null) { existingCategories = CategoryController.getController().getActiveCategoryVOListByParent(parentCategory.getCategoryId(), db);//.getActiveByParent(parentCategory.getCategoryId(), db); //existingCategories = CategoryController.getController().findByParent(parentCategory.getCategoryId(), db); logger.info("existingCategories 1:" + existingCategories); } else { existingCategories = CategoryController.getController().findRootCategoryVOList(db); logger.info("existingCategories 2:" + existingCategories); } Iterator<CategoryVO> existingCategoriesIterator = existingCategories.iterator(); while(existingCategoriesIterator.hasNext()) { Object candidate = existingCategoriesIterator.next(); logger.info("candidate:" + candidate.getClass().getName() + ":" + candidate); CategoryVO existingCategory = (CategoryVO)candidate; //existingCategoriesIterator.next(); logger.info("existingCategory:" + existingCategory.getName()); if(existingCategory.getName().equals(categoryVO.getName())) { logger.info("Existed... setting " + existingCategory.getName() + " to new parent category."); newParentCategory = existingCategory; break; } } if(newParentCategory == null) { logger.info("No existing category - we create it: " + categoryVO); Integer oldId = categoryVO.getId(); categoryVO.setCategoryId(null); if(parentCategory != null) categoryVO.setParentId(parentCategory.getCategoryId()); else categoryVO.setParentId(null); Category newCategory = CategoryController.getController().save(categoryVO, db); categoryIdMap.put(oldId, newCategory.getCategoryId()); newParentCategory = newCategory.getValueObject(); } else { categoryIdMap.put(categoryVO.getId(), newParentCategory.getCategoryId()); } importCategories(categoryVO.getChildren(), newParentCategory, categoryIdMap, db); } } /** * This method copies a sitenode and all it relations. * * @param siteNode * @param db * @throws Exception */ private void createStructure(SiteNode siteNode, Map contentIdMap, Map siteNodeIdMap, Map siteNodeVersionIdMap, Map readAvailableServiceBindings, List allSiteNodes, Database db, String onlyLatestVersions, Map<String,String> replaceMap) throws Exception { logger.info("siteNode:" + siteNode.getName()); Integer originalSiteNodeId = siteNode.getSiteNodeId(); logger.info("originalSiteNodeId:" + originalSiteNodeId); SiteNodeTypeDefinition originalSiteNodeTypeDefinition = siteNode.getSiteNodeTypeDefinition(); SiteNodeTypeDefinition siteNodeTypeDefinition = null; if(originalSiteNodeTypeDefinition != null) { logger.info("originalSiteNodeTypeDefinition:" + originalSiteNodeTypeDefinition); siteNodeTypeDefinition = SiteNodeTypeDefinitionController.getController().getSiteNodeTypeDefinitionWithName(siteNode.getSiteNodeTypeDefinition().getName(), db, false); logger.info("siteNodeTypeDefinition:" + siteNodeTypeDefinition); if(siteNodeTypeDefinition == null) { db.create(originalSiteNodeTypeDefinition); siteNodeTypeDefinition = originalSiteNodeTypeDefinition; } siteNode.setSiteNodeTypeDefinition((SiteNodeTypeDefinitionImpl)siteNodeTypeDefinition); } String mappedMetaInfoContentId = "-1"; if(siteNode.getMetaInfoContentId() != null) { if(contentIdMap.containsKey(siteNode.getMetaInfoContentId().toString())) mappedMetaInfoContentId = (String)contentIdMap.get(siteNode.getMetaInfoContentId().toString()); } siteNode.setMetaInfoContentId(new Integer(mappedMetaInfoContentId)); siteNode.setName(substituteStrings(siteNode.getName(), replaceMap)); db.create(siteNode); allSiteNodes.add(siteNode); Integer newSiteNodeId = siteNode.getSiteNodeId(); logger.info(originalSiteNodeId + ":" + newSiteNodeId); siteNodeIdMap.put(originalSiteNodeId.toString(), newSiteNodeId.toString()); Collection childSiteNodes = siteNode.getChildSiteNodes(); if(childSiteNodes != null) { Iterator childSiteNodesIterator = childSiteNodes.iterator(); while(childSiteNodesIterator.hasNext()) { SiteNode childSiteNode = (SiteNode)childSiteNodesIterator.next(); childSiteNode.setRepository(siteNode.getRepository()); childSiteNode.setParentSiteNode((SiteNodeImpl)siteNode); createStructure(childSiteNode, contentIdMap, siteNodeIdMap, siteNodeVersionIdMap, readAvailableServiceBindings, allSiteNodes, db, onlyLatestVersions, replaceMap); } } Collection siteNodeVersions = siteNode.getSiteNodeVersions(); if(onlyLatestVersions.equalsIgnoreCase("true")) { logger.info("org siteNodeVersions:" + siteNodeVersions.size()); List selectedSiteNodeVersions = new ArrayList(); Iterator realSiteNodeVersionsIterator = siteNodeVersions.iterator(); while(realSiteNodeVersionsIterator.hasNext()) { SiteNodeVersion siteNodeVersion = (SiteNodeVersion)realSiteNodeVersionsIterator.next(); Iterator selectedSiteNodeVersionsIterator = selectedSiteNodeVersions.iterator(); boolean addVersion = true; while(selectedSiteNodeVersionsIterator.hasNext()) { SiteNodeVersion currentSiteNodeVersion = (SiteNodeVersion)selectedSiteNodeVersionsIterator.next(); if(siteNodeVersion.getIsActive().booleanValue() && siteNodeVersion.getSiteNodeVersionId().intValue() > currentSiteNodeVersion.getSiteNodeVersionId().intValue()) { logger.info("A later version was found... removing this one.."); selectedSiteNodeVersionsIterator.remove(); addVersion = true; } } if(addVersion) selectedSiteNodeVersions.add(siteNodeVersion); } siteNodeVersions = selectedSiteNodeVersions; } Iterator siteNodeVersionsIterator = siteNodeVersions.iterator(); while(siteNodeVersionsIterator.hasNext()) { SiteNodeVersion siteNodeVersion = (SiteNodeVersion)siteNodeVersionsIterator.next(); Collection serviceBindings = siteNodeVersion.getServiceBindings(); siteNodeVersion.setOwningSiteNode((SiteNodeImpl)siteNode); Integer oldSiteNodeVersionId = siteNodeVersion.getId(); db.create(siteNodeVersion); Integer newSiteNodeVersionId = siteNodeVersion.getId(); siteNodeVersionIdMap.put(oldSiteNodeVersionId.toString(), newSiteNodeVersionId.toString()); Iterator serviceBindingsIterator = serviceBindings.iterator(); while(serviceBindingsIterator.hasNext()) { ServiceBinding serviceBinding = (ServiceBinding)serviceBindingsIterator.next(); logger.info("serviceBinding:" + serviceBinding.getName()); ServiceDefinition originalServiceDefinition = serviceBinding.getServiceDefinition(); if(originalServiceDefinition == null) { logger.error("Skipping serviceBinding:" + serviceBinding.getName() + ":" + "serviceBinding:" + serviceBinding.getId() + " " + serviceBinding.getServiceDefinition()); continue; } String serviceDefinitionName = originalServiceDefinition.getName(); ServiceDefinition serviceDefinition = ServiceDefinitionController.getController().getServiceDefinitionWithName(serviceDefinitionName, db, false); if(serviceDefinition == null) { db.create(originalServiceDefinition); serviceDefinition = originalServiceDefinition; //availableServiceBinding.getServiceDefinitions().add(serviceDefinition); } serviceBinding.setServiceDefinition((ServiceDefinitionImpl)serviceDefinition); AvailableServiceBinding originalAvailableServiceBinding = serviceBinding.getAvailableServiceBinding(); String availableServiceBindingName = originalAvailableServiceBinding.getName(); logger.info("availableServiceBindingName:" + availableServiceBindingName); logger.info("readAvailableServiceBindings:" + readAvailableServiceBindings.size() + ":" + readAvailableServiceBindings.containsKey(availableServiceBindingName)); AvailableServiceBinding availableServiceBinding = (AvailableServiceBinding)readAvailableServiceBindings.get(availableServiceBindingName); logger.info("availableServiceBinding:" + availableServiceBinding); if(availableServiceBinding == null) { availableServiceBinding = AvailableServiceBindingController.getController().getAvailableServiceBindingWithName(availableServiceBindingName, db, false); logger.info("Read availableServiceBinding from database:" + availableServiceBindingName + "=" + availableServiceBinding); readAvailableServiceBindings.put(availableServiceBindingName, availableServiceBinding); logger.info("readAvailableServiceBindings:" + readAvailableServiceBindings.size() + ":" + readAvailableServiceBindings.containsKey(availableServiceBindingName)); } if(availableServiceBinding == null) { logger.info("There was no availableServiceBinding registered under:" + availableServiceBindingName); logger.info("originalAvailableServiceBinding:" + originalAvailableServiceBinding.getName() + ":" + originalAvailableServiceBinding.getIsInheritable()); db.create(originalAvailableServiceBinding); availableServiceBinding = originalAvailableServiceBinding; readAvailableServiceBindings.put(availableServiceBindingName, availableServiceBinding); logger.info("Notifying:" + siteNodeTypeDefinition.getName() + " about the new availableServiceBinding " + availableServiceBinding.getName()); if(siteNodeTypeDefinition != null) { siteNodeTypeDefinition.getAvailableServiceBindings().add((AvailableServiceBindingImpl)availableServiceBinding); serviceDefinition.getAvailableServiceBindings().add((AvailableServiceBindingImpl)availableServiceBinding); availableServiceBinding.getSiteNodeTypeDefinitions().add((SiteNodeTypeDefinitionImpl)siteNodeTypeDefinition); availableServiceBinding.getServiceDefinitions().add((ServiceDefinitionImpl)serviceDefinition); } } else { if(siteNodeTypeDefinition != null && !siteNodeTypeDefinition.getAvailableServiceBindings().contains(availableServiceBinding)) { siteNodeTypeDefinition.getAvailableServiceBindings().add((AvailableServiceBindingImpl)availableServiceBinding); availableServiceBinding.getSiteNodeTypeDefinitions().add(siteNodeTypeDefinition); } } serviceBinding.setAvailableServiceBinding((AvailableServiceBindingImpl)availableServiceBinding); Collection qualifyers = serviceBinding.getBindingQualifyers(); Iterator qualifyersIterator = qualifyers.iterator(); while(qualifyersIterator.hasNext()) { Qualifyer qualifyer = (Qualifyer)qualifyersIterator.next(); qualifyer.setServiceBinding((ServiceBindingImpl)serviceBinding); String entityName = qualifyer.getName(); String entityId = qualifyer.getValue(); if(entityName.equalsIgnoreCase("contentId")) { String mappedContentId = (String)contentIdMap.get(entityId); qualifyer.setValue((mappedContentId == null) ? entityId : mappedContentId); } else if(entityName.equalsIgnoreCase("siteNodeId")) { String mappedSiteNodeId = (String)siteNodeIdMap.get(entityId); qualifyer.setValue((mappedSiteNodeId == null) ? entityId : mappedSiteNodeId); } } serviceBinding.setSiteNodeVersion((SiteNodeVersionImpl)siteNodeVersion); db.create(serviceBinding); } } } /** * This method copies a content and all it relations. * * @param siteNode * @param db * @throws Exception */ private List createContents(Content content, Map idMap, Map contentTypeDefinitionIdMap, List allContents, Collection contentTypeDefinitions, Map categoryIdMap, int version, Database db, String onlyLatestVersions, boolean isCopyAction, Map<String,String> replaceMap) throws Exception { //logger.info("createContents:" + content.getName() + ":" + content.getId()); ContentTypeDefinition contentTypeDefinition = null; Integer originalContentId = content.getContentId(); if(version == 2) { Integer contentTypeDefinitionId = ((ContentImpl)content).getContentTypeDefinitionId(); if(contentTypeDefinitionId != null) { if(!isCopyAction) { if(contentTypeDefinitionIdMap.containsKey(contentTypeDefinitionId)) contentTypeDefinitionId = (Integer)contentTypeDefinitionIdMap.get(contentTypeDefinitionId); ContentTypeDefinition originalContentTypeDefinition = null; Iterator contentTypeDefinitionsIterator = contentTypeDefinitions.iterator(); while(contentTypeDefinitionsIterator.hasNext()) { ContentTypeDefinition contentTypeDefinitionCandidate = (ContentTypeDefinition)contentTypeDefinitionsIterator.next(); if(contentTypeDefinitionCandidate.getId().intValue() == contentTypeDefinitionId.intValue()) { originalContentTypeDefinition = contentTypeDefinitionCandidate; break; } } if(originalContentTypeDefinition != null) { contentTypeDefinition = ContentTypeDefinitionController.getController().getContentTypeDefinitionWithName(originalContentTypeDefinition.getName(), db); if(contentTypeDefinition == null) { Integer before = originalContentTypeDefinition.getId(); db.create(originalContentTypeDefinition); contentTypeDefinition = originalContentTypeDefinition; Integer after = originalContentTypeDefinition.getId(); contentTypeDefinitionIdMap.put(before, after); } content.setContentTypeDefinition((ContentTypeDefinitionImpl)contentTypeDefinition); } else { logger.error("The content " + content.getName() + " had a content type not found amongst the listed ones:" + contentTypeDefinitionId); } } else { contentTypeDefinition = ContentTypeDefinitionController.getController().getContentTypeDefinitionWithId(contentTypeDefinitionId, db); content.setContentTypeDefinition((ContentTypeDefinitionImpl)contentTypeDefinition); } } else logger.warn("The content " + content.getName() + " had no content type at all"); } else if(version == 1) { ContentTypeDefinition originalContentTypeDefinition = content.getContentTypeDefinition(); if(originalContentTypeDefinition != null) { contentTypeDefinition = ContentTypeDefinitionController.getController().getContentTypeDefinitionWithName(originalContentTypeDefinition.getName(), db); if(contentTypeDefinition == null) { db.create(originalContentTypeDefinition); contentTypeDefinition = originalContentTypeDefinition; } content.setContentTypeDefinition((ContentTypeDefinitionImpl)contentTypeDefinition); } } if(content.getContentTypeDefinition() == null) logger.warn("No content type definition for content:" + content.getId()); logger.info("Creating content:" + content.getName()); content.setName(substituteStrings(content.getName(), replaceMap)); db.create(content); allContents.add(content); Integer newContentId = content.getContentId(); idMap.put(originalContentId.toString(), newContentId.toString()); Collection contentVersions = content.getContentVersions(); if(onlyLatestVersions.equalsIgnoreCase("true")) { logger.info("org contentVersions:" + contentVersions.size()); List selectedContentVersions = new ArrayList(); Iterator realContentVersionsIterator = contentVersions.iterator(); while(realContentVersionsIterator.hasNext()) { ContentVersion contentVersion = (ContentVersion)realContentVersionsIterator.next(); Iterator selectedContentVersionsIterator = selectedContentVersions.iterator(); boolean addLanguageVersion = true; boolean noLanguageVersionFound = true; while(selectedContentVersionsIterator.hasNext()) { ContentVersion currentContentVersion = (ContentVersion)selectedContentVersionsIterator.next(); logger.info("" + currentContentVersion.getLanguage().getLanguageCode() + "=" + contentVersion.getLanguage().getLanguageCode()); if(currentContentVersion.getLanguage().getLanguageCode().equals(contentVersion.getLanguage().getLanguageCode())) { noLanguageVersionFound = false; logger.info("" + contentVersion.getIsActive() + "=" + contentVersion.getLanguage().getLanguageCode()); if(contentVersion.getIsActive().booleanValue() && contentVersion.getContentVersionId().intValue() > currentContentVersion.getContentVersionId().intValue()) { logger.info("A later version was found... removing this one.."); selectedContentVersionsIterator.remove(); addLanguageVersion = true; } } } if(addLanguageVersion || noLanguageVersionFound) selectedContentVersions.add(contentVersion); } contentVersions = selectedContentVersions; } logger.info("new contentVersions:" + contentVersions.size()); //Collection contentVersions = content.getContentVersions(); Iterator contentVersionsIterator = contentVersions.iterator(); while(contentVersionsIterator.hasNext()) { ContentVersion contentVersion = (ContentVersion)contentVersionsIterator.next(); Language language = LanguageController.getController().getLanguageWithCode(contentVersion.getLanguage().getLanguageCode(), db); logger.info("Creating contentVersion for language:" + contentVersion.getLanguage().getLanguageCode() + " on content " + content.getName()); contentVersion.setOwningContent((ContentImpl)content); contentVersion.setLanguage((LanguageImpl)language); Collection digitalAssets = contentVersion.getDigitalAssets(); if(digitalAssets != null) { List initialDigitalAssets = new ArrayList(); Iterator digitalAssetsIterator = digitalAssets.iterator(); while(digitalAssetsIterator.hasNext()) { DigitalAsset digitalAsset = (DigitalAsset)digitalAssetsIterator.next(); List initialContentVersions = new ArrayList(); initialContentVersions.add(contentVersion); digitalAsset.setContentVersions(initialContentVersions); if(digitalAsset.getAssetFileSize() == -1) { logger.info("digitalAsset:" + digitalAsset.getId() + "-" + digitalAsset.getAssetKey() + " was archived - let's fake it.."); digitalAsset.setAssetBytes("archived".getBytes()); } db.create(digitalAsset); initialDigitalAssets.add(digitalAsset); } contentVersion.setDigitalAssets(initialDigitalAssets); } Collection contentCategories = contentVersion.getContentCategories(); logger.info("contentCategories:" + contentCategories.size()); db.create(contentVersion); if(contentCategories != null) { List initialContentCategories = new ArrayList(); Iterator contentCategoriesIterator = contentCategories.iterator(); while(contentCategoriesIterator.hasNext()) { ContentCategory contentCategory = (ContentCategory)contentCategoriesIterator.next(); logger.info("contentCategory:" + contentCategory); contentCategory.setContentVersion((ContentVersionImpl)contentVersion); Integer oldCategoryId = contentCategory.getCategoryId(); logger.info("oldCategoryId:" + oldCategoryId); if(!isCopyAction) { Integer newCategoryId = (Integer)categoryIdMap.get(oldCategoryId); logger.info("newCategoryId:" + newCategoryId); if(newCategoryId == null) newCategoryId = oldCategoryId; if(newCategoryId != null) { Category category = CategoryController.getController().findById(newCategoryId, db); logger.info("Got category:" + category); if(category != null) { contentCategory.setCategory((CategoryImpl)category); logger.info("Creating content category:" + contentCategory); db.create(contentCategory); initialContentCategories.add(contentCategory); } } } else { Category category = CategoryController.getController().findById(oldCategoryId, db); logger.info("Got category:" + category); if(category != null) { contentCategory.setCategory((CategoryImpl)category); logger.info("Creating content category:" + contentCategory); db.create(contentCategory); initialContentCategories.add(contentCategory); } } } contentVersion.setContentCategories(initialContentCategories); } } Collection childContents = content.getChildren(); if(childContents != null) { Iterator childContentsIterator = childContents.iterator(); while(childContentsIterator.hasNext()) { Content childContent = (Content)childContentsIterator.next(); childContent.setRepository(content.getRepository()); childContent.setParentContent((ContentImpl)content); createContents(childContent, idMap, contentTypeDefinitionIdMap, allContents, contentTypeDefinitions, categoryIdMap, version, db, onlyLatestVersions, isCopyAction, replaceMap); } } return allContents; } /** * This method updates all the bindings in content-versions to reflect the move. */ public void updateContentVersions(Content content, Map contentIdMap, Map siteNodeIdMap, String onlyLatestVersions, Map replaceMap) throws Exception { logger.info("content:" + content.getName()); Collection contentVersions = content.getContentVersions(); if(onlyLatestVersions.equalsIgnoreCase("true")) { logger.info("org contentVersions:" + contentVersions.size()); List selectedContentVersions = new ArrayList(); Iterator realContentVersionsIterator = contentVersions.iterator(); while(realContentVersionsIterator.hasNext()) { ContentVersion contentVersion = (ContentVersion)realContentVersionsIterator.next(); Iterator selectedContentVersionsIterator = selectedContentVersions.iterator(); boolean addLanguageVersion = true; boolean noLanguageVersionFound = true; while(selectedContentVersionsIterator.hasNext()) { ContentVersion currentContentVersion = (ContentVersion)selectedContentVersionsIterator.next(); logger.info("" + currentContentVersion.getLanguage().getLanguageCode() + "=" + contentVersion.getLanguage().getLanguageCode()); if(currentContentVersion.getLanguage().getLanguageCode().equals(contentVersion.getLanguage().getLanguageCode())) { noLanguageVersionFound = false; logger.info("" + contentVersion.getIsActive() + "=" + contentVersion.getLanguage().getLanguageCode()); if(contentVersion.getIsActive().booleanValue() && contentVersion.getContentVersionId().intValue() > currentContentVersion.getContentVersionId().intValue()) { logger.info("A later version was found... removing this one.."); selectedContentVersionsIterator.remove(); addLanguageVersion = true; } } } if(addLanguageVersion || noLanguageVersionFound) selectedContentVersions.add(contentVersion); } contentVersions = selectedContentVersions; } Iterator contentVersionIterator = contentVersions.iterator(); while(contentVersionIterator.hasNext()) { ContentVersion contentVersion = (ContentVersion)contentVersionIterator.next(); String contentVersionValue = contentVersion.getVersionValue(); Iterator<String> replaceMapIterator = replaceMap.keySet().iterator(); while(replaceMapIterator.hasNext()) { String key = replaceMapIterator.next(); String value = (String)replaceMap.get(key); contentVersionValue = contentVersionValue.replaceAll(key, value); } contentVersionValue = contentVersionValue.replaceAll("contentId=\"", "contentId=\"oldContentId_"); contentVersionValue = contentVersionValue.replaceAll("\\?contentId=", "\\?contentId=oldContentId_"); contentVersionValue = contentVersionValue.replaceAll("getInlineAssetUrl\\(", "getInlineAssetUrl\\(oldContentId_"); contentVersionValue = contentVersionValue.replaceAll("languageId,", "languageId,oldContentId_"); contentVersionValue = contentVersionValue.replaceAll("entity=\"Content\" entityId=\"", "entity=\"Content\" entityId=\"oldContentId_"); //contentVersionValue = contentVersionValue.replaceAll("entity='Content'><id>", "entity='Content'><id>oldContentId_"); contentVersionValue = contentVersionValue.replaceAll("siteNodeId=\"", "siteNodeId=\"oldSiteNodeId_"); contentVersionValue = contentVersionValue.replaceAll("detailSiteNodeId=\"", "detailSiteNodeId=\"oldSiteNodeId_"); contentVersionValue = contentVersionValue.replaceAll("getPageUrl\\((\\d)", "getPageUrl\\(oldSiteNodeId_$1"); contentVersionValue = contentVersionValue.replaceAll("entity=\"SiteNode\" entityId=\"", "entity=\"SiteNode\" entityId=\"oldSiteNodeId_"); //contentVersionValue = contentVersionValue.replaceAll("entity='SiteNode'><id>", "entity='SiteNode'><id>old_"); contentVersionValue = this.prepareAllRelations(contentVersionValue); //logger.info("contentVersionValue before:" + contentVersionValue); Iterator contentIdMapIterator = contentIdMap.keySet().iterator(); while (contentIdMapIterator.hasNext()) { String oldContentId = (String)contentIdMapIterator.next(); String newContentId = (String)contentIdMap.get(oldContentId); //logger.info("Replacing all:" + oldContentId + " with " + newContentId); contentVersionValue = contentVersionValue.replaceAll("contentId=\"oldContentId_" + oldContentId + "\"", "contentId=\"" + newContentId + "\""); contentVersionValue = contentVersionValue.replaceAll("\\?contentId=oldContentId_" + oldContentId + "&", "\\?contentId=" + newContentId + "&"); contentVersionValue = contentVersionValue.replaceAll("getInlineAssetUrl\\(oldContentId_" + oldContentId + ",", "getInlineAssetUrl\\(" + newContentId + ","); contentVersionValue = contentVersionValue.replaceAll("languageId,oldContentId_" + oldContentId + "\\)", "languageId," + newContentId + "\\)"); contentVersionValue = contentVersionValue.replaceAll("entity=\"Content\" entityId=\"oldContentId_" + oldContentId + "\"", "entity=\"Content\" entityId=\"" + newContentId + "\""); contentVersionValue = contentVersionValue.replaceAll("<id>oldContentId_" + oldContentId + "</id>", "<id>" + newContentId + "</id>"); //contentVersionValue = contentVersionValue.replaceAll("entity='Content'><id>old_" + oldContentId + "</id>", "entity='Content'><id>" + newContentId + "</id>"); //contentVersionValue = contentVersionValue.replaceAll("<id>" + oldContentId + "</id>", "<id>" + newContentId + "</id>"); } Iterator siteNodeIdMapIterator = siteNodeIdMap.keySet().iterator(); while (siteNodeIdMapIterator.hasNext()) { String oldSiteNodeId = (String)siteNodeIdMapIterator.next(); String newSiteNodeId = (String)siteNodeIdMap.get(oldSiteNodeId); //logger.info("Replacing all:" + oldSiteNodeId + " with " + newSiteNodeId); contentVersionValue = contentVersionValue.replaceAll("siteNodeId=\"oldSiteNodeId_" + oldSiteNodeId + "\"", "siteNodeId=\"" + newSiteNodeId + "\""); contentVersionValue = contentVersionValue.replaceAll("detailSiteNodeId=\"oldSiteNodeId_" + oldSiteNodeId + "\"", "detailSiteNodeId=\"" + newSiteNodeId + "\""); contentVersionValue = contentVersionValue.replaceAll("getPageUrl\\(oldSiteNodeId_" + oldSiteNodeId + ",", "getPageUrl\\(" + newSiteNodeId + ","); contentVersionValue = contentVersionValue.replaceAll("entity=\"SiteNode\" entityId=\"oldSiteNodeId_" + oldSiteNodeId + "\"", "entity=\"SiteNode\" entityId=\"" + newSiteNodeId + "\""); //contentVersionValue = contentVersionValue.replaceAll("entity='SiteNode'><id>old_" + oldSiteNodeId + "</id>", "entity='SiteNode'><id>" + newSiteNodeId + "</id>"); contentVersionValue = contentVersionValue.replaceAll("<id>oldSiteNodeId_" + oldSiteNodeId + "</id>", "<id>" + newSiteNodeId + "</id>"); } //logger.info("contentVersionValue after:" + contentVersionValue); //Now replace all occurrances of old as they should never be there. contentVersionValue = contentVersionValue.replaceAll("oldContentId_", ""); contentVersionValue = contentVersionValue.replaceAll("oldSiteNodeId_", ""); logger.info("new contentVersionValue:" + contentVersionValue); contentVersion.setVersionValue(contentVersionValue); } } private String prepareAllRelations(String xml) throws Exception { StringBuffer newXML = new StringBuffer(); logger.info("xml: " + xml); String after = xml; String before = ""; String qualifyer = ""; boolean changed = false; int startIndex = xml.indexOf("<qualifyer"); while(startIndex > -1) { int stopIndex = xml.indexOf("</qualifyer>", startIndex); if(stopIndex > -1) { changed = true; before = xml.substring(0, startIndex); after = xml.substring(stopIndex + 12); qualifyer = xml.substring(startIndex, stopIndex + 12); String newQualifyer = qualifyer; if(qualifyer.indexOf("entity='Content'") > 0) newQualifyer = qualifyer.replaceAll("<id>", "<id>oldContentId_"); else if(qualifyer.indexOf("entity='SiteNode'") > 0) newQualifyer = qualifyer.replaceAll("<id>", "<id>oldSiteNodeId_"); newXML.append(before); newXML.append(newQualifyer); xml = after; } else { throw new Exception("Error in xml - qualifyer tag broken in " + xml); } startIndex = xml.indexOf("<qualifyer"); } newXML.append(after); if(changed) logger.info("newXML:" + newXML); return newXML.toString(); } /* (non-Javadoc) * @see org.infoglue.cms.controllers.kernel.impl.simple.BaseController#getNewVO() */ public BaseEntityVO getNewVO() { // TODO Auto-generated method stub return null; } }