Package org.infoglue.cms.applications.structuretool.actions

Source Code of org.infoglue.cms.applications.structuretool.actions.CopyMultipleSiteNodeAction

/* ===============================================================================
*
* 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.structuretool.actions;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction;
import org.infoglue.cms.applications.databeans.ProcessBean;
import org.infoglue.cms.controllers.kernel.impl.simple.LabelController;
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.SiteNodeControllerProxy;
import org.infoglue.cms.entities.structure.SiteNodeVO;
import org.infoglue.cms.exception.ConstraintException;
import org.infoglue.cms.util.ConstraintExceptionBuffer;
import org.infoglue.cms.util.dom.DOMBuilder;

/**
* This action represents the CreateSiteNode Usecase.
*/

public class CopyMultipleSiteNodeAction extends InfoGlueAbstractAction
{
  private static final long serialVersionUID = 955902951432881226L;

  private final static Logger logger = Logger.getLogger(CopyMultipleSiteNodeAction.class.getName());

     //  Initial params
    private Integer originalSiteNodeId;
    private Integer repositoryId;
    private Integer siteNodeId;
    private Integer parentSiteNodeId;
    private List qualifyers = new ArrayList();
    private boolean errorsOccurred = false;
  protected List repositories = null;
  private Integer sortLanguageId;
   
    //Move params
    protected String qualifyerXML = null;
    private Integer newParentSiteNodeId;
   
    //Tree params
    private Integer changeTypeId;
    private Integer topSiteNodeId;

    private ConstraintExceptionBuffer ceb;
     private SiteNodeVO siteNodeVO;
    
    
     private String userSessionKey;
    private String originalAddress;
    private String returnAddress;

  private String processId = null;
  private int processStatus = -1;
 
    public CopyMultipleSiteNodeAction()
  {
    this(new SiteNodeVO());
  }
 
