diff --git a/.classpath b/.classpath index a9540ac..843009d 100644 --- a/.classpath +++ b/.classpath @@ -1,12 +1,12 @@ - + - + @@ -45,5 +45,5 @@ - + diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 1a07e40..f478c8b 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -4,7 +4,7 @@ - + diff --git a/distro/changelog.xml b/distro/changelog.xml index ffcf8b7..5f1413f 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,4 +1,8 @@ + + Added CSV download [Ticket #4041] + Added Top N Chart[Ticket #2251] diff --git a/pom.xml b/pom.xml index 914ef66..c0223e2 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ 4.0.0 org.gcube.portlets.admin accounting-manager - 1.2.0-SNAPSHOT + 1.3.0-SNAPSHOT war @@ -61,6 +61,20 @@ localRun + + + org.gcube.common + common-authorization + runtime + + + + org.gcube.common + authorization-client + runtime + + + org.gcube.contentmanagement @@ -90,18 +104,7 @@ runtime - - - org.gcube.common - common-authorization - runtime - - - org.gcube.common - authorization-client - runtime - @@ -211,6 +214,11 @@ aslcore + + org.gcube.dvos + usermanagement-core + provided + @@ -246,7 +254,7 @@ aslsocial provided - + org.gcube.portlets.widgets @@ -261,7 +269,7 @@ provided - + org.gcube.contentmanagement @@ -293,7 +301,7 @@ home-library-model provided - + org.gcube.accounting 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 d225026..08b857f 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 @@ -11,8 +11,8 @@ import org.gcube.portlets.admin.accountingmanager.client.event.StateChangeEvent; import org.gcube.portlets.admin.accountingmanager.client.event.UIStateEvent; import org.gcube.portlets.admin.accountingmanager.client.monitor.AccountingMonitor; import org.gcube.portlets.admin.accountingmanager.client.rpc.AccountingManagerServiceAsync; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingState; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientState; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; import org.gcube.portlets.admin.accountingmanager.client.type.SessionExpiredType; import org.gcube.portlets.admin.accountingmanager.client.type.StateChangeType; import org.gcube.portlets.admin.accountingmanager.client.type.UIStateType; @@ -31,6 +31,7 @@ import org.gcube.portlets.admin.accountingmanager.shared.workspace.ItemDescripti import org.gcube.portlets.widgets.sessionchecker.client.CheckSession; import com.allen_sauer.gwt.log.client.Log; +import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventBus; import com.google.gwt.event.shared.SimpleEventBus; import com.google.gwt.i18n.client.DateTimeFormat; @@ -53,7 +54,7 @@ public class AccountingManagerController { private SimpleEventBus eventBus; private UserInfo userInfo; - private AccountingState accountingState; + private AccountingClientState accountingState; private AccountingType accountingType; @SuppressWarnings("unused") private BorderLayoutContainer mainPanel; @@ -62,8 +63,8 @@ public class AccountingManagerController { public AccountingManagerController() { eventBus = new SimpleEventBus(); accountingType = AccountingType.STORAGE; - accountingState = new AccountingState(); - AccountingStateData accountingStateData = new AccountingStateData( + accountingState = new AccountingClientState(); + AccountingClientStateData accountingStateData = new AccountingClientStateData( accountingType, null, null, null); accountingState.setState(accountingType, accountingStateData); init(); @@ -77,7 +78,7 @@ public class AccountingManagerController { private void checkSession() { // if you do not need to something when the session expire - //CheckSession.getInstance().startPolling(); + // CheckSession.getInstance().startPolling(); } private void sessionExpiredShow() { @@ -201,25 +202,24 @@ public class AccountingManagerController { } }); - + eventBus.addHandler(DownloadCSVRequestEvent.TYPE, new DownloadCSVRequestEvent.DownloadCSVRequestEventHandler() { @Override public void onDownload(DownloadCSVRequestEvent event) { Log.debug("Catch DownloadDataRequestEvent"); - doSaveDataOnWorkspace(event); - + doDownloadCSV(event); + } }); - eventBus.fireEvent(new UIStateEvent(UIStateType.START)); } private void doMenuCommand(AccountingMenuEvent event) { - AccountingStateData accountingStateData = null; + AccountingClientStateData accountingStateData = null; if (event == null || event.getAccountingType() == null) { return; } @@ -254,18 +254,21 @@ public class AccountingManagerController { private void createDefaultChart(AccountingType accountingType) { accountingMonitor = new AccountingMonitor(); Date now = new Date(); - DateTimeFormat dtf=DateTimeFormat.getFormat(PredefinedFormat.YEAR_MONTH_DAY); - String currentDate=dtf.format(now); - Date date=dtf.parse(currentDate); - Date lastMonth=new Date(date.getTime()); + DateTimeFormat dtf = DateTimeFormat + .getFormat(PredefinedFormat.YEAR_MONTH_DAY); + String currentDate = dtf.format(now); + Date date = dtf.parse(currentDate); + Date lastMonth = new Date(date.getTime()); CalendarUtil.addMonthsToDate(lastMonth, -1); - SeriesRequest seriesRequest = new SeriesRequest(new AccountingPeriod(dtf.format(lastMonth), - dtf.format(date), AccountingPeriodMode.DAILY), new AccountingFilterBasic()); - Log.debug("DefaultSeriesRequest: "+seriesRequest); - Log.debug("LastMoth= "+dtf.format(lastMonth)+" , date="+dtf.format(date)); + SeriesRequest seriesRequest = new SeriesRequest(new AccountingPeriod( + dtf.format(lastMonth), dtf.format(date), + AccountingPeriodMode.DAILY), new AccountingFilterBasic()); + Log.debug("DefaultSeriesRequest: " + seriesRequest); + Log.debug("LastMoth= " + dtf.format(lastMonth) + " , date=" + + dtf.format(date)); this.accountingType = accountingType; - AccountingStateData accountingStateData = new AccountingStateData( + AccountingClientStateData accountingStateData = new AccountingClientStateData( accountingType, seriesRequest, null, null); accountingState.setState(accountingType, accountingStateData); @@ -291,14 +294,13 @@ public class AccountingManagerController { UtilsGXT3.alert("Error retrieving filter keys", caught.getLocalizedMessage()); } - } @Override public void onSuccess(ArrayList result) { Log.debug("FilterKeys: " + result); - AccountingStateData accountingStateData = accountingState + AccountingClientStateData accountingStateData = accountingState .getState(accountingType); accountingStateData.setAvailableFilterKeys(result); accountingState.setState(accountingType, @@ -318,7 +320,7 @@ public class AccountingManagerController { @Override public void onSuccess(SeriesResponse seriesResponse) { Log.debug("SeriesResponse: " + seriesResponse); - AccountingStateData accountingStateData = accountingState + AccountingClientStateData accountingStateData = accountingState .getState(accountingType); accountingStateData.setSeriesResponse(seriesResponse); accountingState.setState(accountingType, @@ -359,7 +361,7 @@ public class AccountingManagerController { switch (event.getFiltersChangeType()) { case Update: SeriesRequest seriesRequest = event.getSeriesRequest(); - AccountingStateData accountingStateData = accountingState + AccountingClientStateData accountingStateData = accountingState .getState(accountingType); if (accountingStateData != null) { accountingMonitor = new AccountingMonitor(); @@ -387,7 +389,7 @@ public class AccountingManagerController { @Override public void onSuccess(SeriesResponse seriesResponse) { Log.debug("SeriesResponse: " + seriesResponse); - AccountingStateData accountingStateData = accountingState + AccountingClientStateData accountingStateData = accountingState .getState(accountingType); accountingStateData.setSeriesResponse(seriesResponse); accountingState.setState(accountingType, @@ -416,70 +418,80 @@ public class AccountingManagerController { } - private void doSaveDataOnWorkspace(DownloadCSVRequestEvent event) { accountingMonitor = new AccountingMonitor(); - Log.debug("Call saveCSVOnWorkspace on server, params: " + event.getAccountingType()); + Log.debug("Call saveCSVOnWorkspace on server, params: " + + event.getAccountingType()); - AccountingManagerServiceAsync.INSTANCE.saveCSVOnWorkspace(accountingState.getState(event.getAccountingType()), new AsyncCallback() { + AccountingManagerServiceAsync.INSTANCE.saveCSVOnWorkspace( + event.getAccountingType(), + new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - accountingMonitor.hide(); - if (caught instanceof SessionExpiredException) { - eventBus.fireEvent(new SessionExpiredEvent( - SessionExpiredType.EXPIREDONSERVER)); - } else { - Log.error("Error:" + caught.getLocalizedMessage()); - UtilsGXT3.alert("Error", - caught.getLocalizedMessage()); - caught.printStackTrace(); - } + @Override + public void onFailure(Throwable caught) { + accountingMonitor.hide(); + if (caught instanceof SessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error("Error:" + caught.getLocalizedMessage()); + UtilsGXT3.alert("Error", + caught.getLocalizedMessage()); + caught.printStackTrace(); + } - - } + } - @Override - public void onSuccess(ItemDescription result) { - Log.debug("ItemDescription: " + result); - doDownloadCSV(result); - } - }); + @Override + public void onSuccess(ItemDescription result) { + Log.debug("ItemDescription: " + result); + doDownloadCSVFromWorkspace(result); + } + }); } - - - private void doDownloadCSV(final ItemDescription itemDescription) { + + private void doDownloadCSVFromWorkspace( + final ItemDescription itemDescription) { Log.debug("DownloadCSV from server: " + itemDescription); - AccountingManagerServiceAsync.INSTANCE.getPublicLink(itemDescription, new AsyncCallback() { + AccountingManagerServiceAsync.INSTANCE.getPublicLink(itemDescription, + new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - accountingMonitor.hide(); - if (caught instanceof SessionExpiredException) { - eventBus.fireEvent(new SessionExpiredEvent( - SessionExpiredType.EXPIREDONSERVER)); - } else { - Log.error("Error:" + caught.getLocalizedMessage()); - UtilsGXT3.alert("Error", - caught.getLocalizedMessage()); - caught.printStackTrace(); - } - } + @Override + public void onFailure(Throwable caught) { + accountingMonitor.hide(); + if (caught instanceof SessionExpiredException) { + eventBus.fireEvent(new SessionExpiredEvent( + SessionExpiredType.EXPIREDONSERVER)); + } else { + Log.error("Error:" + caught.getLocalizedMessage()); + UtilsGXT3.alert("Error", + caught.getLocalizedMessage()); + caught.printStackTrace(); + } + } - @Override - public void onSuccess(String link) { - accountingMonitor.hide(); - Log.debug("Retrieved link: " + link); - Window.open(link, itemDescription.getName(), ""); - } - }); + @Override + public void onSuccess(String link) { + accountingMonitor.hide(); + Log.debug("Retrieved link: " + link); + Window.open(link, itemDescription.getName(), ""); + } + }); } - + private void doDownloadCSV(DownloadCSVRequestEvent event) { + StringBuilder actionUrl = new StringBuilder(); + actionUrl.append(GWT.getModuleBaseURL()); + actionUrl.append(Constants.DOWNLOAD_CVS_SERVLET + "?" + + Constants.DOWNLOAD_CVS_SERVLET_ACCOUNTINGTYPE_PARAMETER + "=" + + event.getAccountingType().name()); + + Log.debug("Retrieved link: " + actionUrl); + Window.open(actionUrl.toString(), event.getAccountingType().toString(), ""); + + } - - private void doSessionExpiredCommand(SessionExpiredEvent event) { Log.debug("Session Expired Event: " + event.getSessionExpiredType()); sessionExpiredShow(); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/event/StateChangeEvent.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/event/StateChangeEvent.java index 053423a..392c483 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/event/StateChangeEvent.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/event/StateChangeEvent.java @@ -1,6 +1,6 @@ package org.gcube.portlets.admin.accountingmanager.client.event; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; import org.gcube.portlets.admin.accountingmanager.client.type.StateChangeType; import com.google.gwt.event.shared.EventHandler; @@ -19,7 +19,7 @@ public class StateChangeEvent extends public static Type TYPE = new Type(); private StateChangeType stateChangeType; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; public interface StateChangeEventHandler extends EventHandler { void onStateChange(StateChangeEvent event); @@ -31,7 +31,7 @@ public class StateChangeEvent extends } public StateChangeEvent(StateChangeType stateChangeType, - AccountingStateData accountingStateData) { + AccountingClientStateData accountingStateData) { this.stateChangeType = stateChangeType; this.accountingStateData = accountingStateData; } @@ -59,7 +59,7 @@ public class StateChangeEvent extends return stateChangeType; } - public AccountingStateData getAccountingStateData() { + public AccountingClientStateData getAccountingStateData() { return accountingStateData; } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/filters/ActiveFiltersPanel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/filters/ActiveFiltersPanel.java index 74e8b9d..f0dda57 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/filters/ActiveFiltersPanel.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/filters/ActiveFiltersPanel.java @@ -7,10 +7,11 @@ import org.gcube.portlets.admin.accountingmanager.client.event.AccountingPeriodE import org.gcube.portlets.admin.accountingmanager.client.event.AccountingPeriodRequestEvent; import org.gcube.portlets.admin.accountingmanager.client.event.SessionExpiredEvent; import org.gcube.portlets.admin.accountingmanager.client.event.StateChangeEvent; +import org.gcube.portlets.admin.accountingmanager.client.monitor.AccountingMonitor; import org.gcube.portlets.admin.accountingmanager.client.properties.AccountingFilterProperties; import org.gcube.portlets.admin.accountingmanager.client.resource.AccountingManagerResources; import org.gcube.portlets.admin.accountingmanager.client.rpc.AccountingManagerServiceAsync; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; import org.gcube.portlets.admin.accountingmanager.client.type.SessionExpiredType; import org.gcube.portlets.admin.accountingmanager.client.utils.UtilsGXT3; import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilter; @@ -90,7 +91,7 @@ public class ActiveFiltersPanel extends SimpleContainer { private Grid grid; private ListStore store; private boolean addStatus; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; private ListStore storeComboFilterKey; private ComboBox comboFilterKey; private ListStore storeComboFilterValue; @@ -109,6 +110,7 @@ public class ActiveFiltersPanel extends SimpleContainer { private FilterKey filterKey; private boolean cancelValue; + private AccountingMonitor accountingMonitor; public interface FilterKeyPropertiesCombo extends PropertyAccess { @@ -769,7 +771,7 @@ public class ActiveFiltersPanel extends SimpleContainer { Log.debug("AccountingPeriod not valid"); return; } - + accountingMonitor=new AccountingMonitor(); FilterValuesRequest requestFilterValue = new FilterValuesRequest( filterKey, accountingStateData.getAccountingType(), event.getAccountingPeriod()); @@ -779,6 +781,7 @@ public class ActiveFiltersPanel extends SimpleContainer { @Override public void onFailure(Throwable caught) { + accountingMonitor.hide(); if (caught instanceof SessionExpiredException) { eventBus.fireEvent(new SessionExpiredEvent( SessionExpiredType.EXPIREDONSERVER)); @@ -794,6 +797,7 @@ public class ActiveFiltersPanel extends SimpleContainer { @Override public void onSuccess(ArrayList result) { Log.debug("FilterValues: " + result); + accountingMonitor.hide(); ArrayList values = new ArrayList(); for (FilterValue fv : result) { values.add(fv.getValue()); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Job.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Job.java index bc9bec6..16bdf96 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Job.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Job.java @@ -1,7 +1,7 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.job.JobChartBasicPanel; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesJob; import org.gcube.portlets.admin.accountingmanager.shared.exception.ChartDrawException; @@ -17,10 +17,10 @@ import com.sencha.gxt.widget.core.client.container.SimpleContainer; */ public class AccountingChart4Job extends AccountingChartBuilder { - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; private EventBus eventBus; - public AccountingChart4Job(EventBus eventBus, AccountingStateData accountingStateData) { + public AccountingChart4Job(EventBus eventBus, AccountingClientStateData accountingStateData) { this.eventBus=eventBus; this.accountingStateData = accountingStateData; } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Portlet.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Portlet.java index 2fb264b..c01917f 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Portlet.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Portlet.java @@ -1,6 +1,6 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesStorage; import org.gcube.portlets.admin.accountingmanager.shared.exception.ChartDrawException; @@ -15,9 +15,9 @@ import com.google.gwt.event.shared.EventBus; */ public class AccountingChart4Portlet extends AccountingChartBuilder { private EventBus eventBus; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; - public AccountingChart4Portlet(EventBus eventBus, AccountingStateData accountingStateData) { + public AccountingChart4Portlet(EventBus eventBus, AccountingClientStateData accountingStateData) { this.eventBus = eventBus; this.accountingStateData = accountingStateData; } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Service.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Service.java index 409db3b..b726291 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Service.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Service.java @@ -2,7 +2,7 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.service.ServiceChartBasicPanel; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.service.ServiceChartTopPanel; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesService; import org.gcube.portlets.admin.accountingmanager.shared.exception.ChartDrawException; @@ -18,10 +18,10 @@ import com.sencha.gxt.widget.core.client.container.SimpleContainer; */ public class AccountingChart4Service extends AccountingChartBuilder { private EventBus eventBus; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; - public AccountingChart4Service(EventBus eventBus, AccountingStateData accountingStateData) { + public AccountingChart4Service(EventBus eventBus, AccountingClientStateData accountingStateData) { this.eventBus=eventBus; this.accountingStateData = accountingStateData; } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Storage.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Storage.java index 6498018..f02bee0 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Storage.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Storage.java @@ -2,7 +2,7 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.storage.StorageChartBasicPanel; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.storage.StorageChartTopPanel; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesStorage; import org.gcube.portlets.admin.accountingmanager.shared.exception.ChartDrawException; @@ -18,10 +18,10 @@ import com.sencha.gxt.widget.core.client.container.SimpleContainer; */ public class AccountingChart4Storage extends AccountingChartBuilder { private EventBus eventBus; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; - public AccountingChart4Storage(EventBus eventBus, AccountingStateData accountingStateData) { + public AccountingChart4Storage(EventBus eventBus, AccountingClientStateData accountingStateData) { this.eventBus=eventBus; this.accountingStateData = accountingStateData; } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Task.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Task.java index fa76d40..373bfc9 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Task.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Task.java @@ -1,6 +1,6 @@ package org.gcube.portlets.admin.accountingmanager.client.maindata.charts; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesStorage; import org.gcube.portlets.admin.accountingmanager.shared.exception.ChartDrawException; @@ -15,10 +15,10 @@ import com.google.gwt.event.shared.EventBus; */ public class AccountingChart4Task extends AccountingChartBuilder { private EventBus eventBus; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; - public AccountingChart4Task(EventBus eventBus, AccountingStateData accountingStateData) { + public AccountingChart4Task(EventBus eventBus, AccountingClientStateData accountingStateData) { this.eventBus=eventBus; this.accountingStateData = accountingStateData; } 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 caad13b..fa31c70 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 @@ -8,7 +8,7 @@ import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.D import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.JobChartMeasure; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.TimeUnitMeasure; import org.gcube.portlets.admin.accountingmanager.client.resource.AccountingManagerResources; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; 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; @@ -56,7 +56,7 @@ public class JobChartBasicPanel extends SimpleContainer { private static final String TIME_UNIT = "Time Unit"; private static final String SINGLE_AXIS = "Single Axis"; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; private HighchartsLayoutPanel highchartsLayoutPanel; // Download Menu @@ -66,7 +66,6 @@ public class JobChartBasicPanel extends SimpleContainer { private MenuItem downloadPDFItem; private MenuItem downloadSVGItem; - // Time Unit Menu private MenuItem msItem; private MenuItem sItem; @@ -82,8 +81,9 @@ public class JobChartBasicPanel extends SimpleContainer { private ToggleButton toggleButton; private EventBus eventBus; - public JobChartBasicPanel(EventBus eventBus, AccountingStateData accountingStateData) { - this.eventBus=eventBus; + public JobChartBasicPanel(EventBus eventBus, + AccountingClientStateData accountingStateData) { + this.eventBus = eventBus; this.accountingStateData = accountingStateData; forceLayoutOnResize = true; create(); @@ -229,7 +229,8 @@ public class JobChartBasicPanel extends SimpleContainer { Menu menuDownload = new Menu(); downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, - AccountingManagerResources.INSTANCE.accountingByte24()); + AccountingManagerResources.INSTANCE.accountingFileCSV24()); + downloadCSVItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); @@ -243,7 +244,6 @@ public class JobChartBasicPanel extends SimpleContainer { AccountingManagerResources.INSTANCE.accountingFileSVG24()); downloadSVGItem.setHeight(30); - downloadCSVItem.addSelectionHandler(new SelectionHandler() { @Override @@ -252,11 +252,8 @@ public class JobChartBasicPanel extends SimpleContainer { } - }); - - downloadPNGItem.addSelectionHandler(new SelectionHandler() { @Override @@ -293,7 +290,7 @@ public class JobChartBasicPanel extends SimpleContainer { onDownloadSVG(id); } }); - + menuDownload.add(downloadCSVItem); menuDownload.add(downloadPNGItem); menuDownload.add(downloadJPGItem); @@ -302,7 +299,6 @@ public class JobChartBasicPanel extends SimpleContainer { return menuDownload; } - private void onDownloadCSV() { DownloadCSVRequestEvent event = new DownloadCSVRequestEvent( @@ -419,11 +415,10 @@ public class JobChartBasicPanel extends SimpleContainer { + JobChartMeasure.OperationCount.getLabel() + "\"," + " \"style\": {" + " \"color\": \"" + colors.get(1) + "\"" + " }" + " }" + "} , {" + " \"id\": \"" - + JobChartMeasure.Duration.name() + "\", " - + " \"title\": {" + " \"text\": \"" - + JobChartMeasure.Duration.getLabel() + "\"," - + " \"style\": {" + " \"color\": \"" + colors.get(0) - + "\"" + " }" + " }," + " \"labels\": {" + + JobChartMeasure.Duration.name() + "\", " + " \"title\": {" + + " \"text\": \"" + JobChartMeasure.Duration.getLabel() + + "\"," + " \"style\": {" + " \"color\": \"" + + colors.get(0) + "\"" + " }" + " }," + " \"labels\": {" + " \"format\": \"{value} " + unitMeasureLabel + "\"," + " \"style\": {" + " \"color\": \"" + colors.get(0) + "\"" + " }" + " }," + " \"opposite\": \"true\"" @@ -463,8 +458,7 @@ public class JobChartBasicPanel extends SimpleContainer { SeriesColumn seriesOperationCount = highchartsFactory .createSeriesColumn(); - seriesOperationCount - .name(JobChartMeasure.OperationCount.getLabel()); + seriesOperationCount.name(JobChartMeasure.OperationCount.getLabel()); seriesOperationCount.color(colors.get(1)); seriesOperationCount.type("column"); @@ -488,8 +482,8 @@ public class JobChartBasicPanel extends SimpleContainer { seriesMaxInvocationTime.name(JobChartMeasure.MaxInvocationTime .getLabel()); seriesMaxInvocationTime.color(colors.get(2)); - seriesMaxInvocationTime - .yAxisAsString(JobChartMeasure.MaxInvocationTime.name()); + seriesMaxInvocationTime.yAxisAsString(JobChartMeasure.MaxInvocationTime + .name()); ArrayNumber dataMaxInvocationTime = seriesMaxInvocationTime .dataAsArrayNumber(); @@ -502,8 +496,8 @@ public class JobChartBasicPanel extends SimpleContainer { seriesMinInvocationTime.name(JobChartMeasure.MinInvocationTime .getLabel()); seriesMinInvocationTime.color(colors.get(3)); - seriesMinInvocationTime - .yAxisAsString(JobChartMeasure.MinInvocationTime.name()); + seriesMinInvocationTime.yAxisAsString(JobChartMeasure.MinInvocationTime + .name()); ArrayNumber dataMinInvocationTime = seriesMinInvocationTime .dataAsArrayNumber(); @@ -511,8 +505,7 @@ public class JobChartBasicPanel extends SimpleContainer { seriesMinInvocationTime.pointInterval(interval).pointStart( dateStart.getTime()); - for (SeriesJobData seriesJobData : seriesJobBasic - .getSeries()) { + for (SeriesJobData seriesJobData : seriesJobBasic.getSeries()) { dataOperationCount.push(seriesJobData.getOperationCount()); dataDuration.push(seriesJobData.getDuration() / unitMeasure); dataMaxInvocationTime.push(seriesJobData.getMaxInvocationTime() @@ -593,10 +586,9 @@ public class JobChartBasicPanel extends SimpleContainer { + " \"text\": \"" + JobChartMeasure.OperationCount.getLabel() + "\"," + " \"style\": {" + " \"color\": \"" + colors.get(1) - + "\"" + " }" + " }" + "} , {" - + " \"id\": \"JobData\", " + " \"linkedTo\": \"0\"," - + " \"gridLineWidth\": \"0\"," + " \"title\": {" - + " \"text\": \"\"," + " \"style\": {" + + "\"" + " }" + " }" + "} , {" + " \"id\": \"JobData\", " + + " \"linkedTo\": \"0\"," + " \"gridLineWidth\": \"0\"," + + " \"title\": {" + " \"text\": \"\"," + " \"style\": {" + " \"color\": \"" + colors.get(1) + "\"" + " }" + " }," + " \"labels\": {" + " \"format\": \"{value} " + unitMeasureLabel + "\"," + " \"style\": {" @@ -620,8 +612,7 @@ public class JobChartBasicPanel extends SimpleContainer { SeriesColumn seriesOperationCount = highchartsFactory .createSeriesColumn(); - seriesOperationCount - .name(JobChartMeasure.OperationCount.getLabel()); + seriesOperationCount.name(JobChartMeasure.OperationCount.getLabel()); seriesOperationCount.color(colors.get(1)); seriesOperationCount.type("column"); @@ -634,7 +625,7 @@ public class JobChartBasicPanel extends SimpleContainer { SeriesArea seriesDuration = highchartsFactory.createSeriesArea(); seriesDuration.name(JobChartMeasure.Duration.getLabel()); seriesDuration.color(colors.get(0)); - //seriesDuration.yAxisAsString("JobData"); + // seriesDuration.yAxisAsString("JobData"); ArrayNumber dataDuration = seriesDuration.dataAsArrayNumber(); @@ -645,7 +636,7 @@ public class JobChartBasicPanel extends SimpleContainer { seriesMaxInvocationTime.name(JobChartMeasure.MaxInvocationTime .getLabel()); seriesMaxInvocationTime.color(colors.get(2)); - //seriesMaxInvocationTime.yAxisAsString("JobData"); + // seriesMaxInvocationTime.yAxisAsString("JobData"); ArrayNumber dataMaxInvocationTime = seriesMaxInvocationTime .dataAsArrayNumber(); @@ -658,7 +649,7 @@ public class JobChartBasicPanel extends SimpleContainer { seriesMinInvocationTime.name(JobChartMeasure.MinInvocationTime .getLabel()); seriesMinInvocationTime.color(colors.get(3)); - //seriesMinInvocationTime.yAxisAsString("JobData"); + // seriesMinInvocationTime.yAxisAsString("JobData"); ArrayNumber dataMinInvocationTime = seriesMinInvocationTime .dataAsArrayNumber(); @@ -666,8 +657,7 @@ public class JobChartBasicPanel extends SimpleContainer { seriesMinInvocationTime.pointInterval(interval).pointStart( dateStart.getTime()); - for (SeriesJobData seriesJobData : seriesJobBasic - .getSeries()) { + for (SeriesJobData seriesJobData : seriesJobBasic.getSeries()) { dataOperationCount.push(seriesJobData.getOperationCount()); dataDuration.push(seriesJobData.getDuration() / unitMeasure); dataMaxInvocationTime.push(seriesJobData.getMaxInvocationTime() 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 60d61dc..567a74b 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,12 +3,13 @@ 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.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; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.TimeUnitMeasure; import org.gcube.portlets.admin.accountingmanager.client.resource.AccountingManagerResources; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; 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; @@ -55,10 +56,11 @@ public class JobChartTopPanel extends SimpleContainer { .getFormat(PredefinedFormat.YEAR_MONTH_DAY); private EventBus eventBus; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; private HighchartsLayoutPanel highchartsLayoutPanel; // Download Menu + private MenuItem downloadCSVItem; private MenuItem downloadPNGItem; private MenuItem downloadJPGItem; private MenuItem downloadPDFItem; @@ -88,7 +90,7 @@ public class JobChartTopPanel extends SimpleContainer { private VerticalLayoutContainer vert; public JobChartTopPanel(EventBus eventBus, - AccountingStateData accountingStateData) { + AccountingClientStateData accountingStateData) { this.eventBus = eventBus; this.accountingStateData = accountingStateData; forceLayoutOnResize = true; @@ -150,6 +152,9 @@ public class JobChartTopPanel extends SimpleContainer { private Menu createDownloadMenu() { Menu menuDownload = new Menu(); + downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, + AccountingManagerResources.INSTANCE.accountingFileCSV24()); + downloadCSVItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); @@ -162,7 +167,18 @@ public class JobChartTopPanel extends SimpleContainer { downloadSVGItem = new MenuItem(DownloadConstants.DOWNLOAD_SVG, AccountingManagerResources.INSTANCE.accountingFileSVG24()); downloadSVGItem.setHeight(30); + + downloadCSVItem.addSelectionHandler(new SelectionHandler() { + @Override + public void onSelection(SelectionEvent event) { + onDownloadCSV(); + + } + + }); + + downloadPNGItem.addSelectionHandler(new SelectionHandler() { @Override @@ -199,7 +215,8 @@ public class JobChartTopPanel extends SimpleContainer { onDownloadSVG(id); } }); - + + menuDownload.add(downloadCSVItem); menuDownload.add(downloadPNGItem); menuDownload.add(downloadJPGItem); menuDownload.add(downloadPDFItem); @@ -348,7 +365,13 @@ public class JobChartTopPanel extends SimpleContainer { return menuUnit; } - + + private void onDownloadCSV() { + DownloadCSVRequestEvent event = new DownloadCSVRequestEvent( + 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 8b303e8..c5b62da 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,12 +2,13 @@ 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.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; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.TimeUnitMeasure; import org.gcube.portlets.admin.accountingmanager.client.resource.AccountingManagerResources; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; 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; @@ -56,10 +57,11 @@ public class ServiceChartBasicPanel extends SimpleContainer { private static final String SINGLE_AXIS = "Single Axis"; private EventBus eventBus; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; private HighchartsLayoutPanel highchartsLayoutPanel; // Download Menu + private MenuItem downloadCSVItem; private MenuItem downloadPNGItem; private MenuItem downloadJPGItem; private MenuItem downloadPDFItem; @@ -80,7 +82,7 @@ public class ServiceChartBasicPanel extends SimpleContainer { private ToggleButton toggleButton; - public ServiceChartBasicPanel(EventBus eventBus, AccountingStateData accountingStateData) { + public ServiceChartBasicPanel(EventBus eventBus, AccountingClientStateData accountingStateData) { this.eventBus=eventBus; this.accountingStateData = accountingStateData; forceLayoutOnResize = true; @@ -226,6 +228,9 @@ public class ServiceChartBasicPanel extends SimpleContainer { private Menu createDownloadMenu() { Menu menuDownload = new Menu(); + downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, + AccountingManagerResources.INSTANCE.accountingFileCSV24()); + downloadCSVItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); @@ -238,7 +243,18 @@ public class ServiceChartBasicPanel extends SimpleContainer { downloadSVGItem = new MenuItem(DownloadConstants.DOWNLOAD_SVG, AccountingManagerResources.INSTANCE.accountingFileSVG24()); downloadSVGItem.setHeight(30); + + downloadCSVItem.addSelectionHandler(new SelectionHandler() { + @Override + public void onSelection(SelectionEvent event) { + onDownloadCSV(); + + } + + + }); + downloadPNGItem.addSelectionHandler(new SelectionHandler() { @Override @@ -275,7 +291,8 @@ public class ServiceChartBasicPanel extends SimpleContainer { onDownloadSVG(id); } }); - + + menuDownload.add(downloadCSVItem); menuDownload.add(downloadPNGItem); menuDownload.add(downloadJPGItem); menuDownload.add(downloadPDFItem); @@ -283,6 +300,12 @@ public class ServiceChartBasicPanel extends SimpleContainer { return menuDownload; } + + private void onDownloadCSV() { + DownloadCSVRequestEvent event = new DownloadCSVRequestEvent( + 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 437eeaf..d9a7493 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,12 +3,13 @@ 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.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; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.ServiceChartMeasure; import org.gcube.portlets.admin.accountingmanager.client.resource.AccountingManagerResources; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; 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; @@ -55,10 +56,11 @@ public class ServiceChartTopPanel extends SimpleContainer { .getFormat(PredefinedFormat.YEAR_MONTH_DAY); private EventBus eventBus; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; private HighchartsLayoutPanel highchartsLayoutPanel; // Download Menu + private MenuItem downloadCSVItem; private MenuItem downloadPNGItem; private MenuItem downloadJPGItem; private MenuItem downloadPDFItem; @@ -86,10 +88,10 @@ public class ServiceChartTopPanel extends SimpleContainer { private TextButton measureButton; private VerticalLayoutContainer vert; - - public ServiceChartTopPanel(EventBus eventBus, AccountingStateData accountingStateData) { - this.eventBus=eventBus; + public ServiceChartTopPanel(EventBus eventBus, + AccountingClientStateData accountingStateData) { + this.eventBus = eventBus; this.accountingStateData = accountingStateData; forceLayoutOnResize = true; create(); @@ -109,7 +111,8 @@ public class ServiceChartTopPanel extends SimpleContainer { downloadButton.setMenu(createDownloadMenu()); // Measure - measureButton = new TextButton(ServiceChartMeasure.OperationCount.getLabel(), + measureButton = new TextButton( + ServiceChartMeasure.OperationCount.getLabel(), AccountingManagerResources.INSTANCE.accountingByte24()); measureButton.setIconAlign(IconAlign.RIGHT); measureButton.setArrowAlign(ButtonArrowAlign.RIGHT); @@ -122,12 +125,11 @@ public class ServiceChartTopPanel extends SimpleContainer { unitButton.setArrowAlign(ButtonArrowAlign.RIGHT); unitButton.setMenu(createUnitMenu()); unitButton.setVisible(false); - + toolBar.add(downloadButton, new BoxLayoutData(new Margins(0))); toolBar.add(measureButton, new BoxLayoutData(new Margins(0))); toolBar.add(unitButton, new BoxLayoutData(new Margins(0))); - - + // createChart(); @@ -152,6 +154,9 @@ public class ServiceChartTopPanel extends SimpleContainer { private Menu createDownloadMenu() { Menu menuDownload = new Menu(); + downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, + AccountingManagerResources.INSTANCE.accountingFileCSV24()); + downloadCSVItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); @@ -165,6 +170,16 @@ public class ServiceChartTopPanel extends SimpleContainer { AccountingManagerResources.INSTANCE.accountingFileSVG24()); downloadSVGItem.setHeight(30); + downloadCSVItem.addSelectionHandler(new SelectionHandler() { + + @Override + public void onSelection(SelectionEvent event) { + onDownloadCSV(); + + } + + }); + downloadPNGItem.addSelectionHandler(new SelectionHandler() { @Override @@ -202,6 +217,7 @@ public class ServiceChartTopPanel extends SimpleContainer { } }); + menuDownload.add(downloadCSVItem); menuDownload.add(downloadPNGItem); menuDownload.add(downloadJPGItem); menuDownload.add(downloadPDFItem); @@ -352,6 +368,12 @@ public class ServiceChartTopPanel extends SimpleContainer { } + private void onDownloadCSV() { + DownloadCSVRequestEvent event = new DownloadCSVRequestEvent( + 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/storage/StorageChartBasicPanel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/storage/StorageChartBasicPanel.java index 780de6c..f7a066e 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 @@ -8,7 +8,7 @@ import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.C import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.DownloadConstants; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.StorageChartMeasure; import org.gcube.portlets.admin.accountingmanager.client.resource.AccountingManagerResources; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; 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; @@ -55,7 +55,7 @@ public class StorageChartBasicPanel extends SimpleContainer { .getFormat(PredefinedFormat.YEAR_MONTH_DAY); private EventBus eventBus; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; private HighchartsLayoutPanel highchartsLayoutPanel; // Download Menu @@ -79,7 +79,7 @@ public class StorageChartBasicPanel extends SimpleContainer { private VerticalLayoutContainer vert; public StorageChartBasicPanel(EventBus eventBus, - AccountingStateData accountingStateData) { + AccountingClientStateData accountingStateData) { this.eventBus = eventBus; this.accountingStateData = accountingStateData; forceLayoutOnResize = true; @@ -216,7 +216,8 @@ public class StorageChartBasicPanel extends SimpleContainer { private Menu createDownloadMenu() { Menu menuDownload = new Menu(); downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, - AccountingManagerResources.INSTANCE.accountingByte24()); + AccountingManagerResources.INSTANCE.accountingFileCSV24()); + downloadCSVItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); 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 140bfe9..300985c 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 @@ -9,7 +9,7 @@ import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.C import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.DownloadConstants; import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils.StorageChartMeasure; import org.gcube.portlets.admin.accountingmanager.client.resource.AccountingManagerResources; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; +import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData; 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; @@ -56,7 +56,7 @@ public class StorageChartTopPanel extends SimpleContainer { .getFormat(PredefinedFormat.YEAR_MONTH_DAY); private EventBus eventBus; - private AccountingStateData accountingStateData; + private AccountingClientStateData accountingStateData; private HighchartsLayoutPanel highchartsLayoutPanel; // Download Menu @@ -88,7 +88,7 @@ public class StorageChartTopPanel extends SimpleContainer { private VerticalLayoutContainer vert; - public StorageChartTopPanel(EventBus eventBus, AccountingStateData accountingStateData) { + public StorageChartTopPanel(EventBus eventBus, AccountingClientStateData accountingStateData) { this.eventBus=eventBus; this.accountingStateData = accountingStateData; forceLayoutOnResize = true; @@ -165,7 +165,8 @@ public class StorageChartTopPanel extends SimpleContainer { private Menu createDownloadMenu() { Menu menuDownload = new Menu(); downloadCSVItem = new MenuItem(DownloadConstants.DOWNLOAD_CSV, - AccountingManagerResources.INSTANCE.accountingByte24()); + AccountingManagerResources.INSTANCE.accountingFileCSV24()); + downloadCSVItem.setHeight(30); downloadPNGItem = new MenuItem(DownloadConstants.DOWNLOAD_PNG, AccountingManagerResources.INSTANCE.accountingFilePNG24()); downloadPNGItem.setHeight(30); @@ -225,7 +226,8 @@ public class StorageChartTopPanel extends SimpleContainer { onDownloadSVG(id); } }); - + + menuDownload.add(downloadCSVItem); menuDownload.add(downloadPNGItem); menuDownload.add(downloadJPGItem); menuDownload.add(downloadPDFItem); 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 6679d66..00db6ae 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 @@ -180,6 +180,12 @@ public interface AccountingManagerResources extends ClientBundle { @Source("accounting-file_32.png") ImageResource accountingFile32(); + @Source("accounting-file-csv_24.png") + ImageResource accountingFileCSV24(); + + @Source("accounting-file-csv_32.png") + ImageResource accountingFileCSV32(); + @Source("accounting-file-png_24.png") ImageResource accountingFilePNG24(); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_24.png b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_24.png new file mode 100644 index 0000000..b9c6c95 Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_24.png differ diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_32.png b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_32.png new file mode 100644 index 0000000..532cc62 Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_32.png differ diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/rpc/AccountingManagerService.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/rpc/AccountingManagerService.java index 239ed59..3c951d8 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/rpc/AccountingManagerService.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/rpc/AccountingManagerService.java @@ -2,7 +2,6 @@ package org.gcube.portlets.admin.accountingmanager.client.rpc; import java.util.ArrayList; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType; import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey; import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValue; @@ -81,7 +80,7 @@ public interface AccountingManagerService extends RemoteService { * @return * @throws ServiceException */ - public ItemDescription saveCSVOnWorkspace(AccountingStateData accountingStateData) + public ItemDescription saveCSVOnWorkspace(AccountingType accountingType) throws ServiceException; diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/rpc/AccountingManagerServiceAsync.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/rpc/AccountingManagerServiceAsync.java index eac55bc..5ddc199 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/rpc/AccountingManagerServiceAsync.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/rpc/AccountingManagerServiceAsync.java @@ -5,7 +5,6 @@ package org.gcube.portlets.admin.accountingmanager.client.rpc; import java.util.ArrayList; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType; import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey; import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValue; @@ -77,7 +76,7 @@ public interface AccountingManagerServiceAsync { * @param accountingStateData * @param callback */ - void saveCSVOnWorkspace(AccountingStateData accountingStateData, + void saveCSVOnWorkspace(AccountingType accountingType, AsyncCallback callback); } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingClientState.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingClientState.java new file mode 100644 index 0000000..0bba8b4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingClientState.java @@ -0,0 +1,37 @@ +package org.gcube.portlets.admin.accountingmanager.client.state; + +import java.io.Serializable; +import java.util.HashMap; + +import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public class AccountingClientState implements Serializable { + + private static final long serialVersionUID = 5993049979009321365L; + private HashMap clientState; + + public AccountingClientState() { + clientState = new HashMap(); + } + + public AccountingClientStateData getState(AccountingType accountingType) { + return clientState.get(accountingType); + } + + public void setState(AccountingType accountingType, + AccountingClientStateData accountingStateData) { + clientState.put(accountingType, accountingStateData); + } + + @Override + public String toString() { + return "AccountingClientState [clientState=" + clientState + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingStateData.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingClientStateData.java similarity index 89% rename from src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingStateData.java rename to src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingClientStateData.java index cde3ef9..d465ebc 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingStateData.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingClientStateData.java @@ -14,7 +14,7 @@ import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesRes * href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it * */ -public class AccountingStateData implements Serializable { +public class AccountingClientStateData implements Serializable { private static final long serialVersionUID = -2080165745912743812L; private AccountingType accountingType; @@ -22,11 +22,11 @@ public class AccountingStateData implements Serializable { private SeriesResponse seriesResponse; private ArrayList availableFilterKeys; - public AccountingStateData() { + public AccountingClientStateData() { super(); } - public AccountingStateData(AccountingType accountingType, + public AccountingClientStateData(AccountingType accountingType, SeriesRequest seriesRequest, SeriesResponse seriesResponse, ArrayList availableFilterKeys) { super(); @@ -70,10 +70,11 @@ public class AccountingStateData implements Serializable { @Override public String toString() { - return "AccountingStateData [accountingType=" + accountingType + return "AccountingClientStateData [accountingType=" + accountingType + ", seriesRequest=" + seriesRequest + ", seriesResponse=" + seriesResponse + ", availableFilterKeys=" + availableFilterKeys + "]"; } + } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingState.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingState.java deleted file mode 100644 index 1e504aa..0000000 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingState.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.gcube.portlets.admin.accountingmanager.client.state; - -import java.io.Serializable; -import java.util.HashMap; - -import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType; - -/** - * - * @author giancarlo - * email: g.panichi@isti.cnr.it - * - */ -public class AccountingState implements Serializable { - - private static final long serialVersionUID = 5993049979009321365L; - private HashMap clientState; - - public AccountingState(){ - clientState=new HashMap(); - } - - - public AccountingStateData getState(AccountingType accountingType){ - return clientState.get(accountingType); - } - - public void setState(AccountingType accountingType, AccountingStateData accountingStateData){ - clientState.put(accountingType,accountingStateData); - } - - - @Override - public String toString() { - return "AccountingState [clientState=" + clientState + "]"; - } - - -} 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 ce833c7..d1d3755 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 @@ -7,11 +7,11 @@ import javax.servlet.http.HttpSession; import org.gcube.application.framework.core.session.ASLSession; import org.gcube.portlets.admin.accountingmanager.client.rpc.AccountingManagerService; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; 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.state.AccountingStateData; import org.gcube.portlets.admin.accountingmanager.server.storage.StorageUtil; import org.gcube.portlets.admin.accountingmanager.shared.Constants; import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType; @@ -101,7 +101,10 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet } SeriesResponse seriesResponse = accountingCaller.getSeries( accountingType, seriesRequest); - + AccountingStateData accountingStateData = new AccountingStateData( + accountingType, seriesRequest, seriesResponse); + SessionUtil.setAccountingStateData(session, accountingType, + accountingStateData); return seriesResponse; } catch (ServiceException e) { @@ -179,16 +182,25 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet } } - + @Override - public ItemDescription saveCSVOnWorkspace(AccountingStateData accountingStateData) + public ItemDescription saveCSVOnWorkspace(AccountingType accountingType) throws ServiceException { try { HttpSession session = this.getThreadLocalRequest().getSession(); ASLSession aslSession = SessionUtil.getASLSession(session); - logger.debug("SaveDataOnWorkspace(): " + accountingStateData); - CSVManager csvManager=new CSVManager(aslSession.getUsername()); - ItemDescription itemDescription=csvManager.saveOnWorkspace(accountingStateData); + + logger.debug("SaveDataOnWorkspace(): " + accountingType); + AccountingStateData accountingStateData = SessionUtil + .getAccountingStateData(session, accountingType); + if(accountingStateData==null){ + logger.error("No series present in session for thi accounting type: "+accountingType); + throw new ServiceException("No series present in session for thi accounting type: "+accountingType); + } + + CSVManager csvManager = new CSVManager(aslSession.getUsername()); + ItemDescription itemDescription = csvManager + .saveOnWorkspace(accountingStateData); return itemDescription; } catch (ServiceException e) { e.printStackTrace(); @@ -199,8 +211,6 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet throw new ServiceException(e.getLocalizedMessage(), e); } } - - @Override public String getPublicLink(ItemDescription itemDescription) diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/DownloadCSVServlet.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/DownloadCSVServlet.java new file mode 100644 index 0000000..7f57d03 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/DownloadCSVServlet.java @@ -0,0 +1,127 @@ +package org.gcube.portlets.admin.accountingmanager.server; + +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +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.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.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author Giancarlo Panichi + * email: g.panichi@isti.cnr.it + * + * Download Folder Servlet + * + */ +public class DownloadCSVServlet extends HttpServlet { + private static final long serialVersionUID = -1838255772767180518L; + private static Logger logger = LoggerFactory + .getLogger(DownloadCSVServlet.class); + + /** + * @see HttpServlet#HttpServlet() + */ + public DownloadCSVServlet() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse + * response) + */ + protected void doGet(HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + createResponse(request, response); + } + + /** + * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse + * response) + */ + protected void doPost(HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + createResponse(request, response); + } + + private void createResponse(HttpServletRequest request, + HttpServletResponse response) throws ServletException, IOException { + try { + logger.info("DownloadCSVServlet"); + + HttpSession session = request.getSession(); + + if (session == null) { + logger.error("Error getting the session, no session valid found: " + + session); + response.sendError( + HttpServletResponse.SC_INTERNAL_SERVER_ERROR, + "ERROR-Error getting the user session, no session found " + + session); + return; + } + logger.debug("DownloadCSVServlet session id: " + session.getId()); + + ASLSession aslSession = SessionUtil.getASLSession(session); + + String accountingType = request.getParameter(Constants.DOWNLOAD_CVS_SERVLET_ACCOUNTINGTYPE_PARAMETER); + logger.debug("Request: [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); + } + + CSVManager csvManager=new CSVManager(aslSession.getUsername()); + CSVDescriptor csvDescriptor=csvManager.downloadCSV(accountingStateData); + logger.debug("CSVDescriptor: "+csvDescriptor); + response.setHeader("Content-Disposition", "attachment; filename=\"" + + csvDescriptor.getCsvModel().getFileName()+csvDescriptor.getCsvModel().getFileExtension() + "\""); + response.setContentType("text/csv"); + response.setHeader("Content-Length", + String.valueOf(csvDescriptor.getPath().toFile().length())); + + OutputStream out = response.getOutputStream(); + Files.copy(csvDescriptor.getPath(), out); + out.flush(); + out.close(); + + try { + Files.delete(csvDescriptor.getPath()); + } 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; + + } catch (Throwable e) { + logger.error("Error in DownloadFolderServlet: " + + e.getLocalizedMessage()); + e.printStackTrace(); + throw new ServletException("Error:" + + e.getLocalizedMessage(), e); + + } + } + +} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/SessionUtil.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/SessionUtil.java index 5eae2a6..05b0d4c 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/SessionUtil.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/SessionUtil.java @@ -13,7 +13,10 @@ import javax.servlet.http.HttpSession; import org.gcube.application.framework.core.session.ASLSession; import org.gcube.application.framework.core.session.SessionManager; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; +import org.gcube.portlets.admin.accountingmanager.server.state.AccountingState; +import org.gcube.portlets.admin.accountingmanager.server.state.AccountingStateData; import org.gcube.portlets.admin.accountingmanager.shared.Constants; +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.exception.SessionExpiredException; import org.slf4j.Logger; @@ -65,23 +68,52 @@ public class SessionUtil { } public static String getToken(ASLSession aslSession) { - String token=null; + String token = null; if (Constants.DEBUG_MODE) { List userRoles = new ArrayList<>(); userRoles.add(Constants.DEFAULT_ROLE); - /*if (aslSession.getUsername().compareTo("lucio.lelii") == 0) - userRoles.add("VRE-Manager");*/ + /* + * if (aslSession.getUsername().compareTo("lucio.lelii") == 0) + * userRoles.add("VRE-Manager"); + */ token = authorizationService().build().generate( aslSession.getUsername(), userRoles); - + } else { token = aslSession.getSecurityToken(); } logger.info("received token: " + token); return token; - - + + } + + public static void setAccountingStateData(HttpSession httpSession, + AccountingType accountingType, + AccountingStateData accountingStateData) { + AccountingState accountingState = (AccountingState) httpSession + .getAttribute(Constants.SESSION_ACCOUNTING_STATE); + + if (accountingState == null) { + accountingState = new AccountingState(); + accountingState.setState(accountingType, accountingStateData); + httpSession.setAttribute(Constants.SESSION_ACCOUNTING_STATE, + accountingState); + } else { + accountingState.setState(accountingType, accountingStateData); + } + + return; } - + public static AccountingStateData getAccountingStateData(HttpSession httpSession, + AccountingType accountingType) { + AccountingState accountingState = (AccountingState) httpSession + .getAttribute(Constants.SESSION_ACCOUNTING_STATE); + if (accountingState == null) { + return null; + } else { + return accountingState.getState(accountingType); + } + } + } 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/csv/CSVManager.java index 6314b0f..d82379c 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/CSVManager.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/csv/CSVManager.java @@ -9,13 +9,15 @@ import java.nio.file.StandardOpenOption; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; -import org.gcube.portlets.admin.accountingmanager.client.state.AccountingStateData; 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.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.workspace.ItemDescription; import org.slf4j.Logger; @@ -53,6 +55,7 @@ public class CSVManager { switch (accountingStateData.getAccountingType()) { case SERVICE: + csvModelBuilder = new CSVModel4Service(accountingStateData); break; case STORAGE: csvModelBuilder = new CSVModel4Storage(accountingStateData); @@ -128,5 +131,82 @@ public class CSVManager { } } + + + public CSVDescriptor downloadCSV(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!"); + } + + CSVModelBuilder csvModelBuilder = null; + + switch (accountingStateData.getAccountingType()) { + case SERVICE: + csvModelBuilder = new CSVModel4Service(accountingStateData); + break; + case STORAGE: + csvModelBuilder = new CSVModel4Storage(accountingStateData); + break; + case JOB: + case PORTLET: + case TASK: + default: + logger.error("Accounting Type not supported!"); + 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); + + if (csvModel == null) { + logger.error("CSV model created is null"); + throw new ServiceException("CSVModel created is null!"); + } + + Path tempFile = Files.createTempFile(csvModel.getFileName(), + csvModel.getFileExtension()); + logger.debug("Temp File: " + tempFile.toString()); + + // Create the CSVFormat object + CSVFormat format = CSVFormat.RFC4180.withHeader() + .withDelimiter(','); + + 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(row.getData()); + } + // close the printer + printer.close(); + printStream.close(); + + + return new CSVDescriptor(tempFile, csvModel); + + } catch (ServiceException e) { + throw e; + } catch (Throwable e) { + logger.error("Error downloading data: " + e.getLocalizedMessage()); + e.printStackTrace(); + throw new ServiceException("Error downloading data: " + + e.getLocalizedMessage()); + + } + + } } 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/csv/file/CSVModel4Service.java index c06a9f5..815b2d0 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/csv/file/CSVModel4Service.java @@ -1,9 +1,10 @@ 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.client.state.AccountingStateData; +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; @@ -44,10 +45,21 @@ public class CSVModel4Service extends CSVModelBuilder { } - String startDate = sdfFile.format(seriesRequest.getAccountingPeriod() - .getStartDate()); - String endDate = sdfFile.format(seriesRequest.getAccountingPeriod() - .getEndDate()); + 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(); @@ -77,7 +89,7 @@ public class CSVModel4Service extends CSVModelBuilder { .getSeries(); for (SeriesServiceData seriesData : listData) { ArrayList data = new ArrayList<>(); - data.add(sdf.format(seriesData.getDate())); + data.add(sdfCSVDate.format(seriesData.getDate())); data.add(String.valueOf(seriesData.getOperationCount())); data.add(String.valueOf(seriesData.getDuration())); data.add(String.valueOf(seriesData.getMaxInvocationTime())); @@ -103,7 +115,7 @@ public class CSVModel4Service extends CSVModelBuilder { for (SeriesServiceData seriesData : listData) { ArrayList data = new ArrayList<>(); data.add(filterValue.getValue()); - data.add(sdf.format(seriesData.getDate())); + data.add(sdfCSVDate.format(seriesData.getDate())); data.add(String.valueOf(seriesData .getOperationCount())); data.add(String.valueOf(seriesData.getDuration())); 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/csv/file/CSVModel4Storage.java index 78beeb4..154c517 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/csv/file/CSVModel4Storage.java @@ -1,9 +1,10 @@ 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.client.state.AccountingStateData; +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; @@ -44,10 +45,22 @@ public class CSVModel4Storage extends CSVModelBuilder { } - String startDate = sdfFile.format(seriesRequest.getAccountingPeriod() - .getStartDate()); - String endDate = sdfFile.format(seriesRequest.getAccountingPeriod() - .getEndDate()); + 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(); @@ -76,9 +89,9 @@ public class CSVModel4Storage extends CSVModelBuilder { .getSeries(); for (SeriesStorageData seriesData : listData) { ArrayList data = new ArrayList<>(); - data.add(sdf.format(seriesData.getDate())); - data.add(sdf.format(seriesData.getOperationCount())); - data.add(sdf.format(seriesData.getDataVolume())); + 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); } @@ -100,9 +113,9 @@ public class CSVModel4Storage extends CSVModelBuilder { for (SeriesStorageData seriesData : listData) { ArrayList data = new ArrayList<>(); data.add(filterValue.getValue()); - data.add(sdf.format(seriesData.getDate())); - data.add(sdf.format(seriesData.getOperationCount())); - data.add(sdf.format(seriesData.getDataVolume())); + 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); } 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/csv/file/CSVModelBuilder.java index 6aa510c..f71ac8d 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/csv/file/CSVModelBuilder.java @@ -13,7 +13,9 @@ import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceExcept */ public abstract class CSVModelBuilder { protected CSVModelSpec csvModelSpec; - protected SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + + 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(){ diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/state/AccountingState.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/state/AccountingState.java new file mode 100644 index 0000000..6d14f16 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/state/AccountingState.java @@ -0,0 +1,40 @@ +package org.gcube.portlets.admin.accountingmanager.server.state; + +import java.io.Serializable; +import java.util.HashMap; + +import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public class AccountingState implements Serializable { + + private static final long serialVersionUID = 5993049979009321365L; + private HashMap state; + + public AccountingState() { + state = new HashMap(); + } + + public AccountingStateData getState(AccountingType accountingType) { + return state.get(accountingType); + } + + public void setState(AccountingType accountingType, + AccountingStateData accountingStateData) { + state.put(accountingType, accountingStateData); + } + + @Override + public String toString() { + return "AccountingState [state=" + state + "]"; + } + + + + +} diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/state/AccountingStateData.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/state/AccountingStateData.java new file mode 100644 index 0000000..da3420d --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/state/AccountingStateData.java @@ -0,0 +1,65 @@ +package org.gcube.portlets.admin.accountingmanager.server.state; + +import java.io.Serializable; + +import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType; +import org.gcube.portlets.admin.accountingmanager.shared.data.query.SeriesRequest; +import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesResponse; + +/** + * + * @author giancarlo email: g.panichi@isti.cnr.it + * + */ +public class AccountingStateData implements Serializable { + + private static final long serialVersionUID = -2080165745912743812L; + private AccountingType accountingType; + private SeriesRequest seriesRequest; + private SeriesResponse seriesResponse; + + public AccountingStateData() { + super(); + } + + public AccountingStateData(AccountingType accountingType, + SeriesRequest seriesRequest, SeriesResponse seriesResponse) { + super(); + this.accountingType = accountingType; + this.seriesRequest = seriesRequest; + this.seriesResponse = seriesResponse; + } + + public AccountingType getAccountingType() { + return accountingType; + } + + public void setAccountingType(AccountingType accountingType) { + this.accountingType = accountingType; + } + + public SeriesRequest getSeriesRequest() { + return seriesRequest; + } + + public void setSeriesRequest(SeriesRequest seriesRequest) { + this.seriesRequest = seriesRequest; + } + + public SeriesResponse getSeriesResponse() { + return seriesResponse; + } + + public void setSeriesResponse(SeriesResponse seriesResponse) { + this.seriesResponse = seriesResponse; + } + + @Override + public String toString() { + return "AccountingStateData [accountingType=" + accountingType + + ", seriesRequest=" + seriesRequest + ", seriesResponse=" + + seriesResponse + "]"; + } + +} 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 e456801..569c398 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,5 +23,10 @@ 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 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 new file mode 100644 index 0000000..4d1cb31 --- /dev/null +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/csv/CSVDescriptor.java @@ -0,0 +1,52 @@ +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/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_24.png b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_24.png new file mode 100644 index 0000000..b9c6c95 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_24.png differ diff --git a/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_32.png b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_32.png new file mode 100644 index 0000000..532cc62 Binary files /dev/null and b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-file-csv_32.png differ diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index c2f640b..c3a35bb 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -29,7 +29,12 @@ AccountingManagerService org.gcube.portlets.admin.accountingmanager.server.AccountingManagerServiceImpl - + + + + DownloadCSVServlet + org.gcube.portlets.admin.accountingmanager.server.DownloadCSVServlet + @@ -56,9 +61,12 @@ /accountingman/ams - - - + + + DownloadCSVServlet + /accountingman/downloadCSVServlet + +