refs #200: Create accouting-lib library

https://support.d4science.org/issues/200
Implementing library

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/accounting/accounting-lib@115272 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Luca Frosini 2015-06-09 15:36:38 +00:00
parent e43bfe1843
commit c0038b9efb
30 changed files with 173 additions and 83 deletions

View File

@ -67,6 +67,12 @@
<version>4.11</version> <version>4.11</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>

View File

@ -20,9 +20,10 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
import org.gcube.accounting.datamodel.decorators.AggregatedField; import org.gcube.accounting.datamodel.decorators.AggregatedField;
import org.gcube.accounting.datamodel.decorators.ComputedField;
import org.gcube.accounting.datamodel.decorators.RequiredField; import org.gcube.accounting.datamodel.decorators.RequiredField;
import org.gcube.accounting.datamodel.decorators.ValidatorAction; import org.gcube.accounting.datamodel.decorators.FieldAction;
import org.gcube.accounting.datamodel.decorators.ValidatorField; import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.deprecationmanagement.annotations.DeprecatedWarning; import org.gcube.accounting.datamodel.deprecationmanagement.annotations.DeprecatedWarning;
import org.gcube.accounting.datamodel.deprecationmanagement.annotations.MoveToAggregatedUsageRecordId; import org.gcube.accounting.datamodel.deprecationmanagement.annotations.MoveToAggregatedUsageRecordId;
import org.gcube.accounting.datamodel.validations.annotations.NotEmpty; import org.gcube.accounting.datamodel.validations.annotations.NotEmpty;
@ -83,8 +84,10 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
/** resource-specific properties */ /** resource-specific properties */
protected Map<String, Serializable> resourceProperties; protected Map<String, Serializable> resourceProperties;
protected Map<String, List<ValidatorAction>> validation; protected Map<String, List<FieldAction>> validation;
protected Set<String> requiredFields; protected Set<String> requiredFields;
protected Set<String> aggregatedFields;
protected Set<String> computedFields;
protected void initializeValidation() { protected void initializeValidation() {
logger.debug("Initializing Field Validators"); logger.debug("Initializing Field Validators");
@ -96,12 +99,12 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
} catch (Exception e) { } catch (Exception e) {
continue; continue;
} }
List<ValidatorAction> fieldValidators = new ArrayList<ValidatorAction>(); List<FieldAction> fieldValidators = new ArrayList<FieldAction>();
validation.put(keyString, fieldValidators); validation.put(keyString, fieldValidators);
for (Annotation annotation : field.getAnnotations()){ for (Annotation annotation : field.getAnnotations()){
if (annotation.annotationType().isAnnotationPresent(ValidatorField.class)){ if (annotation.annotationType().isAnnotationPresent(FieldDecorator.class)){
Class<? extends ValidatorAction> managedClass = ((ValidatorField)annotation.annotationType().getAnnotation(ValidatorField.class)).managed(); Class<? extends FieldAction> managedClass = ((FieldDecorator)annotation.annotationType().getAnnotation(FieldDecorator.class)).managed();
ValidatorAction validator; FieldAction validator;
try { try {
validator = managedClass.newInstance(); validator = managedClass.newInstance();
} catch (InstantiationException | IllegalAccessException e) { } catch (InstantiationException | IllegalAccessException e) {
@ -109,9 +112,15 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
} }
fieldValidators.add(validator); fieldValidators.add(validator);
} }
if(annotation.getClass().isAssignableFrom(RequiredField.class)){ if(annotation.annotationType().isAssignableFrom(RequiredField.class)){
requiredFields.add(keyString); requiredFields.add(keyString);
} }
if(annotation.annotationType().isAssignableFrom(AggregatedField.class)){
aggregatedFields.add(keyString);
}
if(annotation.annotationType().isAssignableFrom(ComputedField.class)){
computedFields.add(keyString);
}
} }
} }
} }
@ -120,7 +129,7 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
* Initialize variable * Initialize variable
*/ */
private void init() { private void init() {
this.validation = new HashMap<String, List<ValidatorAction>>(); this.validation = new HashMap<String, List<FieldAction>>();
this.requiredFields = new HashSet<String>(); this.requiredFields = new HashSet<String>();
initializeValidation(); initializeValidation();
} }
@ -456,10 +465,14 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
throw new InvalidValueException("The key of property to set cannot be null"); throw new InvalidValueException("The key of property to set cannot be null");
} }
Serializable checkedValue = serializable; Serializable checkedValue = serializable;
List<ValidatorAction> fieldValidators = validation.get(key); List<FieldAction> fieldValidators = validation.get(key);
if(fieldValidators!=null){ if(fieldValidators!=null){
for(ValidatorAction fieldValidator : fieldValidators){ for(FieldAction fieldValidator : fieldValidators){
checkedValue = fieldValidator.validate(key, checkedValue, this); checkedValue = fieldValidator.validate(key, checkedValue, this);
/*
* Check here if the key is for a ComputedField or for an
* AggregatedField
*/
} }
} }
return checkedValue; return checkedValue;
@ -589,7 +602,10 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
*/ */
public static UsageRecord getUsageRecord(Map<String, Serializable> usageRecordMap) throws Exception { public static UsageRecord getUsageRecord(Map<String, Serializable> usageRecordMap) throws Exception {
String className = (String) usageRecordMap.get(USAGE_RECORD_TYPE); String className = (String) usageRecordMap.get(USAGE_RECORD_TYPE);
boolean aggregated = (Boolean) usageRecordMap.get(AGGREGATED); boolean aggregated = false;
try {
aggregated = (Boolean) usageRecordMap.get(AGGREGATED);
}catch(Exception e){}
Class<? extends UsageRecord> clz = getClass(className, aggregated); Class<? extends UsageRecord> clz = getClass(className, aggregated);
logger.debug("Trying to instantiate {}", clz.getClass().getSimpleName()); logger.debug("Trying to instantiate {}", clz.getClass().getSimpleName());
@ -599,7 +615,11 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
Constructor<? extends UsageRecord> usageRecordConstructor = clz.getDeclaredConstructor(usageRecordArgTypes); Constructor<? extends UsageRecord> usageRecordConstructor = clz.getDeclaredConstructor(usageRecordArgTypes);
Object[] usageRecordArguments = {usageRecordMap}; Object[] usageRecordArguments = {usageRecordMap};
return usageRecordConstructor.newInstance(usageRecordArguments); UsageRecord usageRecord = usageRecordConstructor.newInstance(usageRecordArguments);
logger.debug("Created Usage Record : {}", usageRecord);
return usageRecord;
} }
} }

