blob: cca74ff4eaa3b75678d1a1eb560656ad67474dd3 [file] [log] [blame]
/*
* 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.context;
import java.util.Map;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
import org.apache.avalon.framework.thread.ThreadSafe;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.components.ContextHelper;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.webapps.session.SessionConstants;
import org.apache.excalibur.source.SourceResolver;
import org.apache.excalibur.xml.xpath.XPathProcessor;
/**
* Context provider for the temporarily context, the request and the
* response context.
*
* @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 final class StandardSessionContextProvider
extends AbstractLogEnabled
implements SessionContextProvider, ThreadSafe, Contextualizable, Serviceable, Component, Disposable {
protected Context context;
protected ServiceManager manager;
/** The xpath processor */
protected XPathProcessor xpathProcessor;
/** The Source Resolver */
protected SourceResolver resolver;
/**
* Get the context
* @param name The name of the context
* @return The context
* @throws ProcessingException If the context is not available.
*/
public SessionContext getSessionContext(String name)
throws ProcessingException {
final Map objectModel = ContextHelper.getObjectModel( this.context );
// get the context from the object model
SessionContext context = this.getContext( objectModel, name );
if ( context == null ) {
if ( name.equals(SessionConstants.TEMPORARY_CONTEXT) ) {
context = new SimpleSessionContext(this.xpathProcessor, this.resolver);
context.setup(name, null, null);
} else if ( name.equals(SessionConstants.REQUEST_CONTEXT) ) {
context = new RequestSessionContext(this.getLogger());
context.setup(name, null, null);
((RequestSessionContext)context).setup( objectModel, this.manager, this.xpathProcessor );
}
objectModel.put(this.getClass().getName()+name, context);
}
return context;
}
/**
* Does the context exist?
*/
public boolean existsSessionContext(String name)
throws ProcessingException {
final Map objectModel = ContextHelper.getObjectModel(this.context);
return (this.getContext( objectModel, name) != null);
}
private SessionContext getContext(Map objectModel, String name) {
SessionContext context = (SessionContext) objectModel.get(this.getClass().getName()+name);
if ( context != null && !name.equals(SessionConstants.TEMPORARY_CONTEXT)) {
if ( name.equals(SessionConstants.REQUEST_CONTEXT)) {
RequestSessionContext r = (RequestSessionContext)context;
if (!(r.getRequest() == ObjectModelHelper.getRequest( objectModel))) {
context = null;
objectModel.remove(this.getClass().getName()+name);
}
}
}
return context;
}
/* (non-Javadoc)
* @see org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
*/
public void contextualize(Context context) throws ContextException {
this.context = context;
}
/* (non-Javadoc)
* @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
*/
public void service(ServiceManager manager) throws ServiceException {
this.manager = manager;
this.xpathProcessor = (XPathProcessor)this.manager.lookup(XPathProcessor.ROLE);
this.resolver = (SourceResolver)this.manager.lookup(SourceResolver.ROLE);
}
/* (non-Javadoc)
* @see org.apache.avalon.framework.activity.Disposable#dispose()
*/
public void dispose() {
if ( this.manager != null) {
this.manager.release( this.xpathProcessor );
this.manager.release(this.resolver);
this.resolver = null;
this.xpathProcessor = null;
this.manager = null;
}
}
}