1 15 package org.apache.tapestry.vlib.pages; 16 17 import java.rmi.RemoteException ; 18 19 import javax.servlet.http.Cookie ; 20 21 import org.apache.tapestry.IEngine; 22 import org.apache.tapestry.IRequestCycle; 23 import org.apache.tapestry.callback.ICallback; 24 import org.apache.tapestry.event.PageEvent; 25 import org.apache.tapestry.event.PageRenderListener; 26 import org.apache.tapestry.form.IFormComponent; 27 import org.apache.tapestry.html.BasePage; 28 import org.apache.tapestry.valid.IValidationDelegate; 29 import org.apache.tapestry.valid.ValidatorException; 30 import org.apache.tapestry.vlib.IErrorProperty; 31 import org.apache.tapestry.vlib.VirtualLibraryEngine; 32 import org.apache.tapestry.vlib.Visit; 33 import org.apache.tapestry.vlib.ejb.IOperations; 34 import org.apache.tapestry.vlib.ejb.LoginException; 35 import org.apache.tapestry.vlib.ejb.Person; 36 37 47 48 public abstract class Login extends BasePage implements IErrorProperty, PageRenderListener 49 { 50 55 56 private static final String COOKIE_NAME = "org.apache.tapestry.vlib.Login.email"; 57 58 private final static int ONE_WEEK = 7 * 24 * 60 * 60; 59 60 public abstract void setEmail(String value); 61 62 public abstract String getEmail(); 63 64 public abstract String getPassword(); 65 66 public abstract void setPassword(String password); 67 68 protected IValidationDelegate getValidationDelegate() 69 { 70 return (IValidationDelegate) getBeans().getBean("delegate"); 71 } 72 73 protected void setErrorField(String componentId, String message) 74 { 75 IFormComponent field = (IFormComponent) getComponent(componentId); 76 77 IValidationDelegate delegate = getValidationDelegate(); 78 delegate.setFormComponent(field); 79 delegate.record(new ValidatorException(message)); 80 } 81 82 public abstract void setCallback(ICallback value); 83 84 public abstract ICallback getCallback(); 85 86 93 94 public void attemptLogin(IRequestCycle cycle) 95 { 96 String password = getPassword(); 97 98 100 setPassword(null); 101 IValidationDelegate delegate = getValidationDelegate(); 102 103 delegate.setFormComponent((IFormComponent) getComponent("inputPassword")); 104 delegate.recordFieldInputValue(null); 105 106 108 if (delegate.getHasErrors()) 109 return; 110 111 VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine(); 112 113 int i = 0; 114 while (true) 115 { 116 try 117 { 118 IOperations operations = vengine.getOperations(); 119 120 Person person = operations.login(getEmail(), password); 121 122 loginUser(person, cycle); 123 124 break; 125 126 } 127 catch (LoginException ex) 128 { 129 String fieldName = ex.isPasswordError() ? "inputPassword" : "inputEmail"; 130 131 setErrorField(fieldName, ex.getMessage()); 132 return; 133 } 134 catch (RemoteException ex) 135 { 136 vengine.rmiFailure("Remote exception validating user.", ex, i++); 137 } 138 } 139 } 140 141 148 149 public void loginUser(Person person, IRequestCycle cycle) throws RemoteException 150 { 151 String email = person.getEmail(); 152 153 156 Visit visit = (Visit) getVisit(); 157 visit.setUser(person); 158 159 162 ICallback callback = getCallback(); 163 164 if (callback == null) 165 cycle.activate("Home"); 166 else 167 callback.performCallback(cycle); 168 169 172 IEngine engine = getEngine(); 173 Cookie cookie = new Cookie (COOKIE_NAME, email); 174 cookie.setPath(engine.getServletPath()); 175 cookie.setMaxAge(ONE_WEEK); 176 177 179 cycle.getRequestContext().addCookie(cookie); 180 181 engine.forgetPage(getPageName()); 182 } 183 184 public void pageBeginRender(PageEvent event) 185 { 186 if (getEmail() == null) 187 setEmail(getRequestCycle().getRequestContext().getCookieValue(COOKIE_NAME)); 188 } 189 190 } | Popular Tags |