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@115288 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
c0038b9efb
commit
80f9872aff
|
@ -5,6 +5,10 @@ package org.gcube.accounting.datamodel;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -21,15 +25,15 @@ 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.ComputedField;
|
||||||
import org.gcube.accounting.datamodel.decorators.RequiredField;
|
|
||||||
import org.gcube.accounting.datamodel.decorators.FieldAction;
|
import org.gcube.accounting.datamodel.decorators.FieldAction;
|
||||||
import org.gcube.accounting.datamodel.decorators.FieldDecorator;
|
import org.gcube.accounting.datamodel.decorators.FieldDecorator;
|
||||||
|
import org.gcube.accounting.datamodel.decorators.RequiredField;
|
||||||
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.validations.annotations.NotEmpty;
|
import org.gcube.accounting.datamodel.validations.annotations.NotEmpty;
|
||||||
import org.gcube.accounting.datamodel.validations.annotations.NotEmptyIfNotNull;
|
import org.gcube.accounting.datamodel.validations.annotations.NotEmptyIfNotNull;
|
||||||
import org.gcube.accounting.datamodel.validations.annotations.ValidLong;
|
import org.gcube.accounting.datamodel.validations.annotations.ValidLong;
|
||||||
import org.gcube.accounting.datamodel.validations.annotations.ValidOperationResult;
|
import org.gcube.accounting.datamodel.validations.annotations.ValidOperationResult;
|
||||||
|
import org.gcube.accounting.datamodel.validations.validators.NotEmptyIfNotNullValidator;
|
||||||
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;
|
||||||
|
@ -55,10 +59,10 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
|
||||||
@AggregatedField @ValidLong
|
@AggregatedField @ValidLong
|
||||||
protected static final String END_TIME = "endTime";
|
protected static final String END_TIME = "endTime";
|
||||||
|
|
||||||
//@RequiredField @NotEmpty
|
@DeprecatedWarning
|
||||||
//protected static final String RESOURCE_TYPE = "resourceType";
|
protected static final String RESOURCE_TYPE = "resourceType";
|
||||||
protected static final String USAGE_RECORD_TYPE = "resourceType";
|
@RequiredField @NotEmpty
|
||||||
|
protected static final String USAGE_RECORD_TYPE = "UsageRecordType";
|
||||||
|
|
||||||
@RequiredField @NotEmpty
|
@RequiredField @NotEmpty
|
||||||
public static final String RESOURCE_SCOPE = "resourceScope";
|
public static final String RESOURCE_SCOPE = "resourceScope";
|
||||||
|
@ -73,6 +77,22 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
|
||||||
@NotEmptyIfNotNull @MoveToAggregatedUsageRecordId
|
@NotEmptyIfNotNull @MoveToAggregatedUsageRecordId
|
||||||
protected static final String AGGREGATED_ID = "aggregatedId";
|
protected static final String AGGREGATED_ID = "aggregatedId";
|
||||||
|
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@FieldDecorator(managed=MoveToAggregatedUsageRecordIdAction.class)
|
||||||
|
protected @interface MoveToAggregatedUsageRecordId { }
|
||||||
|
protected class MoveToAggregatedUsageRecordIdAction implements FieldAction {
|
||||||
|
@Override
|
||||||
|
public Serializable validate(String key, Serializable value, UsageRecord usageRecord) throws InvalidValueException {
|
||||||
|
NotEmptyIfNotNullValidator neinnv = new NotEmptyIfNotNullValidator();
|
||||||
|
value = neinnv.validate(key, value, usageRecord);
|
||||||
|
usageRecord.setAggregatedUsageRecordId((String) value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@RequiredField @ValidOperationResult
|
@RequiredField @ValidOperationResult
|
||||||
public static final String OPERATION_RESULT = "operationResult";
|
public static final String OPERATION_RESULT = "operationResult";
|
||||||
|
|
||||||
|
@ -308,14 +328,20 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable {
|
||||||
@Override
|
@Override
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public String getResourceType(){
|
public String getResourceType(){
|
||||||
return getUsageRecordType();
|
return (String) this.resourceProperties.get(RESOURCE_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public void setResourceType(String resourceType){}
|
public void setResourceType(String resourceType){
|
||||||
|
try {
|
||||||
|
setResourceProperty(RESOURCE_TYPE, resourceType);
|
||||||
|
}catch(InvalidValueException e){
|
||||||
|
logger.error("Unable to Set {}", RESOURCE_TYPE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
package org.gcube.accounting.datamodel.deprecationmanagement.annotations;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
import org.gcube.accounting.datamodel.decorators.FieldDecorator;
|
|
||||||
import org.gcube.accounting.datamodel.deprecationmanagement.validators.MoveToAggregatedUsageRecordIdAction;
|
|
||||||
|
|
||||||
@Target(ElementType.FIELD)
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@FieldDecorator(managed=MoveToAggregatedUsageRecordIdAction.class)
|
|
||||||
public @interface MoveToAggregatedUsageRecordId {
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package org.gcube.accounting.datamodel.deprecationmanagement.validators;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import org.gcube.accounting.datamodel.UsageRecord;
|
|
||||||
import org.gcube.accounting.datamodel.decorators.FieldAction;
|
|
||||||
import org.gcube.accounting.datamodel.validations.validators.NotEmptyIfNotNullValidator;
|
|
||||||
import org.gcube.accounting.exception.InvalidValueException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class MoveToAggregatedUsageRecordIdAction implements FieldAction {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Serializable validate(String key, Serializable value, UsageRecord usageRecord) throws InvalidValueException {
|
|
||||||
NotEmptyIfNotNullValidator neinnv = new NotEmptyIfNotNullValidator();
|
|
||||||
value = neinnv.validate(key, value, usageRecord);
|
|
||||||
usageRecord.setAggregatedUsageRecordId((String) value);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -22,7 +22,6 @@ import org.gcube.accounting.datamodel.deprecationmanagement.annotations.MoveToOp
|
||||||
import org.gcube.accounting.datamodel.validations.annotations.NotEmpty;
|
import org.gcube.accounting.datamodel.validations.annotations.NotEmpty;
|
||||||
import org.gcube.accounting.datamodel.validations.annotations.ValidInteger;
|
import org.gcube.accounting.datamodel.validations.annotations.ValidInteger;
|
||||||
import org.gcube.accounting.datamodel.validations.annotations.ValidLong;
|
import org.gcube.accounting.datamodel.validations.annotations.ValidLong;
|
||||||
import org.gcube.accounting.datamodel.validations.annotations.ValidOperationResult;
|
|
||||||
import org.gcube.accounting.exception.InvalidValueException;
|
import org.gcube.accounting.exception.InvalidValueException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,7 +35,7 @@ public class JobUsageRecord extends RawUsageRecord implements SingleUsageRecord
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -8648691183939346858L;
|
private static final long serialVersionUID = -8648691183939346858L;
|
||||||
|
|
||||||
public static enum JobStatus {
|
protected static enum JobStatus {
|
||||||
completed, failed
|
completed, failed
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -50,28 +49,19 @@ public class JobUsageRecord extends RawUsageRecord implements SingleUsageRecord
|
||||||
public static final String JOB_START_TIME = "jobStartTime";
|
public static final String JOB_START_TIME = "jobStartTime";
|
||||||
@RequiredField @ValidLong @CalculateWallDuration
|
@RequiredField @ValidLong @CalculateWallDuration
|
||||||
public static final String JOB_END_TIME = "jobEndTime";
|
public static final String JOB_END_TIME = "jobEndTime";
|
||||||
|
@MoveToOperationResult
|
||||||
@ValidOperationResult @MoveToOperationResult
|
|
||||||
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";
|
||||||
@ComputedField @ValidLong @CalculateWallDuration
|
@ComputedField @ValidLong @CalculateWallDuration
|
||||||
protected static final String WALL_DURATION = "wallDuration";
|
protected static final String WALL_DURATION = "wallDuration";
|
||||||
|
|
||||||
|
|
||||||
@Target(ElementType.FIELD)
|
@Target(ElementType.FIELD)
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@FieldDecorator(managed=CalculateWallDurationAction.class)
|
@FieldDecorator(managed=CalculateWallDurationAction.class)
|
||||||
protected @interface CalculateWallDuration {
|
protected @interface CalculateWallDuration {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected class CalculateWallDurationAction implements FieldAction {
|
protected class CalculateWallDurationAction implements FieldAction {
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Serializable validate(String key, Serializable value, UsageRecord usageRecord) throws InvalidValueException {
|
public Serializable validate(String key, Serializable value, UsageRecord usageRecord) throws InvalidValueException {
|
||||||
try {
|
try {
|
||||||
|
@ -87,7 +77,6 @@ public class JobUsageRecord extends RawUsageRecord implements SingleUsageRecord
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -150,15 +139,17 @@ public class JobUsageRecord extends RawUsageRecord implements SingleUsageRecord
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public JobStatus getJobStatus() {
|
protected JobStatus getJobStatus() {
|
||||||
return JobStatus.values()[((OperationResult) this.resourceProperties.get(OPERATION_RESULT)).ordinal()];
|
return JobStatus.values()[((OperationResult) this.resourceProperties.get(OPERATION_RESULT)).ordinal()];
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public void setJobStatus(JobStatus jobStatus) throws InvalidValueException {
|
protected void setJobStatus(JobStatus jobStatus) throws InvalidValueException {
|
||||||
setResourceProperty(OPERATION_RESULT, OperationResult.values()[jobStatus.ordinal()]);
|
setResourceProperty(OPERATION_RESULT, jobStatus);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
public int getVmsUsed() {
|
public int getVmsUsed() {
|
||||||
return (Integer) this.resourceProperties.get(VMS_USED);
|
return (Integer) this.resourceProperties.get(VMS_USED);
|
||||||
|
|
Loading…
Reference in New Issue