src/java/isac/session/SessionDialog.java
author wneuper
Sat, 12 Mar 2005 06:14:55 +0100
changeset 2162 161819a0cbbc
parent 2133 4c9e512a37a1
child 2163 4642d95c621c
permissions -rw-r--r--
all-050311a-beforeStart: of impl. userSettings
agriesma@874
     1
/*
agriesma@874
     2
 * Created on Jun 24, 2003
agriesma@874
     3
 *
agriesma@874
     4
 * To change the template for this generated file go to
agriesma@874
     5
 * Window>Preferences>Java>Code Generation>Code and Comments
agriesma@874
     6
 */
agriesma@874
     7
package isac.session;
agriesma@874
     8
agriesma@998
     9
import isac.browserdialog.BDialog;
agriesma@998
    10
import isac.browserdialog.BrowserDialog;
wneuper@2131
    11
import isac.gui.WindowApplication;
agriesma@1026
    12
import isac.wsdialog.DGuide;
agriesma@998
    13
agriesma@921
    14
import java.io.Serializable;
agriesma@921
    15
import java.rmi.RemoteException;
agriesma@921
    16
import java.rmi.server.UnicastRemoteObject;
agriesma@874
    17
import java.util.HashMap;
agriesma@905
    18
import java.util.Iterator;
agriesma@874
    19
import java.util.Map;
agriesma@874
    20
import java.util.Vector;
agriesma@874
    21
wneuper@2131
    22
import org.apache.log4j.Logger;
agriesma@874
    23
import org.apache.xmlrpc.WebServer;
agriesma@874
    24
agriesma@874
    25
/**
wneuper@1838
    26
 * @author Andreas Griesmayer
agriesma@874
    27
 */
akirchst@1818
    28
