/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache 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.apache.org/licenses/LICENSE-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.apache.cocoon.webapps.session.transformation; import java.io.IOException; import java.util.Map; import org.apache.avalon.framework.parameters.Parameters; import org.apache.cocoon.ProcessingException; import org.apache.cocoon.environment.SourceResolver; import org.apache.cocoon.webapps.session.SessionConstants; import org.apache.excalibur.source.SourceParameters; import org.xml.sax.Attributes; import org.xml.sax.SAXException; /** * This is the session pre transformer. It does all the getting * and creation commands. This transformer should be the first in the * pipeline. * * @author <a href="mailto:cziegeler@s-und-n.de">Carsten Ziegeler</a> * @deprecated This block is deprecated and will be removed in future versions. * @version CVS $Id$ */ public class SessionPreTransformer extends AbstractSessionTransformer { /* * The XML commands */ public static final String CREATECONTEXT_ELEMENT = "createcontext"; public static final String CREATECONTEXT_NAME_ATTRIBUTE = "name"; public static final String CREATECONTEXT_SAVE_ATTRIBUTE = "save"; // optional public static final String CREATECONTEXT_LOAD_ATTRIBUTE = "load"; // optional public static final String GETXML_ELEMENT = "getxml"; public static final String GETXML_CONTEXT_ATTRIBUTE = "context"; public static final String GETXML_PATH_ATTRIBUTE = "path"; public static final String LOADCONTEXT_ELEMENT = "loadxml"; public static final String LOADCONTEXT_CONTEXT_ATTRIBUTE = "context"; public static final String LOADCONTEXT_PATH_ATTRIBUTE = "path"; // optional /** The contexturl element. */ public static final String CONTEXT_URL_ELEMENT = "contexturl"; /** Are we inside a getxml? */ protected int processingGetXML; public SessionPreTransformer() { this.defaultNamespaceURI = SessionConstants.SESSION_NAMESPACE_URI; } /** * Setup the next round. * The instance variables are initialised. * @param resolver The current SourceResolver * @param objectModel The objectModel of the environment. * @param src The value of the src attribute in the sitemap. * @param par The parameters from the sitemap. */ public void setup(SourceResolver resolver, Map objectModel, String src, Parameters par) throws ProcessingException, SAXException, IOException { super.setup(resolver, objectModel, src, par); this.processingGetXML = 0; } /** * Process the SAX event. * The namespace of the event is checked. If it is the defined namespace * for this transformer the endTransformingElement() hook is called. */ public void endElement(String uri, String name, String raw) throws SAXException { super.endElement(uri, name, raw); if (namespaceURI.equals(uri) && this.processingGetXML > 0 && name.equals(GETXML_ELEMENT)) { this.processingGetXML--; this.ignoreEventsCount--; this.ignoreHooksCount--; } } /** * Process the SAX event. * The namespace of the event is checked. If it is the defined namespace * for this transformer the endTransformingElement() hook is called. */ public void startElement(String uri, String name, String raw, Attributes attr) throws SAXException { if (namespaceURI.equals(uri) && this.processingGetXML > 0 && name.equals(GETXML_ELEMENT)) { this.processingGetXML++; this.ignoreEventsCount++; this.ignoreHooksCount++; } super.startElement(uri, name, raw, attr); } /** * This is the real implementation of the startElement event for the transformer * The event is checked for a valid element and the corresponding command * is executed. */ public void startTransformingElement(String uri, String name, String raw, Attributes attr) throws ProcessingException, IOException, SAXException { if (this.getLogger().isDebugEnabled() == true) { this.getLogger().debug("BEGIN startTransformingElement uri=" + uri + ", name=" + name + ", raw=" + raw + ", attr=" + attr); } if (name.equals(CREATECONTEXT_ELEMENT) == true) { this.getContextManager().createContext(attr.getValue(CREATECONTEXT_NAME_ATTRIBUTE), attr.getValue(CREATECONTEXT_LOAD_ATTRIBUTE), attr.getValue(CREATECONTEXT_SAVE_ATTRIBUTE)); } else if (name.equals(GETXML_ELEMENT) == true) { final String path = attr.getValue(GETXML_PATH_ATTRIBUTE); final String contextName = attr.getValue(GETXML_CONTEXT_ATTRIBUTE); if (this.getSessionManager().streamContextFragment(contextName, path, this) == true) { this.ignoreEventsCount++; this.ignoreHooksCount++; this.processingGetXML++; } } else if (name.equals(LOADCONTEXT_ELEMENT) == true) { this.startParametersRecording(); stack.push(attr.getValue(LOADCONTEXT_CONTEXT_ATTRIBUTE)); if (attr.getValue(LOADCONTEXT_PATH_ATTRIBUTE) != null) { stack.push(attr.getValue(LOADCONTEXT_PATH_ATTRIBUTE)); } else { stack.push("/"); } // Element context url } else if (name.equals(SessionPreTransformer.CONTEXT_URL_ELEMENT) == true) { this.ignoreEventsCount++; // DEFAULT } else { super.startTransformingElement(uri, name, raw, attr); } if (this.getLogger().isDebugEnabled() == true) { this.getLogger().debug("END startTransformingElement"); } } public void endTransformingElement(String uri, String name, String raw) throws ProcessingException ,IOException, SAXException { if (this.getLogger().isDebugEnabled() == true) { this.getLogger().debug("BEGIN endTransformingElement uri=" + uri + ", name=" + name + ", raw=" + raw); } if (name.equals(CREATECONTEXT_ELEMENT) == true) { // do nothing, the context was created on the startElement event } else if (name.equals(GETXML_ELEMENT) == true) { // do nothing // Element: loadxml } else if (name.equals(LOADCONTEXT_ELEMENT) == true) { String path = (String)stack.pop(); String contextName = (String)stack.pop(); SourceParameters pars = this.endParametersRecording((SourceParameters)null); pars.setSingleParameterValue("contextname", contextName); pars.setSingleParameterValue("path", path); this.getContextManager().getContext(contextName).loadXML(path, pars); // Element context url } else if (name.equals(SessionPreTransformer.CONTEXT_URL_ELEMENT) == true) { this.ignoreEventsCount--; String contextUrl = this.request.getScheme() + "://" + this.request.getServerName() + ":" + this.request.getServerPort() + this.request.getContextPath(); this.sendTextEvent(contextUrl); // DEFAULT } else { super.endTransformingElement(uri, name, raw); } if (this.getLogger().isDebugEnabled() == true) { this.getLogger().debug("END endTransformingElement"); } } }