Skip to content

Commit

Permalink
support disableRounding (claeis/ilivalidator#125)
Browse files Browse the repository at this point in the history
  • Loading branch information
claeis committed Aug 29, 2018
1 parent cc366b3 commit a91b69d
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 8 deletions.
1 change: 1 addition & 0 deletions doc/CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ LATEST
-----------------------------
- add PipelinePool to Settings so that custom functions can use it
- Validator: fixed validation of number of reference properties
- Validator: disableRounding=true/false

iox-ili 1.20.8 (2018-08-13)
-----------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public class ValidationConfig implements ch.interlis.iox.IoxValidationConfig {
public static final String ADDITIONAL_MODELS="additionalModels";
public static final String ALLOW_ONLY_MULTIPLICITY_REDUCTION="allowOnlyMultiplicityReduction";
public static final String ALL_OBJECTS_ACCESSIBLE="allObjectsAccessible";
public static final String DISABLE_ROUNDING="disableRounding";
// PipelinePool
public static final String TOPOLOGY_VALIDATION_OK="topologyValidationOk";
public void mergeIliMetaAttrs(TransferDescription td){
Expand Down
28 changes: 20 additions & 8 deletions src/main/java/ch/interlis/iox_j/validator/Validator.java
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,10 @@ public Validator(TransferDescription td, IoxValidationConfig validationConfig,
if(!allObjectsAccessible){
errs.addEvent(errFact.logInfoMsg("assume unknown/external objects"));
}
disableRounding=ValidationConfig.TRUE.equals(validationConfig.getConfigValue(ValidationConfig.PARAMETER, ValidationConfig.DISABLE_ROUNDING));
if(disableRounding){
errs.addEvent(errFact.logInfoMsg("disable rounding"));
}
boolean allowOnlyRelaxedMultiplicity=ValidationConfig.ON.equals(validationConfig.getConfigValue(ValidationConfig.PARAMETER,ValidationConfig.ALLOW_ONLY_MULTIPLICITY_REDUCTION));
if(allowOnlyRelaxedMultiplicity){
errs.addEvent(errFact.logInfoMsg("only multiplicity validation relaxable"));
Expand Down Expand Up @@ -2340,6 +2344,7 @@ private boolean equalsCoordValue(IomObject iomObj, CoordType coordType, IomObjec
// List of all object Oid's and associated classPath's of uniqueness validate of Oid's.
Map<String , String> uniqueObjectIDs = new HashMap<String, String>();
HashSet<Object> loggedObjects=new HashSet<Object>();
private boolean disableRounding=false;

private void validateObject(IomObject iomObj,String attrPath) throws IoxException {
// validate if object is null
Expand Down Expand Up @@ -3332,7 +3337,11 @@ private String validateNumericType(String validateType, NumericType type, String
BigDecimal max_general = new BigDecimal(maximum.toString());
BigDecimal valueBigDec = new BigDecimal(value.toString());
int precision= minimum.getAccuracy();
rounded=roundNumeric(precision,valueStr);
if(disableRounding) {
rounded=valueBigDec;
}else {
rounded=roundNumeric(precision,valueBigDec);
}
if (rounded!=null && (rounded.compareTo(min_general)==-1 || rounded.compareTo(max_general)==+1)){
logMsg(validateType,"value {0} is out of range", rounded.toString());
}
Expand All @@ -3354,13 +3363,16 @@ private boolean isAKeyword(String valueStr) {
}

public static BigDecimal roundNumeric(int precision, String valueStr) {
if(valueStr==null) {
return null;
}
double valueDouble=Double.valueOf(valueStr);
boolean isNegative=valueDouble<0;

BigDecimal value=new BigDecimal(valueStr);
if(valueStr==null) {
return null;
}
return roundNumeric(precision, new BigDecimal(valueStr));
}
public static BigDecimal roundNumeric(int precision, BigDecimal value) {
if(value==null) {
return null;
}
boolean isNegative=value.signum()==-1;
BigDecimal rounded=null;
if(value!=null) {
if(isNegative){
Expand Down

0 comments on commit a91b69d

Please sign in to comment.