/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/metaobj/trunk/metaobj-util/tool-lib/src/java/org/sakaiproject/metaobj/shared/control/EditedArtifactStorage.java $ * $Id: EditedArtifactStorage.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.control; import java.util.Stack; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdom.Element; import org.sakaiproject.metaobj.shared.mgt.ReadableObjectHome; import org.sakaiproject.metaobj.shared.model.ElementBean; import org.sakaiproject.metaobj.shared.model.StructuredArtifact; import org.sakaiproject.metaobj.utils.xml.SchemaNode; public class EditedArtifactStorage { protected final Log logger = LogFactory.getLog(getClass()); public static final String STORED_ARTIFACT_FLAG = "org_theospi_storedArtifactCall"; public static final String EDITED_ARTIFACT_STORAGE_SESSION_KEY = "org_theospi_editedArtifact"; private SchemaNode rootSchemaNode = null; private SchemaNode currentSchemaNode = null; private StructuredArtifact rootArtifact = null; private ElementBean currentElement = null; private String currentPath = null; private ReadableObjectHome home; private Stack elementBeanStack = new Stack(); private Stack pathStack = new Stack(); private Element oldParentElement = null; public EditedArtifactStorage(SchemaNode rootSchemaNode, StructuredArtifact rootArtifact) { this.rootSchemaNode = rootSchemaNode; this.currentSchemaNode = rootSchemaNode; this.rootArtifact = rootArtifact; this.currentElement = rootArtifact; elementBeanStack.push(rootArtifact); pathStack.push(""); setHome(rootArtifact.getHome()); } public SchemaNode getRootSchemaNode() { return rootSchemaNode; } protected void setRootSchemaNode(SchemaNode rootSchemaNode) { this.rootSchemaNode = rootSchemaNode; } public SchemaNode getCurrentSchemaNode() { return currentSchemaNode; } protected void setCurrentSchemaNode(SchemaNode currentSchemaNode) { this.currentSchemaNode = currentSchemaNode; } public StructuredArtifact getRootArtifact() { return rootArtifact; } protected void setRootArtifact(StructuredArtifact rootArtifact) { this.rootArtifact = rootArtifact; } public ElementBean getCurrentElement() { return currentElement; } protected void setCurrentElement(ElementBean currentElement) { this.currentElement = currentElement; } public String getCurrentPath() { return currentPath; } protected void setCurrentPath(String currentPath) { this.currentPath = currentPath; } public void pushCurrentElement(ElementBean newBean) { oldParentElement = (Element) rootArtifact.getBaseElement().clone(); setCurrentElement(newBean); elementBeanStack.push(newBean); setCurrentSchemaNode(newBean.getCurrentSchema()); } public void pushCurrentPath(String s) { if (getCurrentPath() != null && getCurrentPath().length() > 0) { s = getCurrentPath() + "/" + s; } setCurrentPath(s); pathStack.push(s); } public ReadableObjectHome getHome() { return home; } protected void setHome(ReadableObjectHome home) { this.home = home; } public void popCurrentElement() { popCurrentElement(false); } public void popCurrentElement(boolean cancel) { if (cancel) { rootArtifact.setBaseElement(oldParentElement); } elementBeanStack.pop(); setCurrentElement((ElementBean) elementBeanStack.peek()); setCurrentSchemaNode(getCurrentElement().getCurrentSchema()); } public void popCurrentPath() { pathStack.pop(); setCurrentPath((String) pathStack.peek()); } }