dgraham 2003/07/07 16:29:46 Modified: src/share/org/apache/struts/taglib/tiles InsertTag.java Log: More code cleanup, removed deprecated method, deprecated ROLE_DELIMITER because it is only used internally to this class. Revision Changes Path 1.19 +106 -65 jakarta-struts/src/share/org/apache/struts/taglib/tiles/InsertTag.java Index: InsertTag.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/tiles/InsertTag.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- InsertTag.java 19 May 2003 16:29:00 -0000 1.18 +++ InsertTag.java 7 Jul 2003 23:29:46 -0000 1.19 @@ -101,26 +101,47 @@ extends DefinitionTagSupport implements PutTagParent, ComponentConstants, PutListTagParent { - /** Commons Logging instance. */ + /** + * The role delimiter. + * @deprecated This will be removed in a release after Struts 1.2. + */ + public static final String ROLE_DELIMITER = ","; + + /** + * Commons Logging instance. + */ protected static Log log = LogFactory.getLog(InsertTag.class); /* JSP Tag attributes */ - /** Flush attribute value */ + + /** + * Flush attribute value. + */ protected boolean flush = true; - /** Name to insert */ + /** + * Name to insert. + */ protected String name = null; - /** Name of attribute from which to read page name to include */ + /** + * Name of attribute from which to read page name to include. + */ protected String attribute = null; - /** Name of bean used as entity to include */ + /** + * Name of bean used as entity to include. + */ protected String beanName = null; - /** Name of bean property, if any */ + /** + * Name of bean property, if any. + */ protected String beanProperty = null; - /** Scope of bean, if any */ + /** + * Scope of bean, if any. + */ protected String beanScope = null; /** @@ -130,7 +151,9 @@ */ protected boolean isErrorIgnored = false; - /** Name of component instance to include */ + /** + * Name of component instance to include. + */ protected String definitionName = null; /* Internal properties */ @@ -140,13 +163,19 @@ */ protected boolean processEndTag = true; - /** Current component context */ + /** + * Current component context. + */ protected ComponentContext cachedCurrentContext; - /** Finale handler of tag methods */ + /** + * Final handler of tag methods. + */ protected TagHandler tagHandler = null; - /** Trick to allows inner classes to access pageContext */ + /** + * Trick to allows inner classes to access pageContext. + */ protected PageContext pageContext = null; /** @@ -221,14 +250,6 @@ } /** - * Set instance. - * @deprecated Use setDefinition() instead. - */ - public void setInstance(String name) { - this.definitionName = name; - } - - /** * Set definition. */ public void setDefinition(String name) { @@ -345,10 +366,10 @@ */ public void processNestedTag(PutTag nestedTag) throws JspException { // Check role + HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String role = nestedTag.getRole(); - if (role != null - && !((HttpServletRequest) pageContext.getRequest()).isUserInRole( - role)) { // not allowed : skip attribute + if (role != null && !request.isUserInRole(role)) { + // not allowed : skip attribute return; } @@ -363,10 +384,10 @@ */ public void processNestedTag(PutListTag nestedTag) throws JspException { // Check role + HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String role = nestedTag.getRole(); - if (role != null - && !((HttpServletRequest) pageContext.getRequest()).isUserInRole( - role)) { // not allowed : skip attribute + if (role != null && !request.isUserInRole(role)) { + // not allowed : skip attribute return; } @@ -374,6 +395,7 @@ if (nestedTag.getName() == null) { throw new JspException("Error - PutList : attribute name is not defined. It is mandatory as the list is added as attribute of 'insert'."); } + // now add attribute to enclosing parent (i.e. : this object). putAttribute(nestedTag.getName(), nestedTag.getList()); } @@ -384,10 +406,10 @@ */ public void putAttribute(PutListTag nestedTag) throws JspException { // Check role + HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String role = nestedTag.getRole(); - if (role != null - && !((HttpServletRequest) pageContext.getRequest()).isUserInRole( - role)) { // not allowed : skip attribute + if (role != null && !request.isUserInRole(role)) { + // not allowed : skip attribute return; } @@ -404,6 +426,7 @@ ComponentConstants.COMPONENT_CONTEXT, PageContext.REQUEST_SCOPE); } + return cachedCurrentContext; } @@ -417,10 +440,12 @@ if (controllerType == null) { return null; } + try { return ComponentDefinition.createController( controllerName, controllerType); + } catch (InstantiationException ex) { throw new JspException(ex.getMessage()); } @@ -440,23 +465,24 @@ // Check role immediatly to avoid useless stuff. // In case of insertion of a "definition", definition's role still checked later. // This lead to a double check of "role" ;-( - if (role != null - && !((HttpServletRequest) pageContext.getRequest()).isUserInRole(role)) { + HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); + if (role != null && !request.isUserInRole(role)) { processEndTag = false; return SKIP_BODY; } - // Now, real stuff try { tagHandler = createTagHandler(); - } catch (JspException ex) { // Do we ignore errors ? + + } catch (JspException e) { if (isErrorIgnored) { processEndTag = false; return SKIP_BODY; + } else { + throw e; } - // Errors aren't ignored, let it throw. - throw ex; } + return tagHandler.doStartTag(); } @@ -503,7 +529,8 @@ * Object can be a typed attribute, a String, or anything else. * If typed attribute, use associated type. * Otherwise, apply toString() on object, and use returned string as a name. - * @throws JspException - Throws by underlying nested call to processDefinitionName() + * @throws JspException - Throws by underlying nested call to + * processDefinitionName() */ public TagHandler processObjectValue(Object value) throws JspException { // First, check if value is one of the Typed Attribute @@ -530,7 +557,8 @@ * </ul> * * @return appropriate tag handler. - * @throws JspException - Throws by underlying nested call to processDefinitionName() + * @throws JspException - Throws by underlying nested call to + * processDefinitionName() */ public TagHandler processName(String name) throws JspException { Object attrValue = getCurrentContext().getAttribute(name); @@ -552,13 +580,13 @@ /** * Process tag attribute "definition". - * First, search definition in the factory, then create handler from this definition. + * First, search definition in the factory, then create handler from this definition. * @param name Name of the definition. * @return Appropriate TagHandler. * @throws JspException- NoSuchDefinitionException No Definition found for name. * @throws JspException- FactoryNotFoundException Can't find Definitions factory. * @throws JspException- DefinedComponentFactoryException General error in factory. - * @throws JspException InstantiationException Can't create requested controller + * @throws JspException InstantiationException Can't create requested controller */ protected TagHandler processDefinitionName(String name) throws JspException { @@ -572,6 +600,7 @@ if (definition == null) { // is it possible ? throw new NoSuchDefinitionException(); } + return processDefinition(definition); } catch (NoSuchDefinitionException ex) { @@ -579,6 +608,7 @@ "Error - Tag Insert : Can't get definition '" + definitionName + "'. Check if this name exist in definitions factory."); + } catch (FactoryNotFoundException ex) { throw new JspException(ex.getMessage()); @@ -586,6 +616,7 @@ if (log.isDebugEnabled()) { ex.printStackTrace(); } + // Save exception to be able to show it later pageContext.setAttribute( Globals.EXCEPTION_KEY, @@ -617,9 +648,11 @@ if (role == null) { role = definition.getRole(); } + if (page == null) { page = definition.getTemplate(); } + if (controllerName != null) { controller = ComponentDefinition.createController( @@ -633,6 +666,7 @@ page, role, controller); + } catch (InstantiationException ex) { throw new JspException(ex.getMessage()); } @@ -663,7 +697,6 @@ pageContext); if (beanValue == null) { - //throw new NoSuchDefinitionException(); throw new JspException( "Error - Tag Insert : No value defined for bean '" + beanName @@ -673,6 +706,7 @@ + beanScope + "'."); } + return processObjectValue(beanValue); } @@ -692,6 +726,7 @@ throw new JspException( "Error - Tag Insert : No value found for attribute '" + name + "'."); } + return processObjectValue(attrValue); } @@ -699,7 +734,7 @@ * Try to process name as a definition, or as an URL if not found. * @param name Name to process. * @return appropriate TagHandler - * @throws JspException InstantiationException Can't create requested controller + * @throws JspException InstantiationException Can't create requested controller */ public TagHandler processAsDefinitionOrURL(String name) throws JspException { try { @@ -708,12 +743,15 @@ name, pageContext.getRequest(), pageContext.getServletContext()); + if (definition != null) { return processDefinition(definition); } + } catch (DefinitionsFactoryException ex) { // silently failed, because we can choose to not define a factory. } + // no definition found, try as url return processUrl(name); } @@ -722,7 +760,7 @@ * Process typed attribute according to its type. * @param value Typed attribute to process. * @return appropriate TagHandler. - * @throws JspException - Throws by underlying nested call to processDefinitionName() + * @throws JspException - Throws by underlying nested call to processDefinitionName() */ public TagHandler processTypedAttribute(AttributeDefinition value) throws JspException { @@ -735,9 +773,10 @@ } else if (value instanceof DefinitionNameAttribute) { return processDefinitionName((String) value.getValue()); } - //else if( value instanceof PathAttribute ) + return new InsertHandler((String) value.getValue(), role, getController()); } + /** * Do an include of specified page. * This method is used internally to do all includes from this class. It delegates @@ -747,14 +786,7 @@ * @throws IOException - Thrown by call to pageContext.include() */ protected void doInclude(String page) throws ServletException, IOException { - /* - TilesUtil.doInclude( page, - (HttpServletRequest)pageContext.getRequest(), - (HttpServletResponse)pageContext.getResponse(), - pageContext.getServletContext()); - */ - TilesUtil.doInclude( page, pageContext ); - + TilesUtil.doInclude(page, pageContext); } ///////////////////////////////////////////////////////////////////////////// @@ -823,9 +855,10 @@ */ public int doStartTag() throws JspException { // Check role - if (role != null - && !((HttpServletRequest) pageContext.getRequest()).isUserInRole( - role)) { + HttpServletRequest request = + (HttpServletRequest) pageContext.getRequest(); + + if (role != null && !request.isUserInRole(role)) { return SKIP_BODY; } @@ -847,9 +880,10 @@ */ public int doEndTag() throws JspException { // Check role - if (role != null - && !((HttpServletRequest) pageContext.getRequest()).isUserInRole( - role)) { + HttpServletRequest request = + (HttpServletRequest) pageContext.getRequest(); + + if (role != null && !request.isUserInRole(role)) { return EVAL_PAGE; } @@ -878,7 +912,7 @@ pageContext.getOut().flush(); } - doInclude(page); + doInclude(page); } catch (IOException ex) { processException( @@ -937,10 +971,12 @@ */ protected void processException(Throwable ex, String msg) throws JspException { + try { if (msg == null) { msg = ex.getMessage(); } + if (log.isDebugEnabled()) { // show full trace log.debug(msg, ex); pageContext.getOut().println(msg); @@ -948,6 +984,7 @@ } else { // show only message pageContext.getOut().println(msg); } + } catch (IOException ioex) { // problems. Propagate original exception pageContext.setAttribute( ComponentConstants.EXCEPTION_KEY, @@ -965,15 +1002,15 @@ * @param request The request. */ static public boolean userHasRole(HttpServletRequest request, String role) { - StringTokenizer st = new StringTokenizer(role, ROLE_DELIMITER, false); + StringTokenizer st = new StringTokenizer(role, ","); while (st.hasMoreTokens()) { - if (request.isUserInRole(st.nextToken())) + if (request.isUserInRole(st.nextToken())) { return true; + } } + return false; } - /** The role delimiter. */ - static public final String ROLE_DELIMITER = ","; ///////////////////////////////////////////////////////////////////////////// @@ -1013,19 +1050,23 @@ if (flush) { pageContext.getOut().flush(); } + pageContext.getOut().print(value); } catch (IOException ex) { if (log.isDebugEnabled()) { log.debug("Can't write string '" + value + "' : ", ex); } + pageContext.setAttribute( ComponentConstants.EXCEPTION_KEY, ex, PageContext.REQUEST_SCOPE); + throw new JspException( "Can't write string '" + value + "' : " + ex.getMessage()); } + return EVAL_PAGE; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]