accounting-lib/src/main/java/org/gcube/accounting/datamodel/validations/validators/FixDataVolumeSignAction.java

77 lines
2.3 KiB
Java

/**
*
*/
package org.gcube.accounting.datamodel.validations.validators;
import java.io.Serializable;
import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.basetypes.AbstractStorageUsageRecord;
import org.gcube.accounting.datamodel.basetypes.AbstractStorageUsageRecord.OperationType;
import org.gcube.accounting.datamodel.decorators.FieldAction;
import org.gcube.documentstore.exception.InvalidValueException;
/**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
*
*/
public class FixDataVolumeSignAction implements FieldAction {
protected Long checkIt(Long dataVolume, OperationType operationType){
switch (operationType) {
case CREATE:{
dataVolume = (dataVolume > 0) ? dataVolume : -dataVolume;
break;
}
case READ:{
dataVolume = (dataVolume > 0) ? dataVolume : -dataVolume;
break;
}
case UPDATE:{
break;
}
case DELETE:{
dataVolume = (dataVolume < 0) ? dataVolume : -dataVolume;
break;
}
default:{
break;
}
}
return dataVolume;
}
/**
* {@inheritDoc}
*/
@Override
public Comparable<? extends Serializable> validate(String key, Comparable<? extends Serializable> value, UsageRecord usageRecord) throws InvalidValueException {
try {
if(key.compareTo(AbstractStorageUsageRecord.DATA_VOLUME)==0){
OperationType operationType = (OperationType) usageRecord.getResourceProperty(AbstractStorageUsageRecord.OPERATION_TYPE);
if(operationType!=null){
ValidLongValidator validLongValidator = new ValidLongValidator();
value = validLongValidator.validate(key, value, usageRecord);
Long dataVolume = new Long((Long) value);
value = checkIt(dataVolume, operationType);
}
}
if(key.compareTo(AbstractStorageUsageRecord.OPERATION_TYPE)==0){
Long dataVolume = (Long) usageRecord.getResourceProperty(AbstractStorageUsageRecord.DATA_VOLUME);
if(dataVolume!=null){
ValidOperationTypeValidator v = new ValidOperationTypeValidator();
value = v.validate(key, value, usageRecord);
OperationType operationType = (OperationType) value;
Long newDataVolume = checkIt(dataVolume, operationType);
usageRecord.setResourceProperty(AbstractStorageUsageRecord.DATA_VOLUME, newDataVolume);
}
}
}catch(InvalidValueException e){ }
return value;
}
}