Package org.infoglue.cms.applications.contenttool.actions

Source Code of org.infoglue.cms.applications.contenttool.actions.CreateContentAction

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

import java.io.PrintWriter;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.exolab.castor.jdo.Database;
import org.infoglue.cms.applications.common.VisualFormatter;
import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction;
import org.infoglue.cms.applications.databeans.LinkBean;
import org.infoglue.cms.controllers.kernel.impl.simple.AccessRightController;
import org.infoglue.cms.controllers.kernel.impl.simple.CastorDatabaseService;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentControllerProxy;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentTypeDefinitionController;
import org.infoglue.cms.entities.content.ContentVO;
import org.infoglue.cms.exception.AccessConstraintException;
import org.infoglue.cms.exception.ConstraintException;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.util.AccessConstraintExceptionBuffer;
import org.infoglue.cms.util.CmsPropertyHandler;
import org.infoglue.cms.util.ConstraintExceptionBuffer;
import org.infoglue.cms.util.sorters.ReflectionComparator;

import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.module.propertyset.PropertySetManager;

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

public class CreateContentAction extends InfoGlueAbstractAction
{
  private static final long serialVersionUID = 1L;

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

  private Integer parentContentId;
    private Integer contentTypeDefinitionId;
    private Integer repositoryId;
     private ConstraintExceptionBuffer ceb;
     private ContentVO contentVO;
     private ContentVO newContentVO;
     private ContentVO parentContentVO;
     private String defaultFolderContentTypeName;
     private String allowedContentTypeNames;
     private String defaultContentTypeName;
 
     private String userSessionKey;
     private Integer changeTypeId = new Integer(0);
    private String returnAddress;
    private String originalAddress;

    public CreateContentAction()
  {
    this(new ContentVO());
  }
 
