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

Peter Muir peter at bleepbleep.org.uk
Fri Jun 15 13:07:07 EDT 2007


  User: pmuir   
  Date: 07/06/15 13:07:07

  Added:       ui/src/main/java/org/jboss/seam/ui/resource  
                        WebResource.java StyleResource.java
  Log:
  Refactor cdk port
  
  Revision  Changes    Path
  1.1      date: 2007/06/15 17:07:07;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/resource/WebResource.java
  
  Index: WebResource.java
  ===================================================================
  package org.jboss.seam.ui.resource;
  
  import static org.jboss.seam.InterceptionType.NEVER;
  import static org.jboss.seam.ScopeType.APPLICATION;
  import static org.jboss.seam.annotations.Install.BUILT_IN;
  
  import java.io.IOException;
  import java.io.InputStream;
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Intercept;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.annotations.Startup;
  import org.jboss.seam.servlet.AbstractResource;
  import org.jboss.seam.util.Resources;
  
  @Startup
  @Scope(APPLICATION)
  @Name("org.jboss.seam.ui.resource.webResource")
  @Install(precedence = BUILT_IN)
  @Intercept(NEVER)
  public class WebResource extends AbstractResource
  {
     public static final String WEB_RESOURCE_PATH = "/seam/resource/web";
     
     private static final String RESOURCE_PATH = "/web";
     
     @Override
     protected String getResourcePath()
     {
        return RESOURCE_PATH;
     }
     
     @Override
     public void getResource(HttpServletRequest request, HttpServletResponse response)
        throws IOException
     {
        String pathInfo = request.getPathInfo().substring(getResourcePath().length()); 
        
        InputStream in = Resources.getResourceAsStream("/org/jboss/seam/ui/resource" + pathInfo);
        
        if (in != null)
        {
           byte[] buffer = new byte[1024];
           int read = in.read(buffer);
           while (read != -1)
           {
              response.getOutputStream().write(buffer, 0, read);
              read = in.read(buffer);
           }
           response.getOutputStream().flush();
        }
        else
        {
           response.sendError(HttpServletResponse.SC_NOT_FOUND);
        }
     }
  
  
  }
  
  
  
  1.1      date: 2007/06/15 17:07:07;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/resource/StyleResource.java
  
  Index: StyleResource.java
  ===================================================================
  package org.jboss.seam.ui.resource;
  
  import static org.jboss.seam.InterceptionType.NEVER;
  import static org.jboss.seam.ScopeType.APPLICATION;
  import static org.jboss.seam.annotations.Install.BUILT_IN;
  
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.util.regex.Matcher;
  import java.util.regex.Pattern;
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Intercept;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.annotations.Startup;
  import org.jboss.seam.contexts.Lifecycle;
  import org.jboss.seam.core.Expressions;
  import org.jboss.seam.servlet.AbstractResource;
  import org.jboss.seam.util.Resources;
  
  /**
   * Serve up stylesheets which are have been run through the EL Interpolator.
   * 
   * @author pmuir
   * 
   */
  
  @Startup
  @Scope(APPLICATION)
  @Name("org.jboss.seam.ui.resource.styleResource")
  @Install(precedence = BUILT_IN)
  @Intercept(NEVER)
  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
     {
        String pathInfo = request.getPathInfo().substring(getResourcePath().length());
  
        InputStream in = Resources.getResourceAsStream(pathInfo);
  
        if (in != null)
        {
           try
           {
              Lifecycle.beginRequest( getServletContext(), 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);
        }
  
     }
  
     // Resolve any EL value binding expression present in CSS
     // This should be Interpolator.interpolate, but it seems to break on CSS
     private CharSequence parseEL(CharSequence string)
     {
        StringBuffer parsed = new StringBuffer(string.length());
        Matcher matcher =
            EL_PATTERN.matcher(string);
  
        while (matcher.find()) 
        {
            String result = Expressions.instance().createValueExpression("#{"+matcher.group(1)+"}", String.class).getValue();
            if (result != null) 
            {
                matcher.appendReplacement(parsed, result);
            } 
            else 
            {
                matcher.appendReplacement(parsed, "");
            }
        }
        matcher.appendTail(parsed);
        return parsed;
     }
     
     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");
        }
        inputStream.close();
        return css;
     }
     
     private CharSequence addIdPrefix(String idPrefix, CharSequence string)
     {
        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
        {
           return string;
        }
     }
  
     @Override
     protected String getResourcePath()
     {
        return RESOURCE_PATH;
     }
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list