Files
.externalToolBuilders
config
source
cpp
java
org
alfresco
email
filesys
jcr
linkvalidation
model
repo
action
admin
attributes
audit
avm
cache
clt
coci
config
configuration
content
copy
deploy
descriptor
dictionary
constraint
AbstractConstraint.java
AuthorityNameConstraint.java
ConstraintsTest.java
ListOfValuesConstraint.java
NumericRangeConstraint.java
RegexConstraint.java
StringLengthConstraint.java
UserNameConstraint.java
CompiledModel.java
DelegateModelQuery.java
DictionaryBootstrap.java
DictionaryComponent.java
DictionaryDAO.java
DictionaryDAOImpl.java
DictionaryDAOTest.java
DictionaryDeployer.java
DictionaryModelType.java
DictionaryModelTypeTest.java
DictionaryNamespaceComponent.java
DictionaryRepositoryBootstrap.java
DictionaryRepositoryBootstrapTest.java
DiffModelTest.java
M2AnonymousTypeDefinition.java
M2Aspect.java
M2AspectDefinition.java
M2Association.java
M2AssociationDefinition.java
M2ChildAssociation.java
M2ChildAssociationDefinition.java
M2Class.java
M2ClassAssociation.java
M2ClassDefinition.java
M2Constraint.java
M2ConstraintDefinition.java
M2DataType.java
M2DataTypeDefinition.java
M2Label.java
M2Model.java
M2ModelDefinition.java
M2ModelDiff.java
M2NamedValue.java
M2Namespace.java
M2NamespaceDefinition.java
M2Property.java
M2PropertyDefinition.java
M2PropertyOverride.java
M2Type.java
M2TypeDefinition.java
M2XML.java
ModelQuery.java
NamespaceDAO.java
NamespaceDAOImpl.java
RepositoryLocation.java
TestModel.java
dictionarydaotest_model.properties
dictionarydaotest_model.xml
m2binding.xml
domain
exporter
forum
i18n
importer
jscript
lock
model
module
node
ownable
policy
processor
remote
rule
search
security
service
simple
template
tenant
transaction
version
workflow
sandbox
service
tools
util
apache
queryRegister.dtd
meta-inf
test-resources
web
.classpath
.project
build.xml
alfresco-community-repo/source/java/org/alfresco/repo/dictionary/constraint/NumericRangeConstraint.java
Derek Hulley 9b1f563ebf Merged V2.1 to HEAD
6295, 6296: EHCache patch on 1.3.0 and related classpath fixes
   6300: WCM-509 - Usernames with '@'
   6301: FacesHelper.makeLegalId()
   6302: Portlet fixes to remove hardcoded "Company Home" string
   6305: Fix for AWC-1440 - Potential NullPointerException in workflow history
   6306: Fix to error message when incorrect parameters are passed to number range constraint


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6718 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
2007-09-10 12:33:37 +00:00

140 lines
4.9 KiB
Java

/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.repo.dictionary.constraint;
import org.alfresco.service.cmr.dictionary.ConstraintException;
import org.alfresco.service.cmr.dictionary.DictionaryException;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
/**
* Constraint implementation that ensures that the value is a numeric value bewteen a given
* minimum and maximum value. If a minimum or maximum value are not provided, then the JAVA
* Double's {@link Double#MIN_VALUE minimum value} or {@link Double#MAX_VALUE maximum value}
* are assumed.
*
* @see #setMinValue(double)
* @see #setMaxValue(double)
* @see java.lang.Double#parseDouble(java.lang.String)
*
* @author Derek Hulley
*/
public class NumericRangeConstraint extends AbstractConstraint
{
private static final String ERR_INVALID_MIN_VALUE = "d_dictionary.constraint.numeric_range.invalid_min_value";
private static final String ERR_INVALID_MAX_VALUE = "d_dictionary.constraint.numeric_range.invalid_max_value";
private static final String ERR_NON_NUMERIC = "d_dictionary.constraint.numeric_range.non_numeric";
private static final String ERR_OUT_OF_RANGE = "d_dictionary.constraint.numeric_range.out_of_range";
private double minValue = Double.MIN_VALUE;
private double maxValue = Double.MAX_VALUE;
@Override
public String toString()
{
StringBuilder sb = new StringBuilder(80);
sb.append("NumericRangeConstraint")
.append("[ minValue=").append(minValue)
.append(", maxValue=").append(maxValue)
.append("]");
return sb.toString();
}
/**
* @return Returns the minimum value allowed by the constraint
*/
public double getMinValue()
{
return minValue;
}
/**
* Set the minimum value allowed, which can be any value between
* {@link Double#MIN_VALUE} and {@link Double#MAX_VALUE}.
*
* @param minValue the minimum value allowed by the constraint
*/
public void setMinValue(double minValue)
{
if (minValue > this.maxValue)
{
throw new DictionaryException(ERR_INVALID_MIN_VALUE, minValue);
}
this.minValue = minValue;
}
/**
* @return Returns the minimum value allowed by the constraint
*/
public double getMaxValue()
{
return maxValue;
}
/**
* Set the maximum value allowed, which can be any value between
* {@link Double#MIN_VALUE} and {@link Double#MAX_VALUE}.
*
* @param maxValue the minimum value allowed by the constraint
*/
public void setMaxValue(double maxValue)
{
if (maxValue < this.minValue)
{
throw new DictionaryException(ERR_INVALID_MAX_VALUE, maxValue);
}
this.maxValue = maxValue;
}
public void initialize()
{
}
protected void evaluateSingleValue(Object value)
{
// ensure that the value can be converted to a double
double checkValue = Double.NaN;
try
{
checkValue = DefaultTypeConverter.INSTANCE.doubleValue(value);
}
catch (NumberFormatException e)
{
throw new ConstraintException(ERR_NON_NUMERIC, value);
}
// Infinity and NaN cannot match
if (Double.isInfinite(checkValue) || Double.isNaN(checkValue))
{
throw new ConstraintException(ERR_OUT_OF_RANGE, checkValue, minValue, maxValue);
}
// Check that the value is in range
if (checkValue > maxValue || checkValue < minValue)
{
throw new ConstraintException(ERR_OUT_OF_RANGE, checkValue, minValue, maxValue);
}
}
}