  public CopyMultipleSiteNodeAction(SiteNodeVO siteNodeVO)
  {
    this.siteNodeVO = siteNodeVO;
    this.ceb = new ConstraintExceptionBuffer();     
 

  public void setSiteNodeId(Integer siteNodeId)
  {
    this.siteNodeVO.setSiteNodeId(siteNodeId);
  }

  public Integer getSiteNodeId()
  {
    return siteNodeVO.getSiteNodeId();
  }

  @SuppressWarnings("unchecked")
  public String doInput() throws Exception
  {
    this.repositories = RepositoryController.getController().getAuthorizedRepositoryVOList(this.getInfoGluePrincipal(), false);
    this.returnAddress = "ViewInlineOperationMessages.action"; //ViewContent!V3.action?contentId=" + contentId + "&repositoryId=" + this.repositoryId;

    if(this.qualifyerXML != null && !this.qualifyerXML.equals(""))
    {
      this.qualifyers = parseSiteNodesFromXML(this.qualifyerXML);
    }
    else
    {
      SiteNodeVO siteNodeVO = SiteNodeController.getController().getSiteNodeVOWithId(getSiteNodeId());
      siteNodeVO.getExtraProperties().put("displayName", getLocalizedNameForSiteNode(siteNodeVO, sortLanguageId));
      this.qualifyers.add(siteNodeVO);
    }

    return "input";
  }

   public String doCopyDone() throws Exception
   {     
       return "success";
   }
   
    public String doExecute() throws Exception
    {
      if(this.newParentSiteNodeId == null)
        {
        this.repositories = RepositoryController.getController().getAuthorizedRepositoryVOList(this.getInfoGluePrincipal(), false);
            return "chooseDestination";
        }
       
        ceb.throwIfNotEmpty();
     
        String errorMessage = "";
       
    ProcessBean processBean = ProcessBean.createProcessBean(this.getClass().getName(), "" + getInfoGluePrincipal().getName());
    processBean.setStatus(ProcessBean.RUNNING);

    try
    {
            if(this.qualifyerXML != null && this.qualifyerXML.length() != 0)
        {
            Document document = new DOMBuilder().getDocument(this.qualifyerXML);
        List siteNodes = parseSiteNodesFromXML(this.qualifyerXML);
        Iterator iterator = siteNodes.iterator();
        int i=0;
        while(iterator.hasNext())
        {
            SiteNodeVO siteNodeVO = (SiteNodeVO)iterator.next();
            try
          {   
              SiteNodeControllerProxy.getSiteNodeControllerProxy().acCopySiteNode(this.getInfoGluePrincipal(), siteNodeVO, this.newParentSiteNodeId, processBean);
          }
          catch(ConstraintException ce)
          {
            logger.warn("Limitation in copy site nodes:" + ce.getMessage());
            errorMessage = LabelController.getController(getLocale()).getLocalizedString(getLocale(), ce.getErrorCode(), getSiteNodeVO(newParentSiteNodeId).getName());
              this.errorsOccurred = true;
          }
          catch(Exception e)
          {
            logger.error("Error in copy site nodes:" + e.getMessage(), e);
            errorMessage = e.getMessage();
              this.errorsOccurred = true;
          }
          i++;
          }
        }

            processBean.updateProcess("Finished - cleaning up");
            Thread.sleep(1000);
    }
    catch(Exception e)
    {
      logger.error("Error in copy site nodes:" + e.getMessage(), e);
          setActionExtraData(userSessionKey, "confirmationMessage", e.getMessage() /*getLocalizedString(getLocale(), "tool.contenttool.siteNodeCopied.confirmation", getSiteNodeVO(newParentSiteNodeId).getName())*/);
    }
    finally
    {
      processBean.setStatus(ProcessBean.FINISHED);
      processBean.removeProcess();
    }
   
        setActionExtraData(userSessionKey, "refreshToolbarAndMenu", "" + true);
        setActionExtraData(userSessionKey, "repositoryId", "" + this.repositoryId);
        setActionExtraData(userSessionKey, "siteNodeId", "" + newParentSiteNodeId);
        setActionExtraData(userSessionKey, "unrefreshedSiteNodeId", "" + newParentSiteNodeId);
        setActionExtraData(userSessionKey, "unrefreshedNodeId", "" + newParentSiteNodeId);
        setActionExtraData(userSessionKey, "changeTypeId", "" + this.changeTypeId);

        if(errorsOccurred)
          setActionExtraData(userSessionKey, "confirmationMessage", errorMessage);         
        else
          setActionExtraData(userSessionKey, "confirmationMessage", getLocalizedString(getLocale(), "tool.contenttool.siteNodeCopied.confirmation", getSiteNodeVO(newParentSiteNodeId).getName()));

    this.topSiteNodeId = SiteNodeController.getController().getRootSiteNodeVO(this.repositoryId).getId();
       
        return "success";
    }

  @SuppressWarnings("unchecked")
  private List<SiteNodeVO> parseSiteNodesFromXML(String qualifyerXML)
  {
    List<SiteNodeVO> siteNodes = new ArrayList<SiteNodeVO>();

    try
    {
      Document document = new DOMBuilder().getDocument(qualifyerXML);
      String entity = document.getRootElement().attributeValue("entity");
      Map<String, SiteNodeVO> addedSiteNodes = new HashMap<String, SiteNodeVO>();

      @SuppressWarnings("unchecked")
      List<Element> children = document.getRootElement().elements();
      Iterator<Element> i = children.iterator();
      while(i.hasNext())
      {
        Element child = i.next();
        String id = child.getStringValue();
        String path = child.attributeValue("path");

        if(!addedSiteNodes.containsKey(id))
        {
          SiteNodeVO siteNodeVO = SiteNodeController.getController().getSiteNodeVOWithId(new Integer(id));
          siteNodeVO.getExtraProperties().put("displayName", getLocalizedNameForSiteNode(siteNodeVO, sortLanguageId));
          siteNodes.add(siteNodeVO);
          addedSiteNodes.put(id, siteNodeVO);
        }
      }
    }
    catch(Exception ex)
    {
      logger.error("Error when parsing XML for SiteNodes. Message: " + ex.getMessage());
      logger.warn("Error when parsing XML for SiteNodes.", ex);
    }

    return siteNodes;
  }

    public Integer getChangeTypeId()
    {
        return changeTypeId;
    }
   
    public void setChangeTypeId(Integer changeTypeId)
    {
        this.changeTypeId = changeTypeId;
    }
   
    public Integer getNewParentSiteNodeId()
    {
        return newParentSiteNodeId;
    }
   
    public void setNewParentSiteNodeId(Integer newParentSiteNodeId)
    {
        this.newParentSiteNodeId = newParentSiteNodeId;
    }
   
    public Integer getOriginalSiteNodeId()
    {
        return originalSiteNodeId;
    }
   
    public void setOriginalSiteNodeId(Integer originalSiteNodeId)
    {
        this.originalSiteNodeId = originalSiteNodeId;
    }
   
    public Integer getParentSiteNodeId()
    {
        return parentSiteNodeId;
    }
   
    public void setParentSiteNodeId(Integer parentSiteNodeId)
    {
        this.parentSiteNodeId = parentSiteNodeId;
    }
   
    public String getQualifyerXML()
    {
        return qualifyerXML;
    }
   
    public void setQualifyerXML(String qualifyerXML)
    {
        this.qualifyerXML = qualifyerXML;
    }
   
    public Integer getRepositoryId()
    {
        return repositoryId;
    }
   
    public void setRepositoryId(Integer repositoryId)
    {
        this.repositoryId = repositoryId;
    }
   
    public Integer getTopSiteNodeId()
    {
        return topSiteNodeId;
    }
   
    public void setTopSiteNodeId(Integer topSiteNodeId)
    {
        this.topSiteNodeId = topSiteNodeId;
    }
   
    public boolean isErrorsOccurred()
    {
        return errorsOccurred;
    }
   
    public List getQualifyers()
    {
        return qualifyers;
    }
   
    public List getRepositories()
    {
        return repositories;
    }
   
    public SiteNodeVO getSiteNodeVO()
    {
        return siteNodeVO;
    }
   
  public String getUserSessionKey()
  {
    return userSessionKey;
  }

  public void setUserSessionKey(String userSessionKey)
  {
    this.userSessionKey = userSessionKey;
  }

  public String getReturnAddress()
  {
    return this.returnAddress;
  }   

    public String getOriginalAddress()
  {
    return originalAddress;
  }

  public void setOriginalAddress(String originalAddress)
  {
    this.originalAddress = originalAddress;
  }

  public void setReturnAddress(String returnAddress)
  {
    this.returnAddress = returnAddress;
  }

  public Integer getSortLanguageId()
  {
    return sortLanguageId;
  }

  public void setSortLanguageId(Integer languageId)
  {
    this.sortLanguageId = languageId;
  }

}
TOP

Related Classes of org.infoglue.cms.applications.structuretool.actions.CopyMultipleSiteNodeAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.