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

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

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

/**
* @author Stefan Sik
* @since 1.3
*/

package org.infoglue.cms.applications.contenttool.actions;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentController;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentControllerProxy;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentTypeDefinitionController;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentVersionController;
import org.infoglue.cms.controllers.kernel.impl.simple.LanguageController;
import org.infoglue.cms.controllers.kernel.impl.simple.RepositoryController;
import org.infoglue.cms.controllers.kernel.impl.simple.TransactionHistoryController;
import org.infoglue.cms.entities.content.ContentVO;
import org.infoglue.cms.entities.content.ContentVersionVO;
import org.infoglue.cms.entities.content.impl.simple.ContentVersionImpl;
import org.infoglue.cms.entities.management.ContentTypeDefinitionVO;
import org.infoglue.cms.entities.management.LanguageVO;
import org.infoglue.cms.entities.management.RepositoryVO;
import org.infoglue.cms.entities.management.TransactionHistoryVO;
import org.infoglue.cms.entities.management.impl.simple.ContentTypeDefinitionImpl;
import org.infoglue.cms.exception.Bug;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.treeservice.ss.ContentNodeSupplier;

import com.frovi.ss.Tree.BaseNode;
import com.frovi.ss.Tree.INodeSupplier;

public class ContentTreeXMLAction extends InfoGlueAbstractAction
{
    private final static Logger logger = Logger.getLogger(ContentTreeXMLAction.class.getName());

  private static final long serialVersionUID = 3321168219082615063L;

  private static String TYPE_FOLDER = "ContentFolder";
    private static String TYPE_ITEM = "ContentItem";
    private static String TYPE_REPOSITORY = "Repository";
  private String showLeafs = "yes";
  private Integer parent = null;
  private Integer repositoryId = null;
  private String urlArgSeparator = "&";
  private String action = "";
  private boolean createAction = false;
  private boolean useTemplate = false;
  private String[] allowedContentTypeIds = null;

  public INodeSupplier getNodeSupplier() throws SystemException
  {
    return new ContentNodeSupplier(getRepositoryId(), this.getInfoGluePrincipal());
  }
 
  public List getContentTypeDefinitions() throws Exception
  {
    return ContentTypeDefinitionController.getController().getContentTypeDefinitionVOList();
  }     
 
  private String makeAction(BaseNode node) throws UnsupportedEncodingException
  {
    String action = "javascript:onTreeItemClick(this,";
    action+="'" + node.getId() + "','" + repositoryId + "','" + URLEncoder.encode(node.getTitle(),"UTF-8") + "');";
        return action;
  }
 
  private String getFormattedDocument(Document doc)
  {
      return getFormattedDocument(doc, true);
  }
 
