r1656 - in branches/jaxx-2.X: jaxx-demo jaxx-runtime jaxx-swing-action jaxx-widgets jaxx-widgets/src/main/java/jaxx/runtime/swing/editor maven-jaxx-plugin
Author: tchemit Date: 2009-11-26 21:05:15 +0100 (Thu, 26 Nov 2009) New Revision: 1656 Added: branches/jaxx-2.X/maven-jaxx-plugin/maven-jaxx-plugin.iml Modified: branches/jaxx-2.X/jaxx-demo/ branches/jaxx-2.X/jaxx-runtime/ branches/jaxx-2.X/jaxx-swing-action/ branches/jaxx-2.X/jaxx-widgets/ branches/jaxx-2.X/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx branches/jaxx-2.X/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java branches/jaxx-2.X/maven-jaxx-plugin/ Log: amelioration de l'?\195?\169diteur de nombre : - on peut specifier le type du nombre a editer (modelType) - on g?\195?\168re plus de type de Nombre (Integer,Float,Double,BigInteger,BigDecimal) - Qui enl?\195?\168ve les svn:ignore ??? Property changes on: branches/jaxx-2.X/jaxx-demo ___________________________________________________________________ Modified: svn:ignore - target *.iml + target *.iml *.ipr *.iws Property changes on: branches/jaxx-2.X/jaxx-runtime ___________________________________________________________________ Modified: svn:ignore - target *.log *.iml + target *.log *.iml *.ipr *.iws Property changes on: branches/jaxx-2.X/jaxx-swing-action ___________________________________________________________________ Modified: svn:ignore - target *.iml + target *.iml *.ipr *.iws Property changes on: branches/jaxx-2.X/jaxx-widgets ___________________________________________________________________ Modified: svn:ignore - velocity.log target nbactions.xml nbproject *.iml + velocity.log target nbactions.xml nbproject *.iml *.ipr *.iws Modified: branches/jaxx-2.X/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx =================================================================== --- branches/jaxx-2.X/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx 2009-11-26 20:03:21 UTC (rev 1655) +++ branches/jaxx-2.X/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx 2009-11-26 20:05:15 UTC (rev 1656) @@ -37,6 +37,9 @@ <!-- editor model --> <Number id="model" javaBean='null'/> + <!-- editor model type (specify it when you want to use a special type other than Integer or Float)--> + <Class id="modelType" javaBean='null'/> + <!-- useFloat property --> <Boolean id='useFloat' javaBean='false'/> Modified: branches/jaxx-2.X/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java =================================================================== --- branches/jaxx-2.X/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java 2009-11-26 20:03:21 UTC (rev 1655) +++ branches/jaxx-2.X/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java 2009-11-26 20:05:15 UTC (rev 1656) @@ -20,23 +20,25 @@ */ package jaxx.runtime.swing.editor; -import java.awt.Dimension; -import java.lang.reflect.InvocationTargetException; -import javax.swing.JTextField; +import static jaxx.runtime.swing.editor.NumberEditor.PROPERTY_MODEL; +import static jaxx.runtime.swing.editor.NumberEditor.PROPERTY_POPUP_VISIBLE; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.SwingUtilities; +import javax.swing.*; import javax.swing.text.BadLocationException; +import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyDescriptor; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import javax.swing.JToggleButton; +import java.math.BigDecimal; +import java.math.BigInteger; /** * Le handler de l'éditeur graphique de nombres. @@ -47,36 +49,43 @@ * @see NumberEditor */ public class NumberEditorHandler { - + /** + * Logger + */ public static final Log log = LogFactory.getLog(NumberEditorHandler.class); - public static final String BEAN_PROPERTY = "bean"; - public static final String PROPERTY_PROPERTY = "property"; - public static final String MODEL_PROPERTY = "model"; - public static final String AUTO_POPUP_PROPERTY = "autoPopup"; - public static final String POPUP_VISIBLE_PROPERTY = "popupVisible"; -// public static final String USE_FLOAT_PROPERTY = "useFloat"; - public static final String USE_SIGN_PROPERTY = "useSign"; public static final String VALIDATE_PROPERTY = "validate"; - /** editor ui */ + /** + * editor ui + */ protected NumberEditor editor; - /** the mutator method on the property of boxed bean in the editor */ + /** + * the mutator method on the property of boxed bean in the editor + */ protected Method mutator; - /** the getter method on the property */ + /** + * the getter method on the property + */ protected Method getter; - /** a flag to known if mutator accept null value */ + /** + * a flag to known if mutator accept null value + */ protected Boolean acceptNull; + protected Class<?> modelType; + public NumberEditorHandler(NumberEditor ui) { this.editor = ui; } - /** initialise l'ui et les listeners d'évènements. */ + /** + * initialise l'ui et les listeners d'évènements. + */ public void init() { try { if (editor.getBean() == null) { throw new NullPointerException("can not have a null bean in ui " + editor); } - editor.addPropertyChangeListener(MODEL_PROPERTY, new PropertyChangeListener() { + editor.addPropertyChangeListener(PROPERTY_MODEL, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { @@ -86,7 +95,7 @@ setModel((Number) evt.getOldValue(), (Number) evt.getNewValue()); } }); - editor.addPropertyChangeListener(POPUP_VISIBLE_PROPERTY, new PropertyChangeListener() { + editor.addPropertyChangeListener(PROPERTY_POPUP_VISIBLE, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { @@ -94,18 +103,25 @@ } }); editor.getTextField().addMouseListener(new PopupListener()); - + // Determine si c'est un float Class<?> type = getGetter().getReturnType(); + if (editor.getModelType() != null) { + type = editor.getModelType(); + } + modelType = type; + if (log.isDebugEnabled()) { + log.debug("model type to use = " + modelType); + } //FIXME le test n'est pas assez fort (on peut avoir un long, short,...) editor.setUseFloat(!type.equals(Integer.class) && !type.equals(int.class)); // Initialise le model - if (editor.getModel() == null){ - Number num = (Number)getGetter().invoke(editor.getBean()); + if (editor.getModel() == null) { + Number num = (Number) getGetter().invoke(editor.getBean()); editor.setModel(num); } - + /*if (editor.getResetButton().getIcon() == null) { editor.getResetButton().setIcon(SwingUtil.createActionIcon("numbereditor-reset")); } @@ -118,7 +134,7 @@ log.error(ex); } catch (InvocationTargetException ex) { log.error(ex); - } + } } /** @@ -150,7 +166,7 @@ /** * Modifie le modèle de la donnée à éditer à partir d'un evenement clavier - * + * <p/> * TODO utiliser une filtre sur les donnes en entrees pour ne pas a avoir * faire les tests ici. * @@ -205,11 +221,16 @@ } } else { // ok on peut utilise ce modele - if (editor.isUseFloat()) { - newValue = f; - } else { - newValue = f.intValue(); - } + newValue = getRealValue(f); +// if (editor.isUseFloat()) { +// if (getMutator().getParameterTypes()[0] == BigDecimal.class) { +// newValue = BigDecimal.valueOf(f); +// } else { +// newValue = f; +// } +// } else { +// newValue = f.intValue(); +// } canApply = true; } } @@ -227,7 +248,7 @@ if (log.isDebugEnabled()) { log.debug("can apply new model value : " + newValue); } - if (isLess){ + if (isLess) { editor.setModelText("-"); return; } @@ -254,11 +275,37 @@ try { field.setCaretPosition(oldPosition); } - catch(IllegalArgumentException ex){ + catch (IllegalArgumentException ex) { log.debug("CaretPosition is invalid for position : " + oldPosition, ex); } } + private Number getRealValue(Float f) { + if (modelType == Integer.class) { + return f.intValue(); + } + if (modelType == Float.class) { + return f; + } + if (modelType == Double.class) { + return f.doubleValue(); + } + if (modelType == Long.class) { + return f.longValue(); + } + if (modelType == BigInteger.class) { + return BigInteger.valueOf(f.longValue()); + } + if (modelType == BigDecimal.class) { + return BigDecimal.valueOf(f.doubleValue()); + } + if (editor.isUseFloat()) { + // use default float value + return f; + } + return f.intValue(); + } + /** * Ajoute le caractère donné à l'endroit où est le curseur dans la zone de * saisie et met à jour le modèle. @@ -321,7 +368,9 @@ } } - /** @return l'éditeur au quel est rattaché le handler. */ + /** + * @return l'éditeur au quel est rattaché le handler. + */ public NumberEditor getEditor() { return editor; } @@ -336,18 +385,30 @@ } try { + Method mutator = getMutator(); if (newValue == null && !getAcceptNull()) { // valeur nulle sur une propriete primitive // on ne peut pas utiliser la valeur null, mais 0 à la place - if (editor.isUseFloat()) { - getMutator().invoke(editor.getBean(), 0.0f); - } else { - getMutator().invoke(editor.getBean(), 0); - } + newValue = getRealValue(0.0f); +// if (editor.isUseFloat()) { +// if (log.isInfoEnabled()) { +// log.info("use float, check mutator default type = " + mutator.getParameterTypes()[0]); +// } +// if (mutator.getParameterTypes()[0] == BigDecimal.class) { +// newValue = BigDecimal.valueOf(0); +// } else { +// newValue = 0.0f; +//// mutator.invoke(editor.getBean(), 0.0f); +// } +// } else { +// newValue = 0; +//// mutator.invoke(editor.getBean(), 0); +// } - } else { - getMutator().invoke(editor.getBean(), newValue); - } + } //else { +// mutator.invoke(editor.getBean(), newValue); +// } + mutator.invoke(editor.getBean(), newValue); String strValue; if (newValue == null) { strValue = ""; @@ -420,7 +481,15 @@ if (property == null) { throw new NullPointerException("could not find property in " + editor); } - + if (log.isDebugEnabled()) { + log.debug("searching mutator for property " + property + " on bean of type " + bean.getClass()); + } + if (log.isTraceEnabled()) { + PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(bean); + for (PropertyDescriptor p : descriptors) { + log.trace("property discover " + p.getName() + " writer = " + p.getWriteMethod()); + } + } try { PropertyDescriptor descriptor = PropertyUtils.getPropertyDescriptor(bean, property); mutator = descriptor.getWriteMethod(); @@ -441,7 +510,15 @@ if (property == null) { throw new NullPointerException("could not find property in " + editor); } - + if (log.isDebugEnabled()) { + log.debug("searching accessor for property " + property + " on bean of type " + bean.getClass()); + } + if (log.isTraceEnabled()) { + PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(bean); + for (PropertyDescriptor p : descriptors) { + log.trace("property discover " + p.getName() + " reader = " + p.getWriteMethod()); + } + } try { PropertyDescriptor descriptor = PropertyUtils.getPropertyDescriptor(bean, property); getter = descriptor.getReadMethod(); Property changes on: branches/jaxx-2.X/maven-jaxx-plugin ___________________________________________________________________ Modified: svn:ignore - target *.iml + target *.iml *.ipr *.iws Added: branches/jaxx-2.X/maven-jaxx-plugin/maven-jaxx-plugin.iml =================================================================== --- branches/jaxx-2.X/maven-jaxx-plugin/maven-jaxx-plugin.iml (rev 0) +++ branches/jaxx-2.X/maven-jaxx-plugin/maven-jaxx-plugin.iml 2009-11-26 20:05:15 UTC (rev 1656) @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" inherit-compiler-output="false"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/test-java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/plugin" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/resources" isTestSource="true" /> + <excludeFolder url="file://$MODULE_DIR$/target/classes" /> + <excludeFolder url="file://$MODULE_DIR$/target/maven-archiver" /> + <excludeFolder url="file://$MODULE_DIR$/target/plexus-home" /> + <excludeFolder url="file://$MODULE_DIR$/target/surefire-reports" /> + <excludeFolder url="file://$MODULE_DIR$/target/test-classes" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module" module-name="jaxx-runtime" exported="" /> + <orderEntry type="library" exported="" name="Maven: org.nuiton:nuiton-utils:1.1.0" level="project" /> + <orderEntry type="library" exported="" name="Maven: log4j:log4j:1.2.14" level="project" /> + <orderEntry type="library" exported="" name="Maven: commons-logging:commons-logging:1.1.1" level="project" /> + <orderEntry type="library" exported="" name="Maven: commons-primitives:commons-primitives:1.0" level="project" /> + <orderEntry type="library" exported="" name="Maven: commons-collections:commons-collections:3.2.1" level="project" /> + <orderEntry type="library" exported="" name="Maven: commons-beanutils:commons-beanutils:1.8.0" level="project" /> + <orderEntry type="library" exported="" name="Maven: org.nuiton.i18n:nuiton-i18n-api:1.0.0" level="project" /> + <orderEntry type="library" exported="" name="Maven: commons-lang:commons-lang:2.4" level="project" /> + <orderEntry type="library" exported="" name="Maven: javax.help:javahelp:2.0.02" level="project" /> + <orderEntry type="library" exported="" name="Maven: org.swinglabs:jxlayer:3.0.3" level="project" /> + <orderEntry type="library" exported="" name="Maven: commons-jxpath:commons-jxpath:1.3" level="project" /> + <orderEntry type="library" exported="" name="Maven: com.opensymphony:xwork:2.1.3" level="project" /> + <orderEntry type="library" exported="" name="Maven: opensymphony:ognl:2.6.11" level="project" /> + <orderEntry type="module" module-name="jaxx-compiler" exported="" /> + <orderEntry type="module" module-name="jaxx-swing-action" exported="" /> + <orderEntry type="library" exported="" name="Maven: jboss:javassist:3.7.ga" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.maven:maven-plugin-api:2.2.1" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.maven:maven-project:2.2.1" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.maven:maven-settings:2.2.1" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.maven:maven-model:2.2.1" level="project" /> + <orderEntry type="library" exported="" name="Maven: org.codehaus.plexus:plexus-utils:1.5.15" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.codehaus.plexus:plexus-interpolation:1.11" level="project" /> + <orderEntry type="library" exported="" name="Maven: org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.7" level="project" /> + <orderEntry type="library" exported="" name="Maven: classworlds:classworlds:1.1-alpha-2" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.maven:maven-profile:2.2.1" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.maven:maven-artifact-manager:2.2.1" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.maven:maven-repository-metadata:2.2.1" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.maven:maven-artifact:2.2.1" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.maven.wagon:wagon-provider-api:1.0-beta-6" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: backport-util-concurrent:backport-util-concurrent:3.1" level="project" /> + <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.maven:maven-plugin-registry:2.2.1" level="project" /> + <orderEntry type="library" exported="" name="Maven: org.nuiton:maven-helper-plugin:1.1.0" level="project" /> + <orderEntry type="library" exported="" name="Maven: org.apache.velocity:velocity:1.6.2" level="project" /> + <orderEntry type="library" exported="" name="Maven: oro:oro:2.0.8" level="project" /> + <orderEntry type="library" exported="" name="Maven: org.codehaus.plexus:plexus-velocity:1.1.7" level="project" /> + <orderEntry type="library" name="Maven: com.sun:dt:1.6.0_16" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven.shared:maven-verifier:1.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven.plugin-testing:maven-plugin-testing-harness:1.2" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven:maven-core:2.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven:maven-plugin-parameter-documenter:2.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven:maven-error-diagnostics:2.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: commons-cli:commons-cli:1.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven:maven-plugin-descriptor:2.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.codehaus.plexus:plexus-interactivity-api:1.0-alpha-4" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.apache.maven:maven-monitor:2.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.nuiton:maven-helper-plugin:tests:1.1.0" level="project" /> + </component> +</module> +
participants (1)
-
tchemit@users.nuiton.org