/* ===============================================================================
*
* 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.managementtool.actions;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.infoglue.cms.applications.common.VisualFormatter;
import org.infoglue.cms.applications.common.actions.InfoGlueAbstractAction;
import org.infoglue.cms.controllers.kernel.impl.simple.CategoryController;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentController;
import org.infoglue.cms.controllers.kernel.impl.simple.ContentTypeDefinitionController;
import org.infoglue.cms.controllers.kernel.impl.simple.DigitalAssetController;
import org.infoglue.cms.controllers.kernel.impl.simple.LanguageController;
import org.infoglue.cms.controllers.kernel.impl.simple.PropertiesCategoryController;
import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeController;
import org.infoglue.cms.entities.content.ContentVO;
import org.infoglue.cms.entities.management.CategoryVO;
import org.infoglue.cms.entities.management.ContentTypeDefinitionVO;
import org.infoglue.cms.entities.management.LanguageVO;
import org.infoglue.cms.entities.structure.QualifyerVO;
import org.infoglue.cms.entities.structure.SiteNodeVO;
import org.infoglue.cms.exception.Bug;
import org.infoglue.cms.exception.SystemException;
import org.infoglue.cms.util.CmsPropertyHandler;
import org.infoglue.cms.util.dom.DOMBuilder;
import org.infoglue.deliver.util.Timer;
public abstract class ViewEntityPropertiesAction extends InfoGlueAbstractAction
{
private final static Logger logger = Logger.getLogger(ViewEntityPropertiesAction.class.getName());
private static CategoryController categoryController = CategoryController.getController();
private static PropertiesCategoryController propertiesCategoryController = PropertiesCategoryController.getController();
private String currentAction = "";
private String updateAction = "";
private String updateAndExitAction = "";
private String cancelAction = "";
private String toolbarKey = "";
private String titleKey = "";
private String arguments = "";
private String entityName = null;
private Integer entityId = null;
private String ownerEntityName = null;
private String ownerEntityId = null;
private List availableLanguages;
private List contentTypeDefinitionVOList;
private List contentTypeAttributes;
private Integer contentTypeDefinitionId;
private Integer languageId;
private String attributeName = "";
private String textAreaId = "";
private ContentTypeDefinitionVO contentTypeDefinitionVO;
public abstract String getXML();
public abstract String getCancelAddress() throws Exception;
public abstract String getReturnAddress() throws Exception;
public void initialize() throws SystemException, Bug
{
this.setAvailableLanguages(LanguageController.getController().getLanguageVOList());
if(this.getLanguageId() == null && this.getAvailableLanguages().size() > 0)
this.setLanguageId(((LanguageVO)this.getAvailableLanguages().get(0)).getLanguageId());
logger.info("Language:" + this.languageId);
}
/**
* This method fetches a value from the xml that is the contentVersions Value. If the
* xml is null the property has not been created yet and no values are present.
*/
public String getAttributeValue(String key)
{
String value = "";
try
{
String xml = this.getXML();
if(xml != null)
{
DOMBuilder domBuilder = new DOMBuilder();
Document document = domBuilder.getDocument(xml);
Node node = document.getRootElement().selectSingleNode("attributes/" + key);
if(node != null)
{
value = node.getStringValue();
if(value != null)
value = new VisualFormatter().escapeHTML(value);
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
return value;
}
/**
* This method fetches a value from the xml that is the property Value. If the
* xml is null the contentVersion has not been created yet and no values are present.
*/
public String getUnescapedAttributeValue(String key)
{
String value = "";
try
{
String xml = this.getXML();
int startTagIndex = xml.indexOf("<" + key + ">");
int endTagIndex = xml.indexOf("]]></" + key + ">");
if(startTagIndex > 0 && startTagIndex < xml.length() && endTagIndex > startTagIndex && endTagIndex < xml.length())
{
value = xml.substring(startTagIndex + key.length() + 11, endTagIndex);
}
}
catch(Exception e)
{
e.printStackTrace();
}
return value;
}
/**
* This method fetches the blob from the database and saves it on the disk.
* Then it returnes a url for it
*/
public String getDigitalAssetUrl(Integer digitalAssetId) throws Exception
{
String imageHref = null;
try
{
imageHref = DigitalAssetController.getDigitalAssetUrl(digitalAssetId);
}
catch(Exception e)
{
logger.warn("We could not get the url of the digitalAsset: " + e.getMessage(), e);
imageHref = e.getMessage();
}
return imageHref;
}
/**
* This method fetches the blob from the database and saves it on the disk.
* Then it returnes a url for it
*/
public String getDigitalAssetThumbnailUrl(Integer digitalAssetId) throws Exception
{
String imageHref = null;
try
{
imageHref = DigitalAssetController.getDigitalAssetThumbnailUrl(digitalAssetId);
}
catch(Exception e)
{
logger.warn("We could not get the url of the thumbnail: " + e.getMessage(), e);
imageHref = e.getMessage();
}
return imageHref;
}
/**
* Gets the path to a content/sitenode.
* @param entity
* @param entityId
* @return
*/
public String getQualifyerPath(String entity, String entityId)
{
StringBuffer sb = new StringBuffer("");
try
{
if(entity.equalsIgnoreCase("Content"))
{
ContentVO contentVO = ContentController.getContentController().getContentVOWithId(new Integer(entityId));
sb.insert(0, contentVO.getName() + "/");
while(contentVO.getParentContentId() != null)
{
contentVO = ContentController.getContentController().getContentVOWithId(contentVO.getParentContentId());
sb.insert(0, contentVO.getName() + "/");
}
}
else if(entity.equalsIgnoreCase("SiteNode"))
{
SiteNodeVO siteNodeVO = SiteNodeController.getController().getSiteNodeVOWithId(new Integer(entityId));
sb.insert(0, siteNodeVO.getName() + "/");
while(siteNodeVO.getParentSiteNodeId() != null)
{
siteNodeVO = SiteNodeController.getController().getSiteNodeVOWithId(siteNodeVO.getParentSiteNodeId());
sb.insert(0, siteNodeVO.getName() + "/");
}
}
sb.deleteCharAt(sb.length() -1);
}
catch(Exception e)
{
e.printStackTrace();
}
return sb.toString();
}
/**
* Returns the content relation qualifyers
* @param qualifyerXML
* @return
*/
public List getContentRelationQualifyers(String qualifyerXML)
{
logger.info("Content qualifyerXML:" + qualifyerXML);
return parseQualifyersFromXML(qualifyerXML, "contentId");
}
/**
* Returns the sitenode relation qualifyers
* @param qualifyerXML
* @return
*/
public List getSiteNodeRelationQualifyers(String qualifyerXML)
{
logger.info("Content qualifyerXML:" + qualifyerXML);
return parseQualifyersFromXML(qualifyerXML, "siteNodeId");
}
/**
* Parses qualifyers from an XML
* @param qualifyerXML
* @return
*/
private List parseQualifyersFromXML(String qualifyerXML, String currentEntityIdentifyer)
{
List qualifyers = new ArrayList();
if(qualifyerXML == null || qualifyerXML.length() == 0)
return qualifyers;
try
{
Document document = new DOMBuilder().getDocument(qualifyerXML);
String entity = document.getRootElement().attributeValue("entity");
List children = document.getRootElement().elements();
Iterator i = children.iterator();
while(i.hasNext())
{
Element child = (Element)i.next();
String id = child.getStringValue();
QualifyerVO qualifyerVO = new QualifyerVO();
qualifyerVO.setName(currentEntityIdentifyer);
qualifyerVO.setValue(id);
qualifyerVO.setPath(this.getQualifyerPath(entity, id));
//qualifyerVO.setSortOrder(new Integer(i));
qualifyers.add(qualifyerVO);
}
}
catch(Exception e)
{
e.printStackTrace();
}
return qualifyers;
}
/**
* Return the listing of Category attributes for this type of Content
*/
public List getDefinedCategoryKeys()
{
try
{
if(getContentTypeDefinitionVO() != null)
return ContentTypeDefinitionController.getController().getDefinedCategoryKeys(getContentTypeDefinitionVO(), true);
}
catch(Exception e)
{
logger.warn("We could not fetch the list of defined category keys: " + e.getMessage(), e);
}
return Collections.EMPTY_LIST;
}
/**
* Returns the Category tree for the given Category id.
* @param categoryId The base Category
* @return A list of all Children (and their children, etc)
*/
public List<CategoryVO> getAvailableCategories(Integer categoryId)
{
List<CategoryVO> availableCategories = Collections.EMPTY_LIST;
Timer t = new Timer();
try
{
String protectCategories = CmsPropertyHandler.getProtectCategories();
if(protectCategories != null && protectCategories.equalsIgnoreCase("true"))
{
availableCategories = getCategoryController().getAuthorizedActiveChildren(categoryId, this.getInfoGluePrincipal());
t.printElapsedTime("getAuthorizedActiveChildren");
}
else
{
availableCategories = getCategoryController().getActiveChildrenCategoryVOList(categoryId);
t.printElapsedTime("findAllActiveChildren");
}
}
catch(Exception e)
{
logger.warn("We could not fetch the list of categories: " + e.getMessage(), e);
}
return availableCategories;
}
public CategoryController getCategoryController()
{
return categoryController;
}
public PropertiesCategoryController getPropertiesCategoryController()
{
return propertiesCategoryController;
}
public String getArguments()
{
return arguments;
}
public String getTitleKey()
{
return titleKey;
}
public String getToolbarKey()
{
return toolbarKey;
}
public String getCurrentAction()
{
return currentAction;
}
public void setCurrentAction(String currentAction)
{
this.currentAction = currentAction;
}
public String getEntityName()
{
return entityName;
}
public void setEntityName(String entityName)
{
this.entityName = entityName;
}
public String getUpdateAction()
{
return updateAction;
}
public void setUpdateAction(String updateAction)
{
this.updateAction = updateAction;
}
public String getUpdateAndExitAction()
{
return updateAndExitAction;
}
public void setUpdateAndExitAction(String updateAndExitAction)
{
this.updateAndExitAction = updateAndExitAction;
}
public void setArguments(String arguments)
{
this.arguments = arguments;
}
public void setTitleKey(String titleKey)
{
this.titleKey = titleKey;
}
public void setToolbarKey(String toolbarKey)
{
this.toolbarKey = toolbarKey;
}
public Integer getEntityId()
{
return entityId;
}
public void setEntityId(Integer entityId)
{
this.entityId = entityId;
}
public String getOwnerEntityId()
{
return ownerEntityId;
}
public void setOwnerEntityId(String ownerEntityId) throws Exception
{
this.ownerEntityId = ownerEntityId;
}
public String getOwnerEntityName()
{
return ownerEntityName;
}
public void setOwnerEntityName(String ownerEntityName)
{
this.ownerEntityName = ownerEntityName;
}
public List getAvailableLanguages()
{
return availableLanguages;
}
public void setAvailableLanguages(List availableLanguages)
{
this.availableLanguages = availableLanguages;
}
public Integer getContentTypeDefinitionId()
{
return contentTypeDefinitionId;
}
public void setContentTypeDefinitionId(Integer contentTypeDefinitionId)
{
this.contentTypeDefinitionId = contentTypeDefinitionId;
}
public ContentTypeDefinitionVO getContentTypeDefinitionVO()
{
return contentTypeDefinitionVO;
}
public void setContentTypeDefinitionVO(ContentTypeDefinitionVO contentTypeDefinitionVO)
{
this.contentTypeDefinitionVO = contentTypeDefinitionVO;
}
public List getContentTypeDefinitionVOList()
{
return contentTypeDefinitionVOList;
}
public void setContentTypeDefinitionVOList(List contentTypeDefinitionVOList)
{
this.contentTypeDefinitionVOList = contentTypeDefinitionVOList;
}
public Integer getLanguageId()
{
return languageId;
}
public void setLanguageId(Integer languageId)
{
this.languageId = languageId;
}
public String getTextAreaId()
{
return textAreaId;
}
public void setTextAreaId(String textAreaId)
{
this.textAreaId = textAreaId;
}
public String getAttributeName()
{
return attributeName;
}
public void setAttributeName(String attributeName)
{
this.attributeName = attributeName;
}
public List getContentTypeAttributes()
{
return contentTypeAttributes;
}
public void setAttributes(List contentTypeAttributes)
{
this.contentTypeAttributes = contentTypeAttributes;
}
public String getCancelAction()
{
return cancelAction;
}
public void setCancelAction(String cancelAction)
{
this.cancelAction = cancelAction;
}
}