refs #200: Create accouting-lib library

https://support.d4science.org/issues/200
Fixing validators

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/accounting/accounting-lib@115249 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Luca Frosini 2015-06-05 16:50:07 +00:00
parent 69911fd78d
commit 9ceb6ccbca
22 changed files with 282 additions and 195 deletions

View File

@ -72,7 +72,7 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
*/ */
protected Map<String, Serializable> resourceSpecificProperties; protected Map<String, Serializable> resourceSpecificProperties;
protected final Map<String, List<FieldValidator<? extends Annotation>>> validation; protected final Map<String, List<FieldValidator>> validation;
protected void initializeValidation() { protected void initializeValidation() {
logger.debug("Initializing Field Validators"); logger.debug("Initializing Field Validators");
@ -84,12 +84,12 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
} catch (Exception e) { } catch (Exception e) {
continue; continue;
} }
List<FieldValidator<? extends Annotation>> fieldValidators = new ArrayList<FieldValidator<? extends Annotation>>(); List<FieldValidator> fieldValidators = new ArrayList<FieldValidator>();
validation.put(keyString, fieldValidators); validation.put(keyString, fieldValidators);
for (Annotation annotation : field.getAnnotations()){ for (Annotation annotation : field.getAnnotations()){
if (annotation.annotationType().isAnnotationPresent(ValidityChecker.class)){ if (annotation.annotationType().isAnnotationPresent(ValidityChecker.class)){
Class<? extends FieldValidator<?>> managedClass = ((ValidityChecker)annotation.annotationType().getAnnotation(ValidityChecker.class)).managed(); Class<? extends FieldValidator> managedClass = ((ValidityChecker)annotation.annotationType().getAnnotation(ValidityChecker.class)).managed();
FieldValidator<?> validator; FieldValidator validator;
try { try {
validator = managedClass.newInstance(); validator = managedClass.newInstance();
} catch (InstantiationException | IllegalAccessException e) { } catch (InstantiationException | IllegalAccessException e) {
@ -104,7 +104,7 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
protected RawUsageRecord(){ protected RawUsageRecord(){
this.resourceSpecificProperties = new HashMap<String, Serializable>(); this.resourceSpecificProperties = new HashMap<String, Serializable>();
this.validation = new HashMap<String, List<FieldValidator<? extends Annotation>>>(); this.validation = new HashMap<String, List<FieldValidator>>();
initializeValidation(); initializeValidation();
this.resourceSpecificProperties.put(ID, UUID.randomUUID().toString()); this.resourceSpecificProperties.put(ID, UUID.randomUUID().toString());
this.resourceSpecificProperties.put(RESOURCE_TYPE, this.getClass().getSimpleName()); this.resourceSpecificProperties.put(RESOURCE_TYPE, this.getClass().getSimpleName());
@ -113,7 +113,7 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
} }
protected RawUsageRecord(Map<String, Serializable> properties) throws InvalidValueException { protected RawUsageRecord(Map<String, Serializable> properties) throws InvalidValueException {
this.validation = new HashMap<String, List<FieldValidator<? extends Annotation>>>(); this.validation = new HashMap<String, List<FieldValidator>>();
initializeValidation(); initializeValidation();
setResourceSpecificProperties(properties); setResourceSpecificProperties(properties);
} }
@ -391,9 +391,9 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
protected Serializable validateField(String key, Serializable serializable) throws InvalidValueException { protected Serializable validateField(String key, Serializable serializable) throws InvalidValueException {
Serializable checkedValue = serializable; Serializable checkedValue = serializable;
List<FieldValidator<? extends Annotation>> fieldValidators = validation.get(key); List<FieldValidator> fieldValidators = validation.get(key);
if(fieldValidators!=null){ if(fieldValidators!=null){
for(FieldValidator<? extends Annotation> fieldValidator : fieldValidators){ for(FieldValidator fieldValidator : fieldValidators){
checkedValue = fieldValidator.validate(checkedValue); checkedValue = fieldValidator.validate(checkedValue);
} }
} }

View File

@ -0,0 +1,16 @@
package org.gcube.accounting.datamodel.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface DeprecatedField {
Class<? extends DeprecationAction> action();
}

View File

@ -0,0 +1,17 @@
/**
*
*/
package org.gcube.accounting.datamodel.annotations;
import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord;
/**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
*/
public interface DeprecationAction {
public Serializable manage(String key, Serializable manage, UsageRecord usageRecord);
}

View File

@ -20,6 +20,6 @@ import org.gcube.accounting.datamodel.validators.FieldValidator;
@Inherited @Inherited
public @interface ValidityChecker { public @interface ValidityChecker {
Class<? extends FieldValidator<?>> managed(); Class<? extends FieldValidator> managed();
} }

View File

@ -7,10 +7,12 @@ import java.util.Calendar;
import org.gcube.accounting.datamodel.RawUsageRecord; import org.gcube.accounting.datamodel.RawUsageRecord;
import org.gcube.accounting.datamodel.SingleUsageRecord; import org.gcube.accounting.datamodel.SingleUsageRecord;
import org.gcube.accounting.datamodel.annotations.DeprecatedField;
import org.gcube.accounting.datamodel.annotations.NotEmpty; import org.gcube.accounting.datamodel.annotations.NotEmpty;
import org.gcube.accounting.datamodel.annotations.Required; import org.gcube.accounting.datamodel.annotations.Required;
import org.gcube.accounting.datamodel.annotations.ValidInteger; import org.gcube.accounting.datamodel.annotations.ValidInteger;
import org.gcube.accounting.datamodel.annotations.ValidLong; import org.gcube.accounting.datamodel.annotations.ValidLong;
import org.gcube.accounting.datamodel.validators.ConvertToOperationResult;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
/** /**
@ -38,8 +40,10 @@ public class JobUsageRecord extends RawUsageRecord implements SingleUsageRecord
public static final String JOB_START_TIME = "jobStartTime"; public static final String JOB_START_TIME = "jobStartTime";
@Required @ValidLong @Required @ValidLong
public static final String JOB_END_TIME = "jobEndTime"; public static final String JOB_END_TIME = "jobEndTime";
@NotEmpty
@DeprecatedField(action=ConvertToOperationResult.class) @NotEmpty //TODO
protected static final String JOB_STATUS = "jobStatus"; protected static final String JOB_STATUS = "jobStatus";
@ValidInteger @ValidInteger
public static final String VMS_USED = "vmsUsed"; public static final String VMS_USED = "vmsUsed";
@ValidLong @ValidLong

View File

@ -5,7 +5,11 @@ package org.gcube.accounting.datamodel.implementations;
import org.gcube.accounting.datamodel.RawUsageRecord; import org.gcube.accounting.datamodel.RawUsageRecord;
import org.gcube.accounting.datamodel.SingleUsageRecord; import org.gcube.accounting.datamodel.SingleUsageRecord;
import org.gcube.accounting.datamodel.annotations.DeprecatedField;
import org.gcube.accounting.datamodel.annotations.NotEmpty; import org.gcube.accounting.datamodel.annotations.NotEmpty;
import org.gcube.accounting.datamodel.annotations.NotEmptyIfNotNull;
import org.gcube.accounting.datamodel.annotations.Required;
import org.gcube.accounting.datamodel.validators.Ignore;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
/** /**
@ -19,24 +23,37 @@ public class PortletUsageRecord extends RawUsageRecord implements SingleUsageRec
*/ */
private static final long serialVersionUID = 8339324883678974869L; private static final long serialVersionUID = 8339324883678974869L;
@NotEmpty @DeprecatedField(action=Ignore.class) @NotEmptyIfNotNull
public static final String USER_ID = "userId"; protected static final String USER_ID = "userId";
@NotEmpty
@Required @NotEmpty
public static final String PORTLET_ID = "portletId";
@Required @NotEmpty
public static final String OPERATION_ID = "operationId"; public static final String OPERATION_ID = "operationId";
// TODO More
public PortletUsageRecord(){ public PortletUsageRecord(){
super(); super();
} }
@Deprecated
public String getUserId() { public String getUserId() {
return (String) this.resourceSpecificProperties.get(USER_ID); return (String) this.resourceSpecificProperties.get(USER_ID);
} }
@Deprecated
public void setUserId(String userId) throws InvalidValueException { public void setUserId(String userId) throws InvalidValueException {
setResourceSpecificProperty(USER_ID, userId); setResourceSpecificProperty(USER_ID, userId);
} }
public String getPortletId() {
return (String) this.resourceSpecificProperties.get(PORTLET_ID);
}
public void setPortletId(String portletId) throws InvalidValueException {
setResourceSpecificProperty(PORTLET_ID, portletId);
}
public String getOperationId() { public String getOperationId() {
return (String) this.resourceSpecificProperties.get(OPERATION_ID); return (String) this.resourceSpecificProperties.get(OPERATION_ID);
} }

View File

@ -5,9 +5,12 @@ package org.gcube.accounting.datamodel.implementations;
import org.gcube.accounting.datamodel.RawUsageRecord; import org.gcube.accounting.datamodel.RawUsageRecord;
import org.gcube.accounting.datamodel.SingleUsageRecord; import org.gcube.accounting.datamodel.SingleUsageRecord;
import org.gcube.accounting.datamodel.annotations.DeprecatedField;
import org.gcube.accounting.datamodel.annotations.NotEmpty; import org.gcube.accounting.datamodel.annotations.NotEmpty;
import org.gcube.accounting.datamodel.annotations.Required;
import org.gcube.accounting.datamodel.annotations.ValidIP; import org.gcube.accounting.datamodel.annotations.ValidIP;
import org.gcube.accounting.datamodel.annotations.ValidInteger; import org.gcube.accounting.datamodel.annotations.ValidInteger;
import org.gcube.accounting.datamodel.validators.Ignore;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
/** /**
@ -23,20 +26,18 @@ public class ServiceUsageRecord extends RawUsageRecord implements SingleUsageRec
@ValidIP @ValidIP
public static final String CALLER_IP = "callerIP"; public static final String CALLER_IP = "callerIP";
@NotEmpty @Required @NotEmpty
public static final String CALLER_SCOPE = "callerScope"; public static final String CALLER_SCOPE = "callerScope";
@NotEmpty @Required @NotEmpty
public static final String REF_HOST = "refHost"; public static final String REF_HOST = "refHost";
@NotEmpty @Required @NotEmpty
public static final String REF_VM = "refVM"; public static final String REF_VM = "refVM";
@NotEmpty @DeprecatedField(action=Ignore.class) @NotEmpty
public static final String DOMAIN = "domain"; public static final String DOMAIN = "domain";
//@Aggregated
@ValidInteger @ValidInteger
public static final String INVOCATION_COUNT = "invocationCount"; protected static final String INVOCATION_COUNT = "invocationCount";
//@Aggregated
@ValidInteger @ValidInteger
public static final String AVERAGE_INVOCATION_COUNT = "averageInvocationTime"; protected static final String AVERAGE_INVOCATION_COUNT = "averageInvocationTime";
@NotEmpty @NotEmpty
public static final String SERVICE_CLASS = "serviceClass"; public static final String SERVICE_CLASS = "serviceClass";
@NotEmpty @NotEmpty
@ -78,11 +79,11 @@ public class ServiceUsageRecord extends RawUsageRecord implements SingleUsageRec
setResourceSpecificProperty(REF_VM, refVM); setResourceSpecificProperty(REF_VM, refVM);
} }
public String getDomain() { protected String getDomain() {
return (String) this.resourceSpecificProperties.get(DOMAIN); return (String) this.resourceSpecificProperties.get(DOMAIN);
} }
public void setDomain(String domain) throws InvalidValueException { protected void setDomain(String domain) throws InvalidValueException {
setResourceSpecificProperty(DOMAIN, domain); setResourceSpecificProperty(DOMAIN, domain);
} }

View File

@ -3,20 +3,21 @@
*/ */
package org.gcube.accounting.datamodel.implementations; package org.gcube.accounting.datamodel.implementations;
import org.gcube.accounting.datamodel.RawUsageRecord;
import org.gcube.accounting.datamodel.SingleUsageRecord; import org.gcube.accounting.datamodel.SingleUsageRecord;
import org.gcube.accounting.datamodel.annotations.NotEmpty; import org.gcube.accounting.datamodel.annotations.NotEmpty;
import org.gcube.accounting.datamodel.annotations.NotEmptyIfNotNull; import org.gcube.accounting.datamodel.annotations.NotEmptyIfNotNull;
import org.gcube.accounting.datamodel.annotations.Required;
import org.gcube.accounting.datamodel.annotations.ValidIP; import org.gcube.accounting.datamodel.annotations.ValidIP;
import org.gcube.accounting.datamodel.annotations.ValidInteger; import org.gcube.accounting.datamodel.annotations.ValidInteger;
import org.gcube.accounting.datamodel.annotations.ValidLong; import org.gcube.accounting.datamodel.annotations.ValidLong;
import org.gcube.accounting.datamodel.implementations.aggregated.StorageStatusUsageRecord;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
/** /**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
* *
*/ */
public class StorageUsageUsageRecord extends StorageStatusUsageRecord implements SingleUsageRecord { public class StorageUsageUsageRecord extends RawUsageRecord implements SingleUsageRecord {
/** /**
* Generated Serial Version UID * Generated Serial Version UID
@ -24,13 +25,11 @@ public class StorageUsageUsageRecord extends StorageStatusUsageRecord implements
private static final long serialVersionUID = 1381025822586583326L; private static final long serialVersionUID = 1381025822586583326L;
@NotEmptyIfNotNull @NotEmptyIfNotNull
public static final String OBJECT_URI = "objectURI";
@NotEmpty
public static final String OPERATION_TYPE = "operationType";
@ValidIP
public static final String CALLER_IP = "callerIP";
@NotEmpty
public static final String PROVIDER_ID = "providerId"; public static final String PROVIDER_ID = "providerId";
@NotEmptyIfNotNull
public static final String OBJECT_URI = "objectURI";
@Required @NotEmpty
public static final String OPERATION_TYPE = "operationType";
@NotEmpty @NotEmpty
public static final String QUALIFIER = "qualifier"; public static final String QUALIFIER = "qualifier";
@NotEmpty @NotEmpty
@ -39,7 +38,8 @@ public class StorageUsageUsageRecord extends StorageStatusUsageRecord implements
public static final String DATA_VOLUME = "dataVolume"; public static final String DATA_VOLUME = "dataVolume";
@ValidInteger @ValidInteger
public static final String DATA_COUNT = "dataCount"; public static final String DATA_COUNT = "dataCount";
@ValidIP
public static final String CALLER_IP = "callerIP";
public StorageUsageUsageRecord(){ public StorageUsageUsageRecord(){
super(); super();

View File

@ -7,9 +7,13 @@ import java.util.Calendar;
import org.gcube.accounting.datamodel.RawUsageRecord; import org.gcube.accounting.datamodel.RawUsageRecord;
import org.gcube.accounting.datamodel.SingleUsageRecord; import org.gcube.accounting.datamodel.SingleUsageRecord;
import org.gcube.accounting.datamodel.annotations.DeprecatedField;
import org.gcube.accounting.datamodel.annotations.NotEmpty; import org.gcube.accounting.datamodel.annotations.NotEmpty;
import org.gcube.accounting.datamodel.annotations.Required;
import org.gcube.accounting.datamodel.annotations.ValidInteger; import org.gcube.accounting.datamodel.annotations.ValidInteger;
import org.gcube.accounting.datamodel.annotations.ValidLong; import org.gcube.accounting.datamodel.annotations.ValidLong;
import org.gcube.accounting.datamodel.validators.ConvertToOperationResult;
import org.gcube.accounting.datamodel.validators.Ignore;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
/** /**
@ -27,19 +31,19 @@ public class TaskUsageRecord extends RawUsageRecord implements SingleUsageRecord
completed, failed completed, failed
}; };
@NotEmpty @Required @NotEmpty
public static final String JOB_ID = "jobId"; public static final String JOB_ID = "jobId";
@NotEmpty @Required @NotEmpty
public static final String REF_HOST = "refHost"; public static final String REF_HOST = "refHost";
@NotEmpty @Required @NotEmpty
public static final String REF_VM = "refVM"; public static final String REF_VM = "refVM";
@NotEmpty @DeprecatedField(action=Ignore.class)
public static final String DOMAIN = "domain"; protected static final String DOMAIN = "domain";
@ValidLong @Required @ValidLong
public static final String USAGE_START_TIME = "usageStartTime"; public static final String USAGE_START_TIME = "usageStartTime";
@ValidLong @Required @ValidLong
public static final String USAGE_END_TIME = "usageEndTime"; public static final String USAGE_END_TIME = "usageEndTime";
@NotEmpty @DeprecatedField(action=ConvertToOperationResult.class) @NotEmpty
public static final String USAGE_PHASE = "usagePhase"; public static final String USAGE_PHASE = "usagePhase";
@ValidInteger @ValidInteger
public static final String INPUT_FILES_NUMBER = "inputFilesNumber"; public static final String INPUT_FILES_NUMBER = "inputFilesNumber";
@ -94,13 +98,15 @@ public class TaskUsageRecord extends RawUsageRecord implements SingleUsageRecord
setResourceSpecificProperty(REF_VM, refVM); setResourceSpecificProperty(REF_VM, refVM);
} }
public String getDomain() { /*
private String getDomain() {
return (String) this.resourceSpecificProperties.get(DOMAIN); return (String) this.resourceSpecificProperties.get(DOMAIN);
} }
public void setDomain(String domain) throws InvalidValueException { private void setDomain(String domain) throws InvalidValueException {
setResourceSpecificProperty(DOMAIN, domain); setResourceSpecificProperty(DOMAIN, domain);
} }
*/
public Calendar getUsageStartTime() { public Calendar getUsageStartTime() {
long millis = (Long) this.resourceSpecificProperties.get(USAGE_START_TIME); long millis = (Long) this.resourceSpecificProperties.get(USAGE_START_TIME);

View File

@ -0,0 +1,26 @@
/**
*
*/
package org.gcube.accounting.datamodel.validators;
import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.annotations.DeprecationAction;
/**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
*
*/
public class ConvertToOperationResult implements DeprecationAction {
/**
* {@inheritDoc}
*/
@Override
public Serializable manage(String key, Serializable manage, UsageRecord usageRecord) {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -4,21 +4,20 @@
package org.gcube.accounting.datamodel.validators; package org.gcube.accounting.datamodel.validators;
import java.io.Serializable; import java.io.Serializable;
import java.lang.annotation.Annotation;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
/** /**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
*
*/ */
public interface FieldValidator<T extends Annotation> { public interface FieldValidator {
Class<T> annotation();
public boolean isValid(Serializable toValidate);
/**
* Validate (and convert if needed) the provided property
* @param toValidate the property to validate
* @return the validated (and converted property)
* @throws InvalidValueException if the validation (or conversion) fails
*/
public Serializable validate(Serializable toValidate) throws InvalidValueException; public Serializable validate(Serializable toValidate) throws InvalidValueException;
String getErrorSuffix();
} }

View File

@ -0,0 +1,31 @@
/**
*
*/
package org.gcube.accounting.datamodel.validators;
import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.annotations.DeprecationAction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
*
*/
public class Ignore implements DeprecationAction {
private static Logger logger = LoggerFactory.getLogger(Ignore.class);
/**
* {@inheritDoc}
*/
@Override
public Serializable manage(String key, Serializable manage, UsageRecord usageRecord) {
logger.warn("The field {} is deprecated for the {}. Anyway the field will be included in the document",
key, usageRecord.getClass().getSimpleName());
return manage;
}
}

View File

@ -3,16 +3,9 @@ package org.gcube.accounting.datamodel.validators;
import java.io.Serializable; import java.io.Serializable;
import java.util.Map; import java.util.Map;
import org.gcube.accounting.datamodel.annotations.NotEmptyIfNotNull; public class NotEmptyIfNotNullValidator extends NotEmptyValidator {
import org.gcube.accounting.exception.InvalidValueException;
public class NotEmptyIfNotNullValidator implements FieldValidator<NotEmptyIfNotNull>{ protected boolean isValid(Serializable toValidate) {
public Class<NotEmptyIfNotNull> annotation() {
return NotEmptyIfNotNull.class;
}
public boolean isValid(Serializable toValidate) {
if (toValidate == null) return true; if (toValidate == null) return true;
if (toValidate.getClass().isArray() ){ if (toValidate.getClass().isArray() ){
return ((Object[])toValidate).length>0; return ((Object[])toValidate).length>0;
@ -25,19 +18,4 @@ public class NotEmptyIfNotNullValidator implements FieldValidator<NotEmptyIfNotN
} else return true; } else return true;
} }
public Serializable validate(Serializable toValidate) throws InvalidValueException {
try{
if(isValid(toValidate)){
return toValidate;
}
}catch(Exception e){
throw new InvalidValueException(getErrorSuffix(), e.getCause());
}
throw new InvalidValueException(getErrorSuffix());
}
public String getErrorSuffix() {
return "is empty";
}
} }

View File

@ -3,16 +3,13 @@ package org.gcube.accounting.datamodel.validators;
import java.io.Serializable; import java.io.Serializable;
import java.util.Map; import java.util.Map;
import org.gcube.accounting.datamodel.annotations.NotEmpty;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
public class NotEmptyValidator implements FieldValidator<NotEmpty>{ public class NotEmptyValidator implements FieldValidator{
public Class<NotEmpty> annotation() { private static final String ERROR = "Is Empty";
return NotEmpty.class;
} protected boolean isValid(Serializable toValidate) {
public boolean isValid(Serializable toValidate) {
if (toValidate == null) return false; if (toValidate == null) return false;
if (toValidate.getClass().isArray() ){ if (toValidate.getClass().isArray() ){
return ((Object[])toValidate).length>0; return ((Object[])toValidate).length>0;
@ -25,19 +22,16 @@ public class NotEmptyValidator implements FieldValidator<NotEmpty>{
} else return true; } else return true;
} }
@Override
public Serializable validate(Serializable toValidate) throws InvalidValueException { public Serializable validate(Serializable toValidate) throws InvalidValueException {
try{ try{
if(isValid(toValidate)){ if(isValid(toValidate)){
return toValidate; return toValidate;
} }
}catch(Exception e){ }catch(Exception e){
throw new InvalidValueException(getErrorSuffix(), e.getCause()); throw new InvalidValueException(ERROR, e.getCause());
} }
throw new InvalidValueException(getErrorSuffix()); throw new InvalidValueException(ERROR);
}
public String getErrorSuffix() {
return "is empty";
} }
} }

View File

@ -2,29 +2,18 @@ package org.gcube.accounting.datamodel.validators;
import java.io.Serializable; import java.io.Serializable;
import org.gcube.accounting.datamodel.annotations.NotNull;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
public class NotNullValidator implements FieldValidator {
public class NotNullValidator implements FieldValidator<NotNull>{
public Class<NotNull> annotation() {
return NotNull.class;
}
public boolean isValid(Serializable toValidate) {
return toValidate!=null;
}
private static final String ERROR = "Is Null";
@Override
public Serializable validate(Serializable toValidate) throws InvalidValueException { public Serializable validate(Serializable toValidate) throws InvalidValueException {
if(isValid(toValidate)){ if(toValidate!=null){
return toValidate; return toValidate;
} }
throw new InvalidValueException(getErrorSuffix()); throw new InvalidValueException(ERROR);
}
public String getErrorSuffix() {
return "is null";
} }
} }

View File

@ -4,19 +4,16 @@ import java.io.Serializable;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.gcube.accounting.datamodel.annotations.ValidLong;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
public class ValidIPValidator implements FieldValidator<ValidLong>{ public class ValidIPValidator implements FieldValidator{
private static Logger logger = LoggerFactory.getLogger(ValidIPValidator.class); private static Logger logger = LoggerFactory.getLogger(ValidIPValidator.class);
public Class<ValidLong> annotation() { private static final String ERROR = "Not valid IP Address";
return ValidLong.class;
}
private static Pattern IPV4_PATTERN = null; private static Pattern IPV4_PATTERN = null;
private static Pattern IPV6_PATTERN = null; private static Pattern IPV6_PATTERN = null;
@ -44,28 +41,16 @@ public class ValidIPValidator implements FieldValidator<ValidLong>{
return ipV6Matcher.matches(); return ipV6Matcher.matches();
} }
public boolean isValid(Serializable toValidate) { @Override
try {
validate(toValidate);
} catch (InvalidValueException e) {
return false;
}
return true;
}
public Serializable validate(Serializable toValidate) throws InvalidValueException { public Serializable validate(Serializable toValidate) throws InvalidValueException {
try { try {
if(isIpAddress((String) toValidate)){ if(isIpAddress((String) toValidate)){
return (String) toValidate; return (String) toValidate;
} }
}catch (Exception e) { }catch (Exception e) {
throw new InvalidValueException(getErrorSuffix(), e.getCause()); throw new InvalidValueException(ERROR, e.getCause());
} }
throw new InvalidValueException(getErrorSuffix()); throw new InvalidValueException(ERROR);
}
public String getErrorSuffix() {
return "not valid IP Address";
} }
} }

View File

@ -2,25 +2,14 @@ package org.gcube.accounting.datamodel.validators;
import java.io.Serializable; import java.io.Serializable;
import org.gcube.accounting.datamodel.annotations.ValidLong;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
public class ValidIntegerValidator implements FieldValidator<ValidLong>{ public class ValidIntegerValidator implements FieldValidator {
public Class<ValidLong> annotation() {
return ValidLong.class;
}
public boolean isValid(Serializable toValidate) {
try {
validate(toValidate);
} catch (InvalidValueException e) {
return false;
}
return true;
}
private static final String ERROR = String.format("Not Instance of %s", Integer.class.getSimpleName());
@Override
public Serializable validate(Serializable toValidate) throws InvalidValueException { public Serializable validate(Serializable toValidate) throws InvalidValueException {
if(toValidate instanceof Integer){ if(toValidate instanceof Integer){
return toValidate; return toValidate;
@ -30,11 +19,7 @@ public class ValidIntegerValidator implements FieldValidator<ValidLong>{
return integerObj; return integerObj;
} }
throw new InvalidValueException(getErrorSuffix()); throw new InvalidValueException(ERROR);
}
public String getErrorSuffix() {
return String.format("not instace of %s", Integer.class.getSimpleName());
} }
} }

View File

@ -2,38 +2,27 @@ package org.gcube.accounting.datamodel.validators;
import java.io.Serializable; import java.io.Serializable;
import org.gcube.accounting.datamodel.annotations.ValidLong;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
public class ValidLongValidator implements FieldValidator<ValidLong>{ public class ValidLongValidator implements FieldValidator {
public Class<ValidLong> annotation() { private static final String ERROR = String.format("Not Instance of %s", Integer.class.getSimpleName());
return ValidLong.class;
}
public boolean isValid(Serializable toValidate) {
try {
validate(toValidate);
} catch (InvalidValueException e) {
return false;
}
return true;
}
@Override
public Serializable validate(Serializable toValidate) throws InvalidValueException { public Serializable validate(Serializable toValidate) throws InvalidValueException {
if(toValidate instanceof Long){ if(toValidate instanceof Long){
return toValidate; return toValidate;
} }
Long longObj = Long.getLong((String) toValidate); try {
if(longObj!=null){ Long longObj = Long.getLong((String) toValidate);
return longObj; if(longObj!=null){
return longObj;
}
}catch (Exception e) {
throw new InvalidValueException(ERROR, e.getCause());
} }
return false; throw new InvalidValueException(ERROR);
}
public String getErrorSuffix() {
return String.format("not instace of %s", Long.class.getSimpleName());
} }
} }

View File

@ -3,38 +3,49 @@ package org.gcube.accounting.datamodel.validators;
import java.io.Serializable; import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord.OperationResult; import org.gcube.accounting.datamodel.UsageRecord.OperationResult;
import org.gcube.accounting.datamodel.annotations.ValidOperationResult;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
public class ValidOperationResultValidator implements FieldValidator<ValidOperationResult>{ public class ValidOperationResultValidator implements FieldValidator {
public Class<ValidOperationResult> annotation() { private static final String ERROR = String.format("Not Instance of %s", OperationResult.class.getSimpleName());
return ValidOperationResult.class;
}
public boolean isValid(Serializable toValidate) {
try {
validate(toValidate);
} catch (InvalidValueException e) {
return false;
}
return true;
}
@Override
public Serializable validate(Serializable toValidate) throws InvalidValueException { public Serializable validate(Serializable toValidate) throws InvalidValueException {
if(toValidate instanceof OperationResult){ if(toValidate instanceof OperationResult){
return toValidate; return toValidate;
} }
Integer integerObj = Integer.getInteger((String) toValidate);
if(integerObj!=null){ try {
return integerObj; if(toValidate instanceof String){
try{
OperationResult operationResult = OperationResult.valueOf((String) toValidate);
if(operationResult !=null){
return operationResult;
}
} catch(Exception e){
// Trying another way
}
try{
Integer integer = Integer.getInteger((String) toValidate);
if(integer!=null){
toValidate = integer;
}
} catch(Exception e){
// Trying another way
}
}
if(toValidate instanceof Integer){
return OperationResult.values()[(Integer) toValidate];
}
}catch(Exception e){
throw new InvalidValueException(ERROR, e.getCause());
} }
throw new InvalidValueException(getErrorSuffix()); throw new InvalidValueException(ERROR);
}
public String getErrorSuffix() {
return String.format("not instace of %s", OperationResult.class.getSimpleName());
} }
} }

View File

@ -0,0 +1,29 @@
/**
*
*/
package org.gcube.accounting.exception;
/**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
*
*/
public class ExcludeException extends Exception {
/**
* Generated serial Version UID
*/
private static final long serialVersionUID = -4512534842977294L;
public ExcludeException() {
super();
}
public ExcludeException(String message) {
super(message);
}
public ExcludeException(String message, Throwable cause) {
super(message, cause);
}
}

View File

@ -22,4 +22,7 @@ public class InternallyReservedKeywordException extends Exception {
super(message); super(message);
} }
public InternallyReservedKeywordException(String message, Throwable cause) {
super(message, cause);
}
} }

View File

@ -3,6 +3,7 @@
*/ */
package org.gcube.accounting.datamodel.validators; package org.gcube.accounting.datamodel.validators;
import org.gcube.accounting.exception.InvalidValueException;
import org.junit.Test; import org.junit.Test;
/** /**
@ -12,17 +13,23 @@ import org.junit.Test;
public class ValidTimeValidatorTest { public class ValidTimeValidatorTest {
@Test @Test
public void testPrimitiveLong(){ public void testPrimitiveLong() throws InvalidValueException{
ValidLongValidator validTimeValidator = new ValidLongValidator(); ValidLongValidator validTimeValidator = new ValidLongValidator();
long myLong = 4; long myLong = 4;
validTimeValidator.isValid(myLong); validTimeValidator.validate(myLong);
} }
@Test @Test
public void testClassLong(){ public void testClassLong() throws InvalidValueException{
ValidLongValidator validTimeValidator = new ValidLongValidator(); ValidLongValidator validTimeValidator = new ValidLongValidator();
Long myLong = new Long(4); Long myLong = new Long(4);
validTimeValidator.isValid(myLong); validTimeValidator.validate(myLong);
}
@Test(expected=InvalidValueException.class)
public void testWrongValue() throws InvalidValueException {
ValidLongValidator validTimeValidator = new ValidLongValidator();
validTimeValidator.validate("test");
} }
} }