2015-10-14 10:46:13 +02:00
/ * *
*
* /
package org.gcube.accounting.datamodel.basetypes ;
import java.io.Serializable ;
2015-12-18 17:09:05 +01:00
import org.gcube.documentstore.exception.InvalidValueException ;
2015-12-21 11:50:09 +01:00
import org.gcube.documentstore.records.Record ;
import org.gcube.documentstore.records.implementation.FieldAction ;
2015-10-14 10:46:13 +02:00
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
2016-10-12 14:15:28 +02:00
/ * *
* @author Luca Frosini ( ISTI - CNR )
* /
2016-01-28 10:42:30 +01:00
public class CalculateTaskWallDurationAction implements FieldAction {
2015-10-14 10:46:13 +02:00
2016-01-28 10:42:30 +01:00
private static final Logger logger = LoggerFactory . getLogger ( CalculateTaskWallDurationAction . class ) ;
2015-10-14 10:46:13 +02:00
@Override
2016-01-28 18:29:11 +01:00
public Serializable validate ( String key , Serializable value , Record record ) throws InvalidValueException {
2015-10-14 10:46:13 +02:00
try {
2016-01-28 10:42:30 +01:00
long wallDuration = ( ( AbstractTaskUsageRecord ) record ) . calculateWallDuration ( ) ;
if ( key . compareTo ( AbstractTaskUsageRecord . WALL_DURATION ) = = 0 ) {
2015-10-14 10:46:13 +02:00
logger . warn ( " {} is automatically computed using {} and {}. This invocation has the only effect of recalculating the value. Any provided value is ignored. " ,
2016-01-28 10:42:30 +01:00
AbstractTaskUsageRecord . WALL_DURATION , AbstractTaskUsageRecord . TASK_START_TIME , AbstractTaskUsageRecord . TASK_END_TIME ) ;
2015-10-14 10:46:13 +02:00
value = wallDuration ;
2016-01-28 18:29:11 +01:00
} else {
record . setResourceProperty ( AbstractTaskUsageRecord . WALL_DURATION , wallDuration ) ;
2015-10-14 10:46:13 +02:00
}
} catch ( InvalidValueException e ) { }
return value ;
}
}