001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: * $Header:$
018: */
019: package org.apache.beehive.netui.pageflow.handler;
020:
021: import org.apache.beehive.netui.pageflow.RequestContext;
022:
023: import java.util.Enumeration;
024:
025: /**
026: * Handler for storing Page Flow objects.
027: */
028: public interface StorageHandler extends Handler {
029: /**
030: * Set a named attribute.
031: *
032: * @param context the current RequestContext.
033: * @param attributeName the name of the attribute to set.
034: * @param value the attribute value.
035: */
036: public void setAttribute(RequestContext context,
037: String attributeName, Object value);
038:
039: /**
040: * Remove a named attribute.
041: *
042: * @param context the current RequestContext.
043: * @param attributeName the name of the attribute to remove.
044: */
045: public void removeAttribute(RequestContext context,
046: String attributeName);
047:
048: /**
049: * Get a named attribute.
050: *
051: * @param context the current RequestContext.
052: * @param attributeName the name of the attribute to get.
053: * @return the attribute, or <code>null</code> if there is no such named attribute.
054: */
055: public Object getAttribute(RequestContext context,
056: String attributeName);
057:
058: /**
059: * Ensure that the given named attribute is replicated in a cluster for session failover, if appropriate.
060: *
061: * @param context the current request context.
062: * @param attributeName the name of the attribute for which failover should be ensured.
063: * @param value the value of the attribute for which failover should be ensured.
064: */
065: public void ensureFailover(RequestContext context,
066: String attributeName, Object value);
067:
068: /**
069: * Tell whether a given binding event should be allowed to occur. This is mainly useful in cases when this
070: * handler writes data to some underlying storage (like the <code>HttpSession</code>) at some time other than
071: * when {@link #setAttribute} is called, in which case a binding event would be misleading. Only
072: * {@link org.apache.beehive.netui.pageflow.PageFlowManagedObject}s pay attention to this.
073: *
074: * @param event the binding event, e.g., <code>javax.servlet.http.HttpSessionBindingEvent</code>
075: * @return <code>true</code> if the event should be processed.
076: */
077: public boolean allowBindingEvent(Object event);
078:
079: /**
080: * Apply any deferred changes, at the end of a chain of requests.
081: *
082: * @param context the current request context.
083: */
084: public void applyChanges(RequestContext context);
085:
086: /**
087: * Drop any deferred changes, so they will not be applied at the end of the chain of requests.
088: *
089: * @param context the current request context.
090: */
091: public void dropChanges(RequestContext context);
092:
093: /**
094: * Get all attribute names.
095: *
096: * @param context the current request context.
097: * @return an Enumeration over all the attribute names;
098: */
099: public Enumeration getAttributeNames(RequestContext context);
100: }
|