accounting-manager/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/command/AccountingCommandGetFilterV...

123 lines
3.9 KiB
Java

package org.gcube.portlets.admin.accountingmanager.server.amservice.command;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Set;
import org.gcube.accounting.analytics.Filter;
import org.gcube.accounting.analytics.NumberedFilter;
import org.gcube.accounting.analytics.TemporalConstraint;
import org.gcube.accounting.analytics.TemporalConstraint.AggregationMode;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQueryFactory;
import org.gcube.accounting.datamodel.aggregation.AggregatedJobUsageRecord;
import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord;
import org.gcube.accounting.datamodel.aggregation.AggregatedStorageUsageRecord;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValue;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesRequest;
import org.gcube.portlets.admin.accountingmanager.shared.exception.AccountingManagerServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Giancarlo Panichi email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class AccountingCommandGetFilterValues implements
AccountingCommand<ArrayList<FilterValue>> {
private static final Logger logger = LoggerFactory
.getLogger(AccountingCommandGetFilterValues.class);
private FilterValuesRequest filterValuesRequest;
public AccountingCommandGetFilterValues(
FilterValuesRequest filterValuesRequest) {
this.filterValuesRequest = filterValuesRequest;
}
@Override
public ArrayList<FilterValue> execute()
throws AccountingManagerServiceException {
try {
logger.debug("getFilterValue(): [FilterValueRequest="
+ filterValuesRequest + "]");
if (filterValuesRequest == null
|| filterValuesRequest.getAccountingType() == null
|| filterValuesRequest.getFilterKey() == null) {
return new ArrayList<FilterValue>();
}
ArrayList<FilterValue> filteValues = new ArrayList<FilterValue>();
Set<NumberedFilter> values;
AccountingPersistenceQuery apq = AccountingPersistenceQueryFactory
.getInstance();
GregorianCalendar startDate = new GregorianCalendar();
GregorianCalendar endDate = new GregorianCalendar();
endDate.add(GregorianCalendar.YEAR, -3);
TemporalConstraint tc = new TemporalConstraint(
startDate.getTimeInMillis(), endDate.getTimeInMillis(),
AggregationMode.YEARLY);
List<Filter> filters = new ArrayList<>();
Filter filterForValue = new Filter(filterValuesRequest
.getFilterKey().getKey(), null);
filters.add(filterForValue);
switch (filterValuesRequest.getAccountingType()) {
case JOB:
values = apq.getNextPossibleValues(
AggregatedJobUsageRecord.class, tc, filters);
break;
case PORTLET:
// values = rrq.getPossibleValuesForKey(
// AggregatedPortletUsageRecord.class, filterValuesRequest
// .getFilterKey().getKey());
return filteValues;
case SERVICE:
values = apq.getNextPossibleValues(
AggregatedServiceUsageRecord.class, tc, filters);
break;
case STORAGE:
values = apq.getNextPossibleValues(
AggregatedStorageUsageRecord.class, tc, filters);
break;
case TASK:
// values = rrq.getPossibleValuesForKey(
// AggregatedTaskUsageRecord.class, filterValuesRequest
// .getFilterKey().getKey());
return filteValues;
default:
return filteValues;
}
for (NumberedFilter value : values) {
if (value != null) {
filteValues.add(new FilterValue(value.getValue()));
}
}
return filteValues;
} catch (Throwable e) {
logger.error("Error in AccountingCommandGetFilterValues(): "
+ e.getLocalizedMessage());
e.printStackTrace();
throw new AccountingManagerServiceException("No values available!");
}
}
}