Coverage Report - pt.digitalis.dif.dem.objects.parameters.types.DoubleParameter
 
Classes in this File Line Coverage Branch Coverage Complexity
DoubleParameter
0%
0/31
0%
0/16
1,889
DoubleParameter$1
0%
0/3
N/A
1,889
 
 1  0
 /**
 2  
  * 2007, Digitalis Informatica. All rights reserved. Distribuicao e Gestao de Informatica, Lda. Estrada de Paco de Arcos
 3  
  * num.9 - Piso -1 2780-666 Paco de Arcos Telefone: (351) 21 4408990 Fax: (351) 21 4408999 http://www.digitalis.pt
 4  
  */
 5  
 package pt.digitalis.dif.dem.objects.parameters.types;
 6  
 
 7  
 import java.math.BigDecimal;
 8  
 import java.util.ArrayList;
 9  
 import java.util.Date;
 10  
 import java.util.List;
 11  
 
 12  
 import pt.digitalis.dif.controller.interfaces.IDIFContext;
 13  
 import pt.digitalis.dif.dem.interfaces.IStageInstance;
 14  
 import pt.digitalis.dif.dem.objects.parameters.constraints.IParameterConstraint;
 15  
 import pt.digitalis.dif.dem.objects.parameters.errors.ParameterError;
 16  
 import pt.digitalis.dif.dem.objects.parameters.errors.ParameterErrorList;
 17  
 import pt.digitalis.dif.dem.objects.parameters.errors.ParameterErrorType;
 18  
 import pt.digitalis.dif.exception.objects.ParameterException;
 19  
 import pt.digitalis.dif.startup.DIFGeneralConfigurationParameters;
 20  
 
 21  
 /**
 22  
  * This class will define a numeric Parameter.
 23  
  * <p>
 24  
  * It will hold information relative to the Parameter value, ID key and validation constraints.
 25  
  * 
 26  
  * @author Pedro Viegas <a href="mailto:pviegas@digitalis.pt">pviegas@digitalis.pt</a>
 27  
  * @author Rodrigo Gonçalves <a href="mailto:rgoncalves@digitalis.pt">rgoncalves@digitalis.pt</a>
 28  
  * @created Nov 23, 2007
 29  
  */
 30  0
 public class DoubleParameter extends AbstractParameter<Number> {
 31  
 
 32  
     /** The list of supported classes to define in the concrete implementations */
 33  
     @SuppressWarnings("serial")
 34  0
     final static private List<String> supportedClasses = new ArrayList<String>() {
 35  
 
 36  
         {
 37  0
             add(Double.class.getCanonicalName());
 38  
         }
 39  
     };
 40  
 
 41  
     /**
 42  
      * @see pt.digitalis.dif.dem.objects.parameters.types.AbstractParameter#automaticConstraints()
 43  
      */
 44  
     @Override
 45  
     protected String automaticConstraints()
 46  
     {
 47  0
         return "numeric";
 48  
     }
 49  
 
 50  
     /**
 51  
      * @see pt.digitalis.dif.dem.objects.parameters.IParameter#getSupportedClasses()
 52  
      */
 53  
     public List<String> getSupportedClasses()
 54  
     {
 55  0
         return supportedClasses;
 56  
     }
 57  
 
 58  
     /**
 59  
      * @see pt.digitalis.dif.dem.objects.parameters.IParameter#getValueAsBigDecimal(pt.digitalis.dif.controller.interfaces.IDIFContext)
 60  
      */
 61  
     public BigDecimal getValueAsBigDecimal(IDIFContext context) throws ParameterException
 62  
     {
 63  0
         return BigDecimal.valueOf(getValue(context).doubleValue());
 64  
     }
 65  
 
 66  
     /**
 67  
      * @see pt.digitalis.dif.dem.objects.parameters.IParameter#getValueAsBoolean(IDIFContext)
 68  
      */
 69  
     public boolean getValueAsBoolean(IDIFContext context) throws ParameterException
 70  
     {
 71  0
         return (getValue(context).doubleValue() != 0D);
 72  
     }
 73  
 
 74  
     /**
 75  
      * @see pt.digitalis.dif.dem.objects.parameters.IParameter#getValueAsDate(IDIFContext)
 76  
      */
 77  
     public Date getValueAsDate(IDIFContext context)
 78  
     {
 79  0
         return null;
 80  
     }
 81  
 
 82  
     /**
 83  
      * @see pt.digitalis.dif.dem.objects.parameters.IParameter#getValueAsDouble(IDIFContext)
 84  
      */
 85  
     public Double getValueAsDouble(IDIFContext context) throws ParameterException
 86  
     {
 87  0
         return getValue(context).doubleValue();
 88  
     }
 89  
 
 90  
     /**
 91  
      * @see pt.digitalis.dif.dem.objects.parameters.IParameter#getValueAsLong(IDIFContext)
 92  
      */
 93  
     public Long getValueAsLong(IDIFContext context) throws ParameterException
 94  
     {
 95  0
         return getValue(context).longValue();
 96  
     }
 97  
 
 98  
     /**
 99  
      * @see pt.digitalis.dif.dem.objects.parameters.IParameter#isNumeric()
 100  
      */
 101  
     public boolean isNumeric()
 102  
     {
 103  0
         return true;
 104  
     }
 105  
 
 106  
     /**
 107  
      * @see pt.digitalis.dif.dem.objects.parameters.IParameter#setValueFromString(java.lang.String,
 108  
      *      pt.digitalis.dif.dem.interfaces.IStageInstance, boolean)
 109  
      */
 110  
     public ParameterErrorList setValueFromString(String value, IStageInstance stageInstance,
 111  
             boolean initializationInProgress)
 112  
     {
 113  
 
 114  0
         ParameterErrorList list = new ParameterErrorList(this, value);
 115  
         ParameterError error;
 116  
         // TODO: Create a floating point constraint. This will not pick up the floating point errors
 117  0
         IParameterConstraint constraint = getConstraints().get("numeric");
 118  
         IDIFContext context;
 119  
 
 120  0
         if (stageInstance == null)
 121  0
             context = null;
 122  
         else
 123  0
             context = stageInstance.getContext();
 124  
 
 125  
         // If the numeric constraint does not validate...
 126  0
         if (!constraint.validateConstraint(value, stageInstance))
 127  
         {
 128  
             String language;
 129  
 
 130  0
             if (context == null)
 131  0
                 language = DIFGeneralConfigurationParameters.getInstance().getDefaultLanguage();
 132  
             else
 133  0
                 language = context.getLanguage();
 134  
 
 135  0
             error = new ParameterError(constraint.validationErrorMessage(language), ParameterErrorType.CONSTRAINT);
 136  0
             error.setConstraint("numeric", constraint);
 137  
 
 138  0
             list.addError(error);
 139  
         }
 140  
         else
 141  
         {
 142  
             try
 143  
             {
 144  0
                 if (value == null || "".equals(value))
 145  0
                     return setValue(null, stageInstance, initializationInProgress);
 146  
                 else
 147  
                 {
 148  0
                     value = value.replace(',', '.').trim();
 149  
 
 150  0
                     return setValue(Double.valueOf(value), stageInstance, initializationInProgress);
 151  
                 }
 152  
             }
 153  0
             catch (Exception e)
 154  
             {
 155  
                 /*
 156  
                  * Unreachable exception: to get here Double#parseDouble() would have to throw a NumberFormatException.
 157  
                  * This exception is raised if the string does not contain a parsable double. This would happen if a bad
 158  
                  * value is passed. This situation is avoided by the constraint validation mechanism. So if a bad value
 159  
                  * is passed the code never enters the 'else' branch and as such is never possible to get here.
 160  
                  */
 161  0
                 error = new ParameterError("Error parsing value", ParameterErrorType.OTHER);
 162  0
                 error.setException(e);
 163  0
                 list.addError(error);
 164  
             }
 165  
         }
 166  0
         return list;
 167  
     }
 168  
 }