[Buix-commits] r1052 - in lutinjaxx/trunk/jaxx-core: . src/main/java/jaxx/compiler src/main/java/jaxx/reflect src/main/java/jaxx/runtime src/main/java/jaxx/runtime/validator src/main/java/jaxx/tags src/test/java/jaxx/junit
Author: tchemit Date: 2008-12-02 19:25:08 +0000 (Tue, 02 Dec 2008) New Revision: 1052 Modified: lutinjaxx/trunk/jaxx-core/changelog lutinjaxx/trunk/jaxx-core/pom.xml lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXObjectGenerator.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/reflect/ClassDescriptorLoader.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Util.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/BeanValidator.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/DefaultObjectHandler.java lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/junit/ClassDescriptorTest.java Log: fix bug when searching for a inner class add usefullmethod to setBean on all validators of a JAXXObject + little stuff Modified: lutinjaxx/trunk/jaxx-core/changelog =================================================================== --- lutinjaxx/trunk/jaxx-core/changelog 2008-12-02 01:07:51 UTC (rev 1051) +++ lutinjaxx/trunk/jaxx-core/changelog 2008-12-02 19:25:08 UTC (rev 1052) @@ -1,4 +1,5 @@ 0.7 chemit 200812?? + * 20081202 [chemit] - fix bug when searching for a inner class * 20081201 [chemit] - implements jaxx.runtime.JXPathDecorator - add setcontextValue and removeContextValue on JAXXContextEntryDef - introduce scope in BeanValidator (ERROR or WARNING) and related swing stuff Modified: lutinjaxx/trunk/jaxx-core/pom.xml =================================================================== --- lutinjaxx/trunk/jaxx-core/pom.xml 2008-12-02 01:07:51 UTC (rev 1051) +++ lutinjaxx/trunk/jaxx-core/pom.xml 2008-12-02 19:25:08 UTC (rev 1052) @@ -52,6 +52,9 @@ <!-- ************************************************************* --> <packaging>jar</packaging> + <build> + <defaultGoal>install</defaultGoal> + </build> <!-- ************************************************************* --> <!-- *** Build Environment ************************************** --> <!-- ************************************************************* --> Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXObjectGenerator.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXObjectGenerator.java 2008-12-02 01:07:51 UTC (rev 1051) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/JAXXObjectGenerator.java 2008-12-02 19:25:08 UTC (rev 1052) @@ -491,6 +491,8 @@ code.append("getValidator(").append(id).append(").validate();"); code.append(JAXXCompiler.getLineSeparator()); } + code.append("validatorIds = java.util.Collections.unmodifiableList(validatorIds);"); + code.append(JAXXCompiler.getLineSeparator()); } return newMethod(Modifier.PRIVATE, "void", "$completeSetup", code.toString()); } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/reflect/ClassDescriptorLoader.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/reflect/ClassDescriptorLoader.java 2008-12-02 01:07:51 UTC (rev 1051) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/reflect/ClassDescriptorLoader.java 2008-12-02 19:25:08 UTC (rev 1052) @@ -45,11 +45,12 @@ public static synchronized ClassDescriptor getClassDescriptor(String className, ClassLoader classLoader) throws ClassNotFoundException { ClassDescriptor result = descriptors.get(className); if (result == null) { - if (JAXXCompiler.getSymbolTable(className) != null) + if (JAXXCompiler.getSymbolTable(className) != null) { result = createClassDescriptorFromSymbolTable(className, classLoader); - else { - if (classLoader == null) + } else { + if (classLoader == null) { classLoader = ClassDescriptorLoader.class.getClassLoader(); + } String relativePath = className.replaceAll("\\.", "/"); String relativePathPattern = ".*";// + className + ".*"; // used to ensure that the located resource has the right character cases @@ -57,13 +58,15 @@ // find the most recently updated source for the class -- Java source, JAXX source, or compiled class file long javaLastModified = -1; URL javaFile = classLoader.getResource(relativePath + ".java"); - if (javaFile != null && javaFile.toString().startsWith("file:") && javaFile.toString().matches(relativePathPattern)) + if (javaFile != null && javaFile.toString().startsWith("file:") && javaFile.toString().matches(relativePathPattern)) { javaLastModified = JAXXCompiler.URLtoFile(javaFile).lastModified(); + } long classLastModified = -1; URL classFile = classLoader.getResource(relativePath + ".class"); - if (classFile != null && classFile.toString().startsWith("file:") && classFile.toString().matches(relativePathPattern)) + if (classFile != null && classFile.toString().startsWith("file:") && classFile.toString().matches(relativePathPattern)) { classLastModified = JAXXCompiler.URLtoFile(classFile).lastModified(); + } long jaxxLastModified = -1; URL jaxxFile = classLoader.getResource(relativePath + ".jaxx"); @@ -73,23 +76,26 @@ String simplePath = jaxxFilePath.getPath(); simplePath = simplePath.substring(0, simplePath.length() - ".jaxx".length()); File cssFilePath = new File(simplePath + ".css"); - if (cssFilePath.exists()) + if (cssFilePath.exists()) { jaxxLastModified = Math.max(jaxxLastModified, cssFilePath.lastModified()); + } File scriptFilePath = new File(simplePath + ".script"); - if (scriptFilePath.exists()) + if (scriptFilePath.exists()) { jaxxLastModified = Math.max(jaxxLastModified, scriptFilePath.lastModified()); + } } - if (jaxxLastModified != -1 && JAXXCompiler.getSymbolTable(className) == null) + if (jaxxLastModified != -1 && JAXXCompiler.getSymbolTable(className) == null) { jaxxLastModified = -1; // file has been modified, but wasn't included in this + } // compilation set so we don't have a symbol table if (javaLastModified != -1 || classLastModified != -1 || jaxxLastModified != -1) { - if (jaxxLastModified > classLastModified && jaxxLastModified > javaLastModified) + if (jaxxLastModified > classLastModified && jaxxLastModified > javaLastModified) { result = createClassDescriptorFromSymbolTable(className, classLoader); - else - if (javaLastModified > classLastModified && javaLastModified > jaxxLastModified) + } else if (javaLastModified > classLastModified && javaLastModified > jaxxLastModified) { result = createClassDescriptorFromJavaSource(javaFile, classLoader); + } } // else work off of the class file. This also handles the case where the class is available, but wasn't in a location where // we could check its last modified date (in a JAR, over the network, etc.) @@ -114,8 +120,9 @@ } public static Class getClass(String className, ClassLoader classLoader) throws ClassNotFoundException { - if (className.equals("boolean")) + if (className.equals("boolean")) { return boolean.class; + } if (className.equals("byte")) { return byte.class; } @@ -151,8 +158,27 @@ } try { return classLoader != null ? Class.forName(className, true, classLoader) : Class.forName(className); + } catch (ClassNotFoundException e) { + // perharps we are in a inner class ? + int dotIndex = className.lastIndexOf("."); + if (dotIndex > -1) { + String parentFQN = className.substring(0, dotIndex); + String simpleName = className.substring(dotIndex + 1); + try { + Class<?> parentClass = classLoader != null ? Class.forName(parentFQN, true, classLoader) : Class.forName(parentFQN); + for (Class<?> innerClass : parentClass.getClasses()) { + if (simpleName.equals(innerClass.getSimpleName())) { + return innerClass; + } + } + } catch (ClassNotFoundException e1) { + // no super class,so let the first exception throw... + } + } + throw e; } catch (NoClassDefFoundError e) { + throw new ClassNotFoundException(e.toString()); } } @@ -180,8 +206,9 @@ private static JAXXObjectDescriptor getJAXXObjectDescriptor(Class<?> jaxxClass) { - if (!JAXXObject.class.isAssignableFrom(jaxxClass) || jaxxClass == JAXXObject.class) + if (!JAXXObject.class.isAssignableFrom(jaxxClass) || jaxxClass == JAXXObject.class) { return null; + } try { Method getJAXXObjectDescriptor = jaxxClass.getMethod("$getJAXXObjectDescriptor", new Class[0]); return (JAXXObjectDescriptor) getJAXXObjectDescriptor.invoke(null); Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Util.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Util.java 2008-12-02 01:07:51 UTC (rev 1051) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Util.java 2008-12-02 19:25:08 UTC (rev 1052) @@ -446,12 +446,41 @@ } return value; - } + /** + * Convinient method to process more than one binding on a JAXX ui. + * + * @param src the ui to treate + * @param bindings the list of binding to process. + */ public static void processDataBinding(JAXXObject src, String... bindings) { for (String binding : bindings) { src.processDataBinding(binding); } } + + /** + * Convient method to attach a bean to all validators of an JAXXObject. + * <p/> + * It is possible to exclude some validator to be treated. + * + * @param ui the ui containing the validatros to treate + * @param bean the bean to attach in validators (can be null) + * @param excludeIds the list of validator id to exclude + */ + @SuppressWarnings({"unchecked"}) + public static void setValidatorBean(JAXXObject ui, Object bean, String... excludeIds) { + List<String> validatorIds = ui.getValidatorIds(); + if (excludeIds.length > 0) { + validatorIds = new ArrayList<String>(validatorIds); + for (String excludeId : excludeIds) { + validatorIds.remove(excludeId); + } + } + for (String validatorId : validatorIds) { + BeanValidator beanValidator = ui.getValidator(validatorId); + beanValidator.setBean(bean); + } + } } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/BeanValidator.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/BeanValidator.java 2008-12-02 01:07:51 UTC (rev 1051) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/BeanValidator.java 2008-12-02 19:25:08 UTC (rev 1052) @@ -520,6 +520,11 @@ } } + @Override + public String toString() { + return super.toString() + "<contextName:" + contextName + ">"; + } + /** @return <code>true</code> if validation is not active , <code>false</code> otherwise. */ protected boolean checkState() { return bean == null || (getErrorListModel() == null && getErrorTableModel() == null) || fieldRepresentation.size() == 0; Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/DefaultObjectHandler.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/DefaultObjectHandler.java 2008-12-02 01:07:51 UTC (rev 1051) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/DefaultObjectHandler.java 2008-12-02 19:25:08 UTC (rev 1052) @@ -521,7 +521,7 @@ try { init(); } catch (IntrospectionException e) { - throw new RuntimeException(e); + throw new CompilerException(e); } CompiledObject object = objectMap.get(tag); if (object == null) { Modified: lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/junit/ClassDescriptorTest.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/junit/ClassDescriptorTest.java 2008-12-02 01:07:51 UTC (rev 1051) +++ lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/junit/ClassDescriptorTest.java 2008-12-02 19:25:08 UTC (rev 1052) @@ -3,37 +3,45 @@ import jaxx.reflect.ClassDescriptor; import jaxx.reflect.ClassDescriptorLoader; import jaxx.reflect.MethodDescriptor; -import org.junit.Assert; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import org.junit.Test; public class ClassDescriptorTest { @Test + public void testGetClassDescriptor() throws Exception { + ClassDescriptor object = ClassDescriptorLoader.getClassDescriptor("jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode"); + + + } + + @Test public void testBuiltInClassName() throws ClassNotFoundException, NoSuchMethodException { ClassDescriptor object = ClassDescriptorLoader.getClassDescriptor("java.lang.Object"); MethodDescriptor toString = object.getMethodDescriptor("toString", new ClassDescriptor[0]); - Assert.assertEquals(toString.getName(), "toString"); - Assert.assertEquals(toString.getParameterTypes().length, 0); + assertEquals(toString.getName(), "toString"); + assertEquals(toString.getParameterTypes().length, 0); MethodDescriptor equals = object.getMethodDescriptor("equals", new ClassDescriptor[]{object}); - Assert.assertEquals(equals.getName(), "equals"); - Assert.assertEquals(equals.getParameterTypes().length, 1); - Assert.assertEquals(equals.getParameterTypes()[0], object); + assertEquals(equals.getName(), "equals"); + assertEquals(equals.getParameterTypes().length, 1); + assertEquals(equals.getParameterTypes()[0], object); } @Test public void testBuiltInClass() throws ClassNotFoundException, NoSuchMethodException { ClassDescriptor object1 = ClassDescriptorLoader.getClassDescriptor("java.lang.Object"); ClassDescriptor object2 = ClassDescriptorLoader.getClassDescriptor(Object.class); - Assert.assertEquals(object1, object2); + assertEquals(object1, object2); } @Test public void testUserClassName() throws ClassNotFoundException, NoSuchMethodException { ClassDescriptor me = ClassDescriptorLoader.getClassDescriptor("jaxx.junit.ClassDescriptorTest", getClass().getClassLoader()); MethodDescriptor testUserClassName = me.getMethodDescriptor("testUserClassName", new ClassDescriptor[0]); - Assert.assertEquals(testUserClassName.getName(), "testUserClassName"); - Assert.assertEquals(testUserClassName.getParameterTypes().length, 0); + assertEquals(testUserClassName.getName(), "testUserClassName"); + assertEquals(testUserClassName.getParameterTypes().length, 0); } @Test(expected = ClassNotFoundException.class) @@ -50,8 +58,8 @@ @Test public void testArrays() throws ClassNotFoundException { ClassDescriptor intArray = ClassDescriptorLoader.getClassDescriptor(int[].class); - Assert.assertNotNull(intArray); + assertNotNull(intArray); ClassDescriptor objectArray = ClassDescriptorLoader.getClassDescriptor(Object[].class); - Assert.assertNotNull(objectArray); + assertNotNull(objectArray); } } \ No newline at end of file
participants (1)
-
tchemit@users.labs.libre-entreprise.org