  private String getFormattedDocument(Document doc, boolean compact)
  {
      OutputFormat format = compact ? OutputFormat.createCompactFormat() : OutputFormat.createPrettyPrint();
    // format.setEncoding("iso-8859-1");
    format.setEncoding("UTF-8");
    format.setExpandEmptyElements(false);
    StringWriter stringWriter = new StringWriter();
    XMLWriter writer = new XMLWriter(stringWriter, format);
    try
        {
            writer.write(doc);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    return stringWriter.toString();
  }
 
  public String doDigitalAssets() throws Exception
  {
    /*String ret = "";
    DigitalAssetVO digitalAssetVO = null;

    if (parent != null) {
      digitalAssetVO = DigitalAssetController
          .getDigitalAssetVOWithId(parent);
    } else {
      digitalAssetVO = DigitalAssetController.getDigitalAssetVO(
          contentId, languageId, digitalAssetKey, true);
    }

    ret = "<digitalAssetInfo>"
        + "<assetURL>"
        + DigitalAssetController.getDigitalAssetUrl(digitalAssetVO.getId())
        + "</assetURL>"
        + "<assetId>"
        + digitalAssetVO.getId()
        + "</assetId>"
        + "</digitalAssetInfo>";

    return ret;*/
      return null;
  }
 
 
    /*
     * Returns all Languages for a given repository (repositoryId)
     */
    public String doLanguage() throws Exception
  {
        return null;
  }

    public ContentVersionVO getLatestContentVersionVO(Integer contentId, Integer languageId)
  {
    ContentVersionVO contentVersionVO = null;
    try
    {
      contentVersionVO = ContentVersionController.getContentVersionController().getLatestActiveContentVersionVO(contentId, languageId);
    }
    catch(Exception e)
    {
      logger.error("An error occurred when we tried to get the latest version for the content:" + e.getMessage(), e);
    }
   
    return contentVersionVO;
  }

    public Element getContentVersionElement(Integer contentVersionId) throws SystemException, Bug, UnsupportedEncodingException
    {
    ContentVersionController contentVersionController = ContentVersionController.getContentVersionController();
        ContentVersionVO vo = contentVersionController.getContentVersionVOWithId(contentVersionId);
        return getContentVersionElement(vo);
    }
   
    public Element getContentVersionElement(ContentVersionVO vo) throws SystemException, Bug, UnsupportedEncodingException
    {
        Element element = DocumentHelper.createElement("contentVersion");
        Element head = DocumentHelper.createElement("head");
        Element value = DocumentHelper.createElement("value");

        head.addAttribute("id", "" + vo.getContentVersionId());
      head.addAttribute("languageId", "" + vo.getLanguageId());
      head.addAttribute("languageName", vo.getLanguageName());
      head.addAttribute("isActive", "" + vo.getIsActive());

      TransactionHistoryController transactionHistoryController = TransactionHistoryController.getController();
        TransactionHistoryVO transactionHistoryVO = transactionHistoryController.getLatestTransactionHistoryVOForEntity(ContentVersionImpl.class, vo.getContentVersionId());
      if(transactionHistoryVO!=null)
          head.addAttribute("mod", formatDate(transactionHistoryVO.getTransactionDateTime()));
        // head.addAttribute("mod", formatDate(vo.getModifiedDateTime()));
        value.addCDATA(URLEncoder.encode(vo.getVersionValue(),"UTF-8"));
        element.add(head);
        element.add(value);
        return element;
    }
   
    /*
     * Returns document for a single contentVersion (parent)
     */
    public String doContentVersion() throws Exception
  {
        Document doc = DocumentHelper.createDocument();
        doc.add(getContentVersionElement(parent));
      return out(getFormattedDocument(doc));
  }
   
    /*
     * Returns all contentVersions for a given content (parent)
     */
    public String doContentVersions() throws Exception
  {
        Document doc = DocumentHelper.createDocument();
        Element root = doc.addElement("contentVersions");
        Collection availableLanguages = ContentController.getContentController().getRepositoryLanguages(parent);
        for(Iterator i=availableLanguages.iterator();i.hasNext();)
        {
          LanguageVO lvo = (LanguageVO) i.next();
          ContentVersionVO vo = getLatestContentVersionVO(parent, lvo.getLanguageId());
          if(vo!=null)
            root.add(getContentVersionElement(vo));
        }
       
    ContentVersionController contentVersionController = ContentVersionController.getContentVersionController();
        return out(getFormattedDocument(doc));
  }
   
    /*
     * Returns all contentTypeDefinitions
     */
    public String doContentTypeDefinitions() throws Exception
  {
      List contentTypeDefinitions = getContentTypeDefinitions();
        Document doc = DocumentHelper.createDocument();
        Element root = doc.addElement("definitions");
      TransactionHistoryController transactionHistoryController = TransactionHistoryController.getController();
     
      for(Iterator i=contentTypeDefinitions.iterator();i.hasNext();)
      {
        ContentTypeDefinitionVO vo = (ContentTypeDefinitionVO) i.next();
        if(vo.getType().compareTo(ContentTypeDefinitionVO.CONTENT)==0)
        {
            TransactionHistoryVO transactionHistoryVO = transactionHistoryController.getLatestTransactionHistoryVOForEntity(ContentTypeDefinitionImpl.class, vo.getContentTypeDefinitionId());
           
          Element definition = DocumentHelper.createElement("definition");
          definition
          .addAttribute("id", "" + vo.getContentTypeDefinitionId())
          .addAttribute("type", "" + vo.getType())
          .addAttribute("name", vo.getName())
        ;
         
          if(transactionHistoryVO!=null)
              definition.addAttribute("mod", formatDate(transactionHistoryVO.getTransactionDateTime()));
         
          Element schemaValue = definition.addElement("schemaValue");
          schemaValue.addCDATA(vo.getSchemaValue());
          root.add(definition);
        }
      }
    return out(getFormattedDocument(doc));
     
  }
 
    private String formatDate(Date date)
    {
        return "" + date;
    }

    /*
     * Main action, returns the content tree
     */
    public String doExecute() throws Exception
    {
        if (useTemplate) return "success";
       
        Document doc = DocumentHelper.createDocument();
        Element root = doc.addElement("tree");
       
      INodeSupplier sup;
    // VisualFormatter vf = new VisualFormatter();
      // TransactionHistoryController transactionHistoryController = TransactionHistoryController.getController();

      if(repositoryId == null)
      {
          List repositories = RepositoryController.getController().getAuthorizedRepositoryVOList(this.getInfoGluePrincipal(), false);
          for(Iterator i=repositories.iterator();i.hasNext();)
          {
              RepositoryVO r = (RepositoryVO) i.next();
          ContentVO contentVO = ContentControllerProxy.getController().getRootContentVO(r.getId(), this.getInfoGluePrincipal().getName());
             
          String src= action + "?repositoryId=" + r.getId() + urlArgSeparator + "parent=" + contentVO.getId();
        if(createAction && src.length() >0) src += urlArgSeparator + "createAction=true";
        if(action.length()>0 && src.length() >0) src += urlArgSeparator + "action=" + action;
        String allowedContentTypeIdsUrlEncodedString = getAllowedContentTypeIdsAsUrlEncodedString();
          if(allowedContentTypeIdsUrlEncodedString.length()>0 && src.length() >0) src += urlArgSeparator + allowedContentTypeIdsUrlEncodedString;
              String text=r.getName();
              Element element = root.addElement("tree");
              element
            .addAttribute("id", "" + r.getId())
                .addAttribute("repositoryId", "" + r.getId())
                .addAttribute("text", text)
                .addAttribute("src", src)
                .addAttribute("type", TYPE_REPOSITORY);
          }
          out(getFormattedDocument(doc));
        return null;
      }
     
      sup = getNodeSupplier();
    ((ContentNodeSupplier) sup).setShowLeafs(showLeafs.compareTo("yes")==0);
    ((ContentNodeSupplier) sup).setAllowedContentTypeIds(allowedContentTypeIds);
     
      if(parent == null)
      {
        BaseNode node = sup.getRootNode();
      String text = node.getTitle();
          String type = TYPE_FOLDER;
      String src = action + "?repositoryId=" + repositoryId + urlArgSeparator + "parent=" + node.getId();
      if(createAction && src.length() >0) src += urlArgSeparator + "createAction=true";
      if(action.length()>0 && src.length() >0) src += urlArgSeparator + "action=" + action;
      String allowedContentTypeIdsUrlEncodedString = getAllowedContentTypeIdsAsUrlEncodedString();
      if(allowedContentTypeIdsUrlEncodedString.length()>0 && src.length() >0) src += urlArgSeparator + allowedContentTypeIdsUrlEncodedString;
         
     
          Element elm = root.addElement("tree");
          elm
            .addAttribute("id", "" + node.getId())
            .addAttribute("repositoryId", "" + repositoryId)
            .addAttribute("text", text)
            .addAttribute("src", src)
            .addAttribute("type", type);
     
          out(getFormattedDocument(doc));
        return null;
      }
     
      if(parent.intValue() > -1)
      {
      Collection containerNodes = sup.getChildContainerNodes(parent);
      Collection childNodes = sup.getChildLeafNodes(parent);
     
      ContentController contentController = ContentController.getContentController();
      ContentVersionController contentVersionController = ContentVersionController.getContentVersionController();

      Iterator it = containerNodes.iterator();
      while (it.hasNext())
      {
        BaseNode theNode = (BaseNode) it.next();
        if (theNode.isContainer() && sup.hasChildren())
        {
          theNode.setChildren(sup.hasChildren(theNode.getId()));
        }
       
        String src = theNode.hasChildren() ? action + "?repositoryId=" + repositoryId + urlArgSeparator + "parent=" + theNode.getId(): "";
        if(createAction && src.length() >0) src += urlArgSeparator + "createAction=true";
        if(createAction && src.length() >0) src += urlArgSeparator + "showLeafs=" + showLeafs;
        if(action.length()>0 && src.length() >0) src += urlArgSeparator + "action=" + action;
        String allowedContentTypeIdsUrlEncodedString = getAllowedContentTypeIdsAsUrlEncodedString();
          if(allowedContentTypeIdsUrlEncodedString.length()>0 && src.length() >0) src += urlArgSeparator + allowedContentTypeIdsUrlEncodedString;
             
            Element elm = root.addElement("tree");
            elm
              .addAttribute("id", "" + theNode.getId())
              .addAttribute("parent", "" + parent)
              .addAttribute("repositoryId", "" + repositoryId)
              .addAttribute("text", theNode.getTitle())
              .addAttribute("src", src)
              .addAttribute("type", TYPE_FOLDER);
           
           
            if(createAction) elm.addAttribute("action", makeAction(theNode));
      }
     
      it = childNodes.iterator();
      while (it.hasNext())
      {
        BaseNode theNode = (BaseNode) it.next();
        String text = theNode.getTitle();
        String action = makeAction(theNode);
            String type = TYPE_ITEM;
            Element elm = root.addElement("tree");
            elm
              .addAttribute("id", "" + theNode.getId())
              .addAttribute("parent", "" + parent)
              .addAttribute("repositoryId", "" + repositoryId)
              .addAttribute("text", text)
              .addAttribute("type", type)
        ;
            if(createAction)
              elm.addAttribute("action", action);
            else
            {
              ContentVersionVO activeVersion = contentVersionController.getLatestActiveContentVersionVO(theNode.getId(), LanguageController.getController().getMasterLanguage(repositoryId).getLanguageId());
              if(activeVersion!=null && !useTemplate)
                  elm.addAttribute("activeVersion", "" + activeVersion.getContentVersionId());
            }
           
            if(!useTemplate)
              elm.addAttribute("contentTypeId","" + contentController.getContentTypeDefinition(theNode.getId()).getContentTypeDefinitionId());
      }
     
          out(getFormattedDocument(doc));
        return null;
      }
     
      return null;
    }

    private String out(String string) throws IOException
    {
    getResponse().setContentType("text/xml");
    getResponse().setContentLength(string.length());
    PrintWriter out = getResponse().getWriter();
    out.println(string);
    return null;
    }

  public Integer getParent()
  {
    return parent;
  }

  public void setParent(Integer integer)
  {
    parent = integer;
  }

  public Integer getRepositoryId()
  {
    return repositoryId;
  }

  public void setRepositoryId(Integer integer)
  {
    repositoryId = integer;
  }

    public boolean isCreateAction()
    {
        return createAction;
    }
   
    public void setCreateAction(boolean createAction)
    {
        this.createAction = createAction;
    }
   
    public boolean isUseTemplate()
    {
        return useTemplate;
    }
   
    public void setUseTemplate(boolean useTemplate)
    {
        this.useTemplate = useTemplate;
    }
   
    public String getAction()
    {
        return action;
    }
   
    public void setAction(String action)
    {
        this.action = action;
    }
 
    public String getShowLeafs()
    {
    return showLeafs;
  }
 
  public void setShowLeafs(String showLeafs)
  {
    this.showLeafs = showLeafs;
  }
 
    public String[] getAllowedContentTypeIds()
    {
        return allowedContentTypeIds;
    }
   
    public void setAllowedContentTypeIds(String[] allowedContentTypeIds)
    {
        this.allowedContentTypeIds = allowedContentTypeIds;
    }
   
    public String getAllowedContentTypeIdsAsUrlEncodedString() throws Exception
    {
        StringBuffer sb = new StringBuffer();
       
        for(int i=0; i<allowedContentTypeIds.length; i++)
        {
            if(i > 0)
                sb.append("&");
           
            sb.append("allowedContentTypeIds=" + URLEncoder.encode(allowedContentTypeIds[i], "UTF-8"));
        }
       
        return sb.toString();
    }

}
TOP

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

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.