001 // This file is part of the Attempto Java Packages.
002 // Copyright 2008, Attempto Group, University of Zurich (see http://attempto.ifi.uzh.ch).
003 //
004 // The Attempto Java Packages is free software: you can redistribute it and/or modify it under the
005 // terms of the GNU Lesser General Public License as published by the Free Software Foundation,
006 // either version 3 of the License, or (at your option) any later version.
007 //
008 // The Attempto Java Packages is distributed in the hope that it will be useful, but WITHOUT ANY
009 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
010 // PURPOSE. See the GNU Lesser General Public License for more details.
011 //
012 // You should have received a copy of the GNU Lesser General Public License along with the Attempto
013 // Java Packages. If not, see http://www.gnu.org/licenses/.
014
015 package ch.uzh.ifi.attempto.acewiki.gui.page;
016
017 import nextapp.echo2.app.Column;
018 import nextapp.echo2.app.Extent;
019 import nextapp.echo2.app.Font;
020 import nextapp.echo2.app.Grid;
021 import nextapp.echo2.app.Insets;
022 import nextapp.echo2.app.Row;
023 import nextapp.echo2.app.Window;
024 import nextapp.echo2.app.event.ActionEvent;
025 import nextapp.echo2.app.event.ActionListener;
026 import ch.uzh.ifi.attempto.acewiki.Wiki;
027 import ch.uzh.ifi.attempto.acewiki.gui.Title;
028 import ch.uzh.ifi.attempto.echocomp.GeneralButton;
029 import ch.uzh.ifi.attempto.echocomp.MessageWindow;
030 import ch.uzh.ifi.attempto.echocomp.PasswordField;
031 import ch.uzh.ifi.attempto.echocomp.SolidLabel;
032 import ch.uzh.ifi.attempto.echocomp.TextField;
033 import ch.uzh.ifi.attempto.echocomp.VSpace;
034
035 /**
036 * This class represents a page where the users can login. Note that the login feature
037 * is implemented only very rudimentary at the moment. The password is always "password".
038 *
039 * @author Tobias Kuhn
040 */
041 public class LoginScreen extends Column implements ActionListener {
042
043 private static final long serialVersionUID = -6704597832001286479L;
044
045 private Wiki wiki;
046 private Window window;
047
048 private TextField usernameField = new TextField();
049 private PasswordField passwordField = new PasswordField();
050
051 /**
052 * Creates a new login screen.
053 *
054 * @param wiki The wiki instance.
055 * @param window The window in which the login screen is shown.
056 */
057 public LoginScreen(Wiki wiki, Window window) {
058 this.wiki = wiki;
059 this.window = window;
060
061 wiki.log("logi", "login page");
062
063 add(new VSpace(20));
064 add(new Title("AceWiki Login", true));
065 add(new VSpace(20));
066
067 Grid grid = new Grid(2);
068 grid.setInsets(new Insets(10, 5, 0, 0));
069 grid.add(new SolidLabel("username:", Font.ITALIC));
070 usernameField.setWidth(new Extent(100));
071 grid.add(usernameField);
072 grid.add(new SolidLabel("password:", Font.ITALIC));
073 passwordField.setWidth(new Extent(100));
074 grid.add(passwordField);
075 add(grid);
076
077 add(new VSpace(20));
078
079 Row r3 = new Row();
080 r3.setInsets(new Insets(10, 0));
081 r3.setCellSpacing(new Extent(5));
082 r3.add(new GeneralButton("Login", this));
083 add(r3);
084 }
085
086 public void actionPerformed(ActionEvent e) {
087 wiki.log("logi", "pressed: login");
088 String username = usernameField.getText();
089 String password = passwordField.getText();
090 String correctPassword = getPassword(username);
091 if (password.equals(correctPassword)) {
092 wiki.log("logi", "correct password for " + username);
093 wiki.setUsername(username);
094 wiki.log("syst", "login");
095 window.setContent(wiki.getContentPane());
096 } else {
097 wiki.log("logi", "incorrect password: " + username);
098 window.getContent().add(new MessageWindow("Error", "Invalid username or password!", "OK"));
099 }
100 }
101
102 private String getPassword(String username) {
103 // Put your code here that returns the password for the given username!
104 return "password";
105 }
106
107 }