/*
* $Id: AnySessionContainer.java,v 1.11 2002/09/16 08:05:03 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.core.net;
import java.util.Enumeration;
import anvil.core.Any;
import anvil.core.AnyAbstractClass;
import anvil.core.AnyString;
import anvil.core.AnyTuple;
import anvil.core.Array;
import anvil.session.Session;
import anvil.session.SessionContainer;
import anvil.script.Context;
import anvil.java.util.BindingEnumeration;
import anvil.server.Server;
import anvil.server.Domain;
import anvil.server.Zone;
/// @class SessionContainer
///
/**
* class AnySessionContainer
*
* @author: Jani Lehtim�ki
*/
public class AnySessionContainer extends AnyAbstractClass
{
public static anvil.core.RuntimePermission CAN_READ = new anvil.core.RuntimePermission("anvil.net.SessionContainer", false);
public static anvil.core.RuntimePermission CAN_WRITE = new anvil.core.RuntimePermission("anvil.net.SessionContainer", true);
protected SessionContainer _container;
public AnySessionContainer(SessionContainer container)
{
_container = container;
}
public anvil.script.ClassType classOf()
{
return __class__;
}
public String toString()
{
return "SessionContainer(" + _container + ")";
}
public Object toObject()
{
return _container;
}
public int hashCode()
{
return _container.hashCode();
}
public Any getAttribute(Context context, String attribute)
{
Session session = _container.getSession(attribute.toString());
return (session != null) ? new AnySession(session) : UNDEFINED;
}
public Any checkAttribute(Context context, String attribute)
{
return getAttribute(context, attribute);
}
public boolean deleteAttribute(Context context, String attribute)
{
context.checkAccess(CAN_WRITE);
Session session = _container.getSession(attribute.toString());
if (session != null) {
_container.removeSession(session);
return true;
}
return false;
}
public Any getReference(Context context, Any index)
{
return getAttribute(context, index.toString());
}
public Any checkReference(Context context, Any index)
{
return getAttribute(context, index.toString());
}
public boolean deleteReference(Context context, Any index)
{
return deleteAttribute(context, index.toString());
}
public BindingEnumeration enumeration()
{
Session[] sessions = _container.getSessions();
return new SessionEnumeration(sessions);
}
/********* Exposed methods ************/
/// @method invalidateSessions
/// Invalidates (removes) all session from this container.
/// @synopsis SessionContainer invalidateSessions()
/// @throws AccessDenied If security policy denies this operation
public Any m_invalidateSessions(Context context)
{
context.checkAccess(CAN_WRITE);
_container.invalidateSessions();
return this;
}
/// @method createSession
/// @synopsis Session createSession(int lifetime, int timeout)
/// @throws AccessDenied If security policy denies this operation
public static final Object[] p_createSession = { null, "lifetime", "timeout" };
public Any m_createSession(Context context, int lifetime, int timeout)
{
context.checkAccess(CAN_WRITE);
return new AnySession(_container.createSession(lifetime, timeout));
}
/// @method getSessions
/// @synopsis array getSessions()
public Any m_getSessions()
{
Session[] sessions = _container.getSessions();
int n = sessions.length;
Array array = new Array(n+1);
for(int i=0; i<n ;i++) {
Session session = sessions[i];
array.append(Any.create(session.getId()), new AnySession(session));
}
return array;
}
public class SessionEnumeration implements BindingEnumeration
{
private Session[] _list;
private int _index = 0;
public SessionEnumeration(Session[] list)
{
_list = list;
}
public boolean hasMoreElements()
{
return (_index < _list.length);
}
public Object nextKey()
{
return Any.create(_index);
}
public Object nextElement()
{
if (_index < _list.length) {
return new anvil.core.net.AnySession(_list[_index++]);
} else {
return Any.NULL;
}
}
}
transient public static final anvil.script.compiler.NativeClass __class__ =
new anvil.script.compiler.NativeClass("SessionContainer", AnySessionContainer.class,
//DOC{{
""+
" @class SessionContainer\n" +
"\n" +
" @method invalidateSessions\n" +
" Invalidates (removes) all session from this container.\n" +
" @synopsis SessionContainer invalidateSessions()\n" +
" @throws AccessDenied If security policy denies this operation\n" +
" @method createSession\n" +
" @synopsis Session createSession(int lifetime, int timeout)\n" +
" @throws AccessDenied If security policy denies this operation\n" +
" @method getSessions\n" +
" @synopsis array getSessions()\n"
//}}DOC
);
static {
NetModule.class.getName();
}
}