accounting-dashboard/src/main/java/org/gcube/portlets/user/accountingdashboard/server/accounting/AccountingService.java

168 lines
5.8 KiB
Java

package org.gcube.portlets.user.accountingdashboard.server.accounting;
import java.util.ArrayList;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.gcube.accounting.accounting.summary.access.AccountingDao;
import org.gcube.accounting.accounting.summary.access.model.MeasureResolution;
import org.gcube.accounting.accounting.summary.access.model.Report;
import org.gcube.accounting.accounting.summary.access.model.ScopeDescriptor;
import org.gcube.portlets.user.accountingdashboard.shared.data.ReportData;
import org.gcube.portlets.user.accountingdashboard.shared.data.RequestReportData;
import org.gcube.portlets.user.accountingdashboard.shared.data.ScopeData;
import org.gcube.portlets.user.accountingdashboard.shared.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Giancarlo Panichi
*
*/
public class AccountingService {
private static Logger logger = LoggerFactory.getLogger(AccountingService.class);
private AccountingDao dao;
public AccountingService(AccountingServiceType accountingServiceType) throws ServiceException {
try {
if (accountingServiceType == null) {
logger.error("Invalid AccountingServiceType requested: null");
}
switch (accountingServiceType) {
case CurrentScope:
logger.debug("AccountingService: CurrentScope");
dao = AccountingDao.get();
break;
case PortalContex:
logger.debug("AccountingService: PortalContext");
dao = AccountingDao.get(new PortalContextTreeProvider());
break;
default:
logger.debug("AccountingService: CurrentScope");
dao = AccountingDao.get();
break;
}
} catch (Throwable e) {
logger.error("Error retrieving Tree: " + e.getLocalizedMessage(), e);
throw new ServiceException("Error retrieving Tree: " + e.getLocalizedMessage(), e);
}
}
public ScopeData getTree(HttpServletRequest httpServletRequest) throws ServiceException {
try {
logger.debug("AccountingService GetTree()");
ScopeDescriptor scopeDescriptor = dao.getTree(httpServletRequest);
logger.debug("ScopeDescriptor: " + scopeDescriptor);
ScopeData scopeData = getScopeData(scopeDescriptor);
return scopeData;
} catch (Throwable e) {
logger.error("Error retrieving Tree: " + e.getLocalizedMessage(), e);
throw new ServiceException("Error retrieving Tree: " + e.getLocalizedMessage(), e);
}
}
private ScopeData getScopeData(ScopeDescriptor scopeDescriptor) {
ScopeData scopeData = null;
if (scopeDescriptor != null) {
if (scopeDescriptor.hasChildren()) {
ArrayList<ScopeData> childs = new ArrayList<>();
for (ScopeDescriptor sd : scopeDescriptor.getChildren()) {
childs.add(getScopeData(sd));
}
scopeData = new ScopeData(scopeDescriptor.getId(), scopeDescriptor.getName(), childs);
} else {
scopeData = new ScopeData(scopeDescriptor.getId(), scopeDescriptor.getName(), null);
}
}
return scopeData;
}
public ReportData getReport(HttpServletRequest httpServletRequest, RequestReportData requestReportData)
throws ServiceException {
try {
logger.debug("AccountingService GetReport(): " + requestReportData);
if (requestReportData != null && requestReportData.getScopeData() != null
&& requestReportData.getScopeData().getId() != null
&& !requestReportData.getScopeData().getId().isEmpty()) {
ScopeDescriptor scopeDescriptor = searchScopeDescriptor(httpServletRequest,
requestReportData.getScopeData());
Date dateFrom = requestReportData.getDateFrom();
Date dateTo = requestReportData.getDateTo();
logger.debug("getReportByScope(): [ScopeDescriptor=" + scopeDescriptor + ", dateFrom=" + dateFrom
+ ", dateTo=" + dateTo + ", measureResolution=" + MeasureResolution.MONTHLY + "]");
Report report = dao.getReportByScope(scopeDescriptor, dateFrom, dateTo, MeasureResolution.MONTHLY);
logger.debug("Report: " + report);
ReportDataBuilder reportDataBuilder = new ReportDataBuilder(report);
ReportData reportData = reportDataBuilder.build();
return reportData;
} else {
throw new ServiceException("Invalid report request, " + requestReportData);
}
} catch (Throwable e) {
logger.error("Error in crete report: " + e.getLocalizedMessage(), e);
throw new ServiceException("Error in create report: " + e.getLocalizedMessage(), e);
}
}
private ScopeDescriptor searchScopeDescriptor(HttpServletRequest httpServletRequest, ScopeData scopeData)
throws ServiceException {
try {
ScopeDescriptor scopeDescriptor = dao.getTree(httpServletRequest);
logger.debug("ScopeDescriptor: " + scopeDescriptor);
if (scopeDescriptor.getId().compareTo(scopeData.getId()) == 0) {
return scopeDescriptor;
} else {
if (scopeDescriptor.hasChildren()) {
return searchScopeDescriptorInChildren(scopeDescriptor, scopeData);
} else {
return null;
}
}
} catch (Throwable e) {
logger.error("Error searching scope descriptor: " + e.getLocalizedMessage(), e);
throw new ServiceException("Error searching scope descriptor: " + e.getLocalizedMessage(), e);
}
}
private ScopeDescriptor searchScopeDescriptorInChildren(ScopeDescriptor scopeDescriptor, ScopeData scopeData)
throws ServiceException {
try {
logger.debug("ScopeDescriptor: " + scopeDescriptor);
for (ScopeDescriptor child : scopeDescriptor.getChildren()) {
if (child.getId().compareTo(scopeData.getId()) == 0) {
return child;
} else {
if (child.hasChildren()) {
ScopeDescriptor found = searchScopeDescriptorInChildren(child, scopeData);
if (found != null) {
return found;
}
}
}
}
return null;
} catch (Throwable e) {
logger.error("Error searching scope descriptor: " + e.getLocalizedMessage(), e);
throw new ServiceException("Error searching scope descriptor: " + e.getLocalizedMessage(), e);
}
}
}