View File

@ -11,7 +11,7 @@ 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 ValidatorAction { public interface FieldAction {
/** /**
* Validate (and eventually convert) the value of the property identified by * Validate (and eventually convert) the value of the property identified by

View File

@ -16,8 +16,8 @@ import java.lang.annotation.Target;
@Target(ElementType.ANNOTATION_TYPE) @Target(ElementType.ANNOTATION_TYPE)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Inherited @Inherited
public @interface ValidatorField { public @interface FieldDecorator {
Class<? extends ValidatorAction> managed(); Class<? extends FieldAction> managed();
} }

View File

@ -5,12 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import org.gcube.accounting.datamodel.decorators.ValidatorField; import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.deprecationmanagement.validators.DeprecatedWarningValidator; import org.gcube.accounting.datamodel.deprecationmanagement.validators.DeprecatedWarningAction;
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@ValidatorField(managed=DeprecatedWarningValidator.class) @FieldDecorator(managed=DeprecatedWarningAction.class)
public @interface DeprecatedWarning { public @interface DeprecatedWarning {
} }

View File

@ -5,12 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import org.gcube.accounting.datamodel.decorators.ValidatorField; import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.deprecationmanagement.validators.MoveToAggregatedUsageRecordIdValidator; import org.gcube.accounting.datamodel.deprecationmanagement.validators.MoveToAggregatedUsageRecordIdAction;
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@ValidatorField(managed=MoveToAggregatedUsageRecordIdValidator.class) @FieldDecorator(managed=MoveToAggregatedUsageRecordIdAction.class)
public @interface MoveToAggregatedUsageRecordId { public @interface MoveToAggregatedUsageRecordId {
} }

View File

@ -5,12 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import org.gcube.accounting.datamodel.decorators.ValidatorField; import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.deprecationmanagement.validators.MoveToOperationResultValidator; import org.gcube.accounting.datamodel.deprecationmanagement.validators.MoveToOperationResultAction;
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@ValidatorField(managed=MoveToOperationResultValidator.class) @FieldDecorator(managed=MoveToOperationResultAction.class)
public @interface MoveToOperationResult { public @interface MoveToOperationResult {
} }

View File

@ -6,7 +6,7 @@ package org.gcube.accounting.datamodel.deprecationmanagement.validators;
import java.io.Serializable; import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.decorators.ValidatorAction; import org.gcube.accounting.datamodel.decorators.FieldAction;
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;
@ -15,9 +15,9 @@ import org.slf4j.LoggerFactory;
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
* *
*/ */
public class DeprecatedWarningValidator implements ValidatorAction { public class DeprecatedWarningAction implements FieldAction {
private static Logger logger = LoggerFactory.getLogger(DeprecatedWarningValidator.class); private static Logger logger = LoggerFactory.getLogger(DeprecatedWarningAction.class);
/** /**
* {@inheritDoc} * {@inheritDoc}

View File

@ -6,7 +6,7 @@ package org.gcube.accounting.datamodel.deprecationmanagement.validators;
import java.io.Serializable; import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.decorators.ValidatorAction; import org.gcube.accounting.datamodel.decorators.FieldAction;
import org.gcube.accounting.datamodel.validations.validators.NotEmptyIfNotNullValidator; import org.gcube.accounting.datamodel.validations.validators.NotEmptyIfNotNullValidator;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
@ -14,7 +14,7 @@ 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 MoveToAggregatedUsageRecordIdValidator implements ValidatorAction { public class MoveToAggregatedUsageRecordIdAction implements FieldAction {
/** /**
* {@inheritDoc} * {@inheritDoc}

View File

@ -7,7 +7,7 @@ import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.UsageRecord.OperationResult; import org.gcube.accounting.datamodel.UsageRecord.OperationResult;
import org.gcube.accounting.datamodel.decorators.ValidatorAction; import org.gcube.accounting.datamodel.decorators.FieldAction;
import org.gcube.accounting.datamodel.validations.validators.ValidOperationResultValidator; import org.gcube.accounting.datamodel.validations.validators.ValidOperationResultValidator;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
@ -15,7 +15,7 @@ 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 MoveToOperationResultValidator implements ValidatorAction { public class MoveToOperationResultAction implements FieldAction {
/** /**
* {@inheritDoc} * {@inheritDoc}

View File

@ -4,12 +4,19 @@
package org.gcube.accounting.datamodel.implementations; package org.gcube.accounting.datamodel.implementations;
import java.io.Serializable; import java.io.Serializable;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.Calendar; import java.util.Calendar;
import java.util.Map; import java.util.Map;
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.UsageRecord;
import org.gcube.accounting.datamodel.decorators.ComputedField; import org.gcube.accounting.datamodel.decorators.ComputedField;
import org.gcube.accounting.datamodel.decorators.FieldAction;
import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.decorators.RequiredField; import org.gcube.accounting.datamodel.decorators.RequiredField;
import org.gcube.accounting.datamodel.deprecationmanagement.annotations.MoveToOperationResult; import org.gcube.accounting.datamodel.deprecationmanagement.annotations.MoveToOperationResult;
import org.gcube.accounting.datamodel.validations.annotations.NotEmpty; import org.gcube.accounting.datamodel.validations.annotations.NotEmpty;
@ -39,9 +46,9 @@ public class JobUsageRecord extends RawUsageRecord implements SingleUsageRecord
public static final String JOB_QUALIFIER = "jobQualifier"; public static final String JOB_QUALIFIER = "jobQualifier";
@RequiredField @NotEmpty @RequiredField @NotEmpty
public static final String JOB_NAME = "jobName"; public static final String JOB_NAME = "jobName";
@RequiredField @ValidLong @RequiredField @ValidLong @CalculateWallDuration
public static final String JOB_START_TIME = "jobStartTime"; public static final String JOB_START_TIME = "jobStartTime";
@RequiredField @ValidLong @RequiredField @ValidLong @CalculateWallDuration
public static final String JOB_END_TIME = "jobEndTime"; public static final String JOB_END_TIME = "jobEndTime";
@ValidOperationResult @MoveToOperationResult @ValidOperationResult @MoveToOperationResult
@ -49,9 +56,41 @@ public class JobUsageRecord extends RawUsageRecord implements SingleUsageRecord
@ValidInteger @ValidInteger
public static final String VMS_USED = "vmsUsed"; public static final String VMS_USED = "vmsUsed";
@ComputedField @ValidLong @ComputedField @ValidLong @CalculateWallDuration
protected static final String WALL_DURATION = "wallDuration"; protected static final String WALL_DURATION = "wallDuration";
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@FieldDecorator(managed=CalculateWallDurationAction.class)
protected @interface CalculateWallDuration {
}
protected class CalculateWallDurationAction implements FieldAction {
/**
* {@inheritDoc}
*/
@Override
public Serializable validate(String key, Serializable value, UsageRecord usageRecord) throws InvalidValueException {
try {
long wallDuration = calculateWallDuration();
if(key.compareTo(WALL_DURATION)==0){
value = wallDuration;
}
}catch(InvalidValueException e){
if(key.compareTo(WALL_DURATION)==0){
throw new InvalidValueException(String.format("Unable to set %s. %s and %s MUST be set before.", WALL_DURATION,
JOB_START_TIME, JOB_END_TIME));
}
}
return value;
}
}
public JobUsageRecord(){ public JobUsageRecord(){
super(); super();
} }
@ -129,22 +168,25 @@ public class JobUsageRecord extends RawUsageRecord implements SingleUsageRecord
setResourceProperty(VMS_USED, vmsUsed); setResourceProperty(VMS_USED, vmsUsed);
} }
protected void calculateWallDuration() throws InvalidValueException { protected long calculateWallDuration() throws InvalidValueException {
try { try {
long endTime = (Long) this.resourceProperties.get(JOB_END_TIME); long endTime = (Long) this.resourceProperties.get(JOB_END_TIME);
long startTime = (Long) this.resourceProperties.get(JOB_START_TIME); long startTime = (Long) this.resourceProperties.get(JOB_START_TIME);
long wallDuration = endTime - startTime; long wallDuration = endTime - startTime;
setResourceProperty(WALL_DURATION, wallDuration); setResourceProperty(WALL_DURATION, wallDuration);
return wallDuration;
}catch(Exception e){ }catch(Exception e){
throw new InvalidValueException(String.format("To calculate Wall Duration both %s and %s must be set", throw new InvalidValueException(String.format("To calculate Wall Duration both %s and %s must be set",
START_TIME, END_TIME), e.getCause()); START_TIME, END_TIME), e.getCause());
} }
} }
public long getWallDuration() throws InvalidValueException { public long getWallDuration() {
Long wallDuration = (Long) this.resourceProperties.get(WALL_DURATION); Long wallDuration = (Long) this.resourceProperties.get(WALL_DURATION);
if(wallDuration == null){ if(wallDuration == null){
calculateWallDuration(); try {
wallDuration = calculateWallDuration();
} catch(Exception e){}
} }
return wallDuration; return wallDuration;
} }

View File

@ -41,9 +41,9 @@ public class ServiceUsageRecord extends RawUsageRecord implements SingleUsageRec
protected static final String INVOCATION_COUNT = "invocationCount"; protected static final String INVOCATION_COUNT = "invocationCount";
@ValidInteger @AggregatedField @ValidInteger @AggregatedField
protected static final String AVERAGE_INVOCATION_COUNT = "averageInvocationTime"; protected static final String AVERAGE_INVOCATION_COUNT = "averageInvocationTime";
@NotEmpty @RequiredField @NotEmpty
public static final String SERVICE_CLASS = "serviceClass"; public static final String SERVICE_CLASS = "serviceClass";
@NotEmpty @RequiredField @NotEmpty
public static final String SERVICE_NAME = "serviceName"; public static final String SERVICE_NAME = "serviceName";
public ServiceUsageRecord(){ public ServiceUsageRecord(){

View File

@ -5,12 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import org.gcube.accounting.datamodel.decorators.ValidatorField; import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.validations.validators.NotEmptyValidator; import org.gcube.accounting.datamodel.validations.validators.NotEmptyValidator;
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@ValidatorField(managed=NotEmptyValidator.class) @FieldDecorator(managed=NotEmptyValidator.class)
public @interface NotEmpty { public @interface NotEmpty {
} }

View File

@ -5,12 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import org.gcube.accounting.datamodel.decorators.ValidatorField; import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.validations.validators.NotEmptyIfNotNullValidator; import org.gcube.accounting.datamodel.validations.validators.NotEmptyIfNotNullValidator;
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@ValidatorField(managed=NotEmptyIfNotNullValidator.class) @FieldDecorator(managed=NotEmptyIfNotNullValidator.class)
public @interface NotEmptyIfNotNull { public @interface NotEmptyIfNotNull {
} }

View File

@ -5,12 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import org.gcube.accounting.datamodel.decorators.ValidatorField; import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.validations.validators.NotNullValidator; import org.gcube.accounting.datamodel.validations.validators.NotNullValidator;
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@ValidatorField(managed=NotNullValidator.class) @FieldDecorator(managed=NotNullValidator.class)
public @interface NotNull { public @interface NotNull {
} }

View File

@ -5,12 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import org.gcube.accounting.datamodel.decorators.ValidatorField; import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.validations.validators.ValidIPValidator; import org.gcube.accounting.datamodel.validations.validators.ValidIPValidator;
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@ValidatorField(managed=ValidIPValidator.class) @FieldDecorator(managed=ValidIPValidator.class)
public @interface ValidIP { public @interface ValidIP {
} }

View File

@ -5,12 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import org.gcube.accounting.datamodel.decorators.ValidatorField; import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.validations.validators.ValidIntegerValidator; import org.gcube.accounting.datamodel.validations.validators.ValidIntegerValidator;
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@ValidatorField(managed=ValidIntegerValidator.class) @FieldDecorator(managed=ValidIntegerValidator.class)
public @interface ValidInteger { public @interface ValidInteger {
} }

View File

@ -5,12 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import org.gcube.accounting.datamodel.decorators.ValidatorField; import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.validations.validators.ValidLongValidator; import org.gcube.accounting.datamodel.validations.validators.ValidLongValidator;
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@ValidatorField(managed=ValidLongValidator.class) @FieldDecorator(managed=ValidLongValidator.class)
public @interface ValidLong { public @interface ValidLong {
} }

View File

@ -5,12 +5,12 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import org.gcube.accounting.datamodel.decorators.ValidatorField; import org.gcube.accounting.datamodel.decorators.FieldDecorator;
import org.gcube.accounting.datamodel.validations.validators.ValidOperationResultValidator; import org.gcube.accounting.datamodel.validations.validators.ValidOperationResultValidator;
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@ValidatorField(managed=ValidOperationResultValidator.class) @FieldDecorator(managed=ValidOperationResultValidator.class)
public @interface ValidOperationResult { public @interface ValidOperationResult {
} }

View File

@ -4,10 +4,10 @@ import java.io.Serializable;
import java.util.Map; import java.util.Map;
import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.decorators.ValidatorAction; import org.gcube.accounting.datamodel.decorators.FieldAction;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
public class NotEmptyValidator implements ValidatorAction{ public class NotEmptyValidator implements FieldAction{
private static final String ERROR = "Is Empty"; private static final String ERROR = "Is Empty";

View File

@ -3,10 +3,10 @@ package org.gcube.accounting.datamodel.validations.validators;
import java.io.Serializable; import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.decorators.ValidatorAction; import org.gcube.accounting.datamodel.decorators.FieldAction;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
public class NotNullValidator implements ValidatorAction { public class NotNullValidator implements FieldAction {
private static final String ERROR = "Is Null"; private static final String ERROR = "Is Null";

View File

@ -5,12 +5,12 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.decorators.ValidatorAction; import org.gcube.accounting.datamodel.decorators.FieldAction;
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 ValidatorAction{ public class ValidIPValidator implements FieldAction{
private static Logger logger = LoggerFactory.getLogger(ValidIPValidator.class); private static Logger logger = LoggerFactory.getLogger(ValidIPValidator.class);

View File

@ -3,11 +3,11 @@ package org.gcube.accounting.datamodel.validations.validators;
import java.io.Serializable; import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.decorators.ValidatorAction; import org.gcube.accounting.datamodel.decorators.FieldAction;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
public class ValidIntegerValidator implements ValidatorAction { public class ValidIntegerValidator implements FieldAction {
private static final String ERROR = String.format("Not Instance of %s", Integer.class.getSimpleName()); private static final String ERROR = String.format("Not Instance of %s", Integer.class.getSimpleName());

View File

@ -3,11 +3,11 @@ package org.gcube.accounting.datamodel.validations.validators;
import java.io.Serializable; import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.decorators.ValidatorAction; import org.gcube.accounting.datamodel.decorators.FieldAction;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
public class ValidLongValidator implements ValidatorAction { public class ValidLongValidator implements FieldAction {
private static final String ERROR = String.format("Not Instance of %s", Integer.class.getSimpleName()); private static final String ERROR = String.format("Not Instance of %s", Integer.class.getSimpleName());

View File

@ -4,10 +4,10 @@ import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.UsageRecord.OperationResult; import org.gcube.accounting.datamodel.UsageRecord.OperationResult;
import org.gcube.accounting.datamodel.decorators.ValidatorAction; import org.gcube.accounting.datamodel.decorators.FieldAction;
import org.gcube.accounting.exception.InvalidValueException; import org.gcube.accounting.exception.InvalidValueException;
public class ValidOperationResultValidator implements ValidatorAction { public class ValidOperationResultValidator implements FieldAction {
private static final String ERROR = String.format("Not Instance of %s", OperationResult.class.getSimpleName()); private static final String ERROR = String.format("Not Instance of %s", OperationResult.class.getSimpleName());

View File

@ -87,29 +87,35 @@ public abstract class Persistence {
} }
} }
public static UsageRecord createTestRawUsageRecord(){ public static UsageRecord createTestUsageRecord(){
UsageRecord usageRecord = new ServiceUsageRecord(); ServiceUsageRecord serviceUsageRecord = new ServiceUsageRecord();
try { try {
usageRecord.setCreatorId("accounting"); serviceUsageRecord.setCreatorId("accounting");
usageRecord.setConsumerId("accounting"); serviceUsageRecord.setConsumerId("accounting");
usageRecord.setResourceScope("/gcube/devsec"); serviceUsageRecord.setResourceScope("/gcube/devsec");
Calendar creatingTime = new GregorianCalendar(); Calendar creatingTime = new GregorianCalendar();
//Calendar startTime = new GregorianCalendar(); //Calendar startTime = new GregorianCalendar();
//Calendar endTime = new GregorianCalendar(); //Calendar endTime = new GregorianCalendar();
usageRecord.setCreationTime(creatingTime); serviceUsageRecord.setCreationTime(creatingTime);
//usageRecord.setStartTime(startTime); //usageRecord.setStartTime(startTime);
//usageRecord.setEndTime(endTime); //usageRecord.setEndTime(endTime);
usageRecord.setResourceProperty("ConnectionTest", "Test"); serviceUsageRecord.setResourceProperty("ConnectionTest", "Test");
serviceUsageRecord.setServiceClass("Accounting");
serviceUsageRecord.setServiceName("Accounting-Lib");
serviceUsageRecord.setRefHost("localhost");
serviceUsageRecord.setRefVM("local");
serviceUsageRecord.setCallerScope("/gcube/devsec");
} catch (InvalidValueException e1) { } catch (InvalidValueException e1) {
} }
return usageRecord; return serviceUsageRecord;
} }
@ -146,7 +152,7 @@ public abstract class Persistence {
*/ */
public void connect() throws Exception { public void connect() throws Exception {
prepareConnection(); prepareConnection();
this.account(createTestRawUsageRecord()); this.account(createTestUsageRecord());
} }
/** /**

View File

@ -15,7 +15,7 @@ public class RawUsageRecordTest {
@Test @Test
public void testCompareToSameObject(){ public void testCompareToSameObject(){
UsageRecord usageRecord = Persistence.createTestRawUsageRecord(); UsageRecord usageRecord = Persistence.createTestUsageRecord();
UsageRecord ur = usageRecord; UsageRecord ur = usageRecord;
Assert.assertEquals(0, usageRecord.compareTo(ur)); Assert.assertEquals(0, usageRecord.compareTo(ur));
Assert.assertEquals(0, ur.compareTo(usageRecord)); Assert.assertEquals(0, ur.compareTo(usageRecord));
@ -23,7 +23,7 @@ public class RawUsageRecordTest {
@Test @Test
public void testCompareToEqualsObject() throws Exception { public void testCompareToEqualsObject() throws Exception {
UsageRecord usageRecord = Persistence.createTestRawUsageRecord(); UsageRecord usageRecord = Persistence.createTestUsageRecord();
UsageRecord ur = RawUsageRecord.getUsageRecord(usageRecord.getResourceProperties()); UsageRecord ur = RawUsageRecord.getUsageRecord(usageRecord.getResourceProperties());
Assert.assertEquals(0, usageRecord.compareTo(ur)); Assert.assertEquals(0, usageRecord.compareTo(ur));
Assert.assertEquals(0, ur.compareTo(usageRecord)); Assert.assertEquals(0, ur.compareTo(usageRecord));
@ -31,7 +31,7 @@ public class RawUsageRecordTest {
@Test @Test
public void testCompareToComparedAddedProperty() throws Exception { public void testCompareToComparedAddedProperty() throws Exception {
UsageRecord usageRecord = Persistence.createTestRawUsageRecord(); UsageRecord usageRecord = Persistence.createTestUsageRecord();
UsageRecord ur = RawUsageRecord.getUsageRecord(usageRecord.getResourceProperties()); UsageRecord ur = RawUsageRecord.getUsageRecord(usageRecord.getResourceProperties());
for(int i=1; i<31; i++){ for(int i=1; i<31; i++){
ur.setResourceProperty(Integer.toString(i), i); ur.setResourceProperty(Integer.toString(i), i);
@ -42,7 +42,7 @@ public class RawUsageRecordTest {
@Test @Test
public void testCompareToDifferentForAddedProperties() throws Exception { public void testCompareToDifferentForAddedProperties() throws Exception {
UsageRecord usageRecord = Persistence.createTestRawUsageRecord(); UsageRecord usageRecord = Persistence.createTestUsageRecord();
UsageRecord ur = RawUsageRecord.getUsageRecord(usageRecord.getResourceProperties()); UsageRecord ur = RawUsageRecord.getUsageRecord(usageRecord.getResourceProperties());
usageRecord.setResourceProperty(Integer.toString(1), 2); usageRecord.setResourceProperty(Integer.toString(1), 2);
ur.setResourceProperty(Integer.toString(2), 2); ur.setResourceProperty(Integer.toString(2), 2);
@ -52,8 +52,8 @@ public class RawUsageRecordTest {
@Test @Test
public void testCompareToDifferentFromCreation() throws Exception { public void testCompareToDifferentFromCreation() throws Exception {
UsageRecord usageRecord = Persistence.createTestRawUsageRecord(); UsageRecord usageRecord = Persistence.createTestUsageRecord();
UsageRecord ur = Persistence.createTestRawUsageRecord(); UsageRecord ur = Persistence.createTestUsageRecord();
Assert.assertEquals(1, usageRecord.compareTo(ur)); Assert.assertEquals(1, usageRecord.compareTo(ur));
Assert.assertEquals(1, ur.compareTo(usageRecord)); Assert.assertEquals(1, ur.compareTo(usageRecord));
} }

View File

@ -22,7 +22,7 @@ public class CouchDBPersistenceTest {
@Test @Test
public void TestJsonNodeUsageRecordConversions() throws Exception { public void TestJsonNodeUsageRecordConversions() throws Exception {
UsageRecord usageRecord = Persistence.createTestRawUsageRecord(); UsageRecord usageRecord = Persistence.createTestUsageRecord();
logger.debug("UsageRecord : {}", usageRecord.toString()); logger.debug("UsageRecord : {}", usageRecord.toString());
JsonNode node = CouchDBPersistence.usageRecordToJsonNode(usageRecord); JsonNode node = CouchDBPersistence.usageRecordToJsonNode(usageRecord);
logger.debug("Node : {}", node.toString()); logger.debug("Node : {}", node.toString());

View File

@ -33,7 +33,7 @@ public class PersistenceTest {
int quantity = 3000; int quantity = 3000;
Calendar startTestTime = new GregorianCalendar(); Calendar startTestTime = new GregorianCalendar();
for(int i=0; i< quantity; i++){ for(int i=0; i< quantity; i++){
UsageRecord usageRecord = Persistence.createTestRawUsageRecord(); UsageRecord usageRecord = Persistence.createTestUsageRecord();
persistence.account(usageRecord); persistence.account(usageRecord);
} }
Calendar stopTestTime = new GregorianCalendar(); Calendar stopTestTime = new GregorianCalendar();

View File

@ -0,0 +1,16 @@
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n</pattern>
</encoder>
</appender>
<logger name="org.gcube" level="TRACE" />
<root level="WARN">
<appender-ref ref="STDOUT" />
</root>
</configuration>