[jboss-cvs] jboss-seam/src/ui/org/jboss/seam/ui/resource ...

Peter Muir peter at bleepbleep.org.uk
Mon Apr 30 14:49:30 EDT 2007


  User: pmuir   
  Date: 07/04/30 14:49:30

  Modified:    src/ui/org/jboss/seam/ui/resource  StyleResource.java
  Log:
  Add support for putting styles into naming containers
  
  Revision  Changes    Path
  1.2       +78 -38    jboss-seam/src/ui/org/jboss/seam/ui/resource/StyleResource.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: StyleResource.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/ui/org/jboss/seam/ui/resource/StyleResource.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -b -r1.1 -r1.2
  --- StyleResource.java	17 Apr 2007 15:14:53 -0000	1.1
  +++ StyleResource.java	30 Apr 2007 18:49:30 -0000	1.2
  @@ -21,13 +21,12 @@
   import org.jboss.seam.annotations.Startup;
   import org.jboss.seam.contexts.Lifecycle;
   import org.jboss.seam.core.Expressions;
  -import org.jboss.seam.core.Interpolator;
   import org.jboss.seam.servlet.AbstractResource;
   import org.jboss.seam.util.Resources;
   
   /**
  - * Serve up stylesheets which are have been run through the EL
  - * Interpolator.
  + * Serve up stylesheets which are have been run through the EL Interpolator.
  + * 
    * @author pmuir
    *
    */
  @@ -40,12 +39,18 @@
   public class StyleResource extends AbstractResource
   {
      
  +   private static final Pattern EL_PATTERN = Pattern.compile("#" + Pattern.quote("{") + "(.*)"
  +            + Pattern.quote("}"));
  +   
  +   private static final Pattern ID_PATTERN = Pattern.compile("#([A-Za-z][A-Za-z0-9\\-\\_\\:\\.]*)");
  +
      public static final String WEB_RESOURCE_PATH = "/seam/resource/style";
      
      private static final String RESOURCE_PATH = "/style";
   
      @Override
  -   public void getResource(HttpServletRequest request, HttpServletResponse response) throws IOException
  +   public void getResource(HttpServletRequest request, HttpServletResponse response)
  +            throws IOException
      {
         String pathInfo = request.getPathInfo().substring(getResourcePath().length());
         
  @@ -55,48 +60,83 @@
         {
            try
            {
  -            Lifecycle.beginRequest( getServletContext(), request.getSession(), request );
  -            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
  -            StringBuilder css = new StringBuilder();
  -            String line;
  -            while ( (line = reader.readLine()) != null) {
  -                css.append(line);
  -                css.append("\n");
  +            Lifecycle.beginRequest(getServletContext(), request.getSession(), request);
  +            
  +            CharSequence css = readFile(in);
  +            
  +            css = parseEL(css);
  +            
  +            String idPrefix = request.getParameter("idPrefix");
  +            css = addIdPrefix(idPrefix, css);
  +
  +            response.getWriter().write(css.toString());
  +
  +            response.getWriter().flush();
  +         }
  +         finally
  +         {
  +            Lifecycle.endRequest();
  +         }
  +      }
  +      else
  +      {
  +         response.sendError(HttpServletResponse.SC_NOT_FOUND);
  +      }
  +
               }
  -            in.close();
               
               // Resolve any EL value binding expression present in CSS
               // This should be Interpolator.interpolate, but it seems to break on CSS
  -            StringBuffer resolvedCSS = new StringBuffer(css.length());
  +   private CharSequence parseEL(CharSequence string)
  +   {
  +      StringBuffer parsed = new StringBuffer(string.length());
               Matcher matcher =
  -                Pattern.compile(
  -                    "#" +Pattern.quote("{") + "(.*)" + Pattern.quote("}")
  -                ).matcher(css);
  +          EL_PATTERN.matcher(string);
      
               while (matcher.find()) {
                   Expressions.ValueBinding valueMethod = Expressions.instance().createValueBinding("#{"+matcher.group(1)+"}");
                   String result = (String)valueMethod.getValue();
                   if (result != null) {
  -                    matcher.appendReplacement(resolvedCSS, result);
  +              matcher.appendReplacement(parsed, result);
                   } else {
  -                    matcher.appendReplacement(resolvedCSS, "");
  +              matcher.appendReplacement(parsed, "");
  +          }
                   }
  +      matcher.appendTail(parsed);
  +      return parsed;
               }
  -            matcher.appendTail(resolvedCSS);
  -            response.getWriter().write(resolvedCSS.toString());
               
  -            response.getWriter().flush();
  +   private CharSequence readFile(InputStream inputStream) throws IOException
  +   {
  +      BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
  +      StringBuilder css = new StringBuilder();
  +      String line;
  +      while ((line = reader.readLine()) != null)
  +      {
  +         css.append(line);
  +         css.append("\n");
            } 
  -         finally
  +      inputStream.close();
  +      return css;
  +   }
  +   
  +   private CharSequence addIdPrefix(String idPrefix, CharSequence string)
            {
  -            Lifecycle.endRequest();
  +      StringBuffer parsed = new StringBuffer(string.length());
  +      if (idPrefix != null)
  +      {
  +         Matcher matcher = ID_PATTERN.matcher(string);
  +         while (matcher.find()) {
  +            String result = "#" + idPrefix + ":" + matcher.group(1);
  +            matcher.appendReplacement(parsed, result);
            }
  +        matcher.appendTail(parsed);
  +        return parsed;
         }
         else
         {
  -         response.sendError(HttpServletResponse.SC_NOT_FOUND);
  +         return string;
         }
  -      
      }
   
      @Override
  
  
  



More information about the jboss-cvs-commits mailing list