package com.indyforge.foxnet.rmi.pattern.change.impl; import java.util.Map; import com.indyforge.foxnet.rmi.pattern.change.AdminSessionServer; import com.indyforge.foxnet.rmi.pattern.change.Changeable; import com.indyforge.foxnet.rmi.pattern.change.Session; /** * The default implementation of {@link Session}. * * @author Christopher Probst * * @param <T> * The context type. */ final class DefaultSession<T> implements Session<T> { // The server which manages this session private final AdminSessionServer<T> server; // The changeable implementation of the session private final Changeable<T> changeable; // The session id private final long id; // The name of the session private volatile String name; public DefaultSession(AdminSessionServer<T> server, Changeable<T> changeable, long id, String name) { if (server == null) { throw new NullPointerException("server"); } else if (changeable == null) { throw new NullPointerException("changeable"); } // Save this.server = server; this.changeable = changeable; this.id = id; // Set name name(name); } /* * (non-Javadoc) * * @see com.indyforge.foxnet.rmi.pattern.change.Session#id() */ @Override public long id() { return id; } /* * (non-Javadoc) * * @see com.indyforge.foxnet.rmi.pattern.change.Session#name() */ @Override public String name() { return name; } /* * (non-Javadoc) * * @see * com.indyforge.foxnet.rmi.pattern.change.Session#name(java.lang.String) */ @Override public void name(String name) { if (name == null || name.length() < 2) { name = "Undefined"; } this.name = name; } /* * (non-Javadoc) * * @see com.indyforge.foxnet.rmi.pattern.change.Session#names() */ @Override public Map<Long, String> names() { return server.names(); } /* * (non-Javadoc) * * @see com.indyforge.foxnet.rmi.pattern.change.Session#client() */ @Override public Changeable<T> client() { return changeable; } /* * (non-Javadoc) * * @see com.indyforge.foxnet.rmi.pattern.change.Session#server() */ @Override public Changeable<T> server() { // Proceed to server return server.local(); } }