/* ===============================================================================
*
* 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.util.ArrayList;
import java.util.Collection;
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.jdo.ObjectNotFoundException;
import org.infoglue.cms.applications.common.VisualFormatter;
import org.infoglue.cms.entities.content.ContentVO;
import org.infoglue.cms.entities.content.ContentVersion;
import org.infoglue.cms.entities.content.ContentVersionVO;
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.AccessRightGroupVO;
import org.infoglue.cms.entities.management.AccessRightRole;
import org.infoglue.cms.entities.management.AccessRightRoleVO;
import org.infoglue.cms.entities.management.AccessRightUser;
import org.infoglue.cms.entities.management.AccessRightUserVO;
import org.infoglue.cms.entities.management.AccessRightVO;
import org.infoglue.cms.entities.management.AvailableServiceBindingVO;
import org.infoglue.cms.entities.management.InterceptionPoint;
import org.infoglue.cms.entities.management.LanguageVO;
import org.infoglue.cms.entities.structure.QualifyerVO;
import org.infoglue.cms.entities.structure.ServiceBinding;
import org.infoglue.cms.entities.structure.ServiceBindingVO;
import org.infoglue.cms.entities.structure.SiteNodeVO;
import org.infoglue.cms.entities.structure.SiteNodeVersion;
import org.infoglue.cms.entities.structure.SiteNodeVersionVO;
import org.infoglue.cms.entities.structure.impl.simple.MediumSiteNodeVersionImpl;
import org.infoglue.cms.entities.structure.impl.simple.SmallQualifyerImpl;
import org.infoglue.cms.entities.structure.impl.simple.SmallServiceBindingImpl;
import org.infoglue.cms.entities.workflow.EventVO;
import org.infoglue.cms.exception.ConstraintException;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.security.InfoGluePrincipal;
import org.infoglue.cms.util.CmsPropertyHandler;
import org.infoglue.cms.util.DateHelper;
import org.infoglue.deliver.util.RequestAnalyser;
import org.infoglue.deliver.util.Timer;
public class SiteNodeStateController extends BaseController
{
private final static Logger logger = Logger.getLogger(SiteNodeStateController.class.getName());
private VisualFormatter visualFormatter = new VisualFormatter();
/**
* Factory method
*/
public static SiteNodeStateController getController()
{
return new SiteNodeStateController();
}
/**
* This method handles versioning and state-control of siteNodes.
* Se inline documentation for further explainations.
*/
public SiteNodeVersionVO changeState(Integer oldSiteNodeVersionId, Integer stateId, String versionComment, boolean overrideVersionModifyer, InfoGluePrincipal infoGluePrincipal, Integer siteNodeId, List<EventVO> resultingEvents) throws ConstraintException, SystemException
{
return changeState(oldSiteNodeVersionId, stateId, versionComment, overrideVersionModifyer, null, infoGluePrincipal, siteNodeId, resultingEvents);
}
/**
* This method handles versioning and state-control of siteNodes.
* Se inline documentation for further explainations.
*/
public SiteNodeVersionVO changeState(Integer oldSiteNodeVersionId, SiteNodeVO siteNodeVO, Integer stateId, String versionComment, boolean overrideVersionModifyer, InfoGluePrincipal infoGluePrincipal, List<EventVO> resultingEvents) throws ConstraintException, SystemException
{
return changeState(oldSiteNodeVersionId, siteNodeVO, stateId, versionComment, overrideVersionModifyer, null, infoGluePrincipal, resultingEvents);
}
/**
* This method handles versioning and state-control of siteNodes.
* Se inline documentation for further explainations.
*/
public SiteNodeVersionVO changeState(Integer oldSiteNodeVersionId, Integer stateId, String versionComment, boolean overrideVersionModifyer, String recipientFilter, InfoGluePrincipal infoGluePrincipal, Integer siteNodeId, List<EventVO> resultingEvents) throws ConstraintException, SystemException
{
SiteNodeVO siteNodeVO = SiteNodeController.getController().getSiteNodeVOWithId(siteNodeId);
return changeState(oldSiteNodeVersionId, siteNodeVO, stateId, versionComment, overrideVersionModifyer, recipientFilter, infoGluePrincipal, resultingEvents);
}
/**
* This method handles versioning and state-control of siteNodes.
* Se inline documentation for further explainations.
*/
public SiteNodeVersionVO changeState(Integer oldSiteNodeVersionId, SiteNodeVO siteNodeVO, Integer stateId, String versionComment, boolean overrideVersionModifyer, String recipientFilter, InfoGluePrincipal infoGluePrincipal, List<EventVO> resultingEvents) throws ConstraintException, SystemException
{
SiteNodeVersionVO newSiteNodeVersionVO = null;
Database db = CastorDatabaseService.getDatabase();
beginTransaction(db);
try
{
newSiteNodeVersionVO = changeState(oldSiteNodeVersionId, siteNodeVO, stateId, versionComment, overrideVersionModifyer, recipientFilter, infoGluePrincipal, db, resultingEvents);
commitRegistryAwareTransaction(db);
}
catch(Exception e)
{
logger.error("An error occurred so we should not complete the transaction:" + e, e);
rollbackTransaction(db);
throw new SystemException(e.getMessage());
}
return newSiteNodeVersionVO;
}
/**
* This method handles versioning and state-control of siteNodes.
* Se inline documentation for further explainations.
*/
public SiteNodeVersionVO changeState(Integer oldSiteNodeVersionId, SiteNodeVO siteNodeVO, Integer stateId, String versionComment, boolean overrideVersionModifyer, InfoGluePrincipal infoGluePrincipal, Database db, Integer siteNodeId, List<EventVO> resultingEvents) throws ConstraintException, SystemException
{
return changeState(oldSiteNodeVersionId, siteNodeVO, stateId, versionComment, overrideVersionModifyer, null, infoGluePrincipal, db, resultingEvents);
}
/**
* This method handles versioning and state-control of siteNodes.
* Se inline documentation for further explainations.
*/
public SiteNodeVersionVO changeState(Integer oldSiteNodeVersionId, Integer stateId, String versionComment, boolean overrideVersionModifyer, String recipientFilter, InfoGluePrincipal infoGluePrincipal, Database db, Integer siteNodeId, List<EventVO> resultingEvents) throws ConstraintException, SystemException
{
SiteNodeVO siteNodeVO = SiteNodeController.getController().getSiteNodeVOWithId(siteNodeId);
return changeState(oldSiteNodeVersionId, siteNodeVO, stateId, versionComment, overrideVersionModifyer, recipientFilter, infoGluePrincipal, db, resultingEvents);
}
/**
* This method handles versioning and state-control of siteNodes.
* Se inline documentation for further explainations.
*/
public SiteNodeVersionVO changeState(Integer oldSiteNodeVersionId, SiteNodeVO siteNodeVO, Integer stateId, String versionComment, boolean overrideVersionModifyer, String recipientFilter, InfoGluePrincipal infoGluePrincipal, Database db, List<EventVO> resultingEvents) throws ConstraintException, SystemException
{
Timer t = new Timer();
SiteNodeVersionVO returnSiteNodeVersionVO = null;
MediumSiteNodeVersionImpl returnSiteNodeVersionImpl = null;
try
{
MediumSiteNodeVersionImpl oldMediumSiteNodeVersionImpl = SiteNodeVersionController.getController().getMediumSiteNodeVersionWithId(oldSiteNodeVersionId, db);
returnSiteNodeVersionVO = oldMediumSiteNodeVersionImpl.getValueObject();
//t.printElapsedTime("oldMediumSiteNodeVersionImpl:" + oldMediumSiteNodeVersionImpl.getSiteNodeId());
//Here we create a new version if it was a state-change back to working, it's a copy of the publish-version
if(stateId.intValue() == SiteNodeVersionVO.WORKING_STATE.intValue())
{
logger.info("About to create a new working version");
SiteNodeVersionVO newSiteNodeVersionVO = new SiteNodeVersionVO();
newSiteNodeVersionVO.setStateId(stateId);
newSiteNodeVersionVO.setVersionComment("New working version");
newSiteNodeVersionVO.setModifiedDateTime(DateHelper.getSecondPreciseDate());
if(overrideVersionModifyer)
newSiteNodeVersionVO.setVersionModifier(infoGluePrincipal.getName());
else
newSiteNodeVersionVO.setVersionModifier(oldMediumSiteNodeVersionImpl.getVersionModifier());
newSiteNodeVersionVO.setContentType(oldMediumSiteNodeVersionImpl.getContentType());
newSiteNodeVersionVO.setPageCacheKey(oldMediumSiteNodeVersionImpl.getPageCacheKey());
newSiteNodeVersionVO.setPageCacheTimeout(oldMediumSiteNodeVersionImpl.getPageCacheTimeout());
newSiteNodeVersionVO.setDisableEditOnSight(oldMediumSiteNodeVersionImpl.getDisableEditOnSight());
newSiteNodeVersionVO.setDisableLanguages(oldMediumSiteNodeVersionImpl.getDisableLanguages());
newSiteNodeVersionVO.setDisablePageCache(oldMediumSiteNodeVersionImpl.getDisablePageCache());
newSiteNodeVersionVO.setIsProtected(oldMediumSiteNodeVersionImpl.getIsProtected());
newSiteNodeVersionVO.setDisableForceIdentityCheck(oldMediumSiteNodeVersionImpl.getDisableForceIdentityCheck());
newSiteNodeVersionVO.setForceProtocolChange(oldMediumSiteNodeVersionImpl.getForceProtocolChange());
newSiteNodeVersionVO.setIsHidden(oldMediumSiteNodeVersionImpl.getIsHidden());
newSiteNodeVersionVO.setSortOrder(oldMediumSiteNodeVersionImpl.getSortOrder());
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("changeState 1", t.getElapsedTime());
//returnSiteNodeVersionVO = SiteNodeVersionController.createFull(siteNodeId, infoGluePrincipal, newSiteNodeVersionVO, db).getValueObject();
returnSiteNodeVersionImpl = SiteNodeVersionController.createSmall(siteNodeVO.getId(), infoGluePrincipal, newSiteNodeVersionVO, db);
returnSiteNodeVersionVO = returnSiteNodeVersionImpl.getValueObject();
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("changeState createSmall", t.getElapsedTime());
returnSiteNodeVersionImpl.setSiteNodeId(oldMediumSiteNodeVersionImpl.getSiteNodeId());
copyServiceBindings(oldMediumSiteNodeVersionImpl, returnSiteNodeVersionImpl, db);
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("changeState copyServiceBindings", t.getElapsedTime());
if(returnSiteNodeVersionImpl.getIsProtected().intValue() == SiteNodeVersionVO.YES || returnSiteNodeVersionImpl.getIsProtected().intValue() == SiteNodeVersionVO.YES_WITH_INHERIT_FALLBACK)
{
copyAccessRights("SiteNodeVersion", oldMediumSiteNodeVersionImpl.getId(), returnSiteNodeVersionImpl.getId(), db);
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("changeState copyAccessRights", t.getElapsedTime());
}
}
//If the user changes the state to publish we create a copy and set that copy to publish.
if(stateId.intValue() == SiteNodeVersionVO.PUBLISH_STATE.intValue())
{
logger.info("About to copy the working copy to a publish-one");
//First we update the old working-version so it gets a comment
//SiteNodeVersionVO oldSiteNodeVersionVO = oldSiteNodeVersion.getValueObject();
oldMediumSiteNodeVersionImpl.setVersionComment(versionComment);
if(CmsPropertyHandler.getUseApprovalFlow().equals("true"))
{
//Now we create a new version which is basically just a copy of the working-version
SiteNodeVersionVO newSiteNodeVersionVO = new SiteNodeVersionVO();
newSiteNodeVersionVO.setSiteNodeId(siteNodeVO.getId());
newSiteNodeVersionVO.setStateId(stateId);
newSiteNodeVersionVO.setVersionComment(versionComment);
if(overrideVersionModifyer)
newSiteNodeVersionVO.setVersionModifier(infoGluePrincipal.getName());
else
newSiteNodeVersionVO.setVersionModifier(oldMediumSiteNodeVersionImpl.getVersionModifier());
newSiteNodeVersionVO.setModifiedDateTime(DateHelper.getSecondPreciseDate());
newSiteNodeVersionVO.setContentType(oldMediumSiteNodeVersionImpl.getContentType());
newSiteNodeVersionVO.setPageCacheKey(oldMediumSiteNodeVersionImpl.getPageCacheKey());
newSiteNodeVersionVO.setPageCacheTimeout(oldMediumSiteNodeVersionImpl.getPageCacheTimeout());
newSiteNodeVersionVO.setDisableEditOnSight(oldMediumSiteNodeVersionImpl.getDisableEditOnSight());
newSiteNodeVersionVO.setDisableLanguages(oldMediumSiteNodeVersionImpl.getDisableLanguages());
newSiteNodeVersionVO.setDisablePageCache(oldMediumSiteNodeVersionImpl.getDisablePageCache());
newSiteNodeVersionVO.setIsProtected(oldMediumSiteNodeVersionImpl.getIsProtected());
newSiteNodeVersionVO.setDisableForceIdentityCheck(oldMediumSiteNodeVersionImpl.getDisableForceIdentityCheck());
newSiteNodeVersionVO.setForceProtocolChange(oldMediumSiteNodeVersionImpl.getForceProtocolChange());
newSiteNodeVersionVO.setIsHidden(oldMediumSiteNodeVersionImpl.getIsHidden());
newSiteNodeVersionVO.setSortOrder(oldMediumSiteNodeVersionImpl.getSortOrder());
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("changeState publish1", t.getElapsedTime());
//returnSiteNodeVersionVO = SiteNodeVersionController.createFull(siteNodeId, infoGluePrincipal, newSiteNodeVersionVO, db).getValueObject();
returnSiteNodeVersionImpl = SiteNodeVersionController.createSmall(siteNodeVO.getId(), infoGluePrincipal, newSiteNodeVersionVO, db);
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("changeState publish createSmall", t.getElapsedTime());
returnSiteNodeVersionVO = returnSiteNodeVersionImpl.getValueObject();
//returnSiteNodeVersionVO.setSiteNodeId(oldSiteNodeVersion.getValueObject().getSiteNodeId());
//copyServiceBindings(oldSiteNodeVersion, newSiteNodeVersion, db);
if(returnSiteNodeVersionImpl.getIsProtected().intValue() == SiteNodeVersionVO.YES || returnSiteNodeVersionImpl.getIsProtected().intValue() == SiteNodeVersionVO.YES_WITH_INHERIT_FALLBACK)
{
copyAccessRights("SiteNodeVersion", oldMediumSiteNodeVersionImpl.getId(), returnSiteNodeVersionImpl.getId(), db);
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("changeState publish copyAccessRights", t.getElapsedTime());
}
//Creating the event that will notify the editor...
EventVO eventVO = new EventVO();
eventVO.setDescription(returnSiteNodeVersionImpl.getVersionComment());
eventVO.setEntityClass(SiteNodeVersion.class.getName());
eventVO.setEntityId(new Integer(returnSiteNodeVersionImpl.getId().intValue()));
eventVO.setName(siteNodeVO.getName());
eventVO.setTypeId(EventVO.PUBLISH);
eventVO = EventController.create(eventVO, siteNodeVO.getRepositoryId(), infoGluePrincipal, db);
eventVO.setName(siteNodeVO.getName());
resultingEvents.add(eventVO);
}
else
{
oldMediumSiteNodeVersionImpl.setVersionComment(versionComment);
//Creating the event that will notify the editor...
EventVO eventVO = new EventVO();
eventVO.setDescription(oldMediumSiteNodeVersionImpl.getVersionComment());
eventVO.setEntityClass(SiteNodeVersion.class.getName());
eventVO.setEntityId(new Integer(oldMediumSiteNodeVersionImpl.getId().intValue()));
eventVO.setName(siteNodeVO.getName());
eventVO.setTypeId(EventVO.PUBLISH);
eventVO = EventController.create(eventVO, siteNodeVO.getRepositoryId(), infoGluePrincipal, db);
eventVO.setName(siteNodeVO.getName());
resultingEvents.add(eventVO);
}
//if(recipientFilter != null && !recipientFilter.equals(""))
// PublicationController.mailPublishNotification(resultingEvents, siteNodeVO.getRepositoryId(), infoGluePrincipal, recipientFilter, db);
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("changeState publish create event", t.getElapsedTime());
}
if(stateId.intValue() == SiteNodeVersionVO.PUBLISHED_STATE.intValue())
{
logger.info("About to publish an existing version");
oldMediumSiteNodeVersionImpl.setStateId(stateId);
oldMediumSiteNodeVersionImpl.setIsActive(new Boolean(true));
returnSiteNodeVersionImpl = oldMediumSiteNodeVersionImpl;
}
if(stateId.intValue() != SiteNodeVersionVO.PUBLISH_STATE.intValue() || CmsPropertyHandler.getUseApprovalFlow().equals("true"))
{
changeStateOnMetaInfo(db, siteNodeVO, returnSiteNodeVersionImpl.getValueObject(), stateId, versionComment, overrideVersionModifyer, infoGluePrincipal, resultingEvents);
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("changeState changeStateOnMetaInfo", t.getElapsedTime());
}
}
catch(Exception e)
{
e.printStackTrace();
logger.error("An error occurred so we should not complete the transaction:" + e, e);
throw new SystemException(e.getMessage());
}
return returnSiteNodeVersionVO;
}
public SiteNodeVersion updateStateId(SiteNodeVersion siteNodeVersion, Integer stateId, String versionComment, InfoGluePrincipal infoGluePrincipal, Database db) throws ConstraintException, SystemException, Exception
{
Integer oldSiteNodeVersionId = siteNodeVersion.getId();
if(siteNodeVersion.getStateId().equals(stateId))
{
siteNodeVersion.setVersionComment(versionComment);
siteNodeVersion.setVersionModifier(infoGluePrincipal.getName());
return siteNodeVersion;
}
//Here we just updates the state if it's a publish-state-change.
if(stateId.intValue() == 2)
{
siteNodeVersion.setStateId(stateId);
siteNodeVersion.setVersionComment(versionComment);
siteNodeVersion.setVersionModifier(infoGluePrincipal.getName());
}
//Here we create a new version if it was a state-change back to working
if(stateId.intValue() == 0)
{
SiteNodeVersionVO siteNodeVersionVO = new SiteNodeVersionVO();
siteNodeVersionVO.setContentType(siteNodeVersion.getContentType());
siteNodeVersionVO.setDisableEditOnSight(siteNodeVersion.getDisableEditOnSight());
siteNodeVersionVO.setDisableForceIdentityCheck(siteNodeVersion.getDisableForceIdentityCheck());
siteNodeVersionVO.setForceProtocolChange(siteNodeVersion.getForceProtocolChange());
siteNodeVersionVO.setDisableLanguages(siteNodeVersion.getDisableLanguages());
siteNodeVersionVO.setDisablePageCache(siteNodeVersion.getDisablePageCache());
siteNodeVersionVO.setIsActive(siteNodeVersion.getIsActive());
siteNodeVersionVO.setIsCheckedOut(siteNodeVersion.getIsCheckedOut());
siteNodeVersionVO.setIsHidden(siteNodeVersion.getIsHidden());
siteNodeVersionVO.setIsProtected(siteNodeVersion.getIsProtected());
siteNodeVersionVO.setPageCacheKey(siteNodeVersion.getPageCacheKey());
siteNodeVersionVO.setPageCacheTimeout(siteNodeVersion.getPageCacheTimeout());
siteNodeVersionVO.setSortOrder(siteNodeVersion.getSortOrder());
siteNodeVersionVO.setVersionModifier(infoGluePrincipal.getName());
siteNodeVersionVO.setVersionNumber(siteNodeVersion.getVersionNumber() + 1);
siteNodeVersionVO.setStateId(stateId);
siteNodeVersionVO.setVersionComment(versionComment);
siteNodeVersion = SiteNodeVersionController.getController().createFull(siteNodeVersion.getValueObject().getSiteNodeId(), infoGluePrincipal, siteNodeVersionVO, db);
if(siteNodeVersion.getIsProtected().intValue() == SiteNodeVersionVO.YES || siteNodeVersion.getIsProtected().intValue() == SiteNodeVersionVO.YES_WITH_INHERIT_FALLBACK)
{
copyAccessRights("SiteNodeVersion", oldSiteNodeVersionId, siteNodeVersion.getId(), db);
}
}
return siteNodeVersion;
}
/**
* This method checks if the siteNodes latest metainfo is working - if so - it get published with the sitenode.
* @param db
* @throws ConstraintException
* @throws SystemException
* @throws Exception
*/
public void changeStateOnMetaInfo(Database db, SiteNodeVO snVO, SiteNodeVersionVO siteNodeVersionVO, Integer stateId, String versionComment, boolean overrideVersionModifyer, InfoGluePrincipal infoGluePrincipal, List events) throws ConstraintException, SystemException, Exception
{
Timer t = new Timer();
if(snVO == null)
return;
List<LanguageVO> languages = LanguageController.getController().getAvailableLanguageVOListForRepository(snVO.getRepositoryId(), db);
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("getAvailableLanguageVOListForRepository..", t.getElapsedTime());
LanguageVO masterLanguage = LanguageController.getController().getMasterLanguage(snVO.getRepositoryId(), db);
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("getMasterLanguage..", t.getElapsedTime());
ContentVO contentVO = null;
if(snVO.getMetaInfoContentId() != null)
{
try
{
contentVO = ContentController.getContentController().getSmallContentVOWithId(snVO.getMetaInfoContentId(), db, null);
}
catch (Exception e)
{
if(e.getCause().getClass().getName().equals(ObjectNotFoundException.class.getName()))
{
logger.error("No meta info found on " + snVO.getId() + ". Returning as if ok.");
return;
}
}
}
else
{
logger.warn("There was no metaInfoContentId on the siteNode... run validation to improve performance..");
Integer metaInfoAvailableServiceBindingId = null;
Integer serviceBindingId = null;
AvailableServiceBindingVO availableServiceBindingVO = AvailableServiceBindingController.getController().getAvailableServiceBindingVOWithName("Meta information", db);
if(availableServiceBindingVO != null)
metaInfoAvailableServiceBindingId = availableServiceBindingVO.getAvailableServiceBindingId();
logger.info("after loading service binding for meta info");
List<SmallServiceBindingImpl> serviceBindings = ServiceBindingController.getController().getSmallServiceBindingsListForSiteNodeVersion(siteNodeVersionVO.getSiteNodeVersionId(), db);
Iterator<SmallServiceBindingImpl> serviceBindingIterator = serviceBindings.iterator();
while(serviceBindingIterator.hasNext())
{
SmallServiceBindingImpl serviceBinding = serviceBindingIterator.next();
if(serviceBinding.getAvailableServiceBinding().getId().intValue() == metaInfoAvailableServiceBindingId.intValue())
{
serviceBindingId = serviceBinding.getId();
break;
}
}
if(serviceBindingId != null)
{
List boundContents = ContentController.getBoundContents(db, serviceBindingId);
logger.info("boundContents:" + boundContents.size());
if(boundContents.size() > 0)
{
contentVO = (ContentVO)boundContents.get(0);
logger.info("contentVO:" + contentVO.getId());
}
}
}
RequestAnalyser.getRequestAnalyser().registerComponentStatistics("getSmallContentVOWithId..", t.getElapsedTime());
if(contentVO != null)
{
Iterator<LanguageVO> languageIterator = languages.iterator();
while(languageIterator.hasNext())
{
LanguageVO language = languageIterator.next();
ContentVersionVO contentVersionVO = ContentVersionController.getContentVersionController().getLatestActiveContentVersionVO(contentVO.getId(), language.getId(), db);
//if(contentVersion != null && contentVersion.getStateId().intValue() == siteNodeVersion.getStateId().intValue())
if(contentVersionVO != null && contentVersionVO.getStateId().intValue() != stateId.intValue())
{
logger.info("State on current:" + contentVersionVO.getStateId());
logger.info("changing state on contentVersion:" + contentVersionVO.getId());
ContentVersion contentVersion = ContentStateController.changeState(contentVersionVO.getId(), contentVO, stateId, versionComment, overrideVersionModifyer, null, infoGluePrincipal, contentVO.getId(), db, events);
contentVersionVO = contentVersion.getValueObject();
}
if(language.getId().equals(masterLanguage.getId()) && contentVersionVO != null)
{
//TODO - lets keep the ref to meta info alive...
//RegistryController.getController().updateSiteNodeVersion(siteNodeVersion, db);
//RegistryController.getController().updateContentVersion(contentVersionVO, siteNodeVersionVO, db);
RegistryController.getController().updateContentVersionThreaded(contentVersionVO, siteNodeVersionVO);
}
}
}
}
/**
* This method checks if the siteNodes latest metainfo is working - if so - it get published with the sitenode.
* @param db
* @throws ConstraintException
* @throws SystemException
* @throws Exception
*/
/*
public void changeStateOnMetaInfo(Database db, SiteNodeVersion siteNodeVersion, Integer stateId, String versionComment, boolean overrideVersionModifyer, InfoGluePrincipal infoGluePrincipal, List events) throws ConstraintException, SystemException, Exception
{
logger.info("start changeStateOnMetaInfo");
List languages = LanguageController.getController().getLanguageList(siteNodeVersion.getOwningSiteNode().getRepository().getId(), db);
Language masterLanguage = LanguageController.getController().getMasterLanguage(db, siteNodeVersion.getOwningSiteNode().getRepository().getId());
logger.info("after languages");
Integer metaInfoAvailableServiceBindingId = null;
Integer serviceBindingId = null;
AvailableServiceBinding availableServiceBinding = AvailableServiceBindingController.getController().getAvailableServiceBindingWithName("Meta information", db, true);
if(availableServiceBinding != null)
metaInfoAvailableServiceBindingId = availableServiceBinding.getAvailableServiceBindingId();
logger.info("after loading service binding for meta info");
Collection serviceBindings = siteNodeVersion.getServiceBindings();
Iterator serviceBindingIterator = serviceBindings.iterator();
while(serviceBindingIterator.hasNext())
{
ServiceBinding serviceBinding = (ServiceBinding)serviceBindingIterator.next();
if(serviceBinding.getAvailableServiceBinding().getId().intValue() == metaInfoAvailableServiceBindingId.intValue())
{
serviceBindingId = serviceBinding.getId();
break;
}
}
if(serviceBindingId != null)
{
List boundContents = ContentController.getBoundContents(db, serviceBindingId);
logger.info("boundContents:" + boundContents.size());
if(boundContents.size() > 0)
{
ContentVO contentVO = (ContentVO)boundContents.get(0);
logger.info("contentVO:" + contentVO.getId());
Iterator languageIterator = languages.iterator();
while(languageIterator.hasNext())
{
Language language = (Language)languageIterator.next();
ContentVersion contentVersion = ContentVersionController.getContentVersionController().getLatestActiveContentVersion(contentVO.getId(), language.getId(), db);
logger.info("language:" + language.getId());
//if(language.getId().equals(masterLanguage.getId()) && contentVersion == null)
// throw new Exception("The contentVersion was null or states did not match.. the version and meta info content should allways match when it comes to master language version...");
if(contentVersion != null)
{
logger.info("contentVersion:" + contentVersion.getId() + ":" + contentVersion.getStateId());
logger.info("State wanted:" + stateId);
}
//if(contentVersion != null && contentVersion.getStateId().intValue() == siteNodeVersion.getStateId().intValue())
if(contentVersion != null && contentVersion.getStateId().intValue() != stateId.intValue())
{
logger.info("State on current:" + contentVersion.getStateId());
logger.info("changing state on contentVersion:" + contentVersion.getId());
contentVersion = ContentStateController.changeState(contentVersion.getId(), stateId, versionComment, overrideVersionModifyer, infoGluePrincipal, contentVO.getId(), db, events);
}
if(language.getId().equals(masterLanguage.getId()) && contentVersion != null)
{
//TODO - lets keep the ref to meta info alive...
//RegistryController.getController().updateSiteNodeVersion(siteNodeVersion, db);
RegistryController.getController().updateContentVersion(contentVersion, siteNodeVersion, db);
}
}
}
}
}
*/
/**
* This method copies all serviceBindings a siteNodeVersion has to the new siteNodeVersion.
*/
private static void copyServiceBindings(MediumSiteNodeVersionImpl originalSiteNodeVersion, MediumSiteNodeVersionImpl newSiteNodeVersion, Database db) throws ConstraintException, SystemException, Exception
{
try
{
Collection serviceBindings = originalSiteNodeVersion.getServiceBindings();
Iterator iterator = serviceBindings.iterator();
while(iterator.hasNext())
{
ServiceBinding serviceBinding = (ServiceBinding)iterator.next();
ServiceBindingVO serviceBindingVO = serviceBinding.getValueObject();
ServiceBindingVO newServiceBindingVO = new ServiceBindingVO();
newServiceBindingVO.setBindingTypeId(serviceBindingVO.getBindingTypeId());
newServiceBindingVO.setName(serviceBindingVO.getName());
newServiceBindingVO.setPath(serviceBindingVO.getPath());
ServiceBinding newServiceBinding = ServiceBindingController.create(newServiceBindingVO, serviceBinding.getAvailableServiceBinding().getAvailableServiceBindingId(), newSiteNodeVersion.getSiteNodeVersionId(), serviceBinding.getServiceDefinition().getServiceDefinitionId(), db);
newSiteNodeVersion.getServiceBindings().add(newServiceBinding);
copyQualifyers(serviceBinding, newServiceBinding, db);
}
}
catch (Exception e)
{
logger.warn("The sitenode " + (originalSiteNodeVersion != null ? originalSiteNodeVersion.getSiteNodeId() : "null") + " have an invalid service bindning. Skipping it.");
}
}
/**
* This method copies all qualifyers a serviceBinding has to the new serviceBinding.
*/
private static void copyQualifyers(ServiceBinding originalServiceBinding, ServiceBinding newServiceBinding, Database db) throws ConstraintException, SystemException, Exception
{
Collection qualifyers = originalServiceBinding.getBindingQualifyers();
Collection newBindingQualifyers = new ArrayList();
Iterator iterator = qualifyers.iterator();
while(iterator.hasNext())
{
SmallQualifyerImpl qualifyer = (SmallQualifyerImpl)iterator.next();
QualifyerVO qualifyerVO = qualifyer.getValueObject();
SmallQualifyerImpl newQualifyer = new SmallQualifyerImpl();
newQualifyer.setValueObject(qualifyerVO);
newQualifyer.setServiceBinding((SmallServiceBindingImpl)newServiceBinding);
newBindingQualifyers.add(newQualifyer);
//QualifyerController.create(newQualifyerVO, newServiceBinding.getServiceBindingId(), db);
}
newServiceBinding.setBindingQualifyers(newBindingQualifyers);
}
/**
* This method assigns the same access rights as the old content-version has.
*/
public void copyAccessRights(String interceptionPointCategory, Integer originalSiteNodeVersionId, Integer newSiteNodeVersionId, Database db) throws ConstraintException, SystemException, Exception
{
copyAccessRights(interceptionPointCategory, originalSiteNodeVersionId, newSiteNodeVersionId, new HashMap<String,String>(), db);
}
/**
* This method assigns the same access rights as the old content-version has.
*/
public void copyAccessRights(String interceptionPointCategory, Integer originalEntityId, Integer newEntityId, Map<String,String> replaceMap, Database db) throws ConstraintException, SystemException, Exception
{
Timer t = new Timer();
List<InterceptionPoint> interceptionPointList = InterceptionPointController.getController().getInterceptionPointList(interceptionPointCategory, db);
List accessRightList = AccessRightController.getController().getAccessRightListForEntity(interceptionPointList, originalEntityId.toString(), db, true);
logger.info("accessRightList:" + accessRightList.size());
Iterator accessRightListIterator = accessRightList.iterator();
while(accessRightListIterator.hasNext())
{
AccessRight accessRight = (AccessRight)accessRightListIterator.next();
logger.info("accessRight:" + accessRight.getId());
AccessRightVO copiedAccessRight = accessRight.getValueObject().createCopy();
copiedAccessRight.setParameters(newEntityId.toString());
InterceptionPoint icp = null;
for(InterceptionPoint currentICP : interceptionPointList)
{
if(currentICP.getId().equals(copiedAccessRight.getInterceptionPointId()))
icp = currentICP;
}
if(icp != null)
{
AccessRight newAccessRight = AccessRightController.getController().create(copiedAccessRight, icp, db);
Iterator groupsIterator = accessRight.getGroups().iterator();
while(groupsIterator.hasNext())
{
AccessRightGroup accessRightGroup = (AccessRightGroup)groupsIterator.next();
AccessRightGroupVO newAccessRightGroupVO = new AccessRightGroupVO();
String groupName = accessRightGroup.getGroupName();
String newGroupName = visualFormatter.replaceAccordingToMappings(replaceMap, groupName);
logger.info("groupName:" + groupName + "-->" + newGroupName);
if(newGroupName != null && !groupName.equals(newGroupName))
{
if(GroupControllerProxy.getController().groupExists(newGroupName))
{
groupName = newGroupName;
}
else
{
logger.info("newGroupName " + newGroupName + " was not found in GroupControllerProxy.getController().groupExists. Lets try getGroup.");
try
{
if(GroupControllerProxy.getController().getGroup(newGroupName) != null)
{
groupName = newGroupName;
}
}
catch(Exception e)
{
logger.info("Did not find group: " + e.getMessage());
}
}
}
newAccessRightGroupVO.setGroupName(groupName);
AccessRightGroup newAccessRightGroup = AccessRightController.getController().createAccessRightGroup(db, newAccessRightGroupVO, newAccessRight);
newAccessRight.getGroups().add(newAccessRightGroup);
}
Iterator rolesIterator = accessRight.getRoles().iterator();
while(rolesIterator.hasNext())
{
AccessRightRole accessRightRole = (AccessRightRole)rolesIterator.next();
AccessRightRoleVO newAccessRightRoleVO = new AccessRightRoleVO();
String roleName = accessRightRole.getRoleName();
String newRoleName = visualFormatter.replaceAccordingToMappings(replaceMap, roleName);
logger.info("roleName:" + roleName + "-->" + newRoleName);
if(newRoleName != null && !roleName.equals(newRoleName))
{
if(RoleControllerProxy.getController().roleExists(newRoleName))
{
roleName = newRoleName;
}
else
{
logger.info("newRoleName " + newRoleName + " was not found in RoleControllerProxy.getController().roleExists. Lets try getRole.");
try
{
if(RoleControllerProxy.getController().getRole(newRoleName) != null)
{
roleName = newRoleName;
}
}
catch(Exception e)
{
logger.info("Did not find role: " + e.getMessage());
}
}
}
newAccessRightRoleVO.setRoleName(roleName);
AccessRightRole newAccessRightRole = AccessRightController.getController().createAccessRightRole(db, newAccessRightRoleVO, newAccessRight);
newAccessRight.getRoles().add(newAccessRightRole);
}
Iterator usersIterator = accessRight.getUsers().iterator();
while(usersIterator.hasNext())
{
AccessRightUser accessRightUser = (AccessRightUser)usersIterator.next();
AccessRightUserVO newAccessRightUserVO = new AccessRightUserVO();
newAccessRightUserVO.setUserName(accessRightUser.getUserName());
AccessRightUser newAccessRightUser = AccessRightController.getController().createAccessRightUser(db, newAccessRightUserVO, newAccessRight);
newAccessRight.getUsers().add(newAccessRightUser);
}
}
}
}
public void deleteAccessRights(String interceptionPointCategory, Integer siteNodeVersionId, Database db) throws ConstraintException, SystemException, Exception
{
List<InterceptionPoint> interceptionPointList = InterceptionPointController.getController().getInterceptionPointList(interceptionPointCategory, db);
List accessRightList = AccessRightController.getController().getAccessRightListForEntity(interceptionPointList, siteNodeVersionId.toString(), db, false);
//System.out.println("accessRightList:" + accessRightList.size());
Iterator accessRightListIterator = accessRightList.iterator();
while(accessRightListIterator.hasNext())
{
AccessRight accessRight = (AccessRight)accessRightListIterator.next();
//System.out.println("accessRight:" + accessRight.getId());
AccessRightController.getController().delete(accessRight, db);
}
}
/**
* This is a method that never should be called.
*/
public BaseEntityVO getNewVO()
{
return null;
}
}