diff --git a/pom.xml b/pom.xml index c0223e2..ecf2041 100644 --- a/pom.xml +++ b/pom.xml @@ -104,8 +104,6 @@ runtime - - org.slf4j @@ -114,13 +112,11 @@ - ch.qos.logback - logback-classic - 1.0.1 - runtime + org.slf4j + slf4j-log4j12 + compile - org.gcube.accounting @@ -148,10 +144,6 @@ - - - com.sencha.gxt @@ -338,6 +330,14 @@ 1.4 + + + org.json + json + 20160212 + + + @@ -350,14 +350,13 @@ org.slf4j slf4j-api - compile + provided - ch.qos.logback - logback-classic - 1.0.1 - runtime + org.slf4j + slf4j-log4j12 + provided diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml b/src/main/java/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml index 4e5751e..14ea4ac 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml @@ -44,17 +44,18 @@ values="en" /> --> - - + /> --> - + diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/AccountingManagerController.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/AccountingManagerController.java index 08b857f..1b0de6e 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/AccountingManagerController.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/AccountingManagerController.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.Date; import org.gcube.portlets.admin.accountingmanager.client.event.AccountingMenuEvent; -import org.gcube.portlets.admin.accountingmanager.client.event.DownloadCSVRequestEvent; +import org.gcube.portlets.admin.accountingmanager.client.event.ExportRequestEvent; import org.gcube.portlets.admin.accountingmanager.client.event.FiltersChangeEvent; import org.gcube.portlets.admin.accountingmanager.client.event.SessionExpiredEvent; import org.gcube.portlets.admin.accountingmanager.client.event.StateChangeEvent; @@ -203,13 +203,13 @@ public class AccountingManagerController { } }); - eventBus.addHandler(DownloadCSVRequestEvent.TYPE, - new DownloadCSVRequestEvent.DownloadCSVRequestEventHandler() { + eventBus.addHandler(ExportRequestEvent.TYPE, + new ExportRequestEvent.ExportRequestEventHandler() { @Override - public void onDownload(DownloadCSVRequestEvent event) { - Log.debug("Catch DownloadDataRequestEvent"); - doDownloadCSV(event); + public void onExport(ExportRequestEvent event) { + Log.debug("Catch ExportRequestEvent"); + doExportRequest(event); } }); @@ -418,7 +418,7 @@ public class AccountingManagerController { } - private void doSaveDataOnWorkspace(DownloadCSVRequestEvent event) { + private void doSaveDataOnWorkspace(ExportRequestEvent event) { accountingMonitor = new AccountingMonitor(); Log.debug("Call saveCSVOnWorkspace on server, params: " + event.getAccountingType()); @@ -480,11 +480,13 @@ public class AccountingManagerController { }); } - private void doDownloadCSV(DownloadCSVRequestEvent event) { + private void doExportRequest(ExportRequestEvent event) { StringBuilder actionUrl = new StringBuilder(); actionUrl.append(GWT.getModuleBaseURL()); - actionUrl.append(Constants.DOWNLOAD_CVS_SERVLET + "?" - + Constants.DOWNLOAD_CVS_SERVLET_ACCOUNTINGTYPE_PARAMETER + "=" + actionUrl.append(Constants.EXPORT_SERVLET + "?" + + Constants.EXPORT_SERVLET_TYPE_PARAMETER + "=" + + event.getExportType().name()+"&" + + Constants.EXPORT_SERVLET_ACCOUNTING_TYPE_PARAMETER + "=" + event.getAccountingType().name()); Log.debug("Retrieved link: " + actionUrl); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/event/DownloadCSVRequestEvent.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/event/DownloadCSVRequestEvent.java deleted file mode 100644 index 49e6620..0000000 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/event/DownloadCSVRequestEvent.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.gcube.portlets.admin.accountingmanager.client.event; - -import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType; - -import com.google.gwt.event.shared.EventHandler; -import com.google.gwt.event.shared.GwtEvent; -import com.google.gwt.event.shared.HandlerRegistration; -import com.google.gwt.event.shared.HasHandlers; - -/** - * - * - * @author "Giancarlo Panichi" g.panichi@isti.cnr.it - * - */ -public class DownloadCSVRequestEvent extends - GwtEvent { - - public static Type TYPE = new Type(); - private AccountingType accountingType; - - public interface DownloadCSVRequestEventHandler extends EventHandler { - void onDownload(DownloadCSVRequestEvent event); - } - - public interface HasDownloadCSVRequestEventHandler extends HasHandlers { - public HandlerRegistration addDownloadCSVRequestEventHandler( - DownloadCSVRequestEventHandler handler); - } - - public DownloadCSVRequestEvent(AccountingType accountingType) { - this.accountingType = accountingType; - } - - @Override - protected void dispatch(DownloadCSVRequestEventHandler handler) { - handler.onDownload(this); - } - - @Override - public Type getAssociatedType() { - return TYPE; - } - - public static Type getType() { - return TYPE; - } - - public static void fire(HasHandlers source, - DownloadCSVRequestEvent accountingMenuEvent) { - source.fireEvent(accountingMenuEvent); - } - - public AccountingType getAccountingType() { - return accountingType; - } - - @Override - public String toString() { - return "DownloadCSVRequestEvent [accountingType=" + accountingType - + "]"; - } - - - - - -} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/event/ExportRequestEvent.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/event/ExportRequestEvent.java new file mode 100644 index 0000000..0dca1fb --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/event/ExportRequestEvent.java @@ -0,0 +1,74 @@ +package org.gcube.portlets.admin.accountingmanager.client.event; + +import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType; +import org.gcube.portlets.admin.accountingmanager.shared.export.ExportType; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.event.shared.HasHandlers; + +/** + * + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class ExportRequestEvent extends + GwtEvent { + + public static Type TYPE = new Type(); + private ExportType exportType; + private AccountingType accountingType; + + public interface ExportRequestEventHandler extends EventHandler { + void onExport(ExportRequestEvent event); + } + + public interface HasExportRequestEventHandler extends HasHandlers { + public HandlerRegistration addExportRequestEventHandler( + ExportRequestEventHandler handler); + } + + public ExportRequestEvent(ExportType exportType, + AccountingType accountingType) { + this.exportType=exportType; + this.accountingType = accountingType; + + } + + @Override + protected void dispatch(ExportRequestEventHandler handler) { + handler.onExport(this); + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + public static Type getType() { + return TYPE; + } + + public static void fire(HasHandlers source, + ExportRequestEvent accountingMenuEvent) { + source.fireEvent(accountingMenuEvent); + } + + public AccountingType getAccountingType() { + return accountingType; + } + + public ExportType getExportType() { + return exportType; + } + + @Override + public String toString() { + return "ExportRequestEvent [exportType=" + exportType + + ", accountingType=" + accountingType + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/job/JobChartBasicPanel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/job/JobChartBasicPanel.java index fa31c70..ad71c09 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/job/JobChartBasicPanel.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/job/JobChartBasicPanel.java @@ -2,7 +2,7 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts.job; import java.util.Date; -import org.gcube.portlets.admin.accountingmanager.client.event.DownloadCSVRequestEvent; +import org.gcube.portlets.admin.accountingmanager.client.event.ExportRequestEvent; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.ChartTimeMeasure; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.DownloadConstants; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.JobChartMeasure; @@ -12,6 +12,7 @@ import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientS import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesJob; import org.gcube.portlets.admin.accountingmanager.shared.data.response.job.SeriesJobBasic; import org.gcube.portlets.admin.accountingmanager.shared.data.response.job.SeriesJobData; +import org.gcube.portlets.admin.accountingmanager.shared.export.ExportType; import com.allen_sauer.gwt.log.client.Log; import com.github.highcharts4gwt.client.view.widget.HighchartsLayoutPanel; @@ -61,6 +62,8 @@ public class JobChartBasicPanel extends SimpleContainer { // Download Menu private MenuItem downloadCSVItem; + private MenuItem downloadXMLItem; + private MenuItem downloadJSONItem; private MenuItem downloadPNGItem; private MenuItem downloadJPGItem; private MenuItem downloadPDFItem; @@ -231,6 +234,12 @@ public class JobChartBasicPanel extends SimpleContainer { downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, AccountingManagerResources.INSTANCE.accountingFileCSV24()); downloadCSVItem.setHeight(30); + downloadXMLItem = new MenuItem(DownloadConstants.DOWNLOAD_XML, + AccountingManagerResources.INSTANCE.accountingFileXML24()); + downloadXMLItem.setHeight(30); + downloadJSONItem = new MenuItem(DownloadConstants.DOWNLOAD_JSON, + AccountingManagerResources.INSTANCE.accountingFileJSON24()); + downloadJSONItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); @@ -253,6 +262,27 @@ public class JobChartBasicPanel extends SimpleContainer { } }); + + downloadXMLItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadXML(); + + } + + }); + + downloadJSONItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadJSON(); + + } + + }); + downloadPNGItem.addSelectionHandler(new SelectionHandler() { @@ -292,6 +322,8 @@ public class JobChartBasicPanel extends SimpleContainer { }); menuDownload.add(downloadCSVItem); + menuDownload.add(downloadXMLItem); + menuDownload.add(downloadJSONItem); menuDownload.add(downloadPNGItem); menuDownload.add(downloadJPGItem); menuDownload.add(downloadPDFItem); @@ -301,8 +333,20 @@ public class JobChartBasicPanel extends SimpleContainer { } private void onDownloadCSV() { - DownloadCSVRequestEvent event = new DownloadCSVRequestEvent( - accountingStateData.getAccountingType()); + ExportRequestEvent event = new ExportRequestEvent( + ExportType.CSV, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + + private void onDownloadXML() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.XML, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + + private void onDownloadJSON() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.JSON, accountingStateData.getAccountingType()); eventBus.fireEvent(event); } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/job/JobChartTopPanel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/job/JobChartTopPanel.java index 567a74b..f9e2f0c 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/job/JobChartTopPanel.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/job/JobChartTopPanel.java @@ -3,7 +3,7 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts.job; import java.util.ArrayList; import java.util.Date; -import org.gcube.portlets.admin.accountingmanager.client.event.DownloadCSVRequestEvent; +import org.gcube.portlets.admin.accountingmanager.client.event.ExportRequestEvent; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.ChartTimeMeasure; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.DownloadConstants; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.JobChartMeasure; @@ -13,6 +13,7 @@ import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientS import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesJob; import org.gcube.portlets.admin.accountingmanager.shared.data.response.job.SeriesJobData; import org.gcube.portlets.admin.accountingmanager.shared.data.response.job.SeriesJobTop; +import org.gcube.portlets.admin.accountingmanager.shared.export.ExportType; import com.allen_sauer.gwt.log.client.Log; import com.github.highcharts4gwt.client.view.widget.HighchartsLayoutPanel; @@ -61,6 +62,8 @@ public class JobChartTopPanel extends SimpleContainer { // Download Menu private MenuItem downloadCSVItem; + private MenuItem downloadXMLItem; + private MenuItem downloadJSONItem; private MenuItem downloadPNGItem; private MenuItem downloadJPGItem; private MenuItem downloadPDFItem; @@ -155,6 +158,12 @@ public class JobChartTopPanel extends SimpleContainer { downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, AccountingManagerResources.INSTANCE.accountingFileCSV24()); downloadCSVItem.setHeight(30); + downloadXMLItem = new MenuItem(DownloadConstants.DOWNLOAD_XML, + AccountingManagerResources.INSTANCE.accountingFileXML24()); + downloadXMLItem.setHeight(30); + downloadJSONItem = new MenuItem(DownloadConstants.DOWNLOAD_JSON, + AccountingManagerResources.INSTANCE.accountingFileJSON24()); + downloadJSONItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); @@ -177,7 +186,26 @@ public class JobChartTopPanel extends SimpleContainer { } }); + + downloadXMLItem.addSelectionHandler(new SelectionHandler() { + @Override + public void onSelection(SelectionEvent event) { + onDownloadXML(); + + } + + }); + + downloadJSONItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadJSON(); + + } + + }); downloadPNGItem.addSelectionHandler(new SelectionHandler() { @@ -217,6 +245,8 @@ public class JobChartTopPanel extends SimpleContainer { }); menuDownload.add(downloadCSVItem); + menuDownload.add(downloadXMLItem); + menuDownload.add(downloadJSONItem); menuDownload.add(downloadPNGItem); menuDownload.add(downloadJPGItem); menuDownload.add(downloadPDFItem); @@ -367,11 +397,24 @@ public class JobChartTopPanel extends SimpleContainer { } private void onDownloadCSV() { - DownloadCSVRequestEvent event = new DownloadCSVRequestEvent( - accountingStateData.getAccountingType()); + ExportRequestEvent event = new ExportRequestEvent( + ExportType.CSV, accountingStateData.getAccountingType()); eventBus.fireEvent(event); } + private void onDownloadXML() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.XML, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + + private void onDownloadJSON() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.JSON, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + + // chart.options.exporting.buttons.contextButton.menuItems[0].onclick(); public static native void onDownloadPNG(String id) /*-{ diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/ServiceChartBasicPanel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/ServiceChartBasicPanel.java index c5b62da..b56920a 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/ServiceChartBasicPanel.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/ServiceChartBasicPanel.java @@ -2,7 +2,7 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts.servic import java.util.Date; -import org.gcube.portlets.admin.accountingmanager.client.event.DownloadCSVRequestEvent; +import org.gcube.portlets.admin.accountingmanager.client.event.ExportRequestEvent; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.ChartTimeMeasure; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.DownloadConstants; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.ServiceChartMeasure; @@ -12,6 +12,7 @@ import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientS import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesService; import org.gcube.portlets.admin.accountingmanager.shared.data.response.service.SeriesServiceBasic; import org.gcube.portlets.admin.accountingmanager.shared.data.response.service.SeriesServiceData; +import org.gcube.portlets.admin.accountingmanager.shared.export.ExportType; import com.allen_sauer.gwt.log.client.Log; import com.github.highcharts4gwt.client.view.widget.HighchartsLayoutPanel; @@ -62,6 +63,8 @@ public class ServiceChartBasicPanel extends SimpleContainer { // Download Menu private MenuItem downloadCSVItem; + private MenuItem downloadXMLItem; + private MenuItem downloadJSONItem; private MenuItem downloadPNGItem; private MenuItem downloadJPGItem; private MenuItem downloadPDFItem; @@ -231,6 +234,12 @@ public class ServiceChartBasicPanel extends SimpleContainer { downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, AccountingManagerResources.INSTANCE.accountingFileCSV24()); downloadCSVItem.setHeight(30); + downloadXMLItem = new MenuItem(DownloadConstants.DOWNLOAD_XML, + AccountingManagerResources.INSTANCE.accountingFileXML24()); + downloadXMLItem.setHeight(30); + downloadJSONItem = new MenuItem(DownloadConstants.DOWNLOAD_JSON, + AccountingManagerResources.INSTANCE.accountingFileJSON24()); + downloadJSONItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); @@ -255,6 +264,26 @@ public class ServiceChartBasicPanel extends SimpleContainer { }); + downloadXMLItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadXML(); + + } + + }); + + downloadJSONItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadJSON(); + + } + + }); + downloadPNGItem.addSelectionHandler(new SelectionHandler() { @Override @@ -293,6 +322,8 @@ public class ServiceChartBasicPanel extends SimpleContainer { }); menuDownload.add(downloadCSVItem); + menuDownload.add(downloadXMLItem); + menuDownload.add(downloadJSONItem); menuDownload.add(downloadPNGItem); menuDownload.add(downloadJPGItem); menuDownload.add(downloadPDFItem); @@ -302,10 +333,23 @@ public class ServiceChartBasicPanel extends SimpleContainer { } private void onDownloadCSV() { - DownloadCSVRequestEvent event = new DownloadCSVRequestEvent( - accountingStateData.getAccountingType()); + ExportRequestEvent event = new ExportRequestEvent( + ExportType.CSV, accountingStateData.getAccountingType()); eventBus.fireEvent(event); } + + private void onDownloadXML() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.XML, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + + private void onDownloadJSON() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.JSON, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + // chart.options.exporting.buttons.contextButton.menuItems[0].onclick(); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/ServiceChartTopPanel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/ServiceChartTopPanel.java index d9a7493..d2d71ec 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/ServiceChartTopPanel.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/ServiceChartTopPanel.java @@ -3,7 +3,7 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts.servic import java.util.ArrayList; import java.util.Date; -import org.gcube.portlets.admin.accountingmanager.client.event.DownloadCSVRequestEvent; +import org.gcube.portlets.admin.accountingmanager.client.event.ExportRequestEvent; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.TimeUnitMeasure; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.ChartTimeMeasure; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.DownloadConstants; @@ -13,6 +13,7 @@ import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientS import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesService; import org.gcube.portlets.admin.accountingmanager.shared.data.response.service.SeriesServiceData; import org.gcube.portlets.admin.accountingmanager.shared.data.response.service.SeriesServiceTop; +import org.gcube.portlets.admin.accountingmanager.shared.export.ExportType; import com.allen_sauer.gwt.log.client.Log; import com.github.highcharts4gwt.client.view.widget.HighchartsLayoutPanel; @@ -61,6 +62,8 @@ public class ServiceChartTopPanel extends SimpleContainer { // Download Menu private MenuItem downloadCSVItem; + private MenuItem downloadXMLItem; + private MenuItem downloadJSONItem; private MenuItem downloadPNGItem; private MenuItem downloadJPGItem; private MenuItem downloadPDFItem; @@ -157,6 +160,12 @@ public class ServiceChartTopPanel extends SimpleContainer { downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, AccountingManagerResources.INSTANCE.accountingFileCSV24()); downloadCSVItem.setHeight(30); + downloadXMLItem = new MenuItem(DownloadConstants.DOWNLOAD_XML, + AccountingManagerResources.INSTANCE.accountingFileXML24()); + downloadXMLItem.setHeight(30); + downloadJSONItem = new MenuItem(DownloadConstants.DOWNLOAD_JSON, + AccountingManagerResources.INSTANCE.accountingFileJSON24()); + downloadJSONItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); @@ -179,6 +188,27 @@ public class ServiceChartTopPanel extends SimpleContainer { } }); + + downloadXMLItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadXML(); + + } + + }); + + downloadJSONItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadJSON(); + + } + + }); + downloadPNGItem.addSelectionHandler(new SelectionHandler() { @@ -218,6 +248,8 @@ public class ServiceChartTopPanel extends SimpleContainer { }); menuDownload.add(downloadCSVItem); + menuDownload.add(downloadXMLItem); + menuDownload.add(downloadJSONItem); menuDownload.add(downloadPNGItem); menuDownload.add(downloadJPGItem); menuDownload.add(downloadPDFItem); @@ -369,10 +401,23 @@ public class ServiceChartTopPanel extends SimpleContainer { } private void onDownloadCSV() { - DownloadCSVRequestEvent event = new DownloadCSVRequestEvent( - accountingStateData.getAccountingType()); + ExportRequestEvent event = new ExportRequestEvent( + ExportType.CSV, accountingStateData.getAccountingType()); eventBus.fireEvent(event); } + + private void onDownloadXML() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.XML, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + + private void onDownloadJSON() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.JSON, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + // chart.options.exporting.buttons.contextButton.menuItems[0].onclick(); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/storage/StorageChartBasicPanel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/storage/StorageChartBasicPanel.java index f7a066e..cefaaae 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/storage/StorageChartBasicPanel.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/storage/StorageChartBasicPanel.java @@ -2,7 +2,7 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts.storag import java.util.Date; -import org.gcube.portlets.admin.accountingmanager.client.event.DownloadCSVRequestEvent; +import org.gcube.portlets.admin.accountingmanager.client.event.ExportRequestEvent; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.ByteUnitMeasure; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.ChartTimeMeasure; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.DownloadConstants; @@ -12,6 +12,7 @@ import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientS 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.export.ExportType; import com.allen_sauer.gwt.log.client.Log; import com.github.highcharts4gwt.client.view.widget.HighchartsLayoutPanel; @@ -60,6 +61,8 @@ public class StorageChartBasicPanel extends SimpleContainer { // Download Menu private MenuItem downloadCSVItem; + private MenuItem downloadXMLItem; + private MenuItem downloadJSONItem; private MenuItem downloadPNGItem; private MenuItem downloadJPGItem; private MenuItem downloadPDFItem; @@ -218,6 +221,12 @@ public class StorageChartBasicPanel extends SimpleContainer { downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, AccountingManagerResources.INSTANCE.accountingFileCSV24()); downloadCSVItem.setHeight(30); + downloadXMLItem = new MenuItem(DownloadConstants.DOWNLOAD_XML, + AccountingManagerResources.INSTANCE.accountingFileXML24()); + downloadXMLItem.setHeight(30); + downloadJSONItem = new MenuItem(DownloadConstants.DOWNLOAD_JSON, + AccountingManagerResources.INSTANCE.accountingFileJSON24()); + downloadJSONItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); @@ -240,6 +249,27 @@ public class StorageChartBasicPanel extends SimpleContainer { } }); + + downloadXMLItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadXML(); + + } + + }); + + downloadJSONItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadJSON(); + + } + + }); + downloadPNGItem.addSelectionHandler(new SelectionHandler() { @@ -279,6 +309,8 @@ public class StorageChartBasicPanel extends SimpleContainer { }); menuDownload.add(downloadCSVItem); + menuDownload.add(downloadXMLItem); + menuDownload.add(downloadJSONItem); menuDownload.add(downloadPNGItem); menuDownload.add(downloadJPGItem); menuDownload.add(downloadPDFItem); @@ -288,8 +320,20 @@ public class StorageChartBasicPanel extends SimpleContainer { } private void onDownloadCSV() { - DownloadCSVRequestEvent event = new DownloadCSVRequestEvent( - accountingStateData.getAccountingType()); + ExportRequestEvent event = new ExportRequestEvent( + ExportType.CSV, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + + private void onDownloadXML() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.XML, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + + private void onDownloadJSON() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.JSON, accountingStateData.getAccountingType()); eventBus.fireEvent(event); } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/storage/StorageChartTopPanel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/storage/StorageChartTopPanel.java index 300985c..536d5c4 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/storage/StorageChartTopPanel.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/storage/StorageChartTopPanel.java @@ -3,7 +3,7 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts.storag import java.util.ArrayList; import java.util.Date; -import org.gcube.portlets.admin.accountingmanager.client.event.DownloadCSVRequestEvent; +import org.gcube.portlets.admin.accountingmanager.client.event.ExportRequestEvent; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.ByteUnitMeasure; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.ChartTimeMeasure; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.DownloadConstants; @@ -13,6 +13,7 @@ import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientS import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesStorage; import org.gcube.portlets.admin.accountingmanager.shared.data.response.storage.SeriesStorageData; import org.gcube.portlets.admin.accountingmanager.shared.data.response.storage.SeriesStorageTop; +import org.gcube.portlets.admin.accountingmanager.shared.export.ExportType; import com.allen_sauer.gwt.log.client.Log; import com.github.highcharts4gwt.client.view.widget.HighchartsLayoutPanel; @@ -61,6 +62,8 @@ public class StorageChartTopPanel extends SimpleContainer { // Download Menu private MenuItem downloadCSVItem; + private MenuItem downloadXMLItem; + private MenuItem downloadJSONItem; private MenuItem downloadPNGItem; private MenuItem downloadJPGItem; private MenuItem downloadPDFItem; @@ -167,6 +170,12 @@ public class StorageChartTopPanel extends SimpleContainer { downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, AccountingManagerResources.INSTANCE.accountingFileCSV24()); downloadCSVItem.setHeight(30); + downloadXMLItem = new MenuItem(DownloadConstants.DOWNLOAD_XML, + AccountingManagerResources.INSTANCE.accountingFileXML24()); + downloadXMLItem.setHeight(30); + downloadJSONItem = new MenuItem(DownloadConstants.DOWNLOAD_JSON, + AccountingManagerResources.INSTANCE.accountingFileJSON24()); + downloadJSONItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); @@ -190,6 +199,26 @@ public class StorageChartTopPanel extends SimpleContainer { }); + downloadXMLItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadXML(); + + } + + }); + + downloadJSONItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadJSON(); + + } + + }); + downloadPNGItem.addSelectionHandler(new SelectionHandler() { @Override @@ -228,6 +257,8 @@ public class StorageChartTopPanel extends SimpleContainer { }); menuDownload.add(downloadCSVItem); + menuDownload.add(downloadXMLItem); + menuDownload.add(downloadJSONItem); menuDownload.add(downloadPNGItem); menuDownload.add(downloadJPGItem); menuDownload.add(downloadPDFItem); @@ -341,11 +372,24 @@ public class StorageChartTopPanel extends SimpleContainer { } private void onDownloadCSV() { - DownloadCSVRequestEvent event = new DownloadCSVRequestEvent( - accountingStateData.getAccountingType()); + ExportRequestEvent event = new ExportRequestEvent( + ExportType.CSV, accountingStateData.getAccountingType()); eventBus.fireEvent(event); } + private void onDownloadXML() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.XML, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + + private void onDownloadJSON() { + ExportRequestEvent event = new ExportRequestEvent( + ExportType.JSON, accountingStateData.getAccountingType()); + eventBus.fireEvent(event); + } + + // chart.options.exporting.buttons.contextButton.menuItems[0].onclick(); public static native void onDownloadPNG(String id) /*-{ diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/utils/DownloadConstants.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/utils/DownloadConstants.java index cbc8b9b..5d904d8 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/utils/DownloadConstants.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/utils/DownloadConstants.java @@ -9,6 +9,8 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils; public class DownloadConstants { public static final String DOWNLOAD = "Download"; public static final String DOWNLOAD_CSV = "Download CSV"; + public static final String DOWNLOAD_XML = "Download XML"; + public static final String DOWNLOAD_JSON = "Download JSON"; public static final String DOWNLOAD_PNG = "Download PNG Image"; public static final String DOWNLOAD_JPG = "Download JPG Image"; public static final String DOWNLOAD_PDF = "Download PDF Document"; diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/AccountingManagerResources.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/AccountingManagerResources.java index 00db6ae..62fa31b 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/AccountingManagerResources.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/AccountingManagerResources.java @@ -186,6 +186,18 @@ public interface AccountingManagerResources extends ClientBundle { @Source("accounting-file-csv_32.png") ImageResource accountingFileCSV32(); + @Source("accounting-file-xml_24.png") + ImageResource accountingFileXML24(); + + @Source("accounting-file-xml_32.png") + ImageResource accountingFileXML32(); + + @Source("accounting-file-json_24.png") + ImageResource accountingFileJSON24(); + + @Source("accounting-file-json_32.png") + ImageResource accountingFileJSON32(); + @Source("accounting-file-png_24.png") ImageResource accountingFilePNG24(); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-json_24.png b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-json_24.png new file mode 100644 index 0000000..a89db2c Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-json_24.png differ diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-json_32.png b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-json_32.png new file mode 100644 index 0000000..3115cee Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-json_32.png differ diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-xml_24.png b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-xml_24.png new file mode 100644 index 0000000..556aeff Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-xml_24.png differ diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-xml_32.png b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-xml_32.png new file mode 100644 index 0000000..e0f2a30 Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-xml_32.png differ diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java index d1d3755..4efa8d5 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java @@ -10,7 +10,7 @@ import org.gcube.portlets.admin.accountingmanager.client.rpc.AccountingManagerSe import org.gcube.portlets.admin.accountingmanager.server.amservice.AccountingCaller; import org.gcube.portlets.admin.accountingmanager.server.amservice.AccountingCallerInterface; import org.gcube.portlets.admin.accountingmanager.server.amservice.AccountingCallerTester; -import org.gcube.portlets.admin.accountingmanager.server.csv.CSVManager; +import org.gcube.portlets.admin.accountingmanager.server.export.CSVManager; import org.gcube.portlets.admin.accountingmanager.server.state.AccountingStateData; import org.gcube.portlets.admin.accountingmanager.server.storage.StorageUtil; import org.gcube.portlets.admin.accountingmanager.shared.Constants; diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/DownloadCSVServlet.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/ExportServlet.java similarity index 55% rename from src/main/java/org/gcube/portlets/admin/accountingmanager/server/DownloadCSVServlet.java rename to src/main/java/org/gcube/portlets/admin/accountingmanager/server/ExportServlet.java index 7f57d03..e51c7e9 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/DownloadCSVServlet.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/ExportServlet.java @@ -11,12 +11,15 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.gcube.application.framework.core.session.ASLSession; -import org.gcube.portlets.admin.accountingmanager.server.csv.CSVManager; +import org.gcube.portlets.admin.accountingmanager.server.export.CSVManager; +import org.gcube.portlets.admin.accountingmanager.server.export.JSONManager; +import org.gcube.portlets.admin.accountingmanager.server.export.XMLManager; import org.gcube.portlets.admin.accountingmanager.server.state.AccountingStateData; import org.gcube.portlets.admin.accountingmanager.shared.Constants; -import org.gcube.portlets.admin.accountingmanager.shared.csv.CSVDescriptor; import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType; import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException; +import org.gcube.portlets.admin.accountingmanager.shared.export.ExportDescriptor; +import org.gcube.portlets.admin.accountingmanager.shared.export.ExportType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,18 +28,18 @@ import org.slf4j.LoggerFactory; * @author Giancarlo Panichi * email: g.panichi@isti.cnr.it * - * Download Folder Servlet + * Export Servlet * */ -public class DownloadCSVServlet extends HttpServlet { +public class ExportServlet extends HttpServlet { private static final long serialVersionUID = -1838255772767180518L; private static Logger logger = LoggerFactory - .getLogger(DownloadCSVServlet.class); + .getLogger(ExportServlet.class); /** * @see HttpServlet#HttpServlet() */ - public DownloadCSVServlet() { + public ExportServlet() { super(); // TODO Auto-generated constructor stub } @@ -62,7 +65,7 @@ public class DownloadCSVServlet extends HttpServlet { private void createResponse(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - logger.info("DownloadCSVServlet"); + logger.info("ExportServlet"); HttpSession session = request.getSession(); @@ -75,35 +78,61 @@ public class DownloadCSVServlet extends HttpServlet { + session); return; } - logger.debug("DownloadCSVServlet session id: " + session.getId()); + logger.debug("ExportServlet session id: " + session.getId()); ASLSession aslSession = SessionUtil.getASLSession(session); - String accountingType = request.getParameter(Constants.DOWNLOAD_CVS_SERVLET_ACCOUNTINGTYPE_PARAMETER); - logger.debug("Request: [accountingType=" + accountingType + "]"); + String exportType = request.getParameter(Constants.EXPORT_SERVLET_TYPE_PARAMETER); + String accountingType = request.getParameter(Constants.EXPORT_SERVLET_ACCOUNTING_TYPE_PARAMETER); + + + logger.debug("Request: [exportType="+exportType+", accountingType=" + accountingType + "]"); AccountingStateData accountingStateData=SessionUtil.getAccountingStateData(session, AccountingType.valueOf(accountingType)); if(accountingStateData==null){ - logger.error("No series present in session for thi accounting type: "+accountingType); - throw new ServletException("No series present in session for thi accounting type: "+accountingType); + logger.error("No series present in session for this accounting type: "+accountingType); + throw new ServletException("No series present in session for this accounting type: "+accountingType); } - CSVManager csvManager=new CSVManager(aslSession.getUsername()); - CSVDescriptor csvDescriptor=csvManager.downloadCSV(accountingStateData); - logger.debug("CSVDescriptor: "+csvDescriptor); + ExportType exportT=ExportType.valueOf(exportType); + if(exportT==null){ + logger.error("Invalid Export Type Request: "+exportType); + throw new ServletException("Invalid Export Type Request: "+exportType); + } + + ExportDescriptor exportDescriptor=null; + switch(exportT){ + case CSV: + CSVManager csvManager=new CSVManager(aslSession.getUsername()); + exportDescriptor=csvManager.download(accountingStateData); + response.setContentType("text/csv"); + break; + case JSON: + JSONManager jsonManager=new JSONManager(aslSession.getUsername()); + exportDescriptor=jsonManager.download(accountingStateData); + response.setContentType("application/json"); + break; + case XML: + XMLManager xmlManager=new XMLManager(aslSession.getUsername()); + exportDescriptor=xmlManager.download(accountingStateData); + response.setContentType("text/xml"); + break; + default: + logger.error("Export Type not supported: "+exportType); + throw new ServletException("Export Type not supported: "+exportType); + } + logger.debug("ExportDescriptor: "+exportDescriptor); response.setHeader("Content-Disposition", "attachment; filename=\"" - + csvDescriptor.getCsvModel().getFileName()+csvDescriptor.getCsvModel().getFileExtension() + "\""); - response.setContentType("text/csv"); + + exportDescriptor.getCsvModel().getName()+exportDescriptor.getFileExtension() + "\""); response.setHeader("Content-Length", - String.valueOf(csvDescriptor.getPath().toFile().length())); - + String.valueOf(exportDescriptor.getPath().toFile().length())); OutputStream out = response.getOutputStream(); - Files.copy(csvDescriptor.getPath(), out); + Files.copy(exportDescriptor.getPath(), out); out.flush(); out.close(); try { - Files.delete(csvDescriptor.getPath()); + Files.delete(exportDescriptor.getPath()); } catch (IOException e) { logger.error("Error in deleting temp file: " + e.getLocalizedMessage()); @@ -115,7 +144,7 @@ public class DownloadCSVServlet extends HttpServlet { return; } catch (Throwable e) { - logger.error("Error in DownloadFolderServlet: " + logger.error("Error in ExportServlet: " + e.getLocalizedMessage()); e.printStackTrace(); throw new ServletException("Error:" diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModel.java deleted file mode 100644 index 5e92419..0000000 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModel.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.gcube.portlets.admin.accountingmanager.server.csv.file; - -import java.io.Serializable; -import java.util.ArrayList; - -/** - * - * @author giancarlo email: g.panichi@isti.cnr.it - * - */ -public class CSVModel implements Serializable { - - private static final long serialVersionUID = 7127656837246518599L; - private String fileName; - private String fileExtension; - private ArrayList header; - private ArrayList rows; - - public CSVModel() { - super(); - } - - public CSVModel(String fileName, ArrayList header, - ArrayList rows) { - super(); - this.fileName = fileName; - this.fileExtension =".csv"; - this.header = header; - this.rows = rows; - } - - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } - - public String getFileExtension() { - return fileExtension; - } - - public void setFileExtension(String fileExtension) { - this.fileExtension = fileExtension; - } - - public ArrayList getHeader() { - return header; - } - - public void setHeader(ArrayList header) { - this.header = header; - } - - public ArrayList getRows() { - return rows; - } - - public void setRows(ArrayList rows) { - this.rows = rows; - } - - @Override - public String toString() { - return "CSVModel [fileName=" + fileName + ", fileExtension=" - + fileExtension + ", header=" + header + ", rows=" + rows + "]"; - } - - -} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModelDirector.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModelDirector.java deleted file mode 100644 index e3261d1..0000000 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModelDirector.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.gcube.portlets.admin.accountingmanager.server.csv.file; - -import java.util.ArrayList; - -import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException; - - -/** - * CSV Model Director - * - * @author "Giancarlo Panichi" - * email: g.panichi@isti.cnr.it - * - */ -public class CSVModelDirector { - CSVModelBuilder csvModelBuilder; - - public void setCSVModelBuilder( - CSVModelBuilder csvModelBuilder) { - this.csvModelBuilder = csvModelBuilder; - } - - public CSVModel getCSVModel() { - return csvModelBuilder.getCSVModelSpec().getOp(); - - } - - public ArrayList getListOfCSVModel() { - return csvModelBuilder.getCSVModelSpec().getOps(); - - } - - public void constructCSVModel() throws ServiceException { - csvModelBuilder.createSpec(); - csvModelBuilder.buildOpEx(); - - } -} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModelSpec.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModelSpec.java deleted file mode 100644 index d012254..0000000 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModelSpec.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.gcube.portlets.admin.accountingmanager.server.csv.file; - -import java.util.ArrayList; - -/** - * CSV Model Specification - * - * @author "Giancarlo Panichi" - * email: g.panichi@isti.cnr.it - * - */ -public class CSVModelSpec { - private CSVModel op; - private ArrayList ops; - - public CSVModel getOp() { - return op; - } - - public void setOp(CSVModel op) { - this.op = op; - } - - public ArrayList getOps() { - return ops; - } - - public void setOps(ArrayList ops) { - this.ops = ops; - } - -} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/CSVManager.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/CSVManager.java similarity index 57% rename from src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/CSVManager.java rename to src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/CSVManager.java index d82379c..f0eb799 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/CSVManager.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/CSVManager.java @@ -1,4 +1,4 @@ -package org.gcube.portlets.admin.accountingmanager.server.csv; +package org.gcube.portlets.admin.accountingmanager.server.export; import java.io.IOException; import java.io.InputStream; @@ -9,16 +9,16 @@ import java.nio.file.StandardOpenOption; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; -import org.gcube.portlets.admin.accountingmanager.server.csv.file.CSVDataRow; -import org.gcube.portlets.admin.accountingmanager.server.csv.file.CSVModel; -import org.gcube.portlets.admin.accountingmanager.server.csv.file.CSVModel4Service; -import org.gcube.portlets.admin.accountingmanager.server.csv.file.CSVModel4Storage; -import org.gcube.portlets.admin.accountingmanager.server.csv.file.CSVModelBuilder; -import org.gcube.portlets.admin.accountingmanager.server.csv.file.CSVModelDirector; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingDataRow; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingDataModel; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModel4Service; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModel4Storage; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModelBuilder; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModelDirector; import org.gcube.portlets.admin.accountingmanager.server.state.AccountingStateData; import org.gcube.portlets.admin.accountingmanager.server.storage.StorageUtil; -import org.gcube.portlets.admin.accountingmanager.shared.csv.CSVDescriptor; import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException; +import org.gcube.portlets.admin.accountingmanager.shared.export.ExportDescriptor; import org.gcube.portlets.admin.accountingmanager.shared.workspace.ItemDescription; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory; */ public class CSVManager { + private static final String FILE_EXTENSION = ".csv"; private static Logger logger = LoggerFactory.getLogger(CSVManager.class); private String userName; @@ -51,14 +52,14 @@ public class CSVManager { throw new ServiceException("Accounting Type is null!"); } - CSVModelBuilder csvModelBuilder = null; + AccountingModelBuilder accountingModelBuilder = null; switch (accountingStateData.getAccountingType()) { case SERVICE: - csvModelBuilder = new CSVModel4Service(accountingStateData); + accountingModelBuilder = new AccountingModel4Service(accountingStateData); break; case STORAGE: - csvModelBuilder = new CSVModel4Storage(accountingStateData); + accountingModelBuilder = new AccountingModel4Storage(accountingStateData); break; case JOB: case PORTLET: @@ -68,19 +69,19 @@ public class CSVManager { throw new ServiceException("Accounting Type not supported!!"); } - CSVModelDirector director = new CSVModelDirector(); - director.setCSVModelBuilder(csvModelBuilder); - director.constructCSVModel(); - CSVModel csvModel = director.getCSVModel(); - logger.debug("CSVModel: " + csvModel); + AccountingModelDirector director = new AccountingModelDirector(); + director.setAccountingModelBuilder(accountingModelBuilder); + director.constructAccountingModel(); + AccountingDataModel accountingDataModel = director.getAccountingModel(); + logger.debug("AccountingDataModel: " + accountingDataModel); - if (csvModel == null) { - logger.error("CSV model created is null"); - throw new ServiceException("CSVModel created is null!"); + if (accountingDataModel == null) { + logger.error("Accounting data model created is null"); + throw new ServiceException("Accounting data model created is null!"); } - Path tempFile = Files.createTempFile(csvModel.getFileName(), - csvModel.getFileExtension()); + Path tempFile = Files.createTempFile(accountingDataModel.getName(), + FILE_EXTENSION); logger.debug("Temp File: " + tempFile.toString()); // Create the CSVFormat object @@ -90,8 +91,8 @@ public class CSVManager { PrintStream printStream = new PrintStream(tempFile.toFile()); // CSV Write Example using CSVPrinter CSVPrinter printer = new CSVPrinter(printStream, format); - printer.printRecord(csvModel.getHeader()); - for (CSVDataRow row : csvModel.getRows()) { + printer.printRecord(accountingDataModel.getHeader()); + for (AccountingDataRow row : accountingDataModel.getRows()) { printer.printRecord(row.getData()); } // close the printer @@ -104,8 +105,8 @@ public class CSVManager { try (InputStream is = Files.newInputStream(tempFile, StandardOpenOption.READ)) { itemDescription=StorageUtil.saveOnWorkspace(userName, destinationFolderId, - csvModel.getFileName() + csvModel.getFileExtension(), - csvModel.getFileName(), is); + accountingDataModel.getName() + FILE_EXTENSION, + accountingDataModel.getName(), is); } try { @@ -123,9 +124,9 @@ public class CSVManager { } catch (ServiceException e) { throw e; } catch (Throwable e) { - logger.error("Error saving data: " + e.getLocalizedMessage()); + logger.error("Error saving csv data: " + e.getLocalizedMessage()); e.printStackTrace(); - throw new ServiceException("Error saving data: " + throw new ServiceException("Error saving csv data: " + e.getLocalizedMessage()); } @@ -133,7 +134,7 @@ public class CSVManager { } - public CSVDescriptor downloadCSV(AccountingStateData accountingStateData) throws ServiceException { + public ExportDescriptor download(AccountingStateData accountingStateData) throws ServiceException { try { logger.debug("AccountingStateData: "+accountingStateData); if (accountingStateData == null) { @@ -146,14 +147,14 @@ public class CSVManager { throw new ServiceException("Accounting Type is null!"); } - CSVModelBuilder csvModelBuilder = null; + AccountingModelBuilder accountindModelBuilder = null; switch (accountingStateData.getAccountingType()) { case SERVICE: - csvModelBuilder = new CSVModel4Service(accountingStateData); + accountindModelBuilder = new AccountingModel4Service(accountingStateData); break; case STORAGE: - csvModelBuilder = new CSVModel4Storage(accountingStateData); + accountindModelBuilder = new AccountingModel4Storage(accountingStateData); break; case JOB: case PORTLET: @@ -163,20 +164,20 @@ public class CSVManager { throw new ServiceException("Accounting Type not supported!!"); } - logger.debug("CSVModelBuilder: "+csvModelBuilder); - CSVModelDirector director = new CSVModelDirector(); - director.setCSVModelBuilder(csvModelBuilder); - director.constructCSVModel(); - CSVModel csvModel = director.getCSVModel(); - logger.debug("CSVModel: " + csvModel); + logger.debug("AccountingModelBuilder: "+accountindModelBuilder); + AccountingModelDirector director = new AccountingModelDirector(); + director.setAccountingModelBuilder(accountindModelBuilder); + director.constructAccountingModel(); + AccountingDataModel accountingDataModel = director.getAccountingModel(); + logger.debug("AccountingDataModel: " + accountingDataModel); - if (csvModel == null) { - logger.error("CSV model created is null"); - throw new ServiceException("CSVModel created is null!"); + if (accountingDataModel == null) { + logger.error("Accounting data model created is null"); + throw new ServiceException("Accounting data model created is null!"); } - Path tempFile = Files.createTempFile(csvModel.getFileName(), - csvModel.getFileExtension()); + Path tempFile = Files.createTempFile(accountingDataModel.getName(), + FILE_EXTENSION); logger.debug("Temp File: " + tempFile.toString()); // Create the CSVFormat object @@ -186,8 +187,8 @@ public class CSVManager { PrintStream printStream = new PrintStream(tempFile.toFile()); // CSV Write Example using CSVPrinter CSVPrinter printer = new CSVPrinter(printStream, format); - printer.printRecord(csvModel.getHeader()); - for (CSVDataRow row : csvModel.getRows()) { + printer.printRecord(accountingDataModel.getHeader()); + for (AccountingDataRow row : accountingDataModel.getRows()) { printer.printRecord(row.getData()); } // close the printer @@ -195,14 +196,14 @@ public class CSVManager { printStream.close(); - return new CSVDescriptor(tempFile, csvModel); + return new ExportDescriptor(tempFile, accountingDataModel, FILE_EXTENSION); } catch (ServiceException e) { throw e; } catch (Throwable e) { - logger.error("Error downloading data: " + e.getLocalizedMessage()); + logger.error("Error downloading csv data: " + e.getLocalizedMessage()); e.printStackTrace(); - throw new ServiceException("Error downloading data: " + throw new ServiceException("Error downloading csv data: " + e.getLocalizedMessage()); } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/JSONManager.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/JSONManager.java new file mode 100644 index 0000000..d0d72d4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/JSONManager.java @@ -0,0 +1,241 @@ +package org.gcube.portlets.admin.accountingmanager.server.export; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; + +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingDataModel; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingDataRow; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModel4Service; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModel4Storage; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModelBuilder; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModelDirector; +import org.gcube.portlets.admin.accountingmanager.server.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.server.storage.StorageUtil; +import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException; +import org.gcube.portlets.admin.accountingmanager.shared.export.ExportDescriptor; +import org.gcube.portlets.admin.accountingmanager.shared.workspace.ItemDescription; +import org.json.JSONArray; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * JSON Manager + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class JSONManager { + + private static final String FILE_EXTENSION = ".json"; + private static Logger logger = LoggerFactory.getLogger(JSONManager.class); + private String userName; + + public JSONManager(String userName) { + this.userName = userName; + } + + public ItemDescription saveOnWorkspace( + AccountingStateData accountingStateData) throws ServiceException { + try { + if (accountingStateData == null) { + logger.error("AccountingStateData is null"); + throw new ServiceException("AccountingStateData is null!"); + } + + if (accountingStateData.getAccountingType() == null) { + logger.error("Accounting Type is null"); + throw new ServiceException("Accounting Type is null!"); + } + + AccountingModelBuilder accountingModelBuilder = null; + + switch (accountingStateData.getAccountingType()) { + case SERVICE: + accountingModelBuilder = new AccountingModel4Service( + accountingStateData); + break; + case STORAGE: + accountingModelBuilder = new AccountingModel4Storage( + accountingStateData); + break; + case JOB: + case PORTLET: + case TASK: + default: + logger.error("Accounting Type not supported!"); + throw new ServiceException("Accounting Type not supported!!"); + } + + AccountingModelDirector director = new AccountingModelDirector(); + director.setAccountingModelBuilder(accountingModelBuilder); + director.constructAccountingModel(); + AccountingDataModel accountingDataModel = director + .getAccountingModel(); + logger.debug("AccountingDataModel: " + accountingDataModel); + + if (accountingDataModel == null) { + logger.error("Accounting data model created is null"); + throw new ServiceException( + "Accounting data model created is null!"); + } + + Path tempFile = Files.createTempFile(accountingDataModel.getName(), + FILE_EXTENSION); + logger.debug("Temp File: " + tempFile.toString()); + + JSONObject jsonObj = new JSONObject(); + jsonObj.put("name", accountingDataModel.getName()); + JSONArray headerJSON = new JSONArray( + accountingDataModel.getHeader()); + jsonObj.put("header", headerJSON); + JSONArray rowsJSON = new JSONArray(); + for (AccountingDataRow accountingDataRow : accountingDataModel + .getRows()) { + JSONArray accountingDataRowJSON = new JSONArray( + accountingDataRow.getData()); + JSONObject rowJSON=new JSONObject(); + rowJSON.put("data", accountingDataRowJSON); + rowsJSON.put(rowJSON); + } + jsonObj.put("rows", rowsJSON); + + logger.debug("JSONOBJ: "+jsonObj); + + try (BufferedWriter bw = Files.newBufferedWriter(tempFile, + Charset.defaultCharset(), StandardOpenOption.WRITE)) { + jsonObj.write(bw); + } + + String destinationFolderId = StorageUtil + .createAccountingFolderOnWorkspace(userName); + ItemDescription itemDescription = null; + try (InputStream is = Files.newInputStream(tempFile, + StandardOpenOption.READ)) { + itemDescription = StorageUtil.saveOnWorkspace(userName, + destinationFolderId, accountingDataModel.getName() + + FILE_EXTENSION, + accountingDataModel.getName(), is); + } + + try { + Files.delete(tempFile); + } catch (IOException e) { + logger.error("Error in deleting temp file: " + + e.getLocalizedMessage()); + e.printStackTrace(); + throw new ServiceException("Error deleting temp file: " + + e.getLocalizedMessage(), e); + } + + return itemDescription; + + } catch (ServiceException e) { + throw e; + } catch (Throwable e) { + logger.error("Error saving xml data: " + e.getLocalizedMessage()); + e.printStackTrace(); + throw new ServiceException("Error saving xml data: " + + e.getLocalizedMessage()); + + } + + } + + public ExportDescriptor download(AccountingStateData accountingStateData) + throws ServiceException { + try { + logger.debug("AccountingStateData: " + accountingStateData); + if (accountingStateData == null) { + logger.error("AccountingStateData is null"); + throw new ServiceException("AccountingStateData is null!"); + } + + if (accountingStateData.getAccountingType() == null) { + logger.error("Accounting Type is null"); + throw new ServiceException("Accounting Type is null!"); + } + + AccountingModelBuilder accountingModelBuilder = null; + + switch (accountingStateData.getAccountingType()) { + case SERVICE: + accountingModelBuilder = new AccountingModel4Service( + accountingStateData); + break; + case STORAGE: + accountingModelBuilder = new AccountingModel4Storage( + accountingStateData); + break; + case JOB: + case PORTLET: + case TASK: + default: + logger.error("Accounting Type not supported!"); + throw new ServiceException("Accounting Type not supported!!"); + } + + logger.debug("AccountingModelBuilder: " + accountingModelBuilder); + AccountingModelDirector director = new AccountingModelDirector(); + director.setAccountingModelBuilder(accountingModelBuilder); + director.constructAccountingModel(); + AccountingDataModel accountingDataModel = director + .getAccountingModel(); + logger.debug("AccountingDataModel: " + accountingDataModel); + + if (accountingDataModel == null) { + logger.error("Accounting data model created is null"); + throw new ServiceException( + "Accounting data model created is null!"); + } + + Path tempFile = Files.createTempFile(accountingDataModel.getName(), + FILE_EXTENSION); + logger.debug("Temp File: " + tempFile.toString()); + + JSONObject jsonObj = new JSONObject(); + jsonObj.put("name", accountingDataModel.getName()); + JSONArray headerJSON = new JSONArray( + accountingDataModel.getHeader()); + jsonObj.put("header", headerJSON); + JSONArray rowsJSON = new JSONArray(); + for (AccountingDataRow accountingDataRow : accountingDataModel + .getRows()) { + JSONArray accountingDataRowJSON = new JSONArray( + accountingDataRow.getData()); + JSONObject rowJSON=new JSONObject(); + rowJSON.put("data", accountingDataRowJSON); + rowsJSON.put(rowJSON); + } + jsonObj.put("rows", rowsJSON); + + logger.debug("JSONOBJ: "+jsonObj); + + try (BufferedWriter bw = Files.newBufferedWriter(tempFile, + Charset.defaultCharset(), StandardOpenOption.WRITE)) { + jsonObj.write(bw); + } + + return new ExportDescriptor(tempFile, accountingDataModel, + FILE_EXTENSION); + + } catch (ServiceException e) { + throw e; + } catch (Throwable e) { + logger.error("Error downloading xml data: " + + e.getLocalizedMessage()); + e.printStackTrace(); + throw new ServiceException("Error downloading xml data: " + + e.getLocalizedMessage()); + + } + + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/XMLManager.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/XMLManager.java new file mode 100644 index 0000000..943db60 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/XMLManager.java @@ -0,0 +1,208 @@ +package org.gcube.portlets.admin.accountingmanager.server.export; + +import java.beans.XMLEncoder; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; + +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingDataModel; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModel4Service; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModel4Storage; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModelBuilder; +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingModelDirector; +import org.gcube.portlets.admin.accountingmanager.server.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.server.storage.StorageUtil; +import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException; +import org.gcube.portlets.admin.accountingmanager.shared.export.ExportDescriptor; +import org.gcube.portlets.admin.accountingmanager.shared.workspace.ItemDescription; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * XML Manager + * + * @author Giancarlo Panichi email: g.panichi@isti.cnr.it + * + */ +public class XMLManager { + + private static final String FILE_EXTENSION = ".xml"; + private static Logger logger = LoggerFactory.getLogger(XMLManager.class); + private String userName; + + public XMLManager(String userName) { + this.userName = userName; + } + + public ItemDescription saveOnWorkspace( + AccountingStateData accountingStateData) throws ServiceException { + try { + if (accountingStateData == null) { + logger.error("AccountingStateData is null"); + throw new ServiceException("AccountingStateData is null!"); + } + + if (accountingStateData.getAccountingType() == null) { + logger.error("Accounting Type is null"); + throw new ServiceException("Accounting Type is null!"); + } + + AccountingModelBuilder accountingModelBuilder = null; + + switch (accountingStateData.getAccountingType()) { + case SERVICE: + accountingModelBuilder = new AccountingModel4Service( + accountingStateData); + break; + case STORAGE: + accountingModelBuilder = new AccountingModel4Storage( + accountingStateData); + break; + case JOB: + case PORTLET: + case TASK: + default: + logger.error("Accounting Type not supported!"); + throw new ServiceException("Accounting Type not supported!!"); + } + + AccountingModelDirector director = new AccountingModelDirector(); + director.setAccountingModelBuilder(accountingModelBuilder); + director.constructAccountingModel(); + AccountingDataModel accountingDataModel = director + .getAccountingModel(); + logger.debug("AccountingDataModel: " + accountingDataModel); + + if (accountingDataModel == null) { + logger.error("Accounting data model created is null"); + throw new ServiceException( + "Accounting data model created is null!"); + } + + Path tempFile = Files.createTempFile(accountingDataModel.getName(), + FILE_EXTENSION); + logger.debug("Temp File: " + tempFile.toString()); + + try (OutputStream os = Files.newOutputStream(tempFile, + StandardOpenOption.WRITE)) { + XMLEncoder xmlEncoder = new XMLEncoder(os); + xmlEncoder.writeObject(accountingDataModel); + xmlEncoder.close(); + logger.debug("Archived:" + os); + } + + + String destinationFolderId = StorageUtil + .createAccountingFolderOnWorkspace(userName); + ItemDescription itemDescription = null; + try (InputStream is = Files.newInputStream(tempFile, + StandardOpenOption.READ)) { + itemDescription = StorageUtil.saveOnWorkspace(userName, + destinationFolderId, accountingDataModel.getName() + + FILE_EXTENSION, + accountingDataModel.getName(), is); + } + + try { + Files.delete(tempFile); + } catch (IOException e) { + logger.error("Error in deleting temp file: " + + e.getLocalizedMessage()); + e.printStackTrace(); + throw new ServiceException("Error deleting temp file: " + + e.getLocalizedMessage(), e); + } + + return itemDescription; + + } catch (ServiceException e) { + throw e; + } catch (Throwable e) { + logger.error("Error saving xml data: " + e.getLocalizedMessage()); + e.printStackTrace(); + throw new ServiceException("Error saving xml data: " + + e.getLocalizedMessage()); + + } + + } + + public ExportDescriptor download(AccountingStateData accountingStateData) + throws ServiceException { + try { + logger.debug("AccountingStateData: " + accountingStateData); + if (accountingStateData == null) { + logger.error("AccountingStateData is null"); + throw new ServiceException("AccountingStateData is null!"); + } + + if (accountingStateData.getAccountingType() == null) { + logger.error("Accounting Type is null"); + throw new ServiceException("Accounting Type is null!"); + } + + AccountingModelBuilder accountingModelBuilder = null; + + switch (accountingStateData.getAccountingType()) { + case SERVICE: + accountingModelBuilder = new AccountingModel4Service( + accountingStateData); + break; + case STORAGE: + accountingModelBuilder = new AccountingModel4Storage( + accountingStateData); + break; + case JOB: + case PORTLET: + case TASK: + default: + logger.error("Accounting Type not supported!"); + throw new ServiceException("Accounting Type not supported!!"); + } + + logger.debug("AccountingModelBuilder: " + accountingModelBuilder); + AccountingModelDirector director = new AccountingModelDirector(); + director.setAccountingModelBuilder(accountingModelBuilder); + director.constructAccountingModel(); + AccountingDataModel accountingDataModel = director + .getAccountingModel(); + logger.debug("AccountingDataModel: " + accountingDataModel); + + if (accountingDataModel == null) { + logger.error("Accounting data model created is null"); + throw new ServiceException( + "Accounting data model created is null!"); + } + + Path tempFile = Files.createTempFile(accountingDataModel.getName(), + FILE_EXTENSION); + logger.debug("Temp File: " + tempFile.toString()); + + try (OutputStream os = Files.newOutputStream(tempFile, + StandardOpenOption.WRITE)) { + XMLEncoder xmlEncoder = new XMLEncoder(os); + xmlEncoder.writeObject(accountingDataModel); + xmlEncoder.close(); + logger.debug("Archived:" + os); + } + + return new ExportDescriptor(tempFile, accountingDataModel, + FILE_EXTENSION); + + } catch (ServiceException e) { + throw e; + } catch (Throwable e) { + logger.error("Error downloading xml data: " + e.getLocalizedMessage()); + e.printStackTrace(); + throw new ServiceException("Error downloading xml data: " + + e.getLocalizedMessage()); + + } + + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingDataModel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingDataModel.java new file mode 100644 index 0000000..febf0d9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingDataModel.java @@ -0,0 +1,64 @@ +package org.gcube.portlets.admin.accountingmanager.server.export.model; + +import java.io.Serializable; +import java.util.ArrayList; + +/** + * Accounting Data Model + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public class AccountingDataModel implements Serializable { + + private static final long serialVersionUID = 7127656837246518599L; + private String name; + private ArrayList header; + private ArrayList rows; + + public AccountingDataModel() { + super(); + } + + public AccountingDataModel(String name, ArrayList header, + ArrayList rows) { + super(); + this.name = name; + this.header = header; + this.rows = rows; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public ArrayList getHeader() { + return header; + } + + public void setHeader(ArrayList header) { + this.header = header; + } + + public ArrayList getRows() { + return rows; + } + + public void setRows(ArrayList rows) { + this.rows = rows; + } + + @Override + public String toString() { + return "AccountingDataModel [name=" + name + ", header=" + header + + ", rows=" + rows + "]"; + } + + + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVDataRow.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingDataRow.java similarity index 64% rename from src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVDataRow.java rename to src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingDataRow.java index 68dc2c5..9841f2f 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVDataRow.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingDataRow.java @@ -1,25 +1,25 @@ -package org.gcube.portlets.admin.accountingmanager.server.csv.file; +package org.gcube.portlets.admin.accountingmanager.server.export.model; import java.io.Serializable; import java.util.ArrayList; /** - * Row of csv + * Accounting data row * * @author Giancarlo Panichi email: g.panichi@isti.cnr.it * */ -public class CSVDataRow implements Serializable { +public class AccountingDataRow implements Serializable { private static final long serialVersionUID = -707694572028800959L; private ArrayList data; - public CSVDataRow() { + public AccountingDataRow() { super(); } - public CSVDataRow(ArrayList data) { + public AccountingDataRow(ArrayList data) { super(); this.data = data; } @@ -34,7 +34,9 @@ public class CSVDataRow implements Serializable { @Override public String toString() { - return "CSVDataRow [data=" + data + "]"; + return "AccountingDataRow [data=" + data + "]"; } + + } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModel4Service.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModel4Service.java similarity index 89% rename from src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModel4Service.java rename to src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModel4Service.java index 815b2d0..2bb370c 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModel4Service.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModel4Service.java @@ -1,4 +1,4 @@ -package org.gcube.portlets.admin.accountingmanager.server.csv.file; +package org.gcube.portlets.admin.accountingmanager.server.export.model; import java.text.ParseException; import java.util.ArrayList; @@ -19,18 +19,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * CSV Model 4 Service + * Accounting Model 4 Service * * @author "Giancarlo Panichi" email: g.panichi@isti.cnr.it * */ -public class CSVModel4Service extends CSVModelBuilder { +public class AccountingModel4Service extends AccountingModelBuilder { protected static Logger logger = LoggerFactory - .getLogger(CSVModel4Service.class); + .getLogger(AccountingModel4Service.class); private AccountingStateData accountingStateData; - public CSVModel4Service(AccountingStateData accountingStateData) { + public AccountingModel4Service(AccountingStateData accountingStateData) { this.accountingStateData = accountingStateData; } @@ -73,7 +73,7 @@ public class CSVModel4Service extends CSVModelBuilder { String fileName = "Untitled"; ArrayList header; - ArrayList rows = new ArrayList<>(); + ArrayList rows = new ArrayList<>(); if (seriesResponse instanceof SeriesService) { SeriesService seriesService = (SeriesService) seriesResponse; SeriesServiceDefinition definition = seriesService @@ -94,7 +94,7 @@ public class CSVModel4Service extends CSVModelBuilder { data.add(String.valueOf(seriesData.getDuration())); data.add(String.valueOf(seriesData.getMaxInvocationTime())); data.add(String.valueOf(seriesData.getMinInvocationTime())); - CSVDataRow csvDataRow = new CSVDataRow(data); + AccountingDataRow csvDataRow = new AccountingDataRow(data); rows.add(csvDataRow); } } else { @@ -123,7 +123,7 @@ public class CSVModel4Service extends CSVModelBuilder { .getMaxInvocationTime())); data.add(String.valueOf(seriesData .getMinInvocationTime())); - CSVDataRow csvDataRow = new CSVDataRow(data); + AccountingDataRow csvDataRow = new AccountingDataRow(data); rows.add(csvDataRow); } } @@ -143,8 +143,8 @@ public class CSVModel4Service extends CSVModelBuilder { + seriesResponse); } - CSVModel invocation = new CSVModel(fileName, header, rows); - csvModelSpec.setOp(invocation); + AccountingDataModel invocation = new AccountingDataModel(fileName, header, rows); + accountingModelSpec.setOp(invocation); } } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModel4Storage.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModel4Storage.java similarity index 88% rename from src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModel4Storage.java rename to src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModel4Storage.java index 154c517..bb73087 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModel4Storage.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModel4Storage.java @@ -1,4 +1,4 @@ -package org.gcube.portlets.admin.accountingmanager.server.csv.file; +package org.gcube.portlets.admin.accountingmanager.server.export.model; import java.text.ParseException; import java.util.ArrayList; @@ -19,18 +19,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * CSV Model 4 Storage + * Accounting Model 4 Storage * * @author "Giancarlo Panichi" email: g.panichi@isti.cnr.it * */ -public class CSVModel4Storage extends CSVModelBuilder { +public class AccountingModel4Storage extends AccountingModelBuilder { protected static Logger logger = LoggerFactory - .getLogger(CSVModel4Storage.class); + .getLogger(AccountingModel4Storage.class); private AccountingStateData accountingStateData; - public CSVModel4Storage(AccountingStateData accountingStateData) { + public AccountingModel4Storage(AccountingStateData accountingStateData) { this.accountingStateData = accountingStateData; } @@ -74,7 +74,7 @@ public class CSVModel4Storage extends CSVModelBuilder { String fileName = "Untitled"; ArrayList header; - ArrayList rows = new ArrayList<>(); + ArrayList rows = new ArrayList<>(); if (seriesResponse instanceof SeriesStorage) { SeriesStorage seriesStorage = (SeriesStorage) seriesResponse; SeriesStorageDefinition definition = seriesStorage @@ -92,7 +92,7 @@ public class CSVModel4Storage extends CSVModelBuilder { data.add(sdfCSVDate.format(seriesData.getDate())); data.add(String.valueOf(seriesData.getOperationCount())); data.add(String.valueOf(seriesData.getDataVolume())); - CSVDataRow csvDataRow = new CSVDataRow(data); + AccountingDataRow csvDataRow = new AccountingDataRow(data); rows.add(csvDataRow); } } else { @@ -116,7 +116,7 @@ public class CSVModel4Storage extends CSVModelBuilder { data.add(sdfCSVDate.format(seriesData.getDate())); data.add(String.valueOf(seriesData.getOperationCount())); data.add(String.valueOf(seriesData.getDataVolume())); - CSVDataRow csvDataRow = new CSVDataRow(data); + AccountingDataRow csvDataRow = new AccountingDataRow(data); rows.add(csvDataRow); } } @@ -136,8 +136,8 @@ public class CSVModel4Storage extends CSVModelBuilder { + seriesResponse); } - CSVModel invocation = new CSVModel(fileName,header, rows); - csvModelSpec.setOp(invocation); + AccountingDataModel invocation = new AccountingDataModel(fileName,header, rows); + accountingModelSpec.setOp(invocation); } } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModelBuilder.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModelBuilder.java similarity index 62% rename from src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModelBuilder.java rename to src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModelBuilder.java index f71ac8d..5b536fc 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/file/CSVModelBuilder.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModelBuilder.java @@ -1,28 +1,28 @@ -package org.gcube.portlets.admin.accountingmanager.server.csv.file; +package org.gcube.portlets.admin.accountingmanager.server.export.model; import java.text.SimpleDateFormat; import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException; /** - * Abstract class for build CSV Model + * Abstract class for build Accounting Model * * @author "Giancarlo Panichi" * email: g.panichi@isti.cnr.it * */ -public abstract class CSVModelBuilder { - protected CSVModelSpec csvModelSpec; +public abstract class AccountingModelBuilder { + protected AccountingModelSpec accountingModelSpec; protected SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMM dd"); protected SimpleDateFormat sdfCSVDate = new SimpleDateFormat("yyyy/MM/dd HH:mm"); protected SimpleDateFormat sdfFile = new SimpleDateFormat("yyyyMMdd"); - public CSVModelSpec getCSVModelSpec(){ - return csvModelSpec; + public AccountingModelSpec getAccountingModelSpec(){ + return accountingModelSpec; } public void createSpec(){ - csvModelSpec=new CSVModelSpec(); + accountingModelSpec=new AccountingModelSpec(); } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModelDirector.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModelDirector.java new file mode 100644 index 0000000..faf28d7 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModelDirector.java @@ -0,0 +1,38 @@ +package org.gcube.portlets.admin.accountingmanager.server.export.model; + +import java.util.ArrayList; + +import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException; + + +/** + * Accounting Model Director + * + * @author "Giancarlo Panichi" + * email: g.panichi@isti.cnr.it + * + */ +public class AccountingModelDirector { + AccountingModelBuilder accountingModelBuilder; + + public void setAccountingModelBuilder( + AccountingModelBuilder accountingModelBuilder) { + this.accountingModelBuilder = accountingModelBuilder; + } + + public AccountingDataModel getAccountingModel() { + return accountingModelBuilder.getAccountingModelSpec().getOp(); + + } + + public ArrayList getListOfAccountingModel() { + return accountingModelBuilder.getAccountingModelSpec().getOps(); + + } + + public void constructAccountingModel() throws ServiceException { + accountingModelBuilder.createSpec(); + accountingModelBuilder.buildOpEx(); + + } +} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModelSpec.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModelSpec.java new file mode 100644 index 0000000..7e2f969 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/export/model/AccountingModelSpec.java @@ -0,0 +1,32 @@ +package org.gcube.portlets.admin.accountingmanager.server.export.model; + +import java.util.ArrayList; + +/** + * CSV Model Specification + * + * @author "Giancarlo Panichi" + * email: g.panichi@isti.cnr.it + * + */ +public class AccountingModelSpec { + private AccountingDataModel op; + private ArrayList ops; + + public AccountingDataModel getOp() { + return op; + } + + public void setOp(AccountingDataModel op) { + this.op = op; + } + + public ArrayList getOps() { + return ops; + } + + public void setOps(ArrayList ops) { + this.ops = ops; + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/Constants.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/Constants.java index 569c398..ebf9e31 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/Constants.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/Constants.java @@ -23,8 +23,9 @@ public class Constants { public static final String DEFAULT_SCOPE = "/gcube"; public static final String DEFAULT_ROLE = "OrganizationMember"; - public static final String DOWNLOAD_CVS_SERVLET="downloadCSVServlet"; - public static final String DOWNLOAD_CVS_SERVLET_ACCOUNTINGTYPE_PARAMETER = "AccountingType"; + public static final String EXPORT_SERVLET="ExportServlet"; + public static final String EXPORT_SERVLET_TYPE_PARAMETER="ExportServletType"; + public static final String EXPORT_SERVLET_ACCOUNTING_TYPE_PARAMETER = "AccountingType"; public static final String SESSION_ACCOUNTING_STATE = "ACCOUNTING_STATE"; diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/csv/CSVDescriptor.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/csv/CSVDescriptor.java deleted file mode 100644 index 4d1cb31..0000000 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/csv/CSVDescriptor.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.gcube.portlets.admin.accountingmanager.shared.csv; - -import java.io.Serializable; -import java.nio.file.Path; - -import org.gcube.portlets.admin.accountingmanager.server.csv.file.CSVModel; - -/** - * - * @author Giancarlo Panichi - * email: g.panichi@isti.cnr.it - * - */ -public class CSVDescriptor implements Serializable { - private static final long serialVersionUID = 4778932733041422948L; - private Path path; - private CSVModel csvModel; - - public CSVDescriptor() { - super(); - } - - public CSVDescriptor(Path path, CSVModel csvModel) { - super(); - this.path = path; - this.csvModel = csvModel; - } - - public Path getPath() { - return path; - } - - public void setPath(Path path) { - this.path = path; - } - - public CSVModel getCsvModel() { - return csvModel; - } - - public void setCsvModel(CSVModel csvModel) { - this.csvModel = csvModel; - } - - @Override - public String toString() { - return "CSVDescriptor [path=" + path + ", csvModel=" + csvModel + "]"; - } - - - -} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/export/ExportDescriptor.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/export/ExportDescriptor.java new file mode 100644 index 0000000..0655164 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/export/ExportDescriptor.java @@ -0,0 +1,68 @@ +package org.gcube.portlets.admin.accountingmanager.shared.export; + +import java.io.Serializable; +import java.nio.file.Path; + +import org.gcube.portlets.admin.accountingmanager.server.export.model.AccountingDataModel; + +/** + * + * @author Giancarlo Panichi + * email: g.panichi@isti.cnr.it + * + */ +public class ExportDescriptor implements Serializable { + private static final long serialVersionUID = 4778932733041422948L; + private Path path; + private AccountingDataModel csvModel; + private String fileExtension; + + public ExportDescriptor() { + super(); + } + + public ExportDescriptor(Path path, AccountingDataModel csvModel, String fileExtension) { + super(); + this.path = path; + this.csvModel = csvModel; + this.fileExtension=fileExtension; + + } + + public Path getPath() { + return path; + } + + public void setPath(Path path) { + this.path = path; + } + + public AccountingDataModel getCsvModel() { + return csvModel; + } + + public void setCsvModel(AccountingDataModel csvModel) { + this.csvModel = csvModel; + } + + public String getFileExtension() { + return fileExtension; + } + + public void setFileExtension(String fileExtension) { + this.fileExtension = fileExtension; + } + + @Override + public String toString() { + return "ExportDescriptor [path=" + path + ", csvModel=" + csvModel + + ", fileExtension=" + fileExtension + "]"; + } + + + + + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/export/ExportType.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/export/ExportType.java new file mode 100644 index 0000000..9c47427 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/export/ExportType.java @@ -0,0 +1,17 @@ +/** + * + */ +package org.gcube.portlets.admin.accountingmanager.shared.export; + +/** + * + * @author "Giancarlo Panichi" + * g.panichi@isti.cnr.it + * + */ +public enum ExportType { + CSV, + JSON, + XML; + +} diff --git a/src/main/resources/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml b/src/main/resources/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml index 3cec52e..b82aa48 100644 --- a/src/main/resources/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml +++ b/src/main/resources/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml @@ -25,7 +25,7 @@ + /> --> @@ -48,19 +48,18 @@ name="locale" values="es" /> --> - + - + - + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index c3a35bb..7578461 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -30,10 +30,10 @@ org.gcube.portlets.admin.accountingmanager.server.AccountingManagerServiceImpl - + - DownloadCSVServlet - org.gcube.portlets.admin.accountingmanager.server.DownloadCSVServlet + ExportServlet + org.gcube.portlets.admin.accountingmanager.server.ExportServlet @@ -61,10 +61,10 @@ /accountingman/ams - + - DownloadCSVServlet - /accountingman/downloadCSVServlet + ExportServlet + /accountingman/ExportServlet