| 1 37 package com.ivata.groupware.container.struts; 38 39 import java.io.IOException ; 40 import java.util.Map ; 41 42 import javax.servlet.ServletContext ; 43 import javax.servlet.ServletException ; 44 import javax.servlet.http.HttpServletRequest ; 45 import javax.servlet.http.HttpServletResponse ; 46 import javax.servlet.http.HttpSession ; 47 48 import org.apache.log4j.Logger; 49 import org.apache.struts.action.Action; 50 import org.apache.struts.action.ActionForm; 51 import org.apache.struts.action.ActionMapping; 52 import org.apache.struts.action.ActionServlet; 53 import org.apache.struts.config.FormBeanConfig; 54 import org.apache.struts.config.ModuleConfig; 55 import org.picocontainer.PicoContainer; 56 57 import com.ivata.groupware.admin.security.Security; 58 import com.ivata.groupware.admin.security.server.SecuritySession; 59 import com.ivata.groupware.container.PicoContainerFactory; 60 import com.ivata.mask.Mask; 61 import com.ivata.mask.MaskFactory; 62 import com.ivata.mask.field.FieldValueConvertorFactory; 63 import com.ivata.mask.persistence.PersistenceManager; 64 import com.ivata.mask.persistence.PersistenceSession; 65 import com.ivata.mask.util.StringHandling; 66 import com.ivata.mask.util.SystemException; 67 import com.ivata.mask.valueobject.ValueObject; 68 import com.ivata.mask.web.browser.Browser; 69 import com.ivata.mask.web.field.DefaultFieldWriterFactory; 70 import com.ivata.mask.web.field.FieldWriterFactory; 71 import com.ivata.mask.web.struts.InputMaskForm; 72 import com.ivata.mask.web.struts.MaskRequestProcessorImplementation; 73 74 75 84 85 public class PicoRequestProcessorImplementation extends 86 MaskRequestProcessorImplementation { 87 90 private static final Logger logger = Logger 91 .getLogger(PicoRequestProcessorImplementation.class); 92 93 98 public static final String MASKS_FILE_NAME = "/WEB-INF/ivataMasks.xml"; 99 private Security security; 100 108 static PersistenceManager getPersistenceManager() throws SystemException { 109 PicoContainer container = PicoContainerFactory.getInstance() 110 .getGlobalContainer(); 111 PersistenceManager persistenceManager = 112 (PersistenceManager) container 113 .getComponentInstance(PersistenceManager.class); 114 assert(persistenceManager != null); 115 return persistenceManager; 116 } 117 125 static MaskRequestProcessorImplementation 126 getRequestProcessorImplementation() { 127 try { 128 MaskRequestProcessorImplementation implementation = 129 (MaskRequestProcessorImplementation) 130 PicoContainerFactory.getInstance().instantiateOrOverride( 131 PicoRequestProcessorImplementation.class); 132 assert(implementation != null); 133 return implementation; 134 } catch (Exception e) { 135 logger.error("Cannot intantiate pico request processor " 136 + "implementation", e); 137 throw new RuntimeException (e); 138 } 139 } 140 151 public PicoRequestProcessorImplementation(final Security security, 152 final MaskFactory maskFactoryParam, 153 final PersistenceManager persistenceManagerParam, 154 final FieldValueConvertorFactory fieldValueConvertorFactory) { 155 super (maskFactoryParam, persistenceManagerParam, 156 fieldValueConvertorFactory); 157 this.security = security; 158 } 159 172 protected Action createAction(final 173 String classNameParam, 174 final HttpServletRequest request, 175 final HttpServletResponse response, 176 final ActionMapping mapping, 177 final Map actions, 178 final ActionServlet servlet) 179 throws IOException , SystemException { 180 String className = classNameParam; 181 Action instance = null; 183 184 instance = (Action) actions.get(className); 186 187 if (instance != null) { 188 return (instance); 189 } 190 191 MaskFactory maskFactory = PicoContainerFactory.getInstance() 193 .getMaskFactory(); 194 synchronized (maskFactory) { 195 if (!maskFactory.isConfigured()) { 198 ServletContext context = servlet.getServletContext(); 199 FieldWriterFactory fieldWriterFactory = new 200 DefaultFieldWriterFactory(getPersistenceManager(), 201 "/mask/find.action"); 202 context.setAttribute(FieldWriterFactory.APPLICATION_ATTRIBUTE, 203 fieldWriterFactory); 204 maskFactory.readConfiguration(context.getResourceAsStream( 205 MASKS_FILE_NAME)); 206 } 207 } 208 209 HttpSession session = request.getSession(); 210 SecuritySession securitySession = (SecuritySession) 211 session.getAttribute("securitySession"); 212 PicoContainer container; 213 if (securitySession != null) { 215 container = securitySession.getContainer(); 216 } else { 217 securitySession = security.loginGuest(); 219 session.setAttribute("securitySession", securitySession); 220 container = securitySession.getContainer(); 221 Browser browser = new Browser(request.getHeader("User-Agent"), null); 223 session.setAttribute("browser", browser); 224 } 225 instance = (Action) 226 PicoContainerFactory.getInstance() 227 .instantiateOrOverride(container, className); 228 if (instance == null) { 229 throw new SystemException("Could not instantiate this class"); 230 } 231 actions.put(className, instance); 232 233 return instance; 234 } 235 236 248 protected ActionForm createActionForm(final 249 FormBeanConfig config, 250 final HttpServletRequest request, 251 final HttpServletResponse response, 252 final ActionMapping mapping) 253 throws SystemException { 254 ActionForm instance = null; 255 HttpSession session = request.getSession(); 256 String attribute = mapping.getAttribute(); 257 String name = mapping.getName(); 258 259 if (attribute == null) { 260 return null; 261 } 262 if (config == null) { 263 return null; 264 } 265 266 if ("request".equals(mapping.getScope())) { 268 instance = (ActionForm) request.getAttribute(attribute); 269 } else { 270 instance = (ActionForm) session.getAttribute(attribute); 271 } 272 273 if (instance != null) { 274 return instance; 275 } 276 277 SecuritySession securitySession = (SecuritySession) 279 session.getAttribute("securitySession"); 280 String type; 282 if (securitySession == null) { 283 return null; 284 } 285 PicoContainer container = securitySession.getContainer(); 286 String valueObjectClassName = request.getParameter("valueObject.class.name"); 290 String valueObjectIdString = request.getParameter("valueObject.idString"); 291 String baseClassName = request.getParameter("baseClass.name"); 292 String maskName = request.getParameter("mask.name"); 293 294 if ("com.ivata.mask.web.struts.InputMaskForm" 295 .equals(config.getType())) { 296 assert (!(StringHandling.isNullOrEmpty(valueObjectClassName) 297 && StringHandling.isNullOrEmpty(valueObjectIdString))); 298 assert (!StringHandling.isNullOrEmpty(baseClassName)); 299 assert (!StringHandling.isNullOrEmpty(maskName)); 300 301 try { 302 Class valueObjectClass = Class.forName(valueObjectClassName); 303 Class baseClass = Class.forName(baseClassName); 304 MaskFactory maskFactory = PicoContainerFactory.getInstance() 305 .getMaskFactory(); 306 Mask mask = maskFactory.getMask(valueObjectClass, maskName); 307 ValueObject valueObject; 308 if (StringHandling.isNullOrEmpty(valueObjectIdString)) { 310 valueObject = (ValueObject) 311 PicoContainerFactory.getInstance() 312 .instantiateOrOverride(container, 313 valueObjectClassName); 314 315 } else { 317 PersistenceManager persistenceManager = 318 getPersistenceManager(); 319 PersistenceSession persistenceSession = 320 persistenceManager.openSession(securitySession); 321 try { 322 valueObject = persistenceManager.findByPrimaryKey( 323 persistenceSession, valueObjectClass, 324 valueObjectIdString); 325 } finally { 326 persistenceSession.close(); 327 } 328 } 329 instance = new InputMaskForm(valueObject, mask, baseClass); 330 } catch (ClassNotFoundException e1) { 331 throw new SystemException(e1); 332 } 333 } else { 334 try { 337 instance = (ActionForm) 338 PicoContainerFactory.getInstance() 339 .instantiateOrOverride(container, 340 config.getType()); 341 } catch (SystemException e) { 342 return null; 343 } 344 } 345 return (instance); 346 } 347 355 public void init(ActionServlet servletParam, ModuleConfig moduleConfigParam) 356 throws ServletException { 357 } 358 359 } 360 | Popular Tags |