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>
+