/* =============================================================================== * * 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.util.ArrayList; import java.util.Iterator; import java.util.List; 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.controllers.kernel.impl.simple.ContentVersionController; import org.infoglue.cms.controllers.kernel.impl.simple.GroupPropertiesController; import org.infoglue.cms.controllers.kernel.impl.simple.RepositoryController; import org.infoglue.cms.controllers.kernel.impl.simple.RolePropertiesController; import org.infoglue.cms.controllers.kernel.impl.simple.UserPropertiesController; import org.infoglue.cms.entities.management.GroupProperties; import org.infoglue.cms.entities.management.RoleProperties; import org.infoglue.cms.entities.management.UserProperties; import org.infoglue.cms.entities.structure.QualifyerVO; import org.infoglue.cms.util.ConstraintExceptionBuffer; import org.infoglue.cms.util.dom.DOMBuilder; /** * This action is the base action for all relation editors. */ public abstract class ViewRelationEditorAction extends InfoGlueAbstractAction { private final static Logger logger = Logger.getLogger(ViewRelationEditorAction.class.getName()); //protected Integer contentVersionId = null; protected Integer entityId = null; protected String entityName = null; //protected String contentVersionAttributeName= null; protected String attributeName = null; protected String updateAction = null; protected Integer repositoryId = null; protected Integer languageId = null; protected ConstraintExceptionBuffer ceb = null; protected String qualifyerXML = null; protected String relationXML = null; protected String tree = null; protected List repositories = null; protected String path = null; protected List qualifyers = null; protected String currentAction = null; protected String changeRepositoryAction = null; protected String currentEntity = null; protected String currentEntityIdentifyer = null; protected String callbackMethod = null; public void setCallbackMethod(String callbackMethod) { this.callbackMethod = callbackMethod; } public String getCallbackMethod() { return this.callbackMethod; } public void setEntityId(Integer entityId) { this.entityId = entityId; } public Integer getEntityId() { return this.entityId; } public String getAttributeName() { return attributeName; } public void setAttributeName(String attributeName) { this.attributeName = attributeName; } public void setLanguageId(Integer languageId) { this.languageId = languageId; } public Integer getLanguageId() { return this.languageId; } public void setRepositoryId(Integer repositoryId) { this.repositoryId = repositoryId; } public void setPath(String path) { this.path = path; } public Integer getRepositoryId() { return this.repositoryId; } public void setQualifyerXML(String qualifyerXML) { this.qualifyerXML = qualifyerXML; } public String getQualifyerXML() { return this.qualifyerXML; } public String getTree() { return this.tree; } public void setTree(String tree) { this.tree = tree; } public List getQualifyers() { return this.qualifyers; } public String getCurrentEntity() { return this.currentEntity; } public void setCurrentEntity(String currentEntity) { this.currentEntity = currentEntity; } public String getCurrentEntityIdentifyer() { return this.currentEntityIdentifyer; } public void setCurrentEntityIdentifyer(String currentEntityIdentifyer) { this.currentEntityIdentifyer = currentEntityIdentifyer; } public String getCurrentAction() { return this.currentAction; } public String getChangeRepositoryAction() { return this.changeRepositoryAction; } public List getRepositories() { return repositories; } public String getUpdateAction() { return updateAction; } public void setUpdateAction(String updateAction) { this.updateAction = updateAction; } public String getEntityName() { return entityName; } public void setEntityName(String entityName) { this.entityName = entityName; } public abstract String getQualifyerPath(String entityId); /** * This method initializes the repositories-list and selects the first one if no other is selected. * It also reads the relationXML from the content-version. */ protected void initialize() throws Exception { this.repositories = RepositoryController.getController().getAuthorizedRepositoryVOList(this.getInfoGluePrincipal(), true); logger.info("this.repositories:" + this.repositories); logger.info("this.repositoryId:" + this.repositoryId); if(this.repositoryId == null) { this.repositoryId = getContentRepositoryId(); logger.info("session repo:" + this.repositoryId); if(this.repositoryId == null) { this.repositoryId = RepositoryController.getController().getFirstRepositoryVO().getRepositoryId(); logger.info("first repo:" + this.repositoryId); } } //this.relationXML = ContentVersionController.getAttributeValue(getContentVersionId(), getContentVersionAttributeName(), false); this.relationXML = getXML(); boolean isFormDefinitionValid = true; try { if(this.relationXML != null && this.relationXML.length() != 0) { Document document = new DOMBuilder().getDocument(this.relationXML); this.qualifyers = parseQualifyersFromXML(this.relationXML); } else isFormDefinitionValid = false; } catch(Exception e) { isFormDefinitionValid = false; } } /** * This is the default method which just initializes the view. */ public String doExecute() throws Exception { initialize(); return "success"; } public String doChangeRepository() throws Exception { initialize(); return "success"; } /** * This is the default method which just initializes the view. */ public String doV3() throws Exception { initialize(); return "successV3"; } public String doChangeRepositoryV3() throws Exception { initialize(); return "successV3"; } /** * Updates the qualifyer in the normal content version stucture. */ public String doUpdateQualifyer() throws Exception { updateAttributeValue(); initialize(); return "success"; } /** * Updates the qualifyer in the normal content version stucture. */ public String doUpdateQualifyerV3() throws Exception { if(!this.getCallbackMethod().startsWith("updateAttribute")) updateAttributeValue(); initialize(); return "successV3"; } /** * Updates the qualifyer in the EntityProperties stucture. */ public String doUpdateQualifyerInEntityProperties() throws Exception { if(this.entityName.equalsIgnoreCase(UserProperties.class.getName())) UserPropertiesController.getController().updateAttributeValue(getEntityId(), getAttributeName(), this.qualifyerXML); else if(this.entityName.equalsIgnoreCase(RoleProperties.class.getName())) RolePropertiesController.getController().updateAttributeValue(getEntityId(), getAttributeName(), this.qualifyerXML); else if(this.entityName.equalsIgnoreCase(GroupProperties.class.getName())) GroupPropertiesController.getController().updateAttributeValue(getEntityId(), getAttributeName(), this.qualifyerXML); initialize(); return "success"; } /** * Updates the qualifyer in the EntityProperties stucture. */ public String doUpdateQualifyerInEntityPropertiesV3() throws Exception { if(this.entityName.equalsIgnoreCase(UserProperties.class.getName())) UserPropertiesController.getController().updateAttributeValue(getEntityId(), getAttributeName(), this.qualifyerXML); else if(this.entityName.equalsIgnoreCase(RoleProperties.class.getName())) RolePropertiesController.getController().updateAttributeValue(getEntityId(), getAttributeName(), this.qualifyerXML); else if(this.entityName.equalsIgnoreCase(GroupProperties.class.getName())) GroupPropertiesController.getController().updateAttributeValue(getEntityId(), getAttributeName(), this.qualifyerXML); initialize(); return "successV3"; } private List parseQualifyersFromXML(String qualifyerXML) { List qualifyers = new ArrayList(); 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(this.getCurrentEntityIdentifyer()); qualifyerVO.setValue(id); qualifyerVO.setPath(this.getQualifyerPath(id)); //qualifyerVO.setSortOrder(new Integer(i)); qualifyers.add(qualifyerVO); } } catch(Exception e) { e.printStackTrace(); } return qualifyers; } /** * A method that gets the XML that is the relations */ public String getXML() { if(this.getCallbackMethod().startsWith("updateAttribute") && this.qualifyerXML != null && !this.qualifyerXML.equals("")) return this.qualifyerXML; try { if(this.entityName.equalsIgnoreCase(UserProperties.class.getName())) return UserPropertiesController.getController().getAttributeValue(getEntityId(), getAttributeName(), false); if(this.entityName.equalsIgnoreCase(RoleProperties.class.getName())) return RolePropertiesController.getController().getAttributeValue(getEntityId(), getAttributeName(), false); else if(this.entityName.equalsIgnoreCase(GroupProperties.class.getName())) return GroupPropertiesController.getController().getAttributeValue(getEntityId(), getAttributeName(), false); else return ContentVersionController.getContentVersionController().getAttributeValue(getEntityId(), getAttributeName(), false); } catch(Exception e) { e.printStackTrace(); } return ""; } /** * This method is the common update method which assumes that the update is in a contentVersion. */ public void updateAttributeValue() throws Exception { ContentVersionController.getContentVersionController().updateAttributeValue(getEntityId(), getAttributeName(), this.qualifyerXML, this.getInfoGluePrincipal(), true); } }