public class SessionDialog extends UnicastRemoteObject implements SDialog,
akirchst@1818
    29
    Serializable {
wneuper@2131
    30
wneuper@2131
    31
	static Logger logger_ = Logger.getLogger(SessionDialog.class.getName());
wneuper@2131
    32
wneuper@2162
    33
	//private Map dguide_map_ = new HashMap();//WN0503 unused
agriesma@1026
    34
akirchst@1818
    35
  private int counter_;
agriesma@874
    36
akirchst@1818
    37
  private static UMHandler um_handler_ = new UMHandler();
akirchst@1818
    38
akirchst@1818
    39
  private static WSDHandler dg_handler_ = new WSDHandler();
akirchst@1818
    40
akirchst@1818
    41
  private Map sessionmap_ = new HashMap();
akirchst@1818
    42
akirchst@1818
    43
  private Map bdialogmap_ = new HashMap();
akirchst@1818
    44
akirchst@1818
    45
  private static SessionDialog instance_;
akirchst@1818
    46
akirchst@1818
    47
  private SessionDialog() throws RemoteException {
akirchst@1818
    48
    init();
akirchst@1818
    49
    System.out.println("SessionDialog constructor");
akirchst@1818
    50
  }
akirchst@1818
    51
akirchst@1818
    52
  /**
akirchst@1818
    53
   * returns the instance of the singleton SessionDialog. The SessionDialog is
akirchst@1818
    54
   * responsible for maintaining all session-relevant informations like Browser-
akirchst@1818
    55
   * and WorksheetDialog and UserModel it provides its functions using RMI and
akirchst@1818
    56
   * XML-RPC
akirchst@1818
    57
   * 
akirchst@1818
    58
   * @return
akirchst@1818
    59
   */
akirchst@1818
    60
  public static SessionDialog getInstance() {
akirchst@1818
    61
    if (instance_ == null) {
akirchst@1818
    62
      try {
akirchst@1818
    63
        instance_ = new SessionDialog();
akirchst@1818
    64
      } catch (RemoteException e) {
akirchst@1818
    65
        e.printStackTrace();
akirchst@1818
    66
      }
agriesma@921
    67
    }
akirchst@1818
    68
    return instance_;
akirchst@1818
    69
  }
akirchst@1818
    70
akirchst@1818
    71
  // LK 04.09.02: user control with the UserManager
akirchst@1818
    72
  /**
akirchst@1818
    73
   * @param username
akirchst@1818
    74
   *          name of the user
akirchst@1818
    75
   * @param pass
akirchst@1818
    76
   *          password
akirchst@1818
    77
   * @return vector with the sessionid as first and only element on success or
wneuper@2162
    78
   *         empty vector on failure
akirchst@1818
    79
   */
akirchst@1818
    80
  public Vector login(String username, String pass) {
akirchst@1818
    81
    Vector return_val = new Vector();
akirchst@1818
    82
    User user = UserManager.getUser(username, pass);
wneuper@2131
    83
    String sessionid = null;
akirchst@1818
    84
    if (user != null) {
wneuper@2131
    85
      //WN050222 String sessionid;
akirchst@1818
    86
      if ((sessionid = (String) sessionmap_.get(username)) == null) {
akirchst@1818
    87
        sessionmap_.put(username, (sessionid = username + counter_++));
akirchst@1818
    88
        um_handler_.newUserModel(username, sessionid);
akirchst@1818
    89
      }
akirchst@1818
    90
      return_val.add(sessionid);
agriesma@874
    91
    }
wneuper@2131
    92
    logger_.fatal("WA<-SH: login <- sessionid=" + sessionid);
akirchst@1818
    93
    return return_val;
akirchst@1818
    94
  }
akirchst@1818
    95
akirchst@1818
    96
  /**
akirchst@1818
    97
   * @param sessionId
akirchst@1818
    98
   * @return the user for the session id
akirchst@1818
    99
   */
akirchst@1818
   100
  public User getUser(String sessionId) {
akirchst@1818
   101
    //TODO: get user
akirchst@1818
   102
    return null;
akirchst@1818
   103
  }
akirchst@1818
   104
akirchst@1818
   105
  /**
akirchst@1818
   106
   * returns the name of the user which owns the given session.
akirchst@1818
   107
   * 
akirchst@1818
   108
   * @param session
akirchst@1818
   109
   *          ID of the session for which the owner is requested
akirchst@1818
   110
   * @return the name of the owner of the session
wneuper@2162
   111
   * TODO.WN050311 encapsulate User#getName !!!
akirchst@1818
   112
   */
akirchst@1818
   113
  public String getUsername(String session) {
akirchst@1818
   114
    Iterator keys = sessionmap_.keySet().iterator();
akirchst@1818
   115
    String username;
akirchst@1818
   116
    while (keys.hasNext()) {
akirchst@1818
   117
      if (session.equals(sessionmap_.get((username = (String) keys.next())))) {
akirchst@1818
   118
        return username;
akirchst@1818
   119
      }
akirchst@1794
   120
    }
akirchst@1818
   121
    return "";
akirchst@1818
   122
  }
akirchst@1818
   123
akirchst@1818
   124
  /**
akirchst@1818
   125
   * create a new WSDialog and assign it to session <code>session</code>
akirchst@1818
   126
   */
akirchst@1818
   127
  public String openDGuide(String session) {
akirchst@2133
   128
    return dg_handler_.newDGuide(this, session);
akirchst@1818
   129
  }
akirchst@1818
   130
akirchst@1818
   131
  public DGuide getDGuide(String dg_id) {
akirchst@1818
   132
    return (DGuide) dg_handler_.getDGuide(dg_id);
akirchst@1818
   133
  }
akirchst@1818
   134
akirchst@1818
   135
  /**
akirchst@1818
   136
   * used if the SessionDialog is used in standalone mode for testing-purposes.
akirchst@1818
   137
   * Registers its XML-RPC services on port 1050 of the local machine
akirchst@1818
   138
   * 
akirchst@1818
   139
   * @param args
akirchst@1818
   140
   *          not used
akirchst@1818
   141
   */
akirchst@1818
   142
  public static void main(String[] args) {
akirchst@1818
   143
    init();
akirchst@1818
   144
  }
akirchst@1818
   145
akirchst@1818
   146
  private static void init() {
akirchst@1818
   147
    try {
akirchst@1818
   148
      // Invoke me as <http://localhost:8080/RPC2>.
akirchst@1818
   149
      System.out.println("SessionDialog main");
wneuper@2162
   150
      WebServer server = new WebServer(1050);//WN0503 fixed port !
akirchst@1818
   151
      server.setParanoid(false);
akirchst@1818
   152
      //			server.addHandler("sample", new JavaServer());
akirchst@1818
   153
      server.addHandler("SDialog", getInstance());
wneuper@2131
   154
      server.addHandler(" WSDialog", dg_handler_);
akirchst@1818
   155
      // LK 04.09.02: new temorary user management
akirchst@1818
   156
      //server.addHandler("UserModel", um_handler_);
akirchst@1818
   157
akirchst@1818
   158
    } catch (Exception exception) {
akirchst@1818
   159
      System.err.println("SessionDialog: " + exception.toString());
agriesma@905
   160
    }
akirchst@1818
   161
akirchst@1818
   162
  }
akirchst@1818
   163
akirchst@1818
   164
  public void finalize() {
akirchst@1818
   165
    System.out.println("SessionDialog finalize!");
akirchst@1818
   166
  }
akirchst@1818
   167
akirchst@1818
   168
  /**
akirchst@1818
   169
   * returns the BrowserDialog identified by <code>bdialog_id</code> or
akirchst@1818
   170
   * creates a new one.
akirchst@1818
   171
   * 
akirchst@1818
   172
   * @param bdialog_id
akirchst@1818
   173
   *          ID of the BrowserDialog to open.
akirchst@1818
   174
   * @return RMI-Object of the requested BrowserDialog
akirchst@1818
   175
   */
akirchst@1818
   176
  public BDialog getBDialog(String bdialog_id) {
akirchst@1818
   177
    BDialog browser_dialog = (BDialog) bdialogmap_.get(bdialog_id);
akirchst@1818
   178
    if (browser_dialog == null) {
akirchst@1818
   179
      try {
akirchst@1818
   180
        bdialogmap_.put(bdialog_id, (browser_dialog = new BrowserDialog(
akirchst@1818
   181
            bdialog_id)));
akirchst@1818
   182
      } catch (RemoteException e) {
akirchst@1818
   183
        System.err.println("unable to create new BrowserDialog for session "
akirchst@1818
   184
            + bdialog_id);
akirchst@1818
   185
        e.printStackTrace();
akirchst@1818
   186
      }
agriesma@874
   187
    }
akirchst@1818
   188
    return browser_dialog;
akirchst@1818
   189
  }
wneuper@1838
   190
}