package org.gcube.portlets.admin.accountingmanager.server.csv.file; import java.text.ParseException; import java.util.ArrayList; import java.util.Arrays; import org.gcube.portlets.admin.accountingmanager.server.state.AccountingStateData; import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValue; import org.gcube.portlets.admin.accountingmanager.shared.data.query.SeriesRequest; import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesResponse; import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesStorage; import org.gcube.portlets.admin.accountingmanager.shared.data.response.storage.SeriesStorageBasic; import org.gcube.portlets.admin.accountingmanager.shared.data.response.storage.SeriesStorageData; import org.gcube.portlets.admin.accountingmanager.shared.data.response.storage.SeriesStorageDataTop; import org.gcube.portlets.admin.accountingmanager.shared.data.response.storage.SeriesStorageDefinition; import org.gcube.portlets.admin.accountingmanager.shared.data.response.storage.SeriesStorageTop; import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * CSV Model 4 Storage * * @author "Giancarlo Panichi" email: g.panichi@isti.cnr.it * */ public class CSVModel4Storage extends CSVModelBuilder { protected static Logger logger = LoggerFactory .getLogger(CSVModel4Storage.class); private AccountingStateData accountingStateData; public CSVModel4Storage(AccountingStateData accountingStateData) { this.accountingStateData = accountingStateData; } @Override public void buildOpEx() throws ServiceException { SeriesRequest seriesRequest = accountingStateData.getSeriesRequest(); if (seriesRequest == null) { logger.error("Error series request is null"); throw new ServiceException( "Error series request is null"); } String startDate=""; try { startDate = sdfFile.format(sdf.parse(seriesRequest.getAccountingPeriod() .getStartDate())); } catch (ParseException e) { e.printStackTrace(); } String endDate=""; try { endDate = sdfFile.format(sdf.parse(seriesRequest.getAccountingPeriod() .getEndDate())); } catch (ParseException e) { e.printStackTrace(); } String periodType = seriesRequest.getAccountingPeriod().getPeriod() .getLabel(); SeriesResponse seriesResponse = accountingStateData.getSeriesResponse(); if (seriesResponse == null) { logger.error("Error series response is null"); throw new ServiceException( "Error series response is null"); } String fileName = "Untitled"; ArrayList header; ArrayList rows = new ArrayList<>(); if (seriesResponse instanceof SeriesStorage) { SeriesStorage seriesStorage = (SeriesStorage) seriesResponse; SeriesStorageDefinition definition = seriesStorage .getSeriesStorageDefinition(); if (definition instanceof SeriesStorageBasic) { SeriesStorageBasic seriesStorageBasic = (SeriesStorageBasic) definition; fileName = "Storage_" + periodType + "_" + startDate + "_" + endDate; header = new ArrayList<>(Arrays.asList(new String[] { "Date", "Operation Count", "Data Volume" })); ArrayList listData = seriesStorageBasic .getSeries(); for (SeriesStorageData seriesData : listData) { ArrayList data = new ArrayList<>(); data.add(sdfCSVDate.format(seriesData.getDate())); data.add(String.valueOf(seriesData.getOperationCount())); data.add(String.valueOf(seriesData.getDataVolume())); CSVDataRow csvDataRow = new CSVDataRow(data); rows.add(csvDataRow); } } else { if (definition instanceof SeriesStorageTop) { SeriesStorageTop seriesStorageTop = (SeriesStorageTop) definition; fileName = "StorageTop_" + periodType + "_" + startDate + "_" + endDate; header = new ArrayList<>( Arrays.asList(new String[] { "Value", "Date", "Operation Count", "Data Volume" })); ArrayList listDataTop = seriesStorageTop .getSeriesStorageDataTopList(); for (SeriesStorageDataTop seriesDataTop : listDataTop) { FilterValue filterValue = seriesDataTop .getFilterValue(); ArrayList listData = seriesDataTop .getSeries(); for (SeriesStorageData seriesData : listData) { ArrayList data = new ArrayList<>(); data.add(filterValue.getValue()); data.add(sdfCSVDate.format(seriesData.getDate())); data.add(String.valueOf(seriesData.getOperationCount())); data.add(String.valueOf(seriesData.getDataVolume())); CSVDataRow csvDataRow = new CSVDataRow(data); rows.add(csvDataRow); } } } else { logger.error("Unsupported Serie Definition for Storage: " + definition); throw new ServiceException( "Unsupported Serie Definition for Storage: " + definition); } } } else { logger.error("Storage not support this serie response: " + seriesResponse); throw new ServiceException( "Storage not support this serie response: " + seriesResponse); } CSVModel invocation = new CSVModel(fileName,header, rows); csvModelSpec.setOp(invocation); } }