refs #200: Create accouting-lib library

https://support.d4science.org/issues/200
Fixing data model

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/accounting/accounting-lib@115300 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Luca Frosini 2015-06-10 14:40:24 +00:00
parent 70777d4a1b
commit b4d24f8448
4 changed files with 95 additions and 4 deletions

View File

@ -14,6 +14,7 @@ import org.gcube.accounting.datamodel.validations.annotations.NotEmptyIfNotNull;
import org.gcube.accounting.datamodel.validations.annotations.ValidIP;
import org.gcube.accounting.datamodel.validations.annotations.ValidInteger;
import org.gcube.accounting.datamodel.validations.annotations.ValidLong;
import org.gcube.accounting.datamodel.validations.annotations.ValidOperationType;
import org.gcube.accounting.exception.InvalidValueException;
/**
@ -27,11 +28,19 @@ public class StorageUsageRecord extends RawUsageRecord implements SingleUsageRec
*/
private static final long serialVersionUID = 1381025822586583326L;
/*
* Actually workspace uses
* DOWNLOAD, UPLOAD, COPY, MOVE, DELETE,
*/
public enum OperationType {
GET, PUT, UPDATE, DELETE
}
@NotEmptyIfNotNull
public static final String PROVIDER_ID = "providerId";
@NotEmptyIfNotNull
public static final String OBJECT_URI = "objectURI";
@RequiredField @NotEmpty
@RequiredField @ValidOperationType
public static final String OPERATION_TYPE = "operationType";
@NotEmpty
public static final String QUALIFIER = "qualifier";

View File

@ -11,10 +11,10 @@ import org.gcube.accounting.datamodel.RawUsageRecord;
import org.gcube.accounting.datamodel.SingleUsageRecord;
import org.gcube.accounting.datamodel.decorators.RequiredField;
import org.gcube.accounting.datamodel.deprecationmanagement.annotations.DeprecatedWarning;
import org.gcube.accounting.datamodel.deprecationmanagement.annotations.MoveToOperationResult;
import org.gcube.accounting.datamodel.validations.annotations.NotEmpty;
import org.gcube.accounting.datamodel.validations.annotations.ValidInteger;
import org.gcube.accounting.datamodel.validations.annotations.ValidLong;
import org.gcube.accounting.datamodel.validations.annotations.ValidOperationResult;
import org.gcube.accounting.exception.InvalidValueException;
/**
@ -46,8 +46,10 @@ public class TaskUsageRecord extends RawUsageRecord implements SingleUsageRecord
public static final String USAGE_START_TIME = "usageStartTime";
@RequiredField @ValidLong
public static final String USAGE_END_TIME = "usageEndTime";
@ValidOperationResult
public static final String USAGE_PHASE = "usagePhase";
@MoveToOperationResult
protected static final String USAGE_PHASE = "usagePhase";
@ValidInteger
public static final String INPUT_FILES_NUMBER = "inputFilesNumber";
@ValidLong
@ -134,6 +136,7 @@ public class TaskUsageRecord extends RawUsageRecord implements SingleUsageRecord
}
/*
public USAGE_PHASE getUsagePhase() {
return (USAGE_PHASE) this.resourceProperties.get(USAGE_PHASE);
}
@ -141,6 +144,7 @@ public class TaskUsageRecord extends RawUsageRecord implements SingleUsageRecord
public void setUsagePhase(USAGE_PHASE usagePhase) throws InvalidValueException {
setResourceProperty(USAGE_PHASE, usagePhase);
}
*/
public int getInputFilesNumber() {
return (Integer) this.resourceProperties.get(INPUT_FILES_NUMBER);

View File

@ -0,0 +1,16 @@
package org.gcube.accounting.datamodel.validations.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.validations.validators.ValidOperationTypeValidator;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@FieldDecorator(managed=ValidOperationTypeValidator.class)
public @interface ValidOperationType {
}

View File

@ -0,0 +1,62 @@
package org.gcube.accounting.datamodel.validations.validators;
import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.UsageRecord.OperationResult;
import org.gcube.accounting.datamodel.decorators.FieldAction;
import org.gcube.accounting.datamodel.implementations.StorageUsageRecord.OperationType;
import org.gcube.accounting.exception.InvalidValueException;
public class ValidOperationTypeValidator implements FieldAction {
private static final String ERROR = String.format("Not Instance of %s", OperationResult.class.getSimpleName());
/**
* {@inheritDoc}
*/
@SuppressWarnings("rawtypes")
@Override
public Serializable validate(String key, Serializable value, UsageRecord usageRecord) throws InvalidValueException {
if(value instanceof OperationType){
return value;
}
try {
if(value instanceof String){
try{
OperationType operationType = OperationType.valueOf((String) value);
if(operationType !=null){
return operationType;
}
} catch(Exception e){
// Trying another way
}
try{
Integer integer = Integer.getInteger((String) value);
if(integer!=null){
value = integer;
}
} catch(Exception e){
// Trying another way
}
}
if(value instanceof Integer){
return OperationType.values()[(Integer) value];
}
if(value instanceof Enum){
return OperationType.values()[((Enum) value).ordinal()];
}
}catch(Exception e){
throw new InvalidValueException(ERROR, e.getCause());
}
throw new InvalidValueException(ERROR);
}
}