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

125 lines
4.9 KiB
Java

package org.gcube.portlets.admin.accountingmanager.server.amservice.command;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashSet;
import java.util.List;
import java.util.SortedMap;
import org.gcube.accounting.analytics.Info;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQueryFactory;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQueryBasic;
import org.gcube.portlets.admin.accountingmanager.server.amservice.response.SeriesResponse4JobBasic;
import org.gcube.portlets.admin.accountingmanager.server.amservice.response.SeriesResponse4PortletBasic;
import org.gcube.portlets.admin.accountingmanager.server.amservice.response.SeriesResponse4ServiceBasic;
import org.gcube.portlets.admin.accountingmanager.server.amservice.response.SeriesResponse4StorageBasic;
import org.gcube.portlets.admin.accountingmanager.server.amservice.response.SeriesResponse4TaskBasic;
import org.gcube.portlets.admin.accountingmanager.server.amservice.response.SeriesResponseBuilder;
import org.gcube.portlets.admin.accountingmanager.server.amservice.response.SeriesResponseDirector;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesResponse;
import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Giancarlo Panichi
*
*
*/
public class AccountingCommandBasic implements AccountingCommand<SeriesResponse> {
private static final Logger logger = LoggerFactory.getLogger(AccountingCommandBasic.class);
private AccountingQueryBasic accountingQueryBasic;
private AccountingType accountingType;
public AccountingCommandBasic(AccountingQueryBasic accountingQueryBasic, AccountingType accountingType) {
this.accountingQueryBasic = accountingQueryBasic;
this.accountingType = accountingType;
}
@Override
public SeriesResponse execute() throws ServiceException {
try {
//if (accountingQueryBasic.getScope() != null) {
// AccountingPersistenceQueryFactory.getForcedQueryScope().set(accountingQueryBasic.getScope());
//}
AccountingPersistenceQuery apq = AccountingPersistenceQueryFactory.getInstance();
SortedMap<Calendar, Info> sm = null;
logger.debug("Execute Basic()");
apq.setRequestedRecords(accountingQueryBasic.getType());
HashSet<String> ctx=null;
if(accountingQueryBasic.getContext()!=null&&accountingQueryBasic.getContext().getContexts()!=null
&&!accountingQueryBasic.getContext().getContexts().isEmpty()){
ctx=new HashSet<String>(accountingQueryBasic.getContext().getContexts());
}
apq.setContexts(ctx);
apq.setTemporalConstraint(accountingQueryBasic.getTemporalConstraint());
apq.setFilters(accountingQueryBasic.getFilters());
sm=apq.getTimeSeries(true);
//sm = apq.getTimeSeries(accountingQueryBasic.getType(), accountingQueryBasic.getTemporalConstraint(),
// accountingQueryBasic.getFilters(), true);
//if (accountingQueryBasic.getScope() != null) {
// AccountingPersistenceQueryFactory.getForcedQueryScope().remove();
//}
if (sm == null || sm.values() == null) {
throw new ServiceException("Error retrieving info: sorted map is null!");
}
List<Info> infos = new ArrayList<>(sm.values());
logger.debug("Retrieved Infos");
logger.debug("Infos: " + infos);
SeriesResponseBuilder seriesResponseBuilder = getSeriesResponseBuilder(accountingType, infos);
SeriesResponseDirector seriesResponseDirector = new SeriesResponseDirector();
seriesResponseDirector.setSeriesResponseBuilder(seriesResponseBuilder);
seriesResponseDirector.constructSeriesResponse();
SeriesResponse seriesResponse = seriesResponseDirector.getSeriesResponse();
if (seriesResponse == null) {
throw new ServiceException("Error creating series response!");
}
logger.debug("SeriesResponse Created: " + seriesResponse);
return seriesResponse;
} catch (Throwable e) {
logger.error("Error in AccountingCommandBasic(): " + e.getLocalizedMessage());
e.printStackTrace();
throw new ServiceException("No data available!");
}
}
private SeriesResponseBuilder getSeriesResponseBuilder(AccountingType accountingType, List<Info> infos)
throws ServiceException {
if (accountingType == null) {
throw new ServiceException("Error accounting type is null");
}
switch (accountingType) {
case JOB:
return new SeriesResponse4JobBasic(infos);
case PORTLET:
return new SeriesResponse4PortletBasic(infos);
case SERVICE:
return new SeriesResponse4ServiceBasic(infos);
case STORAGE:
return new SeriesResponse4StorageBasic(infos);
case TASK:
return new SeriesResponse4TaskBasic(infos);
default:
throw new ServiceException("Error request type is unknow!");
}
}
}