001: /*
002: * This is free software, licensed under the Gnu Public License (GPL)
003: * get a copy from <http://www.gnu.org/licenses/gpl.html>
004: * @version $Id: SessionManager.java,v 1.3 2004/03/05 23:34:38 hzeller Exp $
005: * @author <a href="mailto:martin.grotzke@javakaffee.de">Martin Grotzke</a>
006: */
007: package henplus;
008:
009: import henplus.view.util.NameCompleter;
010:
011: import java.util.Iterator;
012: import java.util.Map;
013: import java.util.SortedMap;
014: import java.util.SortedSet;
015: import java.util.TreeMap;
016: import java.util.TreeSet;
017:
018: public final class SessionManager {
019:
020: private static SessionManager _instance;
021:
022: private final SortedMap/*<String,SQLSession>*/_sessions;
023: private SQLSession _currentSession;
024:
025: private SessionManager() {
026: _sessions = new TreeMap();
027: }
028:
029: public static SessionManager getInstance() {
030: if (_instance == null)
031: _instance = new SessionManager();
032: return _instance;
033: }
034:
035: public void addSession(String sessionName, SQLSession session) {
036: _sessions.put(sessionName, session);
037: }
038:
039: public SQLSession removeSessionWithName(String sessionName) {
040: return (SQLSession) _sessions.remove(sessionName);
041: }
042:
043: public SQLSession getSessionByName(String name) {
044: return (SQLSession) _sessions.get(name);
045: }
046:
047: public String getFirstSessionName() {
048: return (String) _sessions.firstKey();
049: }
050:
051: public boolean closeCurrentSession() {
052: _currentSession.close();
053: return removeSession(_currentSession);
054: }
055:
056: private boolean removeSession(SQLSession session) {
057: boolean result = false;
058: Map.Entry entry = null;
059: Iterator it = _sessions.entrySet().iterator();
060: while (it.hasNext()) {
061: entry = (Map.Entry) it.next();
062: if (entry.getValue() == session) {
063: it.remove();
064: result = true;
065: break;
066: }
067: }
068: return result;
069: }
070:
071: public void closeAll() {
072: Iterator sessIter = _sessions.values().iterator();
073: while (sessIter.hasNext()) {
074: SQLSession session = (SQLSession) sessIter.next();
075: session.close();
076: }
077: }
078:
079: public int renameSession(String oldSessionName,
080: String newSessionName) {
081: int result = Command.EXEC_FAILED;
082:
083: if (sessionNameExists(newSessionName)) {
084: System.err
085: .println("A session with that name already exists");
086: } else {
087: SQLSession session = removeSessionWithName(oldSessionName);
088: if (session != null) {
089: addSession(newSessionName, session);
090: _currentSession = session;
091: result = Command.SUCCESS;
092: }
093: }
094:
095: return result;
096: }
097:
098: public SortedSet getSessionNames() {
099: SortedSet result = new TreeSet();
100: final Iterator iter = _sessions.keySet().iterator();
101: while (iter.hasNext()) {
102: result.add(iter.next());
103: }
104: return result;
105: }
106:
107: public int getSessionCount() {
108: return _sessions.size();
109: }
110:
111: public boolean hasSessions() {
112: return !_sessions.isEmpty();
113: }
114:
115: public boolean sessionNameExists(String sessionName) {
116: return _sessions.containsKey(sessionName);
117: }
118:
119: public void setCurrentSession(SQLSession session) {
120: this ._currentSession = session;
121: }
122:
123: public SQLSession getCurrentSession() {
124: return _currentSession;
125: }
126:
127: /* ===================== Helper methods ====================== */
128:
129: /**
130: * Used from several commands that need session name completion.
131: */
132: public Iterator completeSessionName(String partialSession) {
133: Iterator result = null;
134: if (_sessions != null) {
135: NameCompleter completer = new NameCompleter(
136: getSessionNames());
137: // System.out.println("[SessionManager.completeSessionName] created completer for sessionnames "+getSessionNames().toString());
138: result = completer.getAlternatives(partialSession);
139: }
140: return result;
141: }
142:
143: }
|