[Buix-commits] r1015 - in lutinjaxx/trunk: jaxx-core jaxx-core/src/main/java/jaxx/compiler jaxx-core/src/main/java/jaxx/tags/swing jaxx-core/src/test/java/jaxx/junit maven-jaxx-plugin maven-jaxx-plugin/src/main/java/org/codelutin/jaxx maven-jaxx-plugin/src/test/java/org/codelutin/jaxx maven-jaxx-plugin/src/test/resources/testcases
Author: tchemit Date: 2008-11-04 09:10:04 +0000 (Tue, 04 Nov 2008) New Revision: 1015 Added: lutinjaxx/trunk/maven-jaxx-plugin/src/test/resources/testcases/ErrorJaxxContextImplementorClass.xml Modified: lutinjaxx/trunk/jaxx-core/changelog lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompilerOptions.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXObjectGenerator.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/swing/SwingInitializer.java lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/junit/TagManagerTest.java lutinjaxx/trunk/maven-jaxx-plugin/changelog lutinjaxx/trunk/maven-jaxx-plugin/src/main/java/org/codelutin/jaxx/JaxxGeneratorMojo.java lutinjaxx/trunk/maven-jaxx-plugin/src/test/java/org/codelutin/jaxx/CompilerTest.java lutinjaxx/trunk/maven-jaxx-plugin/src/test/java/org/codelutin/jaxx/JaxxBaseTest.java Log: can add extra beanInfoSearchPath in SwingInitializer and Mojo add jaxxContextImplementorClass in option to make possible use of other JAXXContext implementor. Modified: lutinjaxx/trunk/jaxx-core/changelog =================================================================== --- lutinjaxx/trunk/jaxx-core/changelog 2008-11-03 00:55:20 UTC (rev 1014) +++ lutinjaxx/trunk/jaxx-core/changelog 2008-11-04 09:10:04 UTC (rev 1015) @@ -1,4 +1,6 @@ - ver-0-6 chemit 200811?? + 0.6 chemit 200811?? + * 20081104 [chemit] can add extra beanInfoSearchPath in SwingInitializer + * 20081104 [chemit] add jaxxContextImplementorClass in option to make possible use of other JAXXContext implementor. * 20081102 [chemit] improve JAXXContext : - introduce a JAXXContextEntryDef to qualify an entry of a JAXXContext - do javadoc in JAXXContext Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompilerOptions.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompilerOptions.java 2008-11-03 00:55:20 UTC (rev 1014) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompilerOptions.java 2008-11-04 09:10:04 UTC (rev 1015) @@ -20,6 +20,9 @@ /** a flag to add or not logger on generated jaxx files */ private boolean addLogger; + /** the name of implementation of {@link jaxx.runtime.JAXXContext} to be used on {@link jaxx.runtime.JAXXObject}. */ + protected String jaxxContextImplementorClass; + /** * Returns the target directory, generally specified with the "-d" option on the command line. * @@ -170,6 +173,14 @@ this.addLogger = addLogger; } + public String getJaxxContextImplementorClass() { + return jaxxContextImplementorClass; + } + + public void setJaxxContextImplementorClass(String jaxxContextImplementorClass) { + this.jaxxContextImplementorClass = jaxxContextImplementorClass; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(super.toString()); @@ -181,6 +192,7 @@ sb.append("\noptiomize : ").append(getOptimize()); sb.append("\ni18nable : ").append(isI18nable()); sb.append("\naddLogger : ").append(isAddLogger()); + sb.append("\njaxxContextImplementorClass : ").append(getJaxxContextImplementorClass()); return sb.toString(); } } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXObjectGenerator.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXObjectGenerator.java 2008-11-03 00:55:20 UTC (rev 1014) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXObjectGenerator.java 2008-11-04 09:10:04 UTC (rev 1015) @@ -192,7 +192,7 @@ /* * Gestion du context */ - javaFile.addField(createContextField()); + javaFile.addField(createContextField(compiler.getOptions().getJaxxContextImplementorClass())); javaFile.addMethod(createSetContextValueMethod()); javaFile.addMethod(createSetContextValueNameMethod()); javaFile.addMethod(createGetContextValueMethod()); @@ -249,8 +249,9 @@ return new JavaField(Modifier.PROTECTED, "Map<String,Object>", "$objectMap", "new HashMap<String,Object>()"); } - private JavaField createContextField() { - return new JavaField(Modifier.PROTECTED, "jaxx.runtime.JAXXContext", "delegateContext", "new jaxx.runtime.DefaultJAXXContext(this);"); + private JavaField createContextField(String jaxxContextImplementorClass) { + return new JavaField(Modifier.PROTECTED, "jaxx.runtime.JAXXContext", "delegateContext", "new "+jaxxContextImplementorClass+"(this);"); + //return new JavaField(Modifier.PROTECTED, "jaxx.runtime.JAXXContext", "delegateContext", "new jaxx.runtime.DefaultJAXXContext(this);"); } private JavaField createLoggerField(String className) { @@ -311,32 +312,38 @@ private JavaMethod createSetContextValueMethod() { return new JavaMethod(Modifier.PUBLIC, "void", "setContextValue", - new JavaArgument[]{new JavaArgument("Object", "clazz")}, null, getSetContextValueMethodCode()); + new JavaArgument[]{new JavaArgument("Object", "clazz")}, null, + "delegateContext.setContextValue(clazz, null);"); } private JavaMethod createSetContextValueNameMethod() { return new JavaMethod(Modifier.PUBLIC, "void", "setContextValue", - new JavaArgument[]{new JavaArgument("Object", "clazz"), new JavaArgument("String", "name")}, null, getSetContextValueNameMethodCode()); + new JavaArgument[]{new JavaArgument("Object", "clazz"), new JavaArgument("String", "name")}, null, + "delegateContext.setContextValue(clazz, name);"); } private JavaMethod createGetContextValueMethod() { return new JavaMethod(Modifier.PUBLIC, "<T> T", "getContextValue", - new JavaArgument[]{new JavaArgument("Class<T>", "clazz")}, null, getGetContextValueMethodCode()); + new JavaArgument[]{new JavaArgument("Class<T>", "clazz")}, null, + "return delegateContext.getContextValue(clazz, null);"); } private JavaMethod createGetContextValueNameMethod() { return new JavaMethod(Modifier.PUBLIC, "<T> T", "getContextValue", - new JavaArgument[]{new JavaArgument("Class<T>", "clazz"), new JavaArgument("String", "name")}, null, getGetContextValueNameMethodCode()); + new JavaArgument[]{new JavaArgument("Class<T>", "clazz"), new JavaArgument("String", "name")}, null, + "return delegateContext.getContextValue(clazz, name);"); } private JavaMethod createGetParentContainer() { return new JavaMethod(Modifier.PUBLIC, "<O extends Container> O", "getParentContainer", - new JavaArgument[]{new JavaArgument("Class<O>", "clazz")}, null, getGetParentContenerMethodCode()); + new JavaArgument[]{new JavaArgument("Class<O>", "clazz")}, null, + "return delegateContext.getParentContainer(clazz);"); } private JavaMethod createGetParentContainerMore() { return new JavaMethod(Modifier.PUBLIC, "<O extends Container> O", "getParentContainer", - new JavaArgument[]{new JavaArgument("Object", "source"), new JavaArgument("Class<O>", "clazz")}, null, getGetParentContenerMethodMoreCode()); + new JavaArgument[]{new JavaArgument("Object", "source"), new JavaArgument("Class<O>", "clazz")}, null, + "return delegateContext.getParentContainer(source, clazz);"); } @@ -492,6 +499,7 @@ code.append("validatorIds.add(").append(id).append(");"); code.append(JAXXCompiler.getLineSeparator()); code.append("getValidator(").append(id).append(").installUIs();"); + code.append(JAXXCompiler.getLineSeparator()); code.append("getValidator(").append(id).append(").validate();"); code.append(JAXXCompiler.getLineSeparator()); } @@ -542,30 +550,7 @@ /*---------------------------------------------------------------------------------*/ /*-- Create methods code ----------------------------------------------------------*/ /*---------------------------------------------------------------------------------*/ - private String getSetContextValueMethodCode() { - return "delegateContext.setContextValue(clazz, null);"; - } - - private String getSetContextValueNameMethodCode() { - return "delegateContext.setContextValue(clazz, name);"; - } - - private String getGetContextValueMethodCode() { - return "return delegateContext.getContextValue(clazz, null);"; - } - - private String getGetContextValueNameMethodCode() { - return "return delegateContext.getContextValue(clazz, name);"; - } - - private String getGetParentContenerMethodCode() { - return "return delegateContext.getParentContainer(clazz);"; - } - - private String getGetParentContenerMethodMoreCode() { - return "return delegateContext.getParentContainer(source, clazz);"; - } - + protected String getCreationCode(CompiledObject object) throws CompilerException { if (object instanceof ScriptInitializer) { return object.getInitializationCode(compiler); Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/swing/SwingInitializer.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/swing/SwingInitializer.java 2008-11-03 00:55:20 UTC (rev 1014) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/swing/SwingInitializer.java 2008-11-04 09:10:04 UTC (rev 1015) @@ -15,7 +15,6 @@ import jaxx.runtime.swing.Table; import jaxx.runtime.validator.BeanValidator; import jaxx.spi.Initializer; -import jaxx.tags.DefaultComponentHandler; import jaxx.tags.DefaultObjectHandler; import jaxx.tags.TagManager; import jaxx.tags.validator.BeanValidatorHandler; @@ -29,11 +28,25 @@ public class SwingInitializer implements Initializer { + protected static String[] extraBeanInfoSearchPath; + + public static String[] getExtraBeanInfoSearchPath() { + return extraBeanInfoSearchPath; + } + + public static void setExtraBeanInfoSearchPath(String[] extraBeanInfoSearchPath) { + SwingInitializer.extraBeanInfoSearchPath = extraBeanInfoSearchPath; + } + public void initialize() { String[] searchPath = Introspector.getBeanInfoSearchPath(); - String[] newSearchPath = new String[searchPath.length + 1]; + String[] newSearchPath = new String[searchPath.length + 1 + (extraBeanInfoSearchPath == null ? 0 : extraBeanInfoSearchPath.length)]; System.arraycopy(searchPath, 0, newSearchPath, 0, searchPath.length); - newSearchPath[newSearchPath.length - 1] = "jaxx.beaninfos"; + + newSearchPath[searchPath.length] = "jaxx.beaninfos"; + if (extraBeanInfoSearchPath != null && extraBeanInfoSearchPath.length > 0) { + System.arraycopy(extraBeanInfoSearchPath, 0, newSearchPath, searchPath.length + 1, extraBeanInfoSearchPath.length); + } Introspector.setBeanInfoSearchPath(newSearchPath); TagManager.registerTag("java.awt.*", "ButtonGroup", new DefaultObjectHandler(ClassDescriptorLoader.getClassDescriptor(JAXXButtonGroup.class))); Modified: lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/junit/TagManagerTest.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/junit/TagManagerTest.java 2008-11-03 00:55:20 UTC (rev 1014) +++ lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/junit/TagManagerTest.java 2008-11-04 09:10:04 UTC (rev 1015) @@ -7,6 +7,7 @@ import jaxx.tags.DefaultObjectHandler; import jaxx.tags.TagHandler; import jaxx.tags.TagManager; +import jaxx.tags.swing.SwingInitializer; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; @@ -18,6 +19,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; +import java.beans.Introspector; public class TagManagerTest { @@ -133,4 +135,24 @@ Assert.assertEquals("JComboBox is not aliased to jaxx.runtime.swing.JAXXComboBox", "jaxx.runtime.swing.JAXXComboBox", TagManager.resolveClassName("JComboBox", compiler)); Assert.assertEquals("javax.swing.JComboBox is not aliased to jaxx.runtime.swing.JAXXComboBox", "jaxx.runtime.swing.JAXXComboBox", TagManager.resolveClassName("javax.swing.JComboBox", compiler)); } + + @Test + public void testExtraBeanInfoPath() { + String[] searchPath0 = Introspector.getBeanInfoSearchPath(); + + new SwingInitializer().initialize(); + String[] searchPath = Introspector.getBeanInfoSearchPath(); + Assert.assertEquals(searchPath0.length+1,searchPath.length); + Introspector.setBeanInfoSearchPath(searchPath0); + + String packageName = getClass().getPackage().getName(); + SwingInitializer.setExtraBeanInfoSearchPath(new String[]{packageName}); + + new SwingInitializer().initialize(); + searchPath = Introspector.getBeanInfoSearchPath(); + Assert.assertEquals(searchPath0.length+2,searchPath.length); + Assert.assertEquals(packageName, searchPath[searchPath.length-1]); + + Introspector.setBeanInfoSearchPath(searchPath0); + } } \ No newline at end of file Modified: lutinjaxx/trunk/maven-jaxx-plugin/changelog =================================================================== --- lutinjaxx/trunk/maven-jaxx-plugin/changelog 2008-11-03 00:55:20 UTC (rev 1014) +++ lutinjaxx/trunk/maven-jaxx-plugin/changelog 2008-11-04 09:10:04 UTC (rev 1015) @@ -1,3 +1,6 @@ +0.6 chemit 200811?? + * 20081104 [chemit] can add extra beanInfoSearchPath in JaxxGeneratorMojo + ver-0-5 chemit 20081002 * 20081013 [chemit] can generate logger on jaxx files * 20081011 [chemit] improve site Modified: lutinjaxx/trunk/maven-jaxx-plugin/src/main/java/org/codelutin/jaxx/JaxxGeneratorMojo.java =================================================================== --- lutinjaxx/trunk/maven-jaxx-plugin/src/main/java/org/codelutin/jaxx/JaxxGeneratorMojo.java 2008-11-03 00:55:20 UTC (rev 1014) +++ lutinjaxx/trunk/maven-jaxx-plugin/src/main/java/org/codelutin/jaxx/JaxxGeneratorMojo.java 2008-11-04 09:10:04 UTC (rev 1015) @@ -21,7 +21,9 @@ import jaxx.compiler.CompilerOptions; import jaxx.compiler.JAXXCompiler; +import jaxx.runtime.JAXXContext; import jaxx.tags.TagManager; +import jaxx.tags.swing.SwingInitializer; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -34,6 +36,7 @@ import java.io.File; import java.io.IOException; +import java.lang.reflect.Modifier; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; @@ -150,6 +153,31 @@ */ protected boolean addLogger; + /** + * the name of implementation of {@link jaxx.runtime.JAXXContext} + * to be used on {@link jaxx.runtime.JAXXObject}. + * <p/> + * Must not be abstract. + * + * @parameter expression="${jaxx.jaxxContextImplementorClass}" default-value="jaxx.runtime.DefaultJAXXContext" + * @required + */ + protected String jaxxContextImplementorClass; + + /** + * extra path to be added in {@link java.beans.Introspector#setBeanInfoSearchPath(String[])}. + * <p/> + * add beanInfoSearchPath to be registred by {@link SwingInitializer#setExtraBeanInfoSearchPath(String[])} + * <p/> + * and then will be use by {@link jaxx.tags.swing.SwingInitializer#initialize()}. + * <p/> + * <p/> + * This permit to use real beanInfo of imported graphic libraries. + * + * @parameter expression="${jaxx.beanInfoSearchPath}" + */ + protected String[] beanInfoSearchPath; + protected String[] files; private static final String[] INCLUDES = {"**\\/*.jaxx"}; @@ -162,15 +190,21 @@ protected void init() { - if (project!=null && ("pom".equals(project.getPackaging()) || "site".equals(project.getPackaging()))) { + if (project != null && ("pom".equals(project.getPackaging()) || "site".equals(project.getPackaging()))) { // nothing to be done for this type of packaging skip = true; getLog().info("skip generate goal for packaging " + project.getPackaging()); return; } - skip=false; + skip = false; + checkJaxxContextImplementorClass(); + + if (beanInfoSearchPath != null && beanInfoSearchPath.length > 0) { + // regisre extra path + SwingInitializer.setExtraBeanInfoSearchPath(beanInfoSearchPath); + } if (!outResource.exists()) { outResource.mkdirs(); } @@ -187,10 +221,10 @@ boolean noIncludes = includes == null || includes.length == 0; ds.setIncludes(noIncludes ? INCLUDES : includes); - if (excludes!=null && excludes.length>0) { + if (excludes != null && excludes.length > 0) { ds.setExcludes(excludes); } - + ds.scan(); String[] files = ds.getIncludedFiles(); if (verbose) { @@ -243,6 +277,7 @@ result.setVerbose(verbose); result.setI18nable(i18nable); result.setAddLogger(addLogger); + result.setJaxxContextImplementorClass(jaxxContextImplementorClass); return result; } @@ -256,7 +291,7 @@ } return; } - + if (files.length == 0) { getLog().info("jaxx - no jaxx file to treate. "); return; @@ -370,6 +405,24 @@ } } + protected void checkJaxxContextImplementorClass() { + if (jaxxContextImplementorClass == null) { + throw new IllegalArgumentException("jaxxContextImplementor can not be null"); + } + try { + Class jaxxContextImplementor = Class.forName(jaxxContextImplementorClass); + if (!JAXXContext.class.isAssignableFrom(jaxxContextImplementor)) { + throw new IllegalArgumentException("jaxxContextImplementor '" + jaxxContextImplementor + "' does not implements " + JAXXContext.class); + } + if (Modifier.isAbstract(jaxxContextImplementor.getModifiers())) { + throw new IllegalArgumentException("jaxxContextImplementor '" + jaxxContextImplementor + "' can not be abstract."); + + } + } catch (ClassNotFoundException e) { + throw new IllegalArgumentException("could not find jaxxContextImplementor class : " + jaxxContextImplementorClass); + } + } + public File getOutJava() { return outJava; } @@ -461,4 +514,20 @@ public MirroredFileUpdater getUpdater() { return updater; } + + public String getJaxxContextImplementorClass() { + return jaxxContextImplementorClass; + } + + public void setJaxxContextImplementorClass(String jaxxContextImplementorClass) { + this.jaxxContextImplementorClass = jaxxContextImplementorClass; + } + + public String[] getBeanInfoSearchPath() { + return beanInfoSearchPath; + } + + public void setBeanInfoSearchPath(String[] beanInfoSearchPath) { + this.beanInfoSearchPath = beanInfoSearchPath; + } } \ No newline at end of file Modified: lutinjaxx/trunk/maven-jaxx-plugin/src/test/java/org/codelutin/jaxx/CompilerTest.java =================================================================== --- lutinjaxx/trunk/maven-jaxx-plugin/src/test/java/org/codelutin/jaxx/CompilerTest.java 2008-11-03 00:55:20 UTC (rev 1014) +++ lutinjaxx/trunk/maven-jaxx-plugin/src/test/java/org/codelutin/jaxx/CompilerTest.java 2008-11-04 09:10:04 UTC (rev 1015) @@ -2,8 +2,11 @@ import jaxx.compiler.JAXXCompiler; import jaxx.compiler.JAXXCompilerHelper; +import jaxx.runtime.JAXXContext; +import jaxx.runtime.DefaultJAXXContext; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.logging.SystemStreamLog; +import org.junit.Assert; import java.io.File; import java.lang.reflect.Field; @@ -116,6 +119,37 @@ assertEquals(1, mojo.getFiles().length); } + public void testErrorJaxxContextImplementorClass() throws Exception { + mojo.setJaxxContextImplementorClass(null); + try { + mojo.init(); + fail(); + } catch (IllegalArgumentException e) { + Assert.assertTrue(true); + } + + mojo.setJaxxContextImplementorClass(String.class.getName()); + try { + mojo.init(); + fail(); + } catch (IllegalArgumentException e) { + Assert.assertTrue(true); + } + + mojo.setJaxxContextImplementorClass(JAXXContext.class.getName()); + try { + mojo.init(); + fail(); + } catch (IllegalArgumentException e) { + Assert.assertTrue(true); + } + + mojo.setJaxxContextImplementorClass(DefaultJAXXContext.class.getName()); + mojo.init(); + Assert.assertTrue(true); + + } + public void testScript() throws Exception { mojo.execute(); assertEquals(1, mojo.getFiles().length); Modified: lutinjaxx/trunk/maven-jaxx-plugin/src/test/java/org/codelutin/jaxx/JaxxBaseTest.java =================================================================== --- lutinjaxx/trunk/maven-jaxx-plugin/src/test/java/org/codelutin/jaxx/JaxxBaseTest.java 2008-11-03 00:55:20 UTC (rev 1014) +++ lutinjaxx/trunk/maven-jaxx-plugin/src/test/java/org/codelutin/jaxx/JaxxBaseTest.java 2008-11-04 09:10:04 UTC (rev 1015) @@ -8,6 +8,8 @@ import java.io.File; import java.io.IOException; +import jaxx.runtime.DefaultJAXXContext; + /** @author chemit */ public abstract class JaxxBaseTest extends AbstractMojoTestCase { @@ -30,6 +32,7 @@ getLog().info(getName()); pomFile = getPomFile(); mojo = (JaxxGeneratorMojo) lookupMojo("generate", pomFile); + mojo.setJaxxContextImplementorClass(DefaultJAXXContext.class.getName()); assertNotNull(mojo); } Copied: lutinjaxx/trunk/maven-jaxx-plugin/src/test/resources/testcases/ErrorJaxxContextImplementorClass.xml (from rev 1003, lutinjaxx/trunk/maven-jaxx-plugin/src/test/resources/testcases/Errors.xml) =================================================================== --- lutinjaxx/trunk/maven-jaxx-plugin/src/test/resources/testcases/ErrorJaxxContextImplementorClass.xml (rev 0) +++ lutinjaxx/trunk/maven-jaxx-plugin/src/test/resources/testcases/ErrorJaxxContextImplementorClass.xml 2008-11-04 09:10:04 UTC (rev 1015) @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <build> + <plugins> + <plugin> + <groupId>org.codelutin</groupId> + <artifactId>maven-jaxx-plugin</artifactId> + <configuration> + <src>${basedir}/src/test/resources</src> + <outJava>${basedir}/target/it-generated-source/java</outJava> + <outResource>${basedir}/target/it-generated-source/resources</outResource> + <jaxxContextImplementorClass>java.lang.String</jaxxContextImplementorClass> + <force>true</force> + </configuration> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Property changes on: lutinjaxx/trunk/maven-jaxx-plugin/src/test/resources/testcases/ErrorJaxxContextImplementorClass.xml ___________________________________________________________________ Name: svn:mergeinfo +
participants (1)
-
tchemit@users.labs.libre-entreprise.org