Author: nbelaevski
Date: 2009-08-12 18:44:17 -0400 (Wed, 12 Aug 2009)
New Revision: 15162
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java
root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd
root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd
Log:
Number of issues fixed
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java 2009-08-12
17:36:57 UTC (rev 15161)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTagBodyConsumer.java 2009-08-12
22:44:17 UTC (rev 15162)
@@ -1,5 +1,6 @@
package org.richfaces.builder.templates;
import javax.xml.namespace.QName;
+import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
@@ -70,4 +71,13 @@
return this;
}
+
+ @Override
+ public void consumeCharacters(Characters characters) {
+ String trimmedText = characters.getData().trim();
+
+ if (trimmedText.length() != 0) {
+ statement.addToBody(createWriteText(characters));
+ }
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java 2009-08-12
17:36:57 UTC (rev 15161)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/BaseTemplateConsumer.java 2009-08-12
22:44:17 UTC (rev 15162)
@@ -124,12 +124,46 @@
}
private String quote(String s) {
- return '\"' + s.replaceAll("\"", "\\\\\"") +
'\"';
+ StringBuilder result = new StringBuilder();
+ result.append('\"');
+
+ char[] chars = s.toCharArray();
+ for (char c : chars) {
+
+ switch (c) {
+ case '\n':
+ result.append("\\n");
+ break;
+ case '\r':
+ result.append("\\r");
+ break;
+ case '\t':
+ result.append("\\t");
+ break;
+ case '\f':
+ result.append("\\f");
+ break;
+ case '\b':
+ result.append("\\b");
+ break;
+ case '\\':
+ result.append("\\\\");
+ break;
+ case '"':
+ result.append("\\\"");
+ break;
+ default:
+ result.append(c);
+ }
+ }
+
+ result.append('\"');
+ return result.toString();
}
protected String elExpressionToJava(String elExpression) {
if ("clientId".equalsIgnoreCase(elExpression)) {
- return "component.getClientId(facesContext)";
+ return "component.getClientId(context)";
} else {
Matcher matcher = COMPONENT_ATTRIBUTES_EXPRESSION.matcher(elExpression);
if (matcher.matches()) {
@@ -263,4 +297,9 @@
return new MethodBodyStatement(
MessageFormat.format("else if ({0}) '{'", testExpression),
"}");
}
+
+ protected MethodBodyStatement createGetComponentClassMethod(String componentClassName)
{
+ return new MethodBodyStatement(MessageFormat.format("return {0}.class;",
componentClassName));
+ }
+
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java 2009-08-12
17:36:57 UTC (rev 15161)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/ChooseTagBodyConsumer.java 2009-08-12
22:44:17 UTC (rev 15162)
@@ -3,6 +3,7 @@
import java.util.List;
import javax.xml.namespace.QName;
+import javax.xml.stream.events.Characters;
import javax.xml.stream.events.StartElement;
import org.richfaces.builder.model.MethodBodyStatement;
@@ -74,4 +75,13 @@
}
}
+ /* (non-Javadoc)
+ * @see
org.richfaces.builder.templates.BaseTagBodyConsumer#consumeCharacters(javax.xml.stream.events.Characters)
+ */
+ @Override
+ public void consumeCharacters(Characters characters) {
+ if (characters.getData().trim().length() != 0) {
+ throw new IllegalArgumentException();
+ }
+ }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java 2009-08-12
17:36:57 UTC (rev 15161)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/RootElementConsumer.java 2009-08-12
22:44:17 UTC (rev 15162)
@@ -55,6 +55,16 @@
return null;
}
+
+ private String getSimpleClassName(String fullClassName) {
+ int lastDotIdx = fullClassName.lastIndexOf('.');
+
+ if (lastDotIdx != -1) {
+ return fullClassName.substring(lastDotIdx + 1);
+ } else {
+ return fullClassName;
+ }
+ }
private JavaClass createJavaClassByName(String fullName) {
String simpleName = null;
@@ -76,17 +86,12 @@
public Consumer consumeStartElement(StartElement startElement) {
QName name = startElement.getName();
if (isCdkNamespace(name) && "root".equals(name.getLocalPart())) {
- javaClass = new JavaClass();
- javaClass.getModifiers().add(JavaModifier.PUBLIC);
-
- javaClass.addImport(ResponseWriter.class);
- javaClass.addImport(FacesContext.class);
- javaClass.addImport(UIComponent.class);
- javaClass.addImport(Renderer.class);
String className = getAttributeValue(startElement, "class");
if (className != null) {
- javaClass.setName(className);
+ javaClass = createJavaClassByName(className);
+ } else {
+ javaClass = new JavaClass();
}
String superClassName = getAttributeValue(startElement, "superclass");
@@ -96,12 +101,17 @@
javaClass.setSuperClass(new JavaClass(Renderer.class));
}
- String packageName = getAttributeValue(startElement, "package");
- if (packageName != null) {
- javaClass.setPackage(new JavaPackage(packageName));
- }
+ javaClass.getModifiers().add(JavaModifier.PUBLIC);
- return new TemplateBodyConsumer(javaClass);
+ javaClass.addImport(ResponseWriter.class);
+ javaClass.addImport(FacesContext.class);
+ javaClass.addImport(UIComponent.class);
+ javaClass.addImport(Renderer.class);
+
+ String componentClassName = getAttributeValue(startElement,
"componentclass");
+ javaClass.addImport(componentClassName);
+
+ return new TemplateBodyConsumer(javaClass, getSimpleClassName(componentClassName));
} else {
throw new IllegalArgumentException();
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java 2009-08-12
17:36:57 UTC (rev 15161)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateBodyConsumer.java 2009-08-12
22:44:17 UTC (rev 15162)
@@ -1,5 +1,6 @@
package org.richfaces.builder.templates;
import java.io.IOException;
+import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
@@ -48,10 +49,13 @@
private List<MethodBodyStatement> statements = new
ArrayList<MethodBodyStatement>();
- public TemplateBodyConsumer(JavaClass javaClass) {
+ private String componentClassName;
+
+ public TemplateBodyConsumer(JavaClass javaClass, String componentClassName) {
super();
this.javaClass = javaClass;
+ this.componentClassName = componentClassName;
}
@Override
@@ -77,8 +81,8 @@
}
private void flushStatements(String methodName) {
- JavaMethod javaMethod = new JavaMethod(methodName, new
Argument("facesContext", FacesContext.class),
- new Argument("component", UIComponent.class));
+ JavaMethod javaMethod = new JavaMethod(methodName, new Argument("context",
FacesContext.class),
+ new Argument("uiComponent", UIComponent.class));
javaMethod.getModifiers().add(JavaModifier.PUBLIC);
javaMethod.getExceptions().add(IOException.class);
@@ -86,7 +90,9 @@
javaMethod.setMethodBody(methodBody);
methodBody.addToBody(
- new MethodBodyStatement("ResponseWriter responseWriter =
facesContext.getResponseWriter();"));
+ new MethodBodyStatement(MessageFormat.format("{0} component = ({0})
uiComponent;", componentClassName)));
+ methodBody.addToBody(
+ new MethodBodyStatement("ResponseWriter responseWriter =
context.getResponseWriter();"));
for (MethodBodyStatement methodBodyStatement : statements) {
methodBody.addToBody(methodBodyStatement);
@@ -123,6 +129,13 @@
super.exit();
flushStatements("encodeEnd");
+
+ JavaMethod getComponentClassMethod = new JavaMethod("getComponentClass",
Class.class);
+ getComponentClassMethod.getModifiers().add(JavaModifier.PROTECTED);
+ MethodBody methodBody = new MethodBody(getComponentClassMethod);
+ methodBody.addToBody(createGetComponentClassMethod(componentClassName));
+ getComponentClassMethod.setMethodBody(methodBody);
+ javaClass.addMethod(getComponentClassMethod);
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java 2009-08-12
17:36:57 UTC (rev 15161)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/builder/templates/TemplateReader.java 2009-08-12
22:44:17 UTC (rev 15162)
@@ -20,8 +20,8 @@
*/
package org.richfaces.builder.templates;
+import java.io.IOException;
import java.io.InputStream;
-import java.io.PrintWriter;
import java.util.ArrayDeque;
import java.util.Deque;
@@ -34,7 +34,6 @@
import javax.xml.stream.events.XMLEvent;
import org.richfaces.builder.model.JavaClass;
-import org.richfaces.builder.render.JavaClassRenderer;
/**
* @author Nick Belaevski
@@ -120,37 +119,48 @@
public static JavaClass parse(InputStream stream) throws XMLStreamException {
XMLEventReader xmlEventReader =
XMLInputFactoryHolder.factory.createXMLEventReader(stream);
- ConsumersTracker tracker = new ConsumersTracker();
- RootElementConsumer consumer = new RootElementConsumer();
- tracker.pushConsumer(consumer);
-
- while (xmlEventReader.hasNext()) {
- XMLEvent event = xmlEventReader.nextEvent();
+ try {
+ ConsumersTracker tracker = new ConsumersTracker();
+ RootElementConsumer consumer = new RootElementConsumer();
+ tracker.pushConsumer(consumer);
- if (event.isStartElement()) {
- StartElement startElement = event.asStartElement();
- Consumer currentConsumer = tracker.peekConsumer();
- Consumer nextConsumer = currentConsumer.consumeStartElement(startElement);
+ while (xmlEventReader.hasNext()) {
+ XMLEvent event = xmlEventReader.nextEvent();
- tracker.pushConsumer(nextConsumer);
- } else if (event.isEndElement()) {
- EndElement endElement = event.asEndElement();
- Consumer currentConsumer = tracker.popConsumer();
- currentConsumer.consumeEndElement(endElement);
- } else if (event.isCharacters()) {
- Characters characters = event.asCharacters();
- tracker.peekConsumer().consumeCharacters(characters);
+ if (event.isStartElement()) {
+ StartElement startElement = event.asStartElement();
+ Consumer currentConsumer = tracker.peekConsumer();
+ Consumer nextConsumer = currentConsumer.consumeStartElement(startElement);
+
+ tracker.pushConsumer(nextConsumer);
+ } else if (event.isEndElement()) {
+ EndElement endElement = event.asEndElement();
+ Consumer currentConsumer = tracker.popConsumer();
+ currentConsumer.consumeEndElement(endElement);
+ } else if (event.isCharacters()) {
+ Characters characters = event.asCharacters();
+ tracker.peekConsumer().consumeCharacters(characters);
+ }
}
+
+ tracker.popConsumer();
+
+ JavaClass javaClass = consumer.getJavaClass();
+ return javaClass;
+ } finally {
+ try {
+ stream.close();
+ } catch (IOException e) {
+ // TODO: handle exception
+ e.printStackTrace();
+ }
+ try {
+ xmlEventReader.close();
+ } catch (XMLStreamException e) {
+ // TODO: handle exception
+ e.printStackTrace();
+ }
}
- tracker.popConsumer();
-
- JavaClass javaClass = consumer.getJavaClass();
- return javaClass;
}
-
- public static void main(String[] args) throws Exception {
- JavaClass javaClass =
TemplateReader.parse(TemplateReader.class.getResourceAsStream("/test.xml"));
- new JavaClassRenderer().render(javaClass, new PrintWriter(System.out));
- }
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java 2009-08-12
17:36:57 UTC (rev 15161)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/LibraryBuilder.java 2009-08-12
22:44:17 UTC (rev 15162)
@@ -24,9 +24,13 @@
package org.richfaces.cdk;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.PrintWriter;
+import org.richfaces.builder.model.JavaClass;
+import org.richfaces.builder.render.JavaClassRenderer;
+import org.richfaces.builder.templates.TemplateReader;
import org.richfaces.cdk.apt.CdkCompiler;
-import org.richfaces.cdk.apt.CdkProcessor;
import org.richfaces.cdk.apt.ComponentProcessor;
import org.richfaces.cdk.model.ComponentLibrary;
@@ -79,6 +83,29 @@
*/
public ComponentLibrary compileRendererTemplates(Iterable<File> templates) throws
CdkException {
ComponentLibrary library = createLibrary();
+
+ try {
+ for (File file : templates) {
+ JavaClass javaClass = TemplateReader.parse(new FileInputStream(file));
+
+ String fullName = javaClass.getFullName();
+
+ File outFile = new File(context.getJavaSourceOutput(),
+ fullName.replace('.', '/') + ".java");
+
+ if (outFile.exists()) {
+ outFile.delete();
+ }
+
+ outFile.getParentFile().mkdirs();
+
+ new JavaClassRenderer().render(javaClass, new PrintWriter(outFile));
+ }
+ } catch (Exception e) {
+ // TODO: handle exception
+ throw new CdkException(e.getMessage(), e);
+ }
+
return library;
}
/**
Modified: root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd 2009-08-12 17:36:57 UTC
(rev 15161)
+++ root/cdk/trunk/plugins/generator/src/main/xsd/cdk-template.xsd 2009-08-12 22:44:17 UTC
(rev 15162)
@@ -33,6 +33,9 @@
<xs:choice>
<xs:any minOccurs="0" maxOccurs="unbounded" />
</xs:choice>
+ <xs:attribute name="class" type="xs:string"
form="unqualified" use="required" />
+ <xs:attribute name="superclass" type="xs:string"
form="unqualified"/>
+ <xs:attribute name="componentclass" type="xs:string"
form="unqualified" use="required" />
</xs:complexType>
</xs:element>
Modified: root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd
===================================================================
--- root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd 2009-08-12 17:36:57 UTC
(rev 15161)
+++ root/cdk/trunk/plugins/generator/src/main/xsd/xhtml-el.xsd 2009-08-12 22:44:17 UTC
(rev 15162)
@@ -3169,6 +3169,7 @@
<xs:attributeGroup ref="cdk:core.attrs" />
</xs:complexType>
<xs:complexType name="script.content" mixed="true">
+ <xs:group ref="cdk:structural" minOccurs="0"
maxOccurs="unbounded" />
<xs:attribute name="id" type="ID"></xs:attribute>
<xs:attribute name="charset"
type="Charset"></xs:attribute>
<xs:attribute use="required" name="type"
type="ContentType"></xs:attribute>