  public CreateContentAction(ContentVO contentVO)
  {
    this.contentVO = contentVO;
    this.ceb = new ConstraintExceptionBuffer();     
 

  public void setParentContentId(Integer parentContentId)
  {
    this.parentContentId = parentContentId;
  }

  public Integer getParentContentId()
  {
    return this.parentContentId;
  }

  public void setRepositoryId(Integer repositoryId)
  {
    this.repositoryId = repositoryId;
  }

  public Integer getRepositoryId()
  {
    return this.repositoryId;
  }

  public void setContentTypeDefinitionId(Integer contentTypeDefinitionId)
  {
    this.contentTypeDefinitionId = contentTypeDefinitionId;
  }

  public Integer getContentTypeDefinitionId()
  {
    return this.contentTypeDefinitionId;
 
 
    public java.lang.String getName()
    {
        return this.contentVO.getName();
    }

    public String getPublishDateTime()
    {       
        return new VisualFormatter().formatDate(this.contentVO.getPublishDateTime(), "yyyy-MM-dd HH:mm");
    }
       
    public String getExpireDateTime()
    {
        return new VisualFormatter().formatDate(this.contentVO.getExpireDateTime(), "yyyy-MM-dd HH:mm");
    }

     public long getPublishDateTimeAsLong()
    {       
        return this.contentVO.getPublishDateTime().getTime();
    }
       
    public long getExpireDateTimeAsLong()
    {
        return this.contentVO.getExpireDateTime().getTime();
    }
   
  public Boolean getIsBranch()
  {
     return this.contentVO.getIsBranch();
  }   
           
    public void setName(java.lang.String name)
    {
      this.contentVO.setName(name);
    }
     
    public void setPublishDateTime(String publishDateTime)
    {
       this.contentVO.setPublishDateTime(new VisualFormatter().parseDate(publishDateTime, "yyyy-MM-dd HH:mm"));
    }

    public void setExpireDateTime(String expireDateTime)
    {
         this.contentVO.setExpireDateTime(new VisualFormatter().parseDate(expireDateTime, "yyyy-MM-dd HH:mm"));
  }
    public void setIsBranch(Boolean isBranch)
    {
         this.contentVO.setIsBranch(isBranch);
    }
    
  public Integer getContentId()
  {
    return newContentVO.getContentId();
  }

    public String getDefaultFolderContentTypeName()
    {
        return defaultFolderContentTypeName;
    }

  /**
   * This method fetches the list of ContentTypeDefinitions
   */
 
  public List getContentTypeDefinitions() throws Exception
 
      List contentTypeVOList = null;
     
      String protectContentTypes = CmsPropertyHandler.getProtectContentTypes();
      if(protectContentTypes != null && protectContentTypes.equalsIgnoreCase("true"))
          contentTypeVOList = ContentTypeDefinitionController.getController().getAuthorizedContentTypeDefinitionVOList(this.getInfoGluePrincipal());
    else
        contentTypeVOList = ContentTypeDefinitionController.getController().getContentTypeDefinitionVOList();
     
      Collections.sort(contentTypeVOList, new ReflectionComparator("name"));
     
      return contentTypeVOList;
  }     
   
     
    public String doExecute() throws Exception
    {
    this.contentVO.setCreatorName(this.getInfoGluePrincipal().getName());

      ceb = this.contentVO.validate();
      ceb.throwIfNotEmpty();
         
      newContentVO = ContentControllerProxy.getController().acCreate(this.getInfoGluePrincipal(), parentContentId, contentTypeDefinitionId, repositoryId, contentVO);
    //newContentVO = ContentController.create(parentContentId, contentTypeDefinitionId, repositoryId, contentVO);
     
        if ( newContentVO.getIsBranch().booleanValue() )
        {
            Map args = new HashMap();
            args.put("globalKey", "infoglue");
            PropertySet ps = PropertySetManager.getInstance("jdbc", args);
   
            String allowedContentTypeNames  = ps.getString("content_" + this.getParentContentId() + "_allowedContentTypeNames");
            String defaultContentTypeName = ps.getString("content_" + this.getParentContentId() + "_defaultContentTypeName");
            String initialLanguageId  = ps.getString("content_" + this.getParentContentId() + "_initialLanguageId");
           
            if ( allowedContentTypeNames != null )
            {
                ps.setString("content_" + this.getContentId() + "_allowedContentTypeNames", allowedContentTypeNames );
            }
            if ( defaultContentTypeName != null )
            {
            ps.setString("content_" + this.getContentId() + "_defaultContentTypeName", defaultContentTypeName );
            }
            if ( initialLanguageId != null )
            {
                ps.setString("content_" + this.getContentId() + "_initialLanguageId", initialLanguageId );
            }
        }       
      return "success";
    }
   
    public String doXML() throws Exception
    {
      try
      {
       
    this.contentVO.setCreatorName(this.getInfoGluePrincipal().getName());

      ceb = this.contentVO.validate();
      ceb.throwIfNotEmpty();
         
      newContentVO = ContentControllerProxy.getController().acCreate(this.getInfoGluePrincipal(), parentContentId, contentTypeDefinitionId, repositoryId, contentVO);

    getResponse().setContentType("text/xml");
    PrintWriter out = getResponse().getWriter();
    out.println("" + newContentVO.getId());
      }
      catch (Exception e)
      {
        e.printStackTrace();
    }
     
      return NONE;
    }

  public String doBindingView() throws Exception
  {
    doExecute();
    return "bindingView";
  }
 
  public String doTreeView() throws Exception
  {
    doExecute();
    return "treeView";
  }

    public String doInput() throws Exception
    {
    AccessConstraintExceptionBuffer ceb = new AccessConstraintExceptionBuffer();
   
    Integer protectedContentId = ContentControllerProxy.getController().getProtectedContentId(parentContentId);
    if(protectedContentId != null && !AccessRightController.getController().getIsPrincipalAuthorized(this.getInfoGluePrincipal(), "Content.Create", protectedContentId.toString()))
      ceb.add(new AccessConstraintException("Content.contentId", "1002"));
   
    Map args = new HashMap();
      args.put("globalKey", "infoglue");
      PropertySet ps = PropertySetManager.getInstance("jdbc", args);

    if(this.getIsBranch().booleanValue())
    {
        this.defaultFolderContentTypeName = ps.getString("repository_" + this.getRepositoryId() + "_defaultFolderContentTypeName");
        if(this.defaultFolderContentTypeName == null || this.defaultFolderContentTypeName.equals(""))
          this.defaultFolderContentTypeName = "Folder";
    }
    else
    {
        this.defaultContentTypeName = ps.getString("content_" + this.parentContentId + "_defaultContentTypeName");
    }
        if ( ps.exists( "content_" + this.parentContentId + "_allowedContentTypeNames" ) )
        {
            this.allowedContentTypeNames = ps.getString("content_" + this.parentContentId + "_allowedContentTypeNames");
        }
    ceb.throwIfNotEmpty();
   
    return "input";
    }

    public String doInputV3() throws Exception
    {
    AccessConstraintExceptionBuffer ceb = new AccessConstraintExceptionBuffer();
   
    Integer protectedContentId = ContentControllerProxy.getController().getProtectedContentId(parentContentId);
    if(protectedContentId != null && !AccessRightController.getController().getIsPrincipalAuthorized(this.getInfoGluePrincipal(), "Content.Create", protectedContentId.toString()))
      ceb.add(new AccessConstraintException("Content.contentId", "1002"));
   
    Map args = new HashMap();
      args.put("globalKey", "infoglue");
      PropertySet ps = PropertySetManager.getInstance("jdbc", args);

      this.defaultFolderContentTypeName = ps.getString("repository_" + this.getRepositoryId() + "_defaultFolderContentTypeName");
      if(this.defaultFolderContentTypeName == null || this.defaultFolderContentTypeName.equals(""))
      {
        this.defaultFolderContentTypeName = "Folder";
      }
     
    this.defaultContentTypeName = ps.getString("content_" + this.parentContentId + "_defaultContentTypeName");
   
    if (ps.exists("content_" + this.parentContentId + "_allowedContentTypeNames"))
        {
            this.allowedContentTypeNames = ps.getString("content_" + this.parentContentId + "_allowedContentTypeNames");
        }
   
        userSessionKey = "" + System.currentTimeMillis();

    parentContentVO = ContentControllerProxy.getController().getContentVOWithId(parentContentId);

    String createContentInlineOperationDoneHeader = getLocalizedString(getLocale(), "tool.contenttool.createContentInlineOperationDoneHeader", parentContentVO.getName());
    String createContentInlineOperationBackToCurrentContentLinkText = getLocalizedString(getLocale(), "tool.contenttool.createContentInlineOperationBackToCurrentContentText");
    String createContentInlineOperationBackToCurrentContentTitleText = getLocalizedString(getLocale(), "tool.contenttool.createContentInlineOperationBackToCurrentContentTitleText");

      setActionMessage(userSessionKey, createContentInlineOperationDoneHeader);
      addActionLink(userSessionKey, new LinkBean("currentContentUrl", createContentInlineOperationBackToCurrentContentLinkText, createContentInlineOperationBackToCurrentContentTitleText, createContentInlineOperationBackToCurrentContentTitleText, this.originalAddress, false, ""));

    ceb.throwIfNotEmpty();
   
    return "inputV3";
    }
   
    public String doExecuteV3() throws Exception
    {
      Database db = CastorDatabaseService.getDatabase();
        ConstraintExceptionBuffer ceb = new ConstraintExceptionBuffer();

        beginTransaction(db);

        try
        {
        this.contentVO.setCreatorName(this.getInfoGluePrincipal().getName());

          ceb = this.contentVO.validate();
          ceb.throwIfNotEmpty();
             
          newContentVO = ContentControllerProxy.getController().acCreate(this.getInfoGluePrincipal(), parentContentId, contentTypeDefinitionId, repositoryId, contentVO);
         
            if ( newContentVO.getIsBranch().booleanValue() )
            {
                Map args = new HashMap();
                args.put("globalKey", "infoglue");
                PropertySet ps = PropertySetManager.getInstance("jdbc", args);
       
                String allowedContentTypeNames  = ps.getString("content_" + this.getParentContentId() + "_allowedContentTypeNames");
                String defaultContentTypeName = ps.getString("content_" + this.getParentContentId() + "_defaultContentTypeName");
                String initialLanguageId  = ps.getString("content_" + this.getParentContentId() + "_initialLanguageId");
               
                if ( allowedContentTypeNames != null )
                {
                    ps.setString("content_" + this.getContentId() + "_allowedContentTypeNames", allowedContentTypeNames );
                }
                if ( defaultContentTypeName != null )
                {
                ps.setString("content_" + this.getContentId() + "_defaultContentTypeName", defaultContentTypeName );
                }
                if ( initialLanguageId != null )
                {
                    ps.setString("content_" + this.getContentId() + "_initialLanguageId", initialLanguageId );
                }
            }       
           
            commitTransaction(db);

        String createContentInlineOperationViewCreatedContentLinkText = getLocalizedString(getLocale(), "tool.contenttool.createContentInlineOperationViewCreatedContentLinkText");
        String createContentInlineOperationViewCreatedContentTitleText = getLocalizedString(getLocale(), "tool.contenttool.createContentInlineOperationViewCreatedContentTitleText");

        addActionLinkFirst(userSessionKey, new LinkBean("newPageUrl", createContentInlineOperationViewCreatedContentLinkText, createContentInlineOperationViewCreatedContentTitleText, createContentInlineOperationViewCreatedContentTitleText, "ViewContent!V3.action?contentId=" + newContentVO.getId(), false, "", "content", newContentVO.getName()));
            setActionExtraData(userSessionKey, "refreshToolbarAndMenu", "" + true);
            setActionExtraData(userSessionKey, "repositoryId", "" + newContentVO.getRepositoryId());
            setActionExtraData(userSessionKey, "contentId", "" + newContentVO.getId());
            setActionExtraData(userSessionKey, "unrefreshedContentId", "" + parentContentId);
            setActionExtraData(userSessionKey, "unrefreshedNodeId", "" + parentContentId);
            setActionExtraData(userSessionKey, "changeTypeId", "" + this.changeTypeId);
        }
        catch(ConstraintException ce)
        {
          logger.warn("An error occurred so we should not complete the transaction:" + ce);
            rollbackTransaction(db);

            parentContentVO = ContentControllerProxy.getController().getContentVOWithId(parentContentId);

      ce.setResult(INPUT + "V3");
      throw ce;
        }
        catch(Exception e)
        {
            logger.error("An error occurred so we should not complete the transaction:" + e, e);
            rollbackTransaction(db);
            throw new SystemException(e.getMessage());
        }
             
        if(this.returnAddress != null && !this.returnAddress.equals(""))
        {
          String arguments   = "userSessionKey=" + userSessionKey + "&isAutomaticRedirect=false";
          String messageUrl   = returnAddress + (returnAddress.indexOf("?") > -1 ? "&" : "?") + arguments;
         
          this.getResponse().sendRedirect(messageUrl);
          return NONE;
        }
        else
        {
          return "successV3";
        }
    }


    public String getAllowedContentTypeNames()
    {
        return allowedContentTypeNames;
    }
   
    public String getDefaultContentTypeName()
    {
        return defaultContentTypeName;
    }
   
  public void setReturnAddress(String returnAddress)
  {
    this.returnAddress = returnAddress;
  }

  public String getReturnAddress()
  {
    return returnAddress;
  }

  public String getUserSessionKey()
  {
    return userSessionKey;
  }

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

  public String getOriginalAddress()
  {
    return originalAddress;
  }

  public void setOriginalAddress(String originalAddress)
  {
    this.originalAddress = originalAddress;
  }
 
    public Integer getChangeTypeId()
  {
    return changeTypeId;
  }

  public void setChangeTypeId(Integer changeTypeId)
  {
    this.changeTypeId = changeTypeId;
  }
}
TOP

Related Classes of org.infoglue.cms.applications.contenttool.actions.CreateContentAction

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.