From b7fef09600d32901f3c9a0e0b60637e3479179e4 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 9 Jun 2015 12:03:59 +0000 Subject: [PATCH] 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@115264 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../datamodel/AggregatedUsageRecord.java | 42 +++++++++++--- .../accounting/datamodel/RawUsageRecord.java | 7 +-- .../annotations/MoveToOperationResult.java | 16 +++++ ...oveToAggregatedUsageRecordIdValidator.java | 3 + .../MoveToOperationResutlValidator.java | 31 ++++++++++ .../implementations/JobUsageRecord.java | 15 +---- .../implementations/PortletUsageRecord.java | 17 +----- .../implementations/ServiceUsageRecord.java | 19 ++---- .../StorageUsageUsageRecord.java | 12 +--- .../implementations/TaskUsageRecord.java | 11 +--- .../aggregated/JobUsageRecord.java | 34 +++++++++++ .../aggregated/PortletUsageRecord.java | 35 +++++++++++ .../aggregated/ServiceUsageRecord.java | 58 +++++++++++++++++++ .../aggregated/StorageStatusUsageRecord.java | 14 +---- .../aggregated/StorageUsageUsageRecord.java | 33 +++++++++++ 15 files changed, 261 insertions(+), 86 deletions(-) create mode 100644 src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/annotations/MoveToOperationResult.java create mode 100644 src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/validators/MoveToOperationResutlValidator.java create mode 100644 src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/JobUsageRecord.java create mode 100644 src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/PortletUsageRecord.java create mode 100644 src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/ServiceUsageRecord.java create mode 100644 src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/StorageUsageUsageRecord.java diff --git a/src/main/java/org/gcube/accounting/datamodel/AggregatedUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/AggregatedUsageRecord.java index 18f0e44..969783e 100644 --- a/src/main/java/org/gcube/accounting/datamodel/AggregatedUsageRecord.java +++ b/src/main/java/org/gcube/accounting/datamodel/AggregatedUsageRecord.java @@ -3,26 +3,54 @@ */ package org.gcube.accounting.datamodel; +import java.util.List; + import org.gcube.accounting.exception.InvalidValueException; /** * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ */ -public interface AggregatedUsageRecord extends UsageRecord { +public interface AggregatedUsageRecord extends UsageRecord { /** - * Return the id of the usage record aggregating this - * @return Aggregated Id + * Return the id of the usage record aggregating this, null if this record + * has not been aggregated by any record. + * This method id deprecated. Use {@link #getAggregatedUsageRecordId()} + * instead. + * @return Aggregated Id The ID of the aggregation Record */ - @Override + @Deprecated public String getAggregatedId(); /** - * Set the id of the usage record aggregating this - * @param aggregatedId + * Set the id of the usage record aggregating this. + * This method id deprecated. Use {@link #setAggregatedUsageRecordId()} + * instead. + * @param aggregatedId The ID of the aggregation Record * @throws InvalidValueException */ - @Override + @Deprecated public void setAggregatedId(String aggregatedId) throws InvalidValueException; + /** + * Return the id of the usage record aggregating this, null if this record + * has not been aggregated by any record. + * @return Aggregated Id The ID of the aggregation Record + */ + public String getAggregatedUsageRecordId(); + + /** + * Set the id of the usage record aggregating this + * @param aggregatedId The ID of the aggregation Record + * @throws InvalidValueException + */ + public void setAggregatedUsageRecordId(String aggregatedId) throws InvalidValueException; + + /** + * + * @param records + * @return + */ + public List aggregate(List records); + } diff --git a/src/main/java/org/gcube/accounting/datamodel/RawUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/RawUsageRecord.java index 1132a24..d781cd1 100644 --- a/src/main/java/org/gcube/accounting/datamodel/RawUsageRecord.java +++ b/src/main/java/org/gcube/accounting/datamodel/RawUsageRecord.java @@ -35,7 +35,7 @@ import org.slf4j.LoggerFactory; * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * */ -public abstract class RawUsageRecord implements UsageRecord, Serializable { +public abstract class RawUsageRecord implements UsageRecord, Serializable { private static Logger logger = LoggerFactory.getLogger(RawUsageRecord.class); @@ -489,11 +489,6 @@ public abstract class RawUsageRecord implements UsageRecord, Serializable { } return 1; } - - protected List aggregate(List records){ - // TODO implements - throw new UnsupportedOperationException(); - } /** diff --git a/src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/annotations/MoveToOperationResult.java b/src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/annotations/MoveToOperationResult.java new file mode 100644 index 0000000..5971ffa --- /dev/null +++ b/src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/annotations/MoveToOperationResult.java @@ -0,0 +1,16 @@ +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.ValidatorField; +import org.gcube.accounting.datamodel.deprecationmanagement.validators.MoveToAggregatedUsageRecordIdValidator; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +@ValidatorField(managed=MoveToAggregatedUsageRecordIdValidator.class) +public @interface MoveToOperationResult { + +} diff --git a/src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/validators/MoveToAggregatedUsageRecordIdValidator.java b/src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/validators/MoveToAggregatedUsageRecordIdValidator.java index 997f048..0e5e451 100644 --- a/src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/validators/MoveToAggregatedUsageRecordIdValidator.java +++ b/src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/validators/MoveToAggregatedUsageRecordIdValidator.java @@ -7,6 +7,7 @@ import java.io.Serializable; import org.gcube.accounting.datamodel.UsageRecord; import org.gcube.accounting.datamodel.decorators.ValidatorAction; +import org.gcube.accounting.datamodel.validations.validators.NotEmptyIfNotNullValidator; import org.gcube.accounting.exception.InvalidValueException; /** @@ -20,6 +21,8 @@ public class MoveToAggregatedUsageRecordIdValidator implements ValidatorAction { */ @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; } diff --git a/src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/validators/MoveToOperationResutlValidator.java b/src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/validators/MoveToOperationResutlValidator.java new file mode 100644 index 0000000..f614a95 --- /dev/null +++ b/src/main/java/org/gcube/accounting/datamodel/deprecationmanagement/validators/MoveToOperationResutlValidator.java @@ -0,0 +1,31 @@ +/** + * + */ +package org.gcube.accounting.datamodel.deprecationmanagement.validators; + +import java.io.Serializable; + +import org.gcube.accounting.datamodel.UsageRecord; +import org.gcube.accounting.datamodel.UsageRecord.OperationResult; +import org.gcube.accounting.datamodel.decorators.ValidatorAction; +import org.gcube.accounting.datamodel.validations.validators.ValidOperationResultValidator; +import org.gcube.accounting.exception.InvalidValueException; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public class MoveToOperationResutlValidator implements ValidatorAction { + + /** + * {@inheritDoc} + */ + @Override + public Serializable validate(String key, Serializable value, UsageRecord usageRecord) throws InvalidValueException { + ValidOperationResultValidator vorv = new ValidOperationResultValidator(); + value = vorv.validate(key, value, usageRecord); + usageRecord.setOperationResult((OperationResult) value); + return value; + } + +} diff --git a/src/main/java/org/gcube/accounting/datamodel/implementations/JobUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/implementations/JobUsageRecord.java index fc20041..3583510 100644 --- a/src/main/java/org/gcube/accounting/datamodel/implementations/JobUsageRecord.java +++ b/src/main/java/org/gcube/accounting/datamodel/implementations/JobUsageRecord.java @@ -4,12 +4,12 @@ package org.gcube.accounting.datamodel.implementations; import java.util.Calendar; -import java.util.List; import org.gcube.accounting.datamodel.RawUsageRecord; import org.gcube.accounting.datamodel.SingleUsageRecord; import org.gcube.accounting.datamodel.decorators.ComputedField; import org.gcube.accounting.datamodel.decorators.RequiredField; +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; @@ -20,7 +20,7 @@ import org.gcube.accounting.exception.InvalidValueException; * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * */ -public class JobUsageRecord extends RawUsageRecord implements SingleUsageRecord { +public class JobUsageRecord extends RawUsageRecord implements SingleUsageRecord { /** * Generated Serial Version UID @@ -42,7 +42,7 @@ public class JobUsageRecord extends RawUsageRecord implements Si @RequiredField @ValidLong public static final String JOB_END_TIME = "jobEndTime"; - @ValidOperationResult + @ValidOperationResult @MoveToOperationResult protected static final String JOB_STATUS = "jobStatus"; @ValidInteger @@ -143,13 +143,4 @@ public class JobUsageRecord extends RawUsageRecord implements Si return wallDuration; } - /** - * {@inheritDoc} - */ - @Override - public List aggregate(List records) { - // TODO implements - throw new UnsupportedOperationException(); - } - } diff --git a/src/main/java/org/gcube/accounting/datamodel/implementations/PortletUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/implementations/PortletUsageRecord.java index cd95a4b..b60cf08 100644 --- a/src/main/java/org/gcube/accounting/datamodel/implementations/PortletUsageRecord.java +++ b/src/main/java/org/gcube/accounting/datamodel/implementations/PortletUsageRecord.java @@ -3,8 +3,6 @@ */ package org.gcube.accounting.datamodel.implementations; -import java.util.List; - import org.gcube.accounting.datamodel.RawUsageRecord; import org.gcube.accounting.datamodel.SingleUsageRecord; import org.gcube.accounting.datamodel.decorators.RequiredField; @@ -17,21 +15,21 @@ import org.gcube.accounting.exception.InvalidValueException; * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * */ -public class PortletUsageRecord extends RawUsageRecord implements SingleUsageRecord { +public class PortletUsageRecord extends RawUsageRecord implements SingleUsageRecord { /** * Generated Serial Version UID */ private static final long serialVersionUID = 8339324883678974869L; - @DeprecatedWarning @NotEmptyIfNotNull + @NotEmptyIfNotNull @DeprecatedWarning protected static final String USER_ID = "userId"; @RequiredField @NotEmpty public static final String PORTLET_ID = "portletId"; @RequiredField @NotEmpty public static final String OPERATION_ID = "operationId"; - // TODO More + // TODO check ASL for more field public PortletUsageRecord(){ super(); @@ -63,13 +61,4 @@ public class PortletUsageRecord extends RawUsageRecord imple setResourceSpecificProperty(OPERATION_ID, operationId); } - /** - * {@inheritDoc} - */ - @Override - public List aggregate(List records) { - // TODO implements - throw new UnsupportedOperationException(); - } - } diff --git a/src/main/java/org/gcube/accounting/datamodel/implementations/ServiceUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/implementations/ServiceUsageRecord.java index a650d60..f4ad7fb 100644 --- a/src/main/java/org/gcube/accounting/datamodel/implementations/ServiceUsageRecord.java +++ b/src/main/java/org/gcube/accounting/datamodel/implementations/ServiceUsageRecord.java @@ -3,10 +3,9 @@ */ package org.gcube.accounting.datamodel.implementations; -import java.util.List; - import org.gcube.accounting.datamodel.RawUsageRecord; import org.gcube.accounting.datamodel.SingleUsageRecord; +import org.gcube.accounting.datamodel.decorators.AggregatedField; import org.gcube.accounting.datamodel.decorators.RequiredField; import org.gcube.accounting.datamodel.deprecationmanagement.annotations.DeprecatedWarning; import org.gcube.accounting.datamodel.validations.annotations.NotEmpty; @@ -18,7 +17,7 @@ import org.gcube.accounting.exception.InvalidValueException; * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * */ -public class ServiceUsageRecord extends RawUsageRecord implements SingleUsageRecord { +public class ServiceUsageRecord extends RawUsageRecord implements SingleUsageRecord { /** * Generated Serial Version UID @@ -33,11 +32,11 @@ public class ServiceUsageRecord extends RawUsageRecord imple public static final String REF_HOST = "refHost"; @RequiredField @NotEmpty public static final String REF_VM = "refVM"; - @DeprecatedWarning @NotEmpty + @NotEmpty @DeprecatedWarning public static final String DOMAIN = "domain"; - @ValidInteger + @ValidInteger @AggregatedField protected static final String INVOCATION_COUNT = "invocationCount"; - @ValidInteger + @ValidInteger @AggregatedField protected static final String AVERAGE_INVOCATION_COUNT = "averageInvocationTime"; @NotEmpty public static final String SERVICE_CLASS = "serviceClass"; @@ -120,12 +119,4 @@ public class ServiceUsageRecord extends RawUsageRecord imple setResourceSpecificProperty(SERVICE_NAME, serviceName); } - /** - * {@inheritDoc} - */ - @Override - public List aggregate(List records) { - // TODO implements - throw new UnsupportedOperationException(); - } } diff --git a/src/main/java/org/gcube/accounting/datamodel/implementations/StorageUsageUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/implementations/StorageUsageUsageRecord.java index 80d60c2..6b412e2 100644 --- a/src/main/java/org/gcube/accounting/datamodel/implementations/StorageUsageUsageRecord.java +++ b/src/main/java/org/gcube/accounting/datamodel/implementations/StorageUsageUsageRecord.java @@ -3,8 +3,6 @@ */ package org.gcube.accounting.datamodel.implementations; -import java.util.List; - import org.gcube.accounting.datamodel.RawUsageRecord; import org.gcube.accounting.datamodel.SingleUsageRecord; import org.gcube.accounting.datamodel.decorators.RequiredField; @@ -19,7 +17,7 @@ import org.gcube.accounting.exception.InvalidValueException; * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * */ -public class StorageUsageUsageRecord extends RawUsageRecord implements SingleUsageRecord { +public class StorageUsageUsageRecord extends RawUsageRecord implements SingleUsageRecord { /** * Generated Serial Version UID @@ -127,12 +125,4 @@ public class StorageUsageUsageRecord extends RawUsageRecord aggregate(List records) { - // TODO implements - throw new UnsupportedOperationException(); - } } diff --git a/src/main/java/org/gcube/accounting/datamodel/implementations/TaskUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/implementations/TaskUsageRecord.java index f485510..6427d9e 100644 --- a/src/main/java/org/gcube/accounting/datamodel/implementations/TaskUsageRecord.java +++ b/src/main/java/org/gcube/accounting/datamodel/implementations/TaskUsageRecord.java @@ -4,7 +4,6 @@ package org.gcube.accounting.datamodel.implementations; import java.util.Calendar; -import java.util.List; import org.gcube.accounting.datamodel.RawUsageRecord; import org.gcube.accounting.datamodel.SingleUsageRecord; @@ -20,7 +19,7 @@ import org.gcube.accounting.exception.InvalidValueException; * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ * */ -public class TaskUsageRecord extends RawUsageRecord implements SingleUsageRecord { +public class TaskUsageRecord extends RawUsageRecord implements SingleUsageRecord { /** * Generated Serial Version UID @@ -200,12 +199,4 @@ public class TaskUsageRecord extends RawUsageRecord implements setResourceSpecificProperty(PROCESSORS, processors); } - /** - * {@inheritDoc} - */ - @Override - public List aggregate(List records) { - // TODO implements - throw new UnsupportedOperationException(); - } } diff --git a/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/JobUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/JobUsageRecord.java new file mode 100644 index 0000000..38048ed --- /dev/null +++ b/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/JobUsageRecord.java @@ -0,0 +1,34 @@ +/** + * + */ +package org.gcube.accounting.datamodel.implementations.aggregated; + +import java.util.List; + +import org.gcube.accounting.datamodel.AggregatedUsageRecord; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public class JobUsageRecord extends org.gcube.accounting.datamodel.implementations.JobUsageRecord implements AggregatedUsageRecord { + + /** + * Generated Serial Version UID + */ + private static final long serialVersionUID = -3376423316219914682L; + + public JobUsageRecord(){ + super(); + } + + /** + * {@inheritDoc} + */ + @Override + public List aggregate(List records) { + // TODO implements + throw new UnsupportedOperationException(); + } + +} diff --git a/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/PortletUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/PortletUsageRecord.java new file mode 100644 index 0000000..87819be --- /dev/null +++ b/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/PortletUsageRecord.java @@ -0,0 +1,35 @@ +/** + * + */ +package org.gcube.accounting.datamodel.implementations.aggregated; + +import java.util.List; + +import org.gcube.accounting.datamodel.AggregatedUsageRecord; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public class PortletUsageRecord extends org.gcube.accounting.datamodel.implementations.PortletUsageRecord implements AggregatedUsageRecord { + + + /** + * Generated Serial version UID + */ + private static final long serialVersionUID = 7445526162102677455L; + + public PortletUsageRecord(){ + super(); + } + + /** + * {@inheritDoc} + */ + @Override + public List aggregate(List records) { + // TODO implements + throw new UnsupportedOperationException(); + } + +} diff --git a/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/ServiceUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/ServiceUsageRecord.java new file mode 100644 index 0000000..6a9aed2 --- /dev/null +++ b/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/ServiceUsageRecord.java @@ -0,0 +1,58 @@ +/** + * + */ +package org.gcube.accounting.datamodel.implementations.aggregated; + +import java.util.List; + +import org.gcube.accounting.datamodel.AggregatedUsageRecord; +import org.gcube.accounting.datamodel.decorators.AggregatedField; +import org.gcube.accounting.datamodel.validations.annotations.ValidInteger; +import org.gcube.accounting.exception.InvalidValueException; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public class ServiceUsageRecord extends org.gcube.accounting.datamodel.implementations.ServiceUsageRecord implements AggregatedUsageRecord { + + /** + * Generated Serial Version UID + */ + private static final long serialVersionUID = 6387584974618335623L; + + @ValidInteger @AggregatedField + protected static final String INVOCATION_COUNT = "invocationCount"; + @ValidInteger @AggregatedField + protected static final String AVERAGE_INVOCATION_COUNT = "averageInvocationTime"; + + public ServiceUsageRecord(){ + super(); + } + + + public String getInvocationCount() { + return (String) this.resourceSpecificProperties.get(INVOCATION_COUNT); + } + + public void setInvocationCount(String invocationCount) throws InvalidValueException { + setResourceSpecificProperty(INVOCATION_COUNT, invocationCount); + } + + public String getAverageInvocationTime() { + return (String) this.resourceSpecificProperties.get(AVERAGE_INVOCATION_COUNT); + } + + public void setAverageInvocationTime(String averageInvocationTime) throws InvalidValueException { + setResourceSpecificProperty(AVERAGE_INVOCATION_COUNT, averageInvocationTime); + } + + /** + * {@inheritDoc} + */ + @Override + public List aggregate(List records) { + // TODO implements + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/StorageStatusUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/StorageStatusUsageRecord.java index 64ab607..1918372 100644 --- a/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/StorageStatusUsageRecord.java +++ b/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/StorageStatusUsageRecord.java @@ -3,8 +3,6 @@ */ package org.gcube.accounting.datamodel.implementations.aggregated; -import java.util.List; - import org.gcube.accounting.datamodel.RawUsageRecord; import org.gcube.accounting.datamodel.validations.annotations.NotEmpty; import org.gcube.accounting.datamodel.validations.annotations.ValidInteger; @@ -14,7 +12,8 @@ import org.gcube.accounting.exception.InvalidValueException; /** * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ */ -public class StorageStatusUsageRecord extends RawUsageRecord { +@Deprecated +public class StorageStatusUsageRecord extends RawUsageRecord { /** * Generated Serial Version UID @@ -76,13 +75,4 @@ public class StorageStatusUsageRecord extends RawUsageRecord aggregate(List records) { - // TODO implements - throw new UnsupportedOperationException(); - } - } diff --git a/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/StorageUsageUsageRecord.java b/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/StorageUsageUsageRecord.java new file mode 100644 index 0000000..c605d81 --- /dev/null +++ b/src/main/java/org/gcube/accounting/datamodel/implementations/aggregated/StorageUsageUsageRecord.java @@ -0,0 +1,33 @@ +/** + * + */ +package org.gcube.accounting.datamodel.implementations.aggregated; + +import java.util.List; + +import org.gcube.accounting.datamodel.AggregatedUsageRecord; + +/** + * @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/ + * + */ +public class StorageUsageUsageRecord extends org.gcube.accounting.datamodel.implementations.StorageUsageUsageRecord implements AggregatedUsageRecord { + + /** + * Generated Serial Version UID + */ + private static final long serialVersionUID = 1082525518686785682L; + + public StorageUsageUsageRecord(){ + super(); + } + + /** + * {@inheritDoc} + */ + @Override + public List aggregate(List records) { + // TODO implements + throw new UnsupportedOperationException(); + } +}