/* ===============================================================================
*
* 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.applications.publishingtool.actions;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.log4j.Logger;
import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction;
import org.infoglue.cms.controllers.kernel.impl.simple.AccessRightController;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentController;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentVersionController;
import org.infoglue.cms.controllers.kernel.impl.simple.InterceptionPointController;
import org.infoglue.cms.controllers.kernel.impl.simple.PublicationController;
import org.infoglue.cms.controllers.kernel.impl.simple.RepositoryController;
import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeController;
import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeVersionController;
import org.infoglue.cms.entities.content.ContentVO;
import org.infoglue.cms.entities.content.ContentVersionVO;
import org.infoglue.cms.entities.management.AccessRightVO;
import org.infoglue.cms.entities.management.InterceptionPointVO;
import org.infoglue.cms.entities.publishing.PublicationDetail;
import org.infoglue.cms.entities.publishing.PublicationDetailVO;
import org.infoglue.cms.entities.publishing.PublicationVO;
import org.infoglue.cms.entities.publishing.impl.simple.PublicationDetailImpl;
import org.infoglue.cms.entities.publishing.impl.simple.PublicationImpl;
import org.infoglue.cms.entities.structure.SiteNodeVO;
import org.infoglue.cms.entities.structure.SiteNodeVersionVO;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.util.ChangeNotificationController;
import org.infoglue.cms.util.DateHelper;
import org.infoglue.cms.util.NotificationMessage;
import org.infoglue.cms.util.RemoteCacheUpdater;
import org.infoglue.deliver.util.SelectiveLivePublicationThread;
/**
* This class implements the action class for the startpage in the management tool.
*
* @author Mattias Bogeblad
*/
public class ViewPublishingToolStartPageAction extends InfoGlueAbstractAction
{
public final static Logger logger = Logger.getLogger(ViewPublishingToolStartPageAction.class.getName());
private static final long serialVersionUID = 1L;
private List repositories;
public String doV3() throws Exception
{
doExecute();
return "successV3";
}
public String doExecute() throws Exception
{
this.repositories = RepositoryController.getController().getAuthorizedRepositoryVOList(this.getInfoGluePrincipal(), false);
return "success";
}
public String doPushSystemNotificationMessages() throws Exception
{
List<NotificationMessage> notificationMessagesToSend = new ArrayList<NotificationMessage>();
PublicationVO publicationVO = new PublicationVO();
publicationVO.setName("System notification");
publicationVO.setDescription("Access rights publication");
List<PublicationDetailVO> publicationDetailVOList = new ArrayList<PublicationDetailVO>();
//NotificationMessage notificationMessage = null;
List<NotificationMessage> messages = RemoteCacheUpdater.getSystemNotificationMessages();
synchronized(messages)
{
if(messages.size() > 0)
{
boolean filledOtherQuota = false;
List<String> processedEntities = new ArrayList<String>();
for(NotificationMessage message : messages)
{
if(message.getClassName().indexOf("AccessRightImpl") > -1)
{
try
{
AccessRightVO acVO;
InterceptionPointVO icpVO;
try
{
acVO = AccessRightController.getController().getAccessRightVOWithId((Integer)message.getObjectId());
icpVO = InterceptionPointController.getController().getInterceptionPointVOWithId(acVO.getInterceptionPointId());
}
catch (Exception e)
{
logger.info("No access right found", e);
continue;
}
if(acVO != null && icpVO != null && !processedEntities.contains("" + icpVO.getCategory() + "_" + acVO.getParameters()))
{
//logger.info("icpVO:" + icpVO.getName());
if(icpVO.getName().indexOf("Content.") > -1)
{
//logger.info("Was a content access... let's clear caches for that content.");
String idAsString = acVO.getParameters();
if(idAsString != null && !idAsString.equals(""))
{
ContentVO contentVO = ContentController.getContentController().getContentVOWithId(new Integer(idAsString));
publicationVO.setRepositoryId(new Integer(contentVO.getRepositoryId()));
PublicationDetailVO publicationDetailVO = new PublicationDetailVO();
publicationDetailVO.setCreationDateTime(DateHelper.getSecondPreciseDate());
publicationDetailVO.setDescription("Access rights change publication");
publicationDetailVO.setEntityClass("org.infoglue.cms.entities.content.Content");
publicationDetailVO.setEntityId(contentVO.getId());
publicationDetailVO.setName("" + contentVO.getName());
publicationDetailVO.setTypeId(PublicationDetailVO.PUBLISH);
publicationDetailVO.setCreator(this.getInfoGluePrincipal().getName());
publicationDetailVOList.add(publicationDetailVO);
}
}
else if(icpVO.getName().indexOf("ContentVersion.") > -1)
{
//logger.info("Was a contentversion access... let's clear caches for that content.");
String idAsString = acVO.getParameters();
if(idAsString != null && !idAsString.equals(""))
{
ContentVersionVO contentVersionVO = ContentVersionController.getContentVersionController().getContentVersionVOWithId(new Integer(idAsString));
ContentVO contentVO = ContentController.getContentController().getContentVOWithId(new Integer(contentVersionVO.getContentId()));
publicationVO.setRepositoryId(new Integer(contentVO.getRepositoryId()));
PublicationDetailVO publicationDetailVO = new PublicationDetailVO();
publicationDetailVO.setCreationDateTime(DateHelper.getSecondPreciseDate());
publicationDetailVO.setDescription("Access rights change publication");
publicationDetailVO.setEntityClass("org.infoglue.cms.entities.content.ContentVersion");
publicationDetailVO.setEntityId(contentVersionVO.getId());
publicationDetailVO.setName("" + contentVO.getName() + "/" + contentVersionVO.getId());
publicationDetailVO.setTypeId(PublicationDetailVO.PUBLISH);
publicationDetailVO.setCreator(this.getInfoGluePrincipal().getName());
publicationDetailVOList.add(publicationDetailVO);
PublicationDetailVO publicationDetailVO2 = new PublicationDetailVO();
publicationDetailVO2.setCreationDateTime(DateHelper.getSecondPreciseDate());
publicationDetailVO2.setDescription("Access rights change publication");
publicationDetailVO2.setEntityClass("org.infoglue.cms.entities.content.Content");
publicationDetailVO2.setEntityId(contentVO.getId());
publicationDetailVO2.setName("" + contentVO.getName());
publicationDetailVO2.setTypeId(PublicationDetailVO.PUBLISH);
publicationDetailVO2.setCreator(this.getInfoGluePrincipal().getName());
publicationDetailVOList.add(publicationDetailVO2);
}
}
else if(icpVO.getName().indexOf("SiteNodeVersion.") > -1)
{
//logger.info("Was a sitenode version access... let's clear caches for that siteNodeVersion.");
String idAsString = acVO.getParameters();
if(idAsString != null && !idAsString.equals(""))
{
SiteNodeVersionVO siteNodeVersionVO = SiteNodeVersionController.getController().getSiteNodeVersionVOWithId(new Integer(idAsString));
SiteNodeVO siteNodeVO = SiteNodeController.getController().getSiteNodeVOWithId(new Integer(siteNodeVersionVO.getSiteNodeId()));
publicationVO.setRepositoryId(new Integer(siteNodeVO.getRepositoryId()));
PublicationDetailVO publicationDetailVO = new PublicationDetailVO();
publicationDetailVO.setCreationDateTime(DateHelper.getSecondPreciseDate());
publicationDetailVO.setDescription("Access rights change publication");
publicationDetailVO.setEntityClass("org.infoglue.cms.entities.structure.SiteNode");
publicationDetailVO.setEntityId(siteNodeVO.getId());
publicationDetailVO.setName("" + siteNodeVO.getName());
publicationDetailVO.setTypeId(PublicationDetailVO.PUBLISH);
publicationDetailVO.setCreator(this.getInfoGluePrincipal().getName());
publicationDetailVOList.add(publicationDetailVO);
PublicationDetailVO publicationDetailVO2 = new PublicationDetailVO();
publicationDetailVO2.setCreationDateTime(DateHelper.getSecondPreciseDate());
publicationDetailVO2.setDescription("Access rights change publication");
publicationDetailVO2.setEntityClass("org.infoglue.cms.entities.structure.SiteNodeVersion");
publicationDetailVO2.setEntityId(siteNodeVersionVO.getId());
publicationDetailVO2.setName("" + siteNodeVO.getName() + "/" + siteNodeVersionVO.getId());
publicationDetailVO2.setTypeId(PublicationDetailVO.PUBLISH);
publicationDetailVO2.setCreator(this.getInfoGluePrincipal().getName());
publicationDetailVOList.add(publicationDetailVO2);}
}
else
{
//logger.info("****************************");
//logger.info("* WHAT TO DO WITH: " + icpVO.getName() + " *");
//logger.info("****************************");
}
//logger.info("Feeling done with " + "" + icpVO.getCategory() + "_" + acVO.getParameters());
processedEntities.add("" + icpVO.getCategory() + "_" + acVO.getParameters());
}
else
{
//logger.info("Allready processed " + icpVO.getCategory() + "_" + acVO.getParameters());
}
}
catch(Exception e2)
{
logger.error("Error handling access right update: " + e2.getMessage(), e2);
}
//notificationMessagesToSend.add(message);
}
else if(!filledOtherQuota)
{
//logger.info("Adding:" + message.getClassName());
notificationMessagesToSend.add(message);
filledOtherQuota = true;
}
}
}
}
logger.info("What other:" + notificationMessagesToSend.size());
for(NotificationMessage message : notificationMessagesToSend)
{
NotificationMessage notificationMessage = new NotificationMessage("ViewPublishingToolStartPageAction.doPushSystemNotificationMessages():", "" + message.getClassName(), this.getInfoGluePrincipal().getName(), NotificationMessage.SYSTEM, message.getObjectId(), message.getObjectName());
ChangeNotificationController.getInstance().addNotificationMessage(notificationMessage);
}
RemoteCacheUpdater.clearSystemNotificationMessages();
if(publicationDetailVOList != null && publicationDetailVOList.size() > 0)
{
logger.info("Sending out a publication with:" + publicationDetailVOList.size() + " details");
publicationVO = PublicationController.getController().createAndPublish(publicationVO, publicationDetailVOList, this.getInfoGluePrincipal().getName());
}
return doExecute() + "V3";
}
public List getRepositories()
{
return this.repositories;
}
/**
* Returns the events up for publishing.
*/
public List getPublicationEvents(Integer repositoryId, String filter) throws SystemException, Exception
{
List events = PublicationController.getPublicationEvents(repositoryId, getInfoGluePrincipal(), filter, false);
return events;
}
public List getSystemNotificationMessages()
{
return RemoteCacheUpdater.getSystemNotificationMessages();
}
}