[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