/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/metaobj/trunk/metaobj-impl/api-impl/src/java/org/sakaiproject/metaobj/shared/mgt/home/StructuredArtifactDefinition.java $ * $Id: StructuredArtifactDefinition.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2004, 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.metaobj.shared.mgt.home; import org.sakaiproject.component.cover.ComponentManager; import org.sakaiproject.metaobj.shared.mgt.IdManager; import org.sakaiproject.metaobj.shared.mgt.PresentableObjectHome; import org.sakaiproject.metaobj.shared.model.*; import org.sakaiproject.metaobj.utils.xml.SchemaFactory; import org.sakaiproject.metaobj.utils.xml.SchemaNode; import org.sakaiproject.metaobj.utils.xml.SchemaInvalidException; import java.io.ByteArrayInputStream; import java.io.Serializable; import java.util.Date; /** * @author chmaurer, jbush */ public class StructuredArtifactDefinition extends StructuredArtifactHome implements Serializable { public static final int STATE_UNPUBLISHED = 0; public static final int STATE_WAITING_APPROVAL = 1; public static final int STATE_PUBLISHED = 2; private Id id; private String documentRoot; private Agent owner; private Date created = new Date(); private Date modified = new Date(); private transient String decoratedDescription; /** * system only SAD's are not available to users to populate via a web form, they are for internal system use only */ private boolean systemOnly = false; private String description; private boolean modifiable = true; private Id xslConversionFileId; private String schemaFileName; private String xslFileName; private SchemaNode schema; private Id alternateCreateXslt; private String alternateCreateXsltName; private Id alternateViewXslt; private String alternateViewXsltName; /** * should be one of the following states * <p/> * unpublished -> active */ private int siteState; /** * should be one of the following states * <p/> * unpublished -> waiting for approval-> active */ private int globalState; /** * used during edit process to store whether or not xsl transform is necessary */ private boolean requiresXslFile = false; /** * file id of schema file - used when add/editing artifact homes */ private Id schemaFile; /** * used in publishing web form to set action (publish to site, global, approve, etc) */ private String action; public StructuredArtifactDefinition() { } public StructuredArtifactDefinition(StructuredArtifactDefinitionBean bean) { this.action = bean.getAction(); this.created = bean.getCreated(); this.description = bean.getDescription(); this.documentRoot = bean.getDocumentRoot(); this.globalState = bean.getGlobalState(); this.id = bean.getId(); this.modifiable = bean.isModifiable(); this.modified = bean.getModified(); this.owner = bean.getOwner(); this.requiresXslFile = bean.getRequiresXslFile(); if (bean.getSchema() != null) { SchemaFactory schemaFactory = SchemaFactory.getInstance(); ByteArrayInputStream in = new ByteArrayInputStream(bean.getSchema()); try { this.schema = schemaFactory.getSchema(in); } catch ( Exception e ) { throw new SchemaInvalidException(bean.getDescription(), e); } } else { this.schema = null; } this.schemaFile = bean.getSchemaFile(); this.schemaFileName = bean.getSchemaFileName(); this.siteState = bean.getSiteState(); this.systemOnly = bean.isSystemOnly(); this.xslConversionFileId = bean.getXslConversionFileId(); this.xslFileName = bean.getXslFileName(); this.setSiteId(bean.getSiteId()); this.setExternalType(bean.getExternalType()); this.setInstruction(bean.getInstruction()); this.decoratedDescription = bean.getDecoratedDescription(); this.alternateCreateXslt = bean.getAlternateCreateXslt(); this.alternateViewXslt = bean.getAlternateViewXslt(); this.alternateCreateXsltName = bean.getAlternateCreateXsltName(); this.alternateViewXsltName = bean.getAlternateViewXsltName(); if (getId() != null) this.setTypeId(getId().getValue()); } public boolean equals(Object o) { if (!(o instanceof StructuredArtifactDefinition)) { return false; } StructuredArtifactDefinition in = (StructuredArtifactDefinition) o; if (getId() == null && in.getId() == null) { return true; } if (getId() == null && in.getId() != null) { return false; } return getId().equals(in.getId()); } public Artifact createInstance() { StructuredArtifact instance = new StructuredArtifact(documentRoot, getSchema().getChild(documentRoot)); prepareInstance(instance); return instance; } public void prepareInstance(Artifact object) { object.setHome(this); StructuredArtifact xmlObject = (StructuredArtifact) object; xmlObject.getBaseElement().setName(documentRoot); } public String getRootNode() { return documentRoot; } /** * @return Returns the created. */ public Date getCreated() { return created; } /** * @param created The created to set. */ public void setCreated(Date created) { this.created = created; } /** * @return Returns the documentRoot. */ public String getDocumentRoot() { return documentRoot; } /** * @param documentRoot The documentRoot to set. */ public void setDocumentRoot(String documentRoot) { this.documentRoot = documentRoot; } /** * @return Returns the id. */ public Id getId() { return id; } /** * @param id The id to set. */ public void setId(Id id) { this.id = id; } public Date getModified() { return modified; } public void setModified(Date modified) { this.modified = modified; } /** * @return Returns the owner. */ public Agent getOwner() { return owner; } /** * @param owner The owner to set. */ public void setOwner(Agent owner) { this.owner = owner; } public String getExternalType() { return super.getExternalType(); } public void setExternalType(String newType) { // stub this out... this property should be read only } /** * @return Returns the schema. */ public SchemaNode getSchema() { return schema; /* if (getSchemaFile() == null) { return null; } RepositoryNode rNode = (RepositoryNode) getRepositoryManager().getNode(getSchemaFile()); if (rNode == null) { return null; } SchemaFactory schemaFactory = SchemaFactory.getInstance(); return schemaFactory.getSchema(rNode.getStream(RepositoryNode.FILE_TYPE)); */ } public void setSchema(SchemaNode schema) { this.schema = schema; } /** todo implement conversion file stuff public RepositoryNode getXslConversionFileNode() { return (RepositoryNode) getRepositoryManager().getNode(getXslConversionFileId()); } public InputStream getXslConversionFileStream(){ return getXslConversionFileNode().getStream(); } **/ /** * @return Returns the type. */ public Type getType() { Type type = new Type(); if (getId() != null) { type.setId(getId()); } if (getDescription() != null) { type.setDescription(getDecoratedDescription()); } type.setSystemOnly(isSystemOnly()); return type; } /** * @return Returns the systemOnly. */ public boolean isSystemOnly() { return systemOnly; } /** * @param systemOnly The systemOnly to set. */ public void setSystemOnly(boolean systemOnly) { this.systemOnly = systemOnly; } /** * @return Returns the idManager. */ public IdManager getIdManager() { return (IdManager) ComponentManager.getInstance().get("idManager"); } public PresentableObjectHome getRepositoryHelper() { return (PresentableObjectHome) ComponentManager.getInstance().get("repositoryHelper"); } /** * public StreamStore getStreamStore() { * return (StreamStore)BeanFactory.getInstance().getBean( * StreamStore.class.getName(), StreamStore.class); * } * <p/> * public NodeMetadataService getNodeMetadataService() { * return (NodeMetadataService)BeanFactory.getInstance().getBean( * NodeMetadataService.class.getName(), NodeMetadataService.class); * } */ public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public boolean isModifiable() { return modifiable; } public boolean getRequiresXslFile() { return requiresXslFile; } public void setRequiresXslFile(boolean requiresXslFile) { this.requiresXslFile = requiresXslFile; } public Id getSchemaFile() { return schemaFile; } public void setSchemaFile(Id schemaFile) { this.schemaFile = schemaFile; } public Id getXslConversionFileId() { return xslConversionFileId; } public void setXslConversionFileId(Id xslConversionFileId) { this.xslConversionFileId = xslConversionFileId; } public String getSchemaFileName() { return schemaFileName; } public void setSchemaFileName(String schemaFileName) { this.schemaFileName = schemaFileName; } public String getXslFileName() { return xslFileName; } public void setXslFileName(String xslFileName) { this.xslFileName = xslFileName; } public int getSiteState() { return siteState; } public void setSiteState(int siteState) { this.siteState = siteState; } public int getGlobalState() { return globalState; } public void setGlobalState(int globalState) { this.globalState = globalState; } /** * This method doesn't do any authz, it simply checks the state * * @return true, if sad can be published to site. */ public boolean getCanPublish() { return (siteState == STATE_UNPUBLISHED && globalState != STATE_PUBLISHED); } public boolean getCanGlobalPublish() { return (globalState == STATE_UNPUBLISHED); } /** * This method doesn't do any authz, it simply checks the state * * @return true, if sad can be suggested for global publish */ public boolean getCanSuggestGlobalPublish() { return (globalState == STATE_UNPUBLISHED); } /** * This method doesn't do any authz, it simply checks the state * * @return true, if sad can be published globally */ public boolean getCanApproveGlobalPublish() { return (globalState == STATE_WAITING_APPROVAL); } public String getAction() { return action; } public void setAction(String action) { this.action = action; } public String getDecoratedDescription() { return decoratedDescription; } public void setDecoratedDescription(String decoratedDescription) { this.decoratedDescription = decoratedDescription; } public Id getAlternateCreateXslt() { return alternateCreateXslt; } public void setAlternateCreateXslt(Id alternateCreateXslt) { this.alternateCreateXslt = alternateCreateXslt; } public String getAlternateCreateXsltName() { return alternateCreateXsltName; } public void setAlternateCreateXsltName(String alternateCreateXsltName) { this.alternateCreateXsltName = alternateCreateXsltName; } public Id getAlternateViewXslt() { return alternateViewXslt; } public void setAlternateViewXslt(Id alternateViewXslt) { this.alternateViewXslt = alternateViewXslt; } public String getAlternateViewXsltName() { return alternateViewXsltName; } public void setAlternateViewXsltName(String alternateViewXsltName) { this.alternateViewXsltName = alternateViewXsltName; } }