Show URI parsing exceptions below URI text field (fixes #5055, #5003, #4587)
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / NumberWithLabelElement.java
index eab43db6772d2cbfd646e48ef84aa47a030f5540..72cc267f39235518d477ffa8715b0502f82a9744 100644 (file)
@@ -1,21 +1,20 @@
 // $Id$
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy 
+* European Distributed Institute of Taxonomy
 * http://www.e-taxonomy.eu
-* 
+*
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 package eu.etaxonomy.taxeditor.ui.element;
 
+import org.apache.commons.lang.StringUtils;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.widgets.Display;
 
-import eu.etaxonomy.cdm.common.CdmUtils;
-
 
 /**
  * <p>NumberWithLabelElement class.</p>
@@ -28,7 +27,7 @@ public class NumberWithLabelElement extends TextWithLabelElement {
 
        private Float start;
        private Float end;
-       
+
        private NumberFormatException exception;
 
        /**
@@ -37,77 +36,77 @@ public class NumberWithLabelElement extends TextWithLabelElement {
         * @param toolkit a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
         * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
         * @param labelString a {@link java.lang.String} object.
-        * @param initialInteger a {@link java.lang.Integer} object.
-        * @param style a int.
-        */
-       public NumberWithLabelElement(CdmFormFactory toolkit,
-                       ICdmFormElement parentElement, String labelString,
-                       Integer initialInteger, int style) {
-               super(toolkit, parentElement, labelString, null, null, style);
-               setInteger(initialInteger);
-       }
-       
-       /**
-        * <p>Constructor for NumberWithLabelElement.</p>
-        *
-        * @param toolkit a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
-        * @param parentElement a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement} object.
-        * @param labelString a {@link java.lang.String} object.
-        * @param initialFloat a {@link java.lang.Float} object.
+        * @param initialNumber a {@link java.lang.Number} object.
         * @param style a int.
         */
        public NumberWithLabelElement(CdmFormFactory toolkit,
                        ICdmFormElement parentElement, String labelString,
-                       Float initialFloat, int style) {
+                       Number initialNumber, int style) {
                super(toolkit, parentElement, labelString, null, null, style);
-               setFloat(initialFloat);
+               setNumber(initialNumber);
        }
-       
+
+
        /**
-        * <p>setInteger</p>
+        * <p>setNumber</p>
         *
-        * @param number a {@link java.lang.Integer} object.
+        * @param number a {@link java.lang.Number} object.
         */
-       public void setInteger(Integer number) {
+       public void setNumber(Number number) {
                super.setText(getStringRepresentation(number));
        }
-       
+
        /**
-        * <p>setFloat</p>
-        *
-        * @param number a {@link java.lang.Float} object.
+        * Get the value of this field as an {@link Integer}.
+        * @return the Integer value or null if {@link NumberFormatException} occurs.
         */
-       public void setFloat(Float number) {
-               super.setText(getStringRepresentation(number));
+       public Integer getInteger() {
+           if(super.getText()!=null){
+               String text = super.getText().trim();
+               try {
+                   return StringUtils.isBlank(text) ? 0 : new Integer(text);
+               } catch (NumberFormatException e) {
+                   exception = e;
+               }
+           }
+               return null;
        }
-       
+
        /**
-        * <p>getInteger</p>
-        *
-        * @return a {@link java.lang.Integer} object.
+        * Get the value of this field as a {@link Float}.
+        * @return the Float value or null if {@link NumberFormatException} occurs.
         */
-       public Integer getInteger() {
-               String text = super.getText().trim();
-               return text.equals("") ? 0 : new Integer(text);
+       public Float getFloat(){
+           String text = super.getText();
+           try {
+               return StringUtils.isBlank(text) ? 0 : new Float(text);
+           } catch (NumberFormatException e) {
+               exception = e;
+           }
+           return null;
        }
-       
+
        /**
-        * <p>getFloat</p>
-        *
-        * @return a {@link java.lang.Float} object.
+        * Get the value of this field as an {@link Double}.
+        * @return the Double value or null if {@link NumberFormatException} occurs.
         */
-       public Float getFloat(){
-               String text = super.getText();
-               return new Float(text);
+       public Double getDouble(){
+           String text = super.getText();
+           try {
+               return new Double(text);
+           } catch (NumberFormatException e) {
+               exception = e;
+           }
+           return null;
        }
-       
+
        private String getStringRepresentation(Object number){
                if(number != null){
                        return number.toString();
-               }               
+               }
                return null;
        }
-       
+
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
         */
@@ -115,31 +114,34 @@ public class NumberWithLabelElement extends TextWithLabelElement {
        @Override
        public void modifyText(ModifyEvent event) {
                String value = text.getText();
-               if(CdmUtils.isEmpty(value)){
+               if(StringUtils.isBlank(value)){
                        text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
+                       super.modifyText(event);
                        return;
                }
-               
+
                try{
-                       
-                       Float number = Float.parseFloat(value);
-                       
+
+                       Float number = Float.parseFloat(value);
+
                        if((start != null && number < start) || (end != null && number > end)){
-                               throw new NumberFormatException("You entered a number that is not within the allowed bounds.");
+                               exception = new NumberFormatException("You entered a number that is not within the allowed bounds.");
+                               throw exception;
                        }
-                       
+
                }catch(NumberFormatException e){
                        text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
-                       firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
+                       firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
+                       exception = e;
                        return;
                }
-               
+
                exception = null;
                text.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
-               
+
                super.modifyText(event);
        }
-       
+
        /**
         * <p>setLimits</p>
         *
@@ -150,7 +152,7 @@ public class NumberWithLabelElement extends TextWithLabelElement {
        public void setLimits(int numberOfDigits, Integer start, Integer end){
                setLimits(numberOfDigits, start.floatValue(), end.floatValue());
        }
-       
+
        /**
         * <p>setLimits</p>
         *
@@ -163,7 +165,7 @@ public class NumberWithLabelElement extends TextWithLabelElement {
                this.start = start;
                this.end = end;
        }
-       
+
        /**
         * <p>Getter for the field <code>exception</code>.</p>
         *