* This method moves a siteNode after first making a couple of controls that the move is valid.
*/
public void moveSiteNode(SiteNodeVO siteNodeVO, Integer newParentSiteNodeId, InfoGluePrincipal principal) throws ConstraintException, SystemException
{
Database db = CastorDatabaseService.getDatabase();
ConstraintExceptionBuffer ceb = new ConstraintExceptionBuffer();
SiteNode siteNode = null;
SiteNode newParentSiteNode = null;
SiteNode oldParentSiteNode = null;
Map<String,String> pageUrls = new HashMap<String, String>();
beginTransaction(db);
try
{
//Validation that checks the entire object
siteNodeVO.validate();
if(newParentSiteNodeId == null)
{
logger.warn("You must specify the new parent-siteNode......");
throw new ConstraintException("SiteNode.parentSiteNodeId", "3403");
}
if(siteNodeVO.getId().intValue() == newParentSiteNodeId.intValue())
{
logger.warn("You cannot have the siteNode as it's own parent......");
throw new ConstraintException("SiteNode.parentSiteNodeId", "3401");
}
siteNode = getSiteNodeWithId(siteNodeVO.getSiteNodeId(), db);
oldParentSiteNode = siteNode.getParentSiteNode();
newParentSiteNode = getSiteNodeWithId(newParentSiteNodeId, db);
if(oldParentSiteNode.getId().intValue() == newParentSiteNodeId.intValue())
{
logger.warn("You cannot specify the same node as it originally was located in......");
throw new ConstraintException("SiteNode.parentSiteNodeId", "3404");
}
SiteNode tempSiteNode = newParentSiteNode.getParentSiteNode();
while(tempSiteNode != null)
{
if(tempSiteNode.getId().intValue() == siteNode.getId().intValue())
{
logger.warn("You cannot move the node to a child under it......");
throw new ConstraintException("SiteNode.parentSiteNodeId", "3402");
}
tempSiteNode = tempSiteNode.getParentSiteNode();
}
pageUrls = RedirectController.getController().getNiceURIMapBeforeMove(db, siteNodeVO.getRepositoryId(), siteNodeVO.getSiteNodeId(), principal);
logger.info("Setting the new Parent siteNode:" + siteNode.getSiteNodeId() + " " + newParentSiteNode.getSiteNodeId());
siteNode.setParentSiteNode((SiteNodeImpl)newParentSiteNode);
changeRepositoryRecursive(siteNode, newParentSiteNode.getRepository(), principal, db);
//siteNode.setRepository(newParentSiteNode.getRepository());
newParentSiteNode.getChildSiteNodes().add(siteNode);
oldParentSiteNode.getChildSiteNodes().remove(siteNode);
try
{
SiteNodeVersionVO publishedVersion = SiteNodeVersionController.getController().getLatestPublishedSiteNodeVersionVO(siteNode.getId(), db);
SiteNodeVersionVO publishedVersionNewParent = SiteNodeVersionController.getController().getLatestPublishedSiteNodeVersionVO(newParentSiteNode.getId(), db);
SiteNodeVersionVO publishedVersionOldParent = SiteNodeVersionController.getController().getLatestPublishedSiteNodeVersionVO(oldParentSiteNode.getId(), db);
List<EventVO> events = new ArrayList<EventVO>();
logger.info("publishedVersion:" + publishedVersion);
if(publishedVersion != null)
{
EventVO eventVO = new EventVO();
eventVO.setDescription("Moved page");
eventVO.setEntityClass(SiteNodeVersion.class.getName());
eventVO.setEntityId(publishedVersion.getId());
eventVO.setName(siteNode.getName());
eventVO.setTypeId(EventVO.MOVED);
eventVO = EventController.create(eventVO, newParentSiteNode.getRepository().getId(), principal);
events.add(eventVO);
}
logger.info("publishedVersionOldParent:" + publishedVersionOldParent);
if(publishedVersionNewParent != null)
{
EventVO eventVO = new EventVO();
eventVO.setDescription("New parent page");
eventVO.setEntityClass(SiteNodeVersion.class.getName());
eventVO.setEntityId(publishedVersionNewParent.getId());
eventVO.setName(newParentSiteNode.getName());
eventVO.setTypeId(EventVO.PUBLISH);
eventVO = EventController.create(eventVO, newParentSiteNode.getRepository().getId(), principal);
events.add(eventVO);
}
logger.info("publishedVersionOldParent:" + publishedVersionOldParent);
if(publishedVersionOldParent != null)
{
EventVO eventVO = new EventVO();
eventVO.setDescription("Move page");
eventVO.setEntityClass(SiteNodeVersion.class.getName());
eventVO.setEntityId(publishedVersionOldParent.getId());
eventVO.setName(oldParentSiteNode.getName());
eventVO.setTypeId(EventVO.PUBLISH);
eventVO = EventController.create(eventVO, oldParentSiteNode.getRepository().getId(), principal);
events.add(eventVO);
}
/*
EventVO eventVO = new EventVO();
eventVO.setDescription("Moved page");
eventVO.setEntityClass(SiteNodeVersion.class.getName());
eventVO.setEntityId(publishedVersion.getId());
eventVO.setName(siteNode.getName());
eventVO.setTypeId(EventVO.MOVED);
eventVO = EventController.create(eventVO, siteNode.getRepository().getId(), principal);
events.add(eventVO);
*/
logger.info("events:" + events.size());
if(events != null && events.size() > 0)
{
//Create publication if nodes has published version
PublicationVO publicationVO = new PublicationVO();
publicationVO.setName("Move of page - auto publication");
publicationVO.setDescription("System did an automatic publication");
publicationVO.setPublisher(principal.getName());
publicationVO.setRepositoryId(newParentSiteNode.getRepository().getId());
publicationVO = PublicationController.getController().createAndPublish(publicationVO, events, false, principal);
}
}
catch (Exception e)
{
logger.error("Error publishing move:" + e.getMessage(), e);
}
// If any of the validations or setMethods reported an error, we throw them up now before create.
ceb.throwIfNotEmpty();
commitTransaction(db);
}
catch(ConstraintException ce)
{