diff --git a/.classpath b/.classpath
index a8509f0..4754935 100644
--- a/.classpath
+++ b/.classpath
@@ -1,12 +1,12 @@
-
+
-
+
@@ -45,5 +45,5 @@
-
+
diff --git a/distro/changelog.xml b/distro/changelog.xml
index 598a499..8e4453f 100644
--- a/distro/changelog.xml
+++ b/distro/changelog.xml
@@ -1,4 +1,8 @@
+
+ Added Spaces chart [Ticket #8397]
+
Fixed download in case of multitab on different scopes
diff --git a/pom.xml b/pom.xml
index 48092c5..f44390f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
4.0.0
org.gcube.portlets.admin
accounting-manager
- 1.6.0-SNAPSHOT
+ 1.7.0-SNAPSHOT
war
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 d564adc..385ea5b 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
@@ -24,11 +24,13 @@ import org.gcube.portlets.admin.accountingmanager.client.type.UIStateType;
import org.gcube.portlets.admin.accountingmanager.client.util.UtilsGXT3;
import org.gcube.portlets.admin.accountingmanager.shared.Constants;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterBasic;
+import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterSpaces;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingPeriod;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingPeriodMode;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
import org.gcube.portlets.admin.accountingmanager.shared.data.Context;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
import org.gcube.portlets.admin.accountingmanager.shared.data.query.SeriesRequest;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesResponse;
import org.gcube.portlets.admin.accountingmanager.shared.exception.SessionExpiredException;
@@ -189,7 +191,9 @@ public class AccountingManagerController {
} else {
this.enableTabs = enableTabs;
EnableTabsEvent event = new EnableTabsEvent(enableTabs);
+ Log.debug("Fire: " + event);
eventBus.fireEvent(event);
+
}
}
@@ -300,6 +304,7 @@ public class AccountingManagerController {
case STORAGE:
case TASK:
case JOB:
+ case SPACE:
Log.debug("AccountingType: " + event.getAccountingType());
accountingStateData = accountingState.getState(event
.getAccountingType());
@@ -322,29 +327,17 @@ public class AccountingManagerController {
if (enableTabs != null && enableTabs.getTabs() != null
&& enableTabs.getTabs().size() > 0
&& enableTabs.getTabs().get(0) != null) {
+ Log.debug("Create DefaultChart");
createDefaultChart(enableTabs.getTabs().get(0).getAccountingType());
}
}
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());
- 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));
this.accountingType = accountingType;
AccountingClientStateData accountingStateData = new AccountingClientStateData(
- accountingType, seriesRequest, null, null, null, rootScope);
+ accountingType, rootScope);
accountingState.setState(accountingType, accountingStateData);
retrieveFilterKey();
@@ -415,12 +408,90 @@ public class AccountingManagerController {
accountingStateData.setAvailableContext(result);
accountingState.setState(accountingType,
accountingStateData);
- callDefaultSeriesRequest();
+ retrieveSpace();
}
});
}
+ private void retrieveSpace() {
+ if (rootScope) {
+
+ AccountingManagerServiceAsync.INSTANCE
+ .getSpaces(new AsyncCallback() {
+
+ @Override
+ public void onFailure(Throwable caught) {
+ accountingMonitor.hide();
+ if (caught instanceof SessionExpiredException) {
+ eventBus.fireEvent(new SessionExpiredEvent(
+ SessionExpiredType.EXPIREDONSERVER));
+ } else {
+ Log.error("Error retrieving sapces for "
+ + accountingType + ":"
+ + caught.getLocalizedMessage());
+ UtilsGXT3.alert("Error retrieving spaces ",
+ caught.getLocalizedMessage());
+ }
+
+ }
+
+ @Override
+ public void onSuccess(Spaces result) {
+ Log.debug("Available Spaces: " + result);
+ createDefaultSeriesRequest(result);
+ }
+ });
+ } else {
+ createDefaultSeriesRequest(null);
+ }
+ }
+
+ private void createDefaultSeriesRequest(Spaces spaces) {
+ 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());
+ CalendarUtil.addMonthsToDate(lastMonth, -1);
+ Log.debug("LastMoth= " + dtf.format(lastMonth) + " , date="
+ + dtf.format(date));
+
+ AccountingClientStateData accountingStateData = accountingState
+ .getState(accountingType);
+ SeriesRequest seriesRequest = null;
+
+ switch (accountingType) {
+ case JOB:
+ case PORTLET:
+ case SERVICE:
+ case STORAGE:
+ case TASK:
+ seriesRequest = new SeriesRequest(new AccountingPeriod(
+ dtf.format(lastMonth), dtf.format(date),
+ AccountingPeriodMode.DAILY), new AccountingFilterBasic());
+ Log.debug("DefaultSeriesRequest: " + seriesRequest);
+
+ break;
+ case SPACE:
+ accountingStateData.setAvailableSpaces(spaces);
+ seriesRequest = new SeriesRequest(new AccountingPeriod(
+ dtf.format(lastMonth), dtf.format(date),
+ AccountingPeriodMode.DAILY), new AccountingFilterSpaces(
+ spaces));
+ Log.debug("DefaultSeriesRequest: " + seriesRequest);
+ break;
+ default:
+ break;
+
+ }
+
+ accountingStateData.setSeriesRequest(seriesRequest);
+ accountingState.setState(accountingType, accountingStateData);
+ callDefaultSeriesRequest();
+ }
+
private void callDefaultSeriesRequest() {
AccountingManagerServiceAsync.INSTANCE.getSeriesInCache(accountingType,
@@ -461,13 +532,12 @@ public class AccountingManagerController {
caught.getLocalizedMessage());
AccountingClientStateData accountingStateData = accountingState
.getState(accountingType);
- accountingStateData
- .setSeriesResponse(null);
- accountingState.setState(
- accountingType,
+ accountingStateData.setSeriesResponse(null);
+ accountingState.setState(accountingType,
accountingStateData);
StateChangeEvent stateChangeEvent = new StateChangeEvent(
- StateChangeType.Restore, accountingState.getState(accountingType));
+ StateChangeType.Restore, accountingState
+ .getState(accountingType));
eventBus.fireEvent(stateChangeEvent);
}
@@ -493,10 +563,8 @@ public class AccountingManagerController {
+ operationId);
AccountingClientStateData accountingStateData = accountingState
.getState(accountingType);
- accountingStateData
- .setSeriesResponse(null);
- accountingState.setState(
- accountingType,
+ accountingStateData.setSeriesResponse(null);
+ accountingState.setState(accountingType,
accountingStateData);
StateChangeEvent stateChangeEvent = new StateChangeEvent(
StateChangeType.Restore, accountingState
@@ -520,10 +588,8 @@ public class AccountingManagerController {
caught.getLocalizedMessage());
AccountingClientStateData accountingStateData = accountingState
.getState(accountingType);
- accountingStateData
- .setSeriesResponse(null);
- accountingState.setState(
- accountingType,
+ accountingStateData.setSeriesResponse(null);
+ accountingState.setState(accountingType,
accountingStateData);
StateChangeEvent stateChangeEvent = new StateChangeEvent(
StateChangeType.Restore, accountingState
@@ -612,10 +678,8 @@ public class AccountingManagerController {
UtilsGXT3.alert("Error Time Out", "Time Out");
AccountingClientStateData accountingStateData = accountingState
.getState(accountingType);
- accountingStateData
- .setSeriesResponse(null);
- accountingState.setState(
- accountingType,
+ accountingStateData.setSeriesResponse(null);
+ accountingState.setState(accountingType,
accountingStateData);
StateChangeEvent stateChangeEvent = new StateChangeEvent(
StateChangeType.Restore,
@@ -698,13 +762,12 @@ public class AccountingManagerController {
caught.printStackTrace();
AccountingClientStateData accountingStateData = accountingState
.getState(accountingType);
- accountingStateData
- .setSeriesResponse(null);
- accountingState.setState(
- accountingType,
+ accountingStateData.setSeriesResponse(null);
+ accountingState.setState(accountingType,
accountingStateData);
StateChangeEvent stateChangeEvent = new StateChangeEvent(
- StateChangeType.Update, accountingState.getState(accountingType));
+ StateChangeType.Update, accountingState
+ .getState(accountingType));
eventBus.fireEvent(stateChangeEvent);
}
@@ -729,13 +792,12 @@ public class AccountingManagerController {
+ operationId);
AccountingClientStateData accountingStateData = accountingState
.getState(accountingType);
- accountingStateData
- .setSeriesResponse(null);
- accountingState.setState(
- accountingType,
+ accountingStateData.setSeriesResponse(null);
+ accountingState.setState(accountingType,
accountingStateData);
StateChangeEvent stateChangeEvent = new StateChangeEvent(
- StateChangeType.Update, accountingState.getState(accountingType));
+ StateChangeType.Update, accountingState
+ .getState(accountingType));
eventBus.fireEvent(stateChangeEvent);
} else {
operationMonitor(operationId);
@@ -755,13 +817,12 @@ public class AccountingManagerController {
caught.printStackTrace();
AccountingClientStateData accountingStateData = accountingState
.getState(accountingType);
- accountingStateData
- .setSeriesResponse(null);
- accountingState.setState(
- accountingType,
+ accountingStateData.setSeriesResponse(null);
+ accountingState.setState(accountingType,
accountingStateData);
StateChangeEvent stateChangeEvent = new StateChangeEvent(
- StateChangeType.Update, accountingState.getState(accountingType));
+ StateChangeType.Update, accountingState
+ .getState(accountingType));
eventBus.fireEvent(stateChangeEvent);
}
@@ -826,7 +887,9 @@ public class AccountingManagerController {
accountingType,
accountingStateData);
StateChangeEvent stateChangeEvent = new StateChangeEvent(
- StateChangeType.Update, accountingState.getState(accountingType));
+ StateChangeType.Update,
+ accountingState
+ .getState(accountingType));
eventBus.fireEvent(stateChangeEvent);
}
@@ -842,13 +905,12 @@ public class AccountingManagerController {
UtilsGXT3.alert("Error Time Out", "Time Out");
AccountingClientStateData accountingStateData = accountingState
.getState(accountingType);
- accountingStateData
- .setSeriesResponse(null);
- accountingState.setState(
- accountingType,
+ accountingStateData.setSeriesResponse(null);
+ accountingState.setState(accountingType,
accountingStateData);
StateChangeEvent stateChangeEvent = new StateChangeEvent(
- StateChangeType.Update, accountingState.getState(accountingType));
+ StateChangeType.Update,
+ accountingState.getState(accountingType));
eventBus.fireEvent(stateChangeEvent);
break;
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 1f693fc..a79ec6e 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
@@ -9,7 +9,7 @@ import org.gcube.portlets.admin.accountingmanager.client.event.SessionExpiredEve
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.properties.ContextDataProperties;
+import org.gcube.portlets.admin.accountingmanager.client.properties.GenresDataProperties;
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.AccountingClientStateData;
@@ -19,13 +19,15 @@ import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilter;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterBasic;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterContext;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterDefinition;
+import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterSpaces;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterTop;
import org.gcube.portlets.admin.accountingmanager.shared.data.ChartType;
-import org.gcube.portlets.admin.accountingmanager.shared.data.ContextData;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValue;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesRequest;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesResponse;
+import org.gcube.portlets.admin.accountingmanager.shared.data.GenresData;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
import org.gcube.portlets.admin.accountingmanager.shared.exception.SessionExpiredException;
import com.allen_sauer.gwt.log.client.Log;
@@ -105,9 +107,10 @@ public class ActiveFiltersPanel extends SimpleContainer {
private EventBus eventBus;
private Grid gridFilter;
private ListStore storeFilter;
- private Grid gridContext;
- private ListStore storeContext;
- private CheckBoxSelectionModel smContext;
+ private Grid gridGenres;
+ private ListStore storeGenres;
+ private CheckBoxSelectionModel smGenres;
+ private ColumnConfig labelGenresCol;
private boolean addStatus;
private AccountingClientStateData accountingStateData;
private ListStore storeComboFilterKey;
@@ -117,6 +120,7 @@ public class ActiveFiltersPanel extends SimpleContainer {
private GridRowEditing editing;
private TextButton addButton;
private int seq;
+ private FieldLabel comboChartTypeLabel;
private ListStore storeComboChartType;
private ComboBox comboChartType;
private ListStore storeComboTopFilterKey;
@@ -415,7 +419,6 @@ public class ActiveFiltersPanel extends SimpleContainer {
}
});
- storeComboChartType.addAll(ChartType.asList());
LabelProvider comboChartTypeLabelProvider = new LabelProvider() {
@@ -428,16 +431,16 @@ public class ActiveFiltersPanel extends SimpleContainer {
};
// /Grid Context
- ContextDataProperties propsContextData = GWT
- .create(ContextDataProperties.class);
+ GenresDataProperties propsGenresData = GWT
+ .create(GenresDataProperties.class);
- IdentityValueProvider identity = new IdentityValueProvider();
- smContext = new CheckBoxSelectionModel(identity);
+ IdentityValueProvider identity = new IdentityValueProvider();
+ smGenres = new CheckBoxSelectionModel(identity);
- ColumnConfig labelCol = new ColumnConfig(
- propsContextData.label(), 356, "Scope");
+ labelGenresCol = new ColumnConfig(
+ propsGenresData.label(), 356, "Genres");
- labelCol.setCell(new AbstractCell() {
+ labelGenresCol.setCell(new AbstractCell() {
@Override
public void render(Context context, String value, SafeHtmlBuilder sb) {
@@ -450,26 +453,26 @@ public class ActiveFiltersPanel extends SimpleContainer {
});
- List> lContext = new ArrayList>();
- lContext.add(smContext.getColumn());
- lContext.add(labelCol);
- ColumnModel cmContextData = new ColumnModel(
- lContext);
+ List> lGenres = new ArrayList>();
+ lGenres.add(smGenres.getColumn());
+ lGenres.add(labelGenresCol);
+ ColumnModel cmGenresData = new ColumnModel(
+ lGenres);
- storeContext = new ListStore(propsContextData.id());
+ storeGenres = new ListStore(propsGenresData.id());
- gridContext = new Grid(storeContext, cmContextData);
+ gridGenres = new Grid(storeGenres, cmGenresData);
sm.setSelectionMode(SelectionMode.MULTI);
- gridContext.setHeight("130px");
- gridContext.setSelectionModel(smContext);
- gridContext.getView().setStripeRows(true);
- gridContext.getView().setColumnLines(true);
- gridContext.getView().setAutoFill(true);
- gridContext.setBorders(true);
- gridContext.setColumnReordering(false);
- gridContext.getView().setAutoExpandColumn(labelCol);
- gridContext.getView().setSortingEnabled(true);
+ gridGenres.setHeight("130px");
+ gridGenres.setSelectionModel(smGenres);
+ gridGenres.getView().setStripeRows(true);
+ gridGenres.getView().setColumnLines(true);
+ gridGenres.getView().setAutoFill(true);
+ gridGenres.setBorders(true);
+ gridGenres.setColumnReordering(false);
+ gridGenres.getView().setAutoExpandColumn(labelGenresCol);
+ gridGenres.getView().setSortingEnabled(true);
// /
@@ -486,7 +489,7 @@ public class ActiveFiltersPanel extends SimpleContainer {
comboChartType.setTriggerAction(TriggerAction.ALL);
addHandlersForComboChartType(comboChartTypeLabelProvider);
- FieldLabel comboChartTypeLabel = new FieldLabel(comboChartType, "Chart");
+ comboChartTypeLabel = new FieldLabel(comboChartType, "Chart");
// FileterKeyCombo for Top Chart
storeComboTopFilterKey = new ListStore(
@@ -582,7 +585,7 @@ public class ActiveFiltersPanel extends SimpleContainer {
vlc.add(comboChartTypeLabel, new VerticalLayoutData(1, -1, new Margins(
0)));
- vlc.add(gridContext, new VerticalLayoutData(1, -1, new Margins(0)));
+ vlc.add(gridGenres, new VerticalLayoutData(1, -1, new Margins(0)));
vlc.add(noContextLabel, new VerticalLayoutData(1, -1, new Margins(0)));
vlc.add(comboTopFilterKeyLabel, new VerticalLayoutData(1, -1,
new Margins(0)));
@@ -598,7 +601,8 @@ public class ActiveFiltersPanel extends SimpleContainer {
fieldSet.add(vlc);
add(fieldSet, new MarginData(0));
- gridContext.setVisible(false);
+ comboChartTypeLabel.setVisible(false);
+ gridGenres.setVisible(false);
noContextLabel.setVisible(false);
comboTopFilterKeyLabel.setVisible(false);
showOthersLabel.setVisible(false);
@@ -648,8 +652,48 @@ public class ActiveFiltersPanel extends SimpleContainer {
}
private void onRestoreStateChange(StateChangeEvent event) {
+ Log.debug("onRestoreStateChange: " + event);
if (event.getAccountingStateData() != null) {
+
accountingStateData = event.getAccountingStateData();
+ if (accountingStateData.getAccountingType() != null) {
+ switch (accountingStateData.getAccountingType()) {
+ case JOB:
+ case PORTLET:
+ case SERVICE:
+ case STORAGE:
+ case TASK:
+ List chartsTypeForDefault = new ArrayList<>(ChartType.asList());
+ Log.debug("ChartsType: " + chartsTypeForDefault);
+ chartsTypeForDefault.remove(ChartType.Spaces);
+ Log.debug("ChartsType after remove: " + chartsTypeForDefault);
+ storeComboChartType.clear();
+ storeComboChartType.addAll(chartsTypeForDefault);
+ storeComboChartType.commitChanges();
+ comboChartTypeLabel.setVisible(true);
+ break;
+ case SPACE:
+ List chartsTypeForSpace = new ArrayList<>();
+ chartsTypeForSpace.add(ChartType.Spaces);
+ Log.debug("ChartsType: " + chartsTypeForSpace);
+ storeComboChartType.clear();
+ storeComboChartType.addAll(chartsTypeForSpace);
+ storeComboChartType.commitChanges();
+ comboChartTypeLabel.setVisible(false);
+ break;
+ default:
+ storeComboChartType.clear();
+ storeComboChartType.commitChanges();
+ comboChartTypeLabel.setVisible(false);
+ break;
+
+ }
+ } else {
+ storeComboChartType.clear();
+ storeComboChartType.commitChanges();
+ comboChartTypeLabel.setVisible(false);
+
+ }
changeActiveFilters();
} else {
@@ -683,6 +727,10 @@ public class ActiveFiltersPanel extends SimpleContainer {
case Context:
changeActiveFiltersForContext();
break;
+ case Spaces:
+ changeActiveFiltersForSpaces();
+ break;
+
default:
changeActiveFiltersForBasic();
break;
@@ -748,7 +796,7 @@ public class ActiveFiltersPanel extends SimpleContainer {
}
comboChartType.setValue(ChartType.Basic);
- gridContext.setVisible(false);
+ gridGenres.setVisible(false);
comboTopFilterKey.reset();
comboTopFilterKeyLabel.setVisible(false);
showOthersToggle.reset();
@@ -815,7 +863,7 @@ public class ActiveFiltersPanel extends SimpleContainer {
}
comboChartType.setValue(ChartType.Top);
- gridContext.setVisible(false);
+ gridGenres.setVisible(false);
comboTopFilterKeyLabel.setVisible(true);
showOthersLabel.setVisible(true);
noContextToggle.reset();
@@ -825,7 +873,6 @@ public class ActiveFiltersPanel extends SimpleContainer {
forceLayout();
}
- // TODO
private void changeActiveFiltersForContext() {
if (accountingStateData.getSeriesRequest() != null
&& accountingStateData.getSeriesRequest()
@@ -845,42 +892,41 @@ public class ActiveFiltersPanel extends SimpleContainer {
.isEmpty()) {
ArrayList contexts = accountingStateData
.getAvailableContext().getContexts();
- ArrayList ctx = new ArrayList();
+ ArrayList genres = new ArrayList();
for (String context : contexts) {
- ContextData contextData = new ContextData(context);
- ctx.add(contextData);
+ GenresData genresData = new GenresData(context);
+ genres.add(genresData);
}
- storeContext.clear();
- storeContext.addAll(ctx);
- storeContext.commitChanges();
+ storeGenres.clear();
+ storeGenres.addAll(genres);
+ storeGenres.commitChanges();
- smContext.deselectAll();
+ smGenres.deselectAll();
if (accountingFilterContext.getContext().getContexts() == null
|| accountingFilterContext.getContext()
.getContexts().isEmpty()) {
} else {
- ArrayList selected = new ArrayList<>();
+ ArrayList selected = new ArrayList<>();
for (String c : accountingFilterContext.getContext()
.getContexts()) {
- for (ContextData contextData : storeContext
- .getAll()) {
- if (c.compareTo(contextData.getContextData()) == 0) {
- selected.add(contextData);
+ for (GenresData genresData : storeGenres.getAll()) {
+ if (c.compareTo(genresData.getGenre()) == 0) {
+ selected.add(genresData);
break;
}
}
}
if (!selected.isEmpty()) {
- if (selected.size() == storeContext.getAll().size()) {
- smContext.selectAll();
+ if (selected.size() == storeGenres.getAll().size()) {
+ smGenres.selectAll();
} else {
- smContext.select(selected, false);
+ smGenres.select(selected, false);
}
}
}
- smContext.refresh();
+ smGenres.refresh();
} else {
repopulatesContexts();
@@ -916,7 +962,9 @@ public class ActiveFiltersPanel extends SimpleContainer {
}
comboChartType.setValue(ChartType.Context);
- gridContext.setVisible(true);
+ gridGenres.setVisible(true);
+ labelGenresCol.setHeader("Scope");
+ gridGenres.getView().refresh(true);
comboTopFilterKey.reset();
comboTopFilterKeyLabel.setVisible(false);
showOthersToggle.reset();
@@ -943,25 +991,164 @@ public class ActiveFiltersPanel extends SimpleContainer {
}
private void resetContexts() {
- storeContext.clear();
- storeContext.commitChanges();
- smContext.deselectAll();
- smContext.refresh();
+ storeGenres.clear();
+ storeGenres.commitChanges();
+ smGenres.deselectAll();
+ smGenres.refresh();
}
private void repopulatesContexts() {
ArrayList contexts = accountingStateData.getAvailableContext()
.getContexts();
- ArrayList ctx = new ArrayList();
+ ArrayList genres = new ArrayList();
for (String context : contexts) {
- ContextData contextData = new ContextData(context);
- ctx.add(contextData);
+ GenresData genresData = new GenresData(context);
+ genres.add(genresData);
}
- storeContext.clear();
- storeContext.addAll(ctx);
- storeContext.commitChanges();
- smContext.selectAll();
- smContext.refresh();
+ storeGenres.clear();
+ storeGenres.addAll(genres);
+ storeGenres.commitChanges();
+ smGenres.selectAll();
+ smGenres.refresh();
+ }
+
+ private void changeActiveFiltersForSpaces() {
+ if (accountingStateData.getSeriesRequest() != null
+ && accountingStateData.getSeriesRequest()
+ .getAccountingFilterDefinition() != null
+ && accountingStateData.getSeriesRequest()
+ .getAccountingFilterDefinition() instanceof AccountingFilterSpaces) {
+ AccountingFilterSpaces accountingFilterSapces = (AccountingFilterSpaces) accountingStateData
+ .getSeriesRequest().getAccountingFilterDefinition();
+ if (accountingStateData.getAvailableSpaces() != null
+ && accountingStateData.getAvailableSpaces().getSpacesList() != null
+ && !accountingStateData.getAvailableSpaces().getSpacesList()
+ .isEmpty()) {
+
+ if (accountingFilterSapces.getSpaces() != null
+ && accountingFilterSapces.getSpaces().getSpacesList() != null
+ && !accountingFilterSapces.getSpaces().getSpacesList()
+ .isEmpty()) {
+ ArrayList spacesList = accountingStateData
+ .getAvailableSpaces().getSpacesList();
+ ArrayList genres = new ArrayList();
+ for (String space : spacesList) {
+ GenresData genresData = new GenresData(space);
+ genres.add(genresData);
+ }
+ storeGenres.clear();
+ storeGenres.addAll(genres);
+ storeGenres.commitChanges();
+
+ smGenres.deselectAll();
+
+ if (accountingFilterSapces.getSpaces().getSpacesList() == null
+ || accountingFilterSapces.getSpaces()
+ .getSpacesList().isEmpty()) {
+ } else {
+ ArrayList selected = new ArrayList<>();
+ for (String s : accountingFilterSapces.getSpaces()
+ .getSpacesList()) {
+ for (GenresData genresData : storeGenres.getAll()) {
+ if (s.compareTo(genresData.getGenre()) == 0) {
+ selected.add(genresData);
+ break;
+ }
+ }
+ }
+ if (!selected.isEmpty()) {
+ if (selected.size() == storeGenres.getAll().size()) {
+ smGenres.selectAll();
+ } else {
+ smGenres.select(selected, false);
+ }
+ }
+ }
+
+ smGenres.refresh();
+
+ } else {
+ repopulatesSpaces();
+ }
+
+ } else {
+ resetSpaces();
+ }
+
+ if (accountingFilterSapces.getFilters() != null) {
+ List filters = accountingFilterSapces
+ .getFilters();
+ storeFilter.clear();
+ storeFilter.addAll(filters);
+ seq = 0;
+ for (AccountingFilter filter : filters) {
+ if (filter.getId() > seq) {
+ seq = filter.getId();
+ }
+ }
+ storeFilter.commitChanges();
+ } else {
+ storeFilter.clear();
+ storeFilter.commitChanges();
+ seq = 0;
+ }
+
+ } else {
+ reconfigureSpaces();
+ storeFilter.clear();
+ storeFilter.commitChanges();
+ seq = 0;
+
+ }
+ comboChartType.setValue(ChartType.Spaces);
+ gridGenres.setVisible(true);
+ labelGenresCol.setHeader("Space");
+ gridGenres.getView().refresh(true);
+ comboTopFilterKey.reset();
+ comboTopFilterKeyLabel.setVisible(false);
+ showOthersToggle.reset();
+ showOthersNo.setValue(true);
+ showOthersLabel.setVisible(false);
+ noContextToggle.reset();
+ noContextNo.setValue(true);
+ noContextLabel.setVisible(false);
+ topNumber.reset();
+ topNumberLabel.setVisible(false);
+ forceLayout();
+
+ }
+
+ private void reconfigureSpaces() {
+ if (accountingStateData.getAvailableSpaces() != null
+ && accountingStateData.getAvailableSpaces().getSpacesList() != null
+ && !accountingStateData.getAvailableSpaces().getSpacesList()
+ .isEmpty()) {
+ repopulatesSpaces();
+ } else {
+ resetSpaces();
+ }
+ }
+
+ private void resetSpaces() {
+ storeGenres.clear();
+ storeGenres.commitChanges();
+ smGenres.deselectAll();
+ smGenres.refresh();
+ }
+
+ private void repopulatesSpaces() {
+ ArrayList spaces = accountingStateData.getAvailableSpaces()
+ .getSpacesList();
+ ArrayList genres = new ArrayList();
+ for (String space : spaces) {
+ GenresData genresData = new GenresData(space);
+ genres.add(genresData);
+ }
+ storeGenres.clear();
+ storeGenres.addAll(genres);
+ storeGenres.commitChanges();
+ smGenres.selectAll();
+ smGenres.refresh();
}
public AccountingFilterDefinition getActiveFilters() {
@@ -975,7 +1162,8 @@ public class ActiveFiltersPanel extends SimpleContainer {
return getActiveFiltersForTop();
case Context:
return getActiveFiltersForContext();
-
+ case Spaces:
+ return getActiveFiltersForSpaces();
default:
return null;
@@ -1054,11 +1242,10 @@ public class ActiveFiltersPanel extends SimpleContainer {
private AccountingFilterDefinition getActiveFiltersForContext() {
ArrayList contextsSelected = new ArrayList();
- if (storeContext != null && storeContext.size() > 0
- && smContext != null) {
- List selected = smContext.getSelectedItems();
- for (ContextData cd : selected) {
- contextsSelected.add(cd.getContextData());
+ if (storeGenres != null && storeGenres.size() > 0 && smGenres != null) {
+ List selected = smGenres.getSelectedItems();
+ for (GenresData cd : selected) {
+ contextsSelected.add(cd.getGenre());
}
}
org.gcube.portlets.admin.accountingmanager.shared.data.Context context = new org.gcube.portlets.admin.accountingmanager.shared.data.Context(
@@ -1080,6 +1267,32 @@ public class ActiveFiltersPanel extends SimpleContainer {
}
+ private AccountingFilterDefinition getActiveFiltersForSpaces() {
+ ArrayList spacesSelected = new ArrayList();
+ if (storeGenres != null && storeGenres.size() > 0 && smGenres != null) {
+ List selected = smGenres.getSelectedItems();
+ for (GenresData cd : selected) {
+ spacesSelected.add(cd.getGenre());
+ }
+ }
+ Spaces spaces = new Spaces(spacesSelected);
+
+ List filtersActives = storeFilter.getAll();
+ ArrayList filtersReady = new ArrayList();
+ for (AccountingFilter filter : filtersActives) {
+ if (filter.getFilterValue() != null
+ && !filter.getFilterValue().isEmpty()) {
+ filtersReady.add(filter);
+ }
+ }
+ if (filtersReady.size() > 0) {
+ return new AccountingFilterSpaces(spaces, filtersReady);
+ } else {
+ return new AccountingFilterSpaces(spaces, null);
+ }
+
+ }
+
private void addNewFilter(SelectEvent event) {
List filtersSet = storeFilter.getAll();
FilterKey fk = null;
@@ -1275,7 +1488,7 @@ public class ActiveFiltersPanel extends SimpleContainer {
}
switch (chartType) {
case Basic:
- gridContext.setVisible(false);
+ gridGenres.setVisible(false);
comboTopFilterKey.reset();
comboTopFilterKeyLabel.setVisible(false);
showOthersToggle.reset();
@@ -1300,7 +1513,7 @@ public class ActiveFiltersPanel extends SimpleContainer {
forceLayout();
break;
case Top:
- gridContext.setVisible(false);
+ gridGenres.setVisible(false);
comboTopFilterKey.reset();
if (accountingStateData != null
&& accountingStateData.getAvailableFilterKeys() != null
@@ -1326,7 +1539,30 @@ public class ActiveFiltersPanel extends SimpleContainer {
break;
case Context:
reconfigureContext();
- gridContext.setVisible(true);
+ gridGenres.setVisible(true);
+ labelGenresCol.setHeader("Scope");
+ gridGenres.getView().refresh(true);
+ comboTopFilterKey.reset();
+ comboTopFilterKeyLabel.setVisible(false);
+ showOthersToggle.reset();
+ showOthersNo.setValue(true);
+ showOthersLabel.setVisible(false);
+ noContextToggle.reset();
+ noContextYes.setValue(false);
+ noContextNo.setValue(true);
+ noContextLabel.setVisible(false);
+ topNumber.reset();
+ topNumberLabel.setVisible(false);
+ storeFilter.clear();
+ storeFilter.commitChanges();
+ seq = 0;
+ forceLayout();
+ break;
+ case Spaces:
+ reconfigureSpaces();
+ gridGenres.setVisible(true);
+ labelGenresCol.setHeader("Space");
+ gridGenres.getView().refresh(true);
comboTopFilterKey.reset();
comboTopFilterKeyLabel.setVisible(false);
showOthersToggle.reset();
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/ChartViewerPanel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/ChartViewerPanel.java
index 3f216cc..b046073 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/ChartViewerPanel.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/ChartViewerPanel.java
@@ -4,6 +4,7 @@ import org.gcube.portlets.admin.accountingmanager.client.event.StateChangeEvent;
import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.AccountingChart4Job;
import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.AccountingChart4Portlet;
import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.AccountingChart4Service;
+import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.AccountingChart4Space;
import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.AccountingChart4Storage;
import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.AccountingChart4Task;
import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.AccountingChartBuilder;
@@ -100,6 +101,11 @@ public class ChartViewerPanel extends FramedPanel {
case TASK:
createChart(new AccountingChart4Task(eventBus, event.getAccountingStateData()));
break;
+ case SPACE:
+ createChart(new AccountingChart4Space(eventBus, event.getAccountingStateData()));
+ break;
+
+
default:
break;
}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Space.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Space.java
new file mode 100644
index 0000000..7bd96f3
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Space.java
@@ -0,0 +1,75 @@
+package org.gcube.portlets.admin.accountingmanager.client.maindata.charts;
+
+import org.gcube.portlets.admin.accountingmanager.client.maindata.charts.space.SpaceChartSpacesPanel;
+import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesSpace;
+import org.gcube.portlets.admin.accountingmanager.shared.exception.ChartDrawException;
+
+import com.google.gwt.event.shared.EventBus;
+import com.sencha.gxt.widget.core.client.container.SimpleContainer;
+
+/**
+ * Accounting Chart 4 Space
+ *
+ * @author "Giancarlo Panichi" email: g.panichi@isti.cnr.it
+ *
+ */
+public class AccountingChart4Space extends AccountingChartBuilder {
+ private EventBus eventBus;
+ private AccountingClientStateData accountingStateData;
+
+
+ public AccountingChart4Space(EventBus eventBus, AccountingClientStateData accountingStateData) {
+ this.eventBus=eventBus;
+ this.accountingStateData = accountingStateData;
+ }
+
+ @Override
+ public void buildChart() throws ChartDrawException {
+ AccountingChartPanel accountingChartPanel = null;
+
+ if (accountingStateData == null
+ || accountingStateData.getAccountingType() == null
+ || accountingStateData.getSeriesRequest() == null
+ || accountingStateData.getSeriesResponse() == null) {
+ accountingChartSpec.setChart(accountingChartPanel);
+ return;
+ }
+
+ if (!(accountingStateData.getSeriesResponse() instanceof SeriesSpace)) {
+ accountingChartSpec.setChart(accountingChartPanel);
+ return;
+ }
+
+ SimpleContainer container = createSpaceChartPanel();
+
+ accountingChartPanel = new AccountingChartPanel(container);
+
+ accountingChartSpec.setChart(accountingChartPanel);
+
+ }
+
+ private SimpleContainer createSpaceChartPanel()
+ throws ChartDrawException {
+
+ if (accountingStateData == null
+ || accountingStateData.getSeriesRequest() == null
+ || accountingStateData.getSeriesRequest()
+ .getAccountingFilterDefinition() == null
+ || accountingStateData.getSeriesRequest()
+ .getAccountingFilterDefinition().getChartType() == null) {
+ return null;
+ }
+
+ switch (accountingStateData.getSeriesRequest()
+ .getAccountingFilterDefinition().getChartType()) {
+
+ case Spaces:
+ return new SpaceChartSpacesPanel(eventBus,accountingStateData);
+ default:
+ return null;
+ }
+
+ }
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/space/SpaceChartSpacesPanel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/space/SpaceChartSpacesPanel.java
new file mode 100644
index 0000000..e4760a2
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/space/SpaceChartSpacesPanel.java
@@ -0,0 +1,891 @@
+package org.gcube.portlets.admin.accountingmanager.client.maindata.charts.space;
+
+import java.util.ArrayList;
+import java.util.Date;
+
+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.ChartDateTimeData;
+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.SpaceChartMeasure;
+import org.gcube.portlets.admin.accountingmanager.client.resource.AccountingManagerResources;
+import org.gcube.portlets.admin.accountingmanager.client.state.AccountingClientStateData;
+import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingPeriodMode;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesSpace;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.space.SeriesSpaceSpaces;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.space.SeriesSpaceData;
+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;
+import com.github.highcharts4gwt.model.array.api.Array;
+import com.github.highcharts4gwt.model.array.api.ArrayNumber;
+import com.github.highcharts4gwt.model.array.api.ArrayString;
+import com.github.highcharts4gwt.model.factory.api.HighchartsOptionFactory;
+import com.github.highcharts4gwt.model.factory.jso.JsoHighchartsOptionFactory;
+import com.github.highcharts4gwt.model.highcharts.option.api.ChartOptions;
+import com.github.highcharts4gwt.model.highcharts.option.api.SeriesColumn;
+import com.github.highcharts4gwt.model.highcharts.option.api.seriescolumn.Data;
+import com.google.gwt.event.logical.shared.SelectionEvent;
+import com.google.gwt.event.logical.shared.SelectionHandler;
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.i18n.client.DateTimeFormat;
+import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
+import com.sencha.gxt.cell.core.client.ButtonCell.ButtonArrowAlign;
+import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
+import com.sencha.gxt.core.client.util.Margins;
+import com.sencha.gxt.widget.core.client.button.TextButton;
+import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData;
+import com.sencha.gxt.widget.core.client.container.MarginData;
+import com.sencha.gxt.widget.core.client.container.SimpleContainer;
+import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
+import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
+import com.sencha.gxt.widget.core.client.menu.Item;
+import com.sencha.gxt.widget.core.client.menu.Menu;
+import com.sencha.gxt.widget.core.client.menu.MenuItem;
+import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
+
+/**
+ *
+ * @author giancarlo email: g.panichi@isti.cnr.it
+ *
+ */
+public class SpaceChartSpacesPanel extends SimpleContainer {
+
+ private static final String DATA_VOLUME_UNIT = "Data Volume Unit";
+
+ private DateTimeFormat dtf = DateTimeFormat
+ .getFormat(PredefinedFormat.YEAR_MONTH_DAY);
+
+ private EventBus eventBus;
+ private AccountingClientStateData accountingStateData;
+ private HighchartsLayoutPanel highchartsLayoutPanel;
+
+ // Download Menu
+ private MenuItem downloadCSVItem;
+ private MenuItem downloadXMLItem;
+ private MenuItem downloadJSONItem;
+ private MenuItem downloadPNGItem;
+ private MenuItem downloadJPGItem;
+ private MenuItem downloadPDFItem;
+ private MenuItem downloadSVGItem;
+
+ // Unit Menu
+ private MenuItem kBItem;
+ private MenuItem MBItem;
+ private MenuItem GBItem;
+ private MenuItem TBItem;
+
+ private long unitMeasure = ByteUnitMeasure.getMegaByteDimForStorage();
+ private String unitMeasureLabel = ByteUnitMeasure.MB;
+ private TextButton unitButton;
+
+ private ChartOptions options;
+
+ private SpaceChartMeasure measure = SpaceChartMeasure.DataVolume;
+ private TextButton measureButton;
+
+ private VerticalLayoutContainer vert;
+
+ public SpaceChartSpacesPanel(EventBus eventBus,
+ AccountingClientStateData accountingStateData) {
+ this.eventBus = eventBus;
+ this.accountingStateData = accountingStateData;
+ forceLayoutOnResize = true;
+ create();
+
+ }
+
+ private void create() {
+ ToolBar toolBar = new ToolBar();
+ toolBar.setSpacing(2);
+ // Download
+ final TextButton downloadButton = new TextButton(
+ DownloadConstants.DOWNLOAD,
+ AccountingManagerResources.INSTANCE.accountingDownload24());
+ // downloadButton.setScale(ButtonScale.MEDIUM);
+ downloadButton.setIconAlign(IconAlign.RIGHT);
+ downloadButton.setArrowAlign(ButtonArrowAlign.RIGHT);
+ downloadButton.setMenu(createDownloadMenu());
+
+ // Unit
+ unitButton = new TextButton(DATA_VOLUME_UNIT,
+ AccountingManagerResources.INSTANCE.accountingUnitMB24());
+ unitButton.setIconAlign(IconAlign.RIGHT);
+ unitButton.setArrowAlign(ButtonArrowAlign.RIGHT);
+ unitButton.setMenu(createUnitMenu());
+
+ toolBar.add(downloadButton, new BoxLayoutData(new Margins(0)));
+ toolBar.add(unitButton, new BoxLayoutData(new Margins(0)));
+
+ //
+ createChart();
+
+ highchartsLayoutPanel = new HighchartsLayoutPanel();
+ highchartsLayoutPanel.renderChart(options);
+
+ //
+ vert = new VerticalLayoutContainer();
+ vert.add(toolBar, new VerticalLayoutData(1, -1, new Margins(0)));
+ vert.add(highchartsLayoutPanel, new VerticalLayoutData(1, 1,
+ new Margins(0)));
+
+ add(vert, new MarginData(0));
+
+ }
+
+ private void updateChart() {
+ createChart();
+ highchartsLayoutPanel.renderChart(options);
+ forceLayout();
+ }
+
+ private Menu createDownloadMenu() {
+ Menu menuDownload = new Menu();
+ 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);
+ downloadJPGItem = new MenuItem(DownloadConstants.DOWNLOAD_JPG,
+ AccountingManagerResources.INSTANCE.accountingFileJPG24());
+ downloadJPGItem.setHeight(30);
+ downloadPDFItem = new MenuItem(DownloadConstants.DOWNLOAD_PDF,
+ AccountingManagerResources.INSTANCE.accountingFilePDF24());
+ downloadPDFItem.setHeight(30);
+ downloadSVGItem = new MenuItem(DownloadConstants.DOWNLOAD_SVG,
+ AccountingManagerResources.INSTANCE.accountingFileSVG24());
+ downloadSVGItem.setHeight(30);
+
+ downloadCSVItem.addSelectionHandler(new SelectionHandler- () {
+
+ @Override
+ public void onSelection(SelectionEvent
- event) {
+ onDownloadCSV();
+
+ }
+
+ });
+
+ 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
+ public void onSelection(SelectionEvent
- event) {
+ String id = highchartsLayoutPanel.getElement().getId();
+ onDownloadPNG(id);
+
+ }
+ });
+
+ downloadJPGItem.addSelectionHandler(new SelectionHandler
- () {
+
+ @Override
+ public void onSelection(SelectionEvent
- event) {
+ String id = highchartsLayoutPanel.getElement().getId();
+ onDownloadJPG(id);
+ }
+ });
+
+ downloadPDFItem.addSelectionHandler(new SelectionHandler
- () {
+
+ @Override
+ public void onSelection(SelectionEvent
- event) {
+ String id = highchartsLayoutPanel.getElement().getId();
+ onDownloadPDF(id);
+ }
+ });
+
+ downloadSVGItem.addSelectionHandler(new SelectionHandler
- () {
+
+ @Override
+ public void onSelection(SelectionEvent
- event) {
+ String id = highchartsLayoutPanel.getElement().getId();
+ onDownloadSVG(id);
+ }
+ });
+
+ menuDownload.add(downloadCSVItem);
+ menuDownload.add(downloadXMLItem);
+ menuDownload.add(downloadJSONItem);
+ menuDownload.add(downloadPNGItem);
+ menuDownload.add(downloadJPGItem);
+ menuDownload.add(downloadPDFItem);
+ menuDownload.add(downloadSVGItem);
+ return menuDownload;
+
+ }
+
+ private Menu createUnitMenu() {
+ Menu menuUnit = new Menu();
+ kBItem = new MenuItem(ByteUnitMeasure.KILOBYTE,
+ AccountingManagerResources.INSTANCE.accountingUnitkB24());
+ kBItem.setHeight(30);
+ MBItem = new MenuItem(ByteUnitMeasure.MEGABYTE,
+ AccountingManagerResources.INSTANCE.accountingUnitMB24());
+ MBItem.setHeight(30);
+ GBItem = new MenuItem(ByteUnitMeasure.GIGABYTE,
+ AccountingManagerResources.INSTANCE.accountingUnitGB24());
+ GBItem.setHeight(30);
+ TBItem = new MenuItem(ByteUnitMeasure.TERABYTE,
+ AccountingManagerResources.INSTANCE.accountingUnitTB24());
+ TBItem.setHeight(30);
+
+ kBItem.addSelectionHandler(new SelectionHandler
- () {
+
+ @Override
+ public void onSelection(SelectionEvent
- event) {
+ unitMeasure = ByteUnitMeasure.getKiloByteDimForStorage();
+ unitMeasureLabel = ByteUnitMeasure.kB;
+ unitButton.setIcon(AccountingManagerResources.INSTANCE
+ .accountingUnitkB24());
+ updateChart();
+ }
+ });
+
+ MBItem.addSelectionHandler(new SelectionHandler
- () {
+
+ @Override
+ public void onSelection(SelectionEvent
- event) {
+ unitMeasure = ByteUnitMeasure.getMegaByteDimForStorage();
+ unitMeasureLabel = ByteUnitMeasure.MB;
+ unitButton.setIcon(AccountingManagerResources.INSTANCE
+ .accountingUnitMB24());
+ updateChart();
+ }
+ });
+
+ GBItem.addSelectionHandler(new SelectionHandler
- () {
+
+ @Override
+ public void onSelection(SelectionEvent
- event) {
+ unitMeasure = ByteUnitMeasure.getGigaByteDimForStorage();
+ unitMeasureLabel = ByteUnitMeasure.GB;
+ unitButton.setIcon(AccountingManagerResources.INSTANCE
+ .accountingUnitGB24());
+ updateChart();
+ }
+ });
+
+ TBItem.addSelectionHandler(new SelectionHandler
- () {
+
+ @Override
+ public void onSelection(SelectionEvent
- event) {
+ unitMeasure = ByteUnitMeasure.getTeraByteDimForStorage();
+ unitMeasureLabel = ByteUnitMeasure.TB;
+ unitButton.setIcon(AccountingManagerResources.INSTANCE
+ .accountingUnitTB24());
+ updateChart();
+ }
+ });
+
+ menuUnit.add(kBItem);
+ menuUnit.add(MBItem);
+ menuUnit.add(GBItem);
+ menuUnit.add(TBItem);
+ return menuUnit;
+
+ }
+
+ private void onDownloadCSV() {
+ 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) /*-{
+ console.log(id);
+ var chart = $wnd
+ .jQuery('#' + id)
+ .highcharts(
+ this.@org.gcube.portlets.admin.accountingmanager.client.maindata.charts.space.SpaceChartSpacesPanel::options);
+ console.log(chart);
+ chart.exportChart();
+
+ }-*/;
+
+ public static native void onDownloadJPG(String id) /*-{
+ console.log(id);
+ var chart = $wnd
+ .jQuery('#' + id)
+ .highcharts(
+ this.@org.gcube.portlets.admin.accountingmanager.client.maindata.charts.space.SpaceChartSpacesPanel::options);
+ console.log(chart);
+ chart.exportChart({
+ type : 'image/jpeg'
+ });
+
+ }-*/;
+
+ public static native void onDownloadPDF(String id) /*-{
+ console.log(id);
+ var chart = $wnd
+ .jQuery('#' + id)
+ .highcharts(
+ this.@org.gcube.portlets.admin.accountingmanager.client.maindata.charts.space.SpaceChartSpacesPanel::options);
+ console.log(chart);
+ chart.exportChart({
+ type : 'application/pdf'
+ });
+
+ }-*/;
+
+ public static native void onDownloadSVG(String id) /*-{
+ console.log(id);
+ var chart = $wnd
+ .jQuery('#' + id)
+ .highcharts(
+ this.@org.gcube.portlets.admin.accountingmanager.client.maindata.charts.space.SpaceChartSpacesPanel::options);
+ console.log(chart);
+ chart.exportChart({
+ type : 'image/svg+xml'
+ });
+
+ }-*/;
+
+ private void createChart() {
+ SeriesSpace seriesSpace = (SeriesSpace) accountingStateData
+ .getSeriesResponse();
+
+ if (!(seriesSpace.getSerieSpaceDefinition() instanceof SeriesSpaceSpaces)) {
+ Log.debug("Invalid SeriesSpaceCategories!");
+ return;
+ }
+ SeriesSpaceSpaces seriesSpaceCategories = (SeriesSpaceSpaces) seriesSpace
+ .getSerieSpaceDefinition();
+
+ HighchartsOptionFactory highchartsFactory = new JsoHighchartsOptionFactory();
+
+ options = highchartsFactory.createChartOptions();
+ options.chart().zoomType("xy");
+ options.exporting().buttons().contextButton().enabled(false);
+ options.exporting().filename("AccountingSpaceCategories");
+ options.title().text("Accounting Space");
+
+ /*
+ * options.subtitle().text("Click and drag in the plot area to zoom in");
+ */
+
+ ArrayString colors = options.colors();
+ // colors.setValue(0, "#cc0038");
+ // colors.setValue(1, "#32cd32");
+
+ // yAxis
+ options.setFieldAsJsonObject("yAxis", retrieveYAxis(colors));
+
+ options.plotOptions().setFieldAsJsonObject(
+ "column",
+ "{ " + "\"stacking\": \"normal\"," + "\"dataLabels\": { "
+ + " \"enabled\": \"true\","
+ + " \"color\": \"white\", " + " \"style\": {"
+ + " \"textShadow\": \"0 0 3px black\"" + " }"
+ + " }" + " }");
+
+ ArrayList seriesColumn = new ArrayList<>();
+ /*
+ * if (seriesServiceContext.getShowOthers()) {
+ * createSeriesColumnShowOthers(seriesServiceContext, highchartsFactory,
+ * colors, seriesColumn); } else {
+ */
+ createSeriesColumnSimple(seriesSpaceCategories, highchartsFactory,
+ colors, seriesColumn);
+ /* } */
+ for (SeriesColumn serie : seriesColumn) {
+ options.series().addToEnd(serie);
+ }
+
+ options.chart().showAxes(true);
+
+ options.legend().enabled(true);
+ return;
+ }
+
+ private void createSeriesColumnShowOthers(
+ SeriesSpaceSpaces seriesSpaceCategories,
+ HighchartsOptionFactory highchartsFactory, ArrayString colors,
+ ArrayList seriesColumn) {
+ Log.debug("Series ShowOthers");
+ if (accountingStateData.getSeriesRequest().getAccountingPeriod()
+ .getPeriod().compareTo(AccountingPeriodMode.DAILY) == 0
+ || accountingStateData.getSeriesRequest().getAccountingPeriod()
+ .getPeriod().compareTo(AccountingPeriodMode.HOURLY) == 0
+ || accountingStateData.getSeriesRequest().getAccountingPeriod()
+ .getPeriod().compareTo(AccountingPeriodMode.MINUTELY) == 0) {
+
+ double minRange = ChartTimeMeasure
+ .calculateMinRange(accountingStateData.getSeriesRequest()
+ .getAccountingPeriod());
+
+ double interval = ChartTimeMeasure
+ .calculateInterval(accountingStateData.getSeriesRequest()
+ .getAccountingPeriod());
+
+ Date dateStart = dtf.parse(accountingStateData.getSeriesRequest()
+ .getAccountingPeriod().getStartDate());
+
+ dateStart.setTime(dateStart.getTime()
+ + ChartTimeMeasure.timeZoneOffset()
+ * ChartTimeMeasure.MINUTE);
+
+ Log.debug("BuildChart DateStart: "
+ + DateTimeFormat.getFormat(PredefinedFormat.DATE_TIME_FULL)
+ .format(dateStart));
+
+ // xAxis
+ options.xAxis().type("datetime");
+ options.xAxis().minRange(minRange);
+ options.tooltip().xDateFormat("Selected Data");
+
+ int i = 0;
+ for (; i < seriesSpaceCategories.getSeriesSpaceDataCategoriesList()
+ .size(); i++) {
+ SeriesColumn seriesColumnData = highchartsFactory
+ .createSeriesColumn();
+
+ seriesColumnData.name(seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(i).getSpace());
+ seriesColumnData.color(colors.get(i));
+ seriesColumnData.type("column");
+
+ ArrayNumber data = seriesColumnData.dataAsArrayNumber();
+
+ for (SeriesSpaceData seriesSpaceData : seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(i).getSeries()) {
+ switch (measure) {
+ case DataVolume:
+ data.push(seriesSpaceData.getDataVolume() / unitMeasure);
+ break;
+ default:
+ data.push(seriesSpaceData.getDataVolume());
+ break;
+
+ }
+
+ }
+
+ seriesColumnData.pointInterval(interval).pointStart(
+ dateStart.getTime());
+ seriesColumn.add(seriesColumnData);
+
+ }
+
+ if (i < seriesSpaceCategories.getSeriesSpaceDataCategoriesList()
+ .size()) {
+ SeriesColumn seriesColumnData = highchartsFactory
+ .createSeriesColumn();
+
+ seriesColumnData.name("Others");
+ seriesColumnData.color(colors.get(i));
+ seriesColumnData.type("column");
+
+ ArrayList othersData = new ArrayList<>();
+ for (int j = i; j < seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().size(); j++) {
+ Long value;
+ for (int k = 0; k < seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(j)
+ .getSeries().size(); k++) {
+ SeriesSpaceData seriesSpaceData = seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(j)
+ .getSeries().get(k);
+ if (j == i) {
+ switch (measure) {
+ case DataVolume:
+ othersData.add(seriesSpaceData.getDataVolume()
+ / unitMeasure);
+ break;
+ default:
+ othersData.add(seriesSpaceData.getDataVolume()
+ / unitMeasure);
+ break;
+
+ }
+ } else {
+ switch (measure) {
+ case DataVolume:
+
+ value = seriesSpaceData.getDataVolume()
+ / unitMeasure + othersData.get(k);
+ othersData.set(k, value);
+ break;
+ default:
+ value = seriesSpaceData.getDataVolume()
+ / unitMeasure + othersData.get(k);
+ othersData.set(k, value);
+ break;
+
+ }
+ }
+
+ }
+ }
+
+ ArrayNumber data = seriesColumnData.dataAsArrayNumber();
+
+ for (Long value : othersData) {
+ data.push(value);
+ }
+
+ seriesColumnData.pointInterval(interval).pointStart(
+ dateStart.getTime());
+ seriesColumn.add(seriesColumnData);
+ }
+
+ } else {
+ // xAxis
+ options.xAxis().type("datetime");
+
+ if (accountingStateData.getSeriesRequest().getAccountingPeriod()
+ .getPeriod().compareTo(AccountingPeriodMode.MONTHLY) == 0) {
+ // options.tooltip().xDateFormat("%b, %Y");
+ options.tooltip().xDateFormat("Selected Data");
+
+ } else {
+ if (accountingStateData.getSeriesRequest()
+ .getAccountingPeriod().getPeriod()
+ .compareTo(AccountingPeriodMode.YEARLY) == 0) {
+ // options.tooltip().xDateFormat("%Y");
+ options.tooltip().xDateFormat("Selected Data");
+
+ } else {
+ options.tooltip().xDateFormat("Selected Data");
+ }
+
+ }
+
+ int i = 0;
+ for (; i < seriesSpaceCategories.getSeriesSpaceDataCategoriesList()
+ .size(); i++) {
+ SeriesColumn seriesColumnData = highchartsFactory
+ .createSeriesColumn();
+
+ seriesColumnData.name(seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(i).getSpace());
+ seriesColumnData.color(colors.get(i));
+ seriesColumnData.type("column");
+
+ Array arrayData = seriesColumnData.dataAsArrayObject();
+
+ for (SeriesSpaceData seriesSpaceData : seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(i).getSeries()) {
+ long dateFrom1970 = seriesSpaceData.getDate().getTime();
+
+ Log.debug("SeriersSpaceData: " + seriesSpaceData.getDate());
+ Log.debug("SeriersSpaceData: " + dateFrom1970);
+
+ Data data = highchartsFactory.createSeriesColumnData();
+
+ switch (measure) {
+ case DataVolume:
+ data.x(dateFrom1970);
+ data.y(seriesSpaceData.getDataVolume() / unitMeasure);
+ arrayData.addToEnd(data);
+ break;
+ default:
+ data.x(dateFrom1970);
+ data.y(seriesSpaceData.getDataVolume() / unitMeasure);
+ arrayData.addToEnd(data);
+ break;
+
+ }
+
+ }
+
+ seriesColumn.add(seriesColumnData);
+
+ }
+
+ if (i < seriesSpaceCategories.getSeriesSpaceDataCategoriesList()
+ .size()) {
+ SeriesColumn seriesColumnData = highchartsFactory
+ .createSeriesColumn();
+
+ seriesColumnData.name("Others");
+ seriesColumnData.color(colors.get(i));
+ seriesColumnData.type("column");
+
+ ArrayList othersData = new ArrayList<>();
+ for (int j = i; j < seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().size(); j++) {
+ ChartDateTimeData chartDateTimeData;
+ for (int k = 0; k < seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(j)
+ .getSeries().size(); k++) {
+ SeriesSpaceData seriesSpaceData = seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(j)
+ .getSeries().get(k);
+ if (j == i) {
+ switch (measure) {
+ case DataVolume:
+ chartDateTimeData = new ChartDateTimeData(
+ seriesSpaceData.getDate(),
+ seriesSpaceData.getDataVolume()
+ / unitMeasure);
+ othersData.add(chartDateTimeData);
+ break;
+
+ default:
+ chartDateTimeData = new ChartDateTimeData(
+ seriesSpaceData.getDate(),
+ seriesSpaceData.getDataVolume()
+ / unitMeasure);
+ othersData.add(chartDateTimeData);
+ break;
+ }
+ } else {
+ switch (measure) {
+ case DataVolume:
+ chartDateTimeData = new ChartDateTimeData(
+ seriesSpaceData.getDate(),
+ (seriesSpaceData.getDataVolume() / unitMeasure)
+ + othersData.get(k).getValue());
+ othersData.set(k, chartDateTimeData);
+ break;
+ default:
+ chartDateTimeData = new ChartDateTimeData(
+ seriesSpaceData.getDate(),
+ (seriesSpaceData.getDataVolume() / unitMeasure)
+ + othersData.get(k).getValue());
+ othersData.set(k, chartDateTimeData);
+ break;
+
+ }
+ }
+
+ }
+ }
+
+ Array arrayData = seriesColumnData.dataAsArrayObject();
+
+ for (ChartDateTimeData chartDateTimeData : othersData) {
+ long dateFrom1970 = chartDateTimeData.getDate().getTime();
+
+ Log.debug("SeriersOthersData: "
+ + chartDateTimeData.getDate());
+ Log.debug("SeriersOthersData: " + dateFrom1970);
+
+ Data data = highchartsFactory.createSeriesColumnData();
+
+ data.x(dateFrom1970);
+ data.y(chartDateTimeData.getValue());
+ arrayData.addToEnd(data);
+
+ }
+
+ seriesColumn.add(seriesColumnData);
+ }
+
+ }
+
+ }
+
+ private void createSeriesColumnSimple(
+ SeriesSpaceSpaces seriesSpaceCategories,
+ HighchartsOptionFactory highchartsFactory, ArrayString colors,
+ ArrayList seriesColumn) {
+
+ Log.debug("Series Simple");
+ if (accountingStateData.getSeriesRequest().getAccountingPeriod()
+ .getPeriod().compareTo(AccountingPeriodMode.DAILY) == 0
+ || accountingStateData.getSeriesRequest().getAccountingPeriod()
+ .getPeriod().compareTo(AccountingPeriodMode.HOURLY) == 0
+ || accountingStateData.getSeriesRequest().getAccountingPeriod()
+ .getPeriod().compareTo(AccountingPeriodMode.MINUTELY) == 0) {
+
+ double minRange = ChartTimeMeasure
+ .calculateMinRange(accountingStateData.getSeriesRequest()
+ .getAccountingPeriod());
+
+ double interval = ChartTimeMeasure
+ .calculateInterval(accountingStateData.getSeriesRequest()
+ .getAccountingPeriod());
+
+ Date dateStart = dtf.parse(accountingStateData.getSeriesRequest()
+ .getAccountingPeriod().getStartDate());
+
+ dateStart.setTime(dateStart.getTime()
+ + ChartTimeMeasure.timeZoneOffset()
+ * ChartTimeMeasure.MINUTE);
+
+ Log.debug("BuildChart DateStart: "
+ + DateTimeFormat.getFormat(PredefinedFormat.DATE_TIME_FULL)
+ .format(dateStart));
+
+ // xAxis
+ options.xAxis().type("datetime");
+ options.xAxis().minRange(minRange);
+ options.tooltip().xDateFormat("Selected Data");
+
+ for (int i = 0; i < seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().size(); i++) {
+ SeriesColumn seriesColumnData = highchartsFactory
+ .createSeriesColumn();
+
+ seriesColumnData.name(seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(i).getSpace());
+ seriesColumnData.color(colors.get(i));
+ seriesColumnData.type("column");
+
+ ArrayNumber data = seriesColumnData.dataAsArrayNumber();
+
+ for (SeriesSpaceData seriesSpaceData : seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(i).getSeries()) {
+ switch (measure) {
+ case DataVolume:
+ data.push(seriesSpaceData.getDataVolume() / unitMeasure);
+ break;
+ default:
+ data.push(seriesSpaceData.getDataVolume());
+ break;
+
+ }
+
+ }
+
+ seriesColumnData.pointInterval(interval).pointStart(
+ dateStart.getTime());
+ seriesColumn.add(seriesColumnData);
+
+ }
+
+ } else {
+ // xAxis
+ options.xAxis().type("datetime");
+
+ if (accountingStateData.getSeriesRequest().getAccountingPeriod()
+ .getPeriod().compareTo(AccountingPeriodMode.MONTHLY) == 0) {
+ // options.tooltip().xDateFormat("%b, %Y");
+ options.tooltip().xDateFormat("Selected Data");
+
+ } else {
+ if (accountingStateData.getSeriesRequest()
+ .getAccountingPeriod().getPeriod()
+ .compareTo(AccountingPeriodMode.YEARLY) == 0) {
+ // options.tooltip().xDateFormat("%Y");
+ options.tooltip().xDateFormat("Selected Data");
+
+ } else {
+ options.tooltip().xDateFormat("Selected Data");
+ }
+
+ }
+
+ for (int i = 0; i < seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().size(); i++) {
+ SeriesColumn seriesColumnData = highchartsFactory
+ .createSeriesColumn();
+
+ seriesColumnData.name(seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(i).getSpace());
+ seriesColumnData.color(colors.get(i));
+ seriesColumnData.type("column");
+
+ Array arrayData = seriesColumnData.dataAsArrayObject();
+
+ for (SeriesSpaceData seriesSpaceData : seriesSpaceCategories
+ .getSeriesSpaceDataCategoriesList().get(i).getSeries()) {
+ long dateFrom1970 = seriesSpaceData.getDate().getTime();
+
+ Log.debug("SeriersSpaceData: " + seriesSpaceData.getDate());
+ Log.debug("SeriersStorageData: " + dateFrom1970);
+
+ Data data = highchartsFactory.createSeriesColumnData();
+
+ switch (measure) {
+ case DataVolume:
+ data.x(dateFrom1970);
+ data.y(seriesSpaceData.getDataVolume() / unitMeasure);
+ arrayData.addToEnd(data);
+ break;
+ default:
+ data.x(dateFrom1970);
+ data.y(seriesSpaceData.getDataVolume() / unitMeasure);
+ arrayData.addToEnd(data);
+ break;
+
+ }
+
+ }
+
+ seriesColumn.add(seriesColumnData);
+
+ }
+
+ }
+ }
+
+ private String retrieveYAxis(ArrayString colors) {
+ switch (measure) {
+ case DataVolume:
+ return "[{" + " \"id\": \"" + SpaceChartMeasure.DataVolume.name()
+ + "\"," + " \"labels\": {" + " \"format\": \"{value} "
+ + unitMeasureLabel + "\"," + " \"style\": {"
+ + " \"color\": \"" + colors.get(1) + "\"" + " }"
+ + " }," + " \"stackLabels\": {" + " \"enabled\": \"true\","
+ + " \"style\": {" + " \"fontWeight\": \"bold\","
+ + " \"color\": \"gray\"" + " } " + " },"
+ + " \"title\": { " + " \"text\": \""
+ + SpaceChartMeasure.DataVolume.getLabel() + "\","
+ + " \"style\": {" + " \"color\": \""
+ + colors.get(1) + "\"" + " }" + " }" + "}]";
+
+ default:
+ return "[{" + " \"id\": \"" + SpaceChartMeasure.DataVolume.name()
+ + "\"," + " \"labels\": {" + " \"format\": \"{value} "
+ + unitMeasureLabel + "\"," + " \"style\": {"
+ + " \"color\": \"" + colors.get(1) + "\"" + " }"
+ + " }," + " \"stackLabels\": {" + " \"enabled\": \"true\","
+ + " \"style\": {" + " \"fontWeight\": \"bold\","
+ + " \"color\": \"gray\"" + " } " + " },"
+ + " \"title\": { " + " \"text\": \""
+ + SpaceChartMeasure.DataVolume.getLabel() + "\","
+ + " \"style\": {" + " \"color\": \""
+ + colors.get(1) + "\"" + " }" + " }" + "}]";
+
+ }
+
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/utils/SpaceChartMeasure.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/utils/SpaceChartMeasure.java
new file mode 100644
index 0000000..1869aed
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/utils/SpaceChartMeasure.java
@@ -0,0 +1,64 @@
+package org.gcube.portlets.admin.accountingmanager.client.maindata.charts.utils;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Service Chart Measure
+ *
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ */
+
+public enum SpaceChartMeasure {
+
+ DataVolume("Data Volume");
+
+ /**
+ *
+ * @param id
+ */
+ private SpaceChartMeasure(final String id) {
+ this.id = id;
+ }
+
+ private final String id;
+
+ @Override
+ public String toString() {
+ return id;
+ }
+
+ public String getLabel() {
+ return id;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ /**
+ *
+ * @param id
+ * @return
+ */
+ public static SpaceChartMeasure getFromId(String id) {
+ if (id == null || id.isEmpty())
+ return null;
+
+ for (SpaceChartMeasure measure : values()) {
+ if (measure.id.compareToIgnoreCase(id) == 0) {
+ return measure;
+ }
+ }
+ return null;
+ }
+
+ public static List asList() {
+ List list = Arrays.asList(values());
+ return list;
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/menu/AccountingManagerMenu.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/menu/AccountingManagerMenu.java
index a98c664..02a3168 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/menu/AccountingManagerMenu.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/menu/AccountingManagerMenu.java
@@ -63,6 +63,15 @@ public class AccountingManagerMenu extends TabPanel {
AccountingType.SERVICE.name());
add(serviceCategory, serviceItemConf);
break;
+ case SPACE:
+ TabItemConfig spaceItemConf = new TabItemConfig("Space", false);
+ spaceItemConf.setIcon(AccountingManagerResources.INSTANCE
+ .accountingSpace48());
+ EmptyPanel spaceCategory = new EmptyPanel(
+ AccountingType.SPACE.name());
+ add(spaceCategory, spaceItemConf);
+ break;
+
case STORAGE:
TabItemConfig storageItemConf = new TabItemConfig("Storage", false);
storageItemConf.setIcon(AccountingManagerResources.INSTANCE
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/properties/ContextDataProperties.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/properties/GenresDataProperties.java
similarity index 56%
rename from src/main/java/org/gcube/portlets/admin/accountingmanager/client/properties/ContextDataProperties.java
rename to src/main/java/org/gcube/portlets/admin/accountingmanager/client/properties/GenresDataProperties.java
index 14ed341..d64a492 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/properties/ContextDataProperties.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/properties/GenresDataProperties.java
@@ -1,6 +1,6 @@
package org.gcube.portlets.admin.accountingmanager.client.properties;
-import org.gcube.portlets.admin.accountingmanager.shared.data.ContextData;
+import org.gcube.portlets.admin.accountingmanager.shared.data.GenresData;
import com.google.gwt.editor.client.Editor.Path;
import com.sencha.gxt.core.client.ValueProvider;
@@ -13,9 +13,9 @@ import com.sencha.gxt.data.shared.PropertyAccess;
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it
*
*/
-public interface ContextDataProperties extends PropertyAccess {
- @Path("contextData")
- ModelKeyProvider id();
+public interface GenresDataProperties extends PropertyAccess {
+ @Path("genre")
+ ModelKeyProvider id();
- ValueProvider label();
+ ValueProvider label();
}
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 62fa31b..b421cff 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
@@ -39,6 +39,9 @@ public interface AccountingManagerResources extends ClientBundle {
@Source("accounting-job_128.png")
ImageResource accountingJob128();
+ @Source("accounting-space_128.png")
+ ImageResource accountingSpace128();
+
@Source("accounting-manager_48.png")
ImageResource accountingManager48();
@@ -57,6 +60,9 @@ public interface AccountingManagerResources extends ClientBundle {
@Source("accounting-job_48.png")
ImageResource accountingJob48();
+ @Source("accounting-space_48.png")
+ ImageResource accountingSpace48();
+
@Source("accounting-manager_32.png")
ImageResource accountingManager32();
@@ -75,6 +81,9 @@ public interface AccountingManagerResources extends ClientBundle {
@Source("accounting-job_32.png")
ImageResource accountingJob32();
+ @Source("accounting-space_32.png")
+ ImageResource accountingSpace32();
+
@Source("accounting-manager_24.png")
ImageResource accountingManager24();
@@ -93,6 +102,9 @@ public interface AccountingManagerResources extends ClientBundle {
@Source("accounting-job_24.png")
ImageResource accountingJob24();
+ @Source("accounting-space_24.png")
+ ImageResource accountingSpace24();
+
@Source("accounting-reload_24.png")
ImageResource accountingReload24();
@@ -185,19 +197,19 @@ 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-space_128.png b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_128.png
new file mode 100644
index 0000000..df774d9
Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_128.png differ
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_24.png b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_24.png
new file mode 100644
index 0000000..a36181f
Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_24.png differ
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_32.png b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_32.png
new file mode 100644
index 0000000..c440fe0
Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_32.png differ
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_48.png b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_48.png
new file mode 100644
index 0000000..182f498
Binary files /dev/null and b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_48.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 9067161..5ba93bb 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
@@ -3,6 +3,7 @@ package org.gcube.portlets.admin.accountingmanager.client.rpc;
import java.util.ArrayList;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
import org.gcube.portlets.admin.accountingmanager.shared.data.Context;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesRequest;
@@ -33,7 +34,6 @@ public interface AccountingManagerService extends RemoteService {
*/
public UserInfo hello() throws ServiceException;
-
/**
*
* @return
@@ -41,7 +41,6 @@ public interface AccountingManagerService extends RemoteService {
*/
public Long getClientMonitorTimeout() throws ServiceException;
-
/**
* Retrieve Accounting Series in Cache
*
@@ -55,8 +54,6 @@ public interface AccountingManagerService extends RemoteService {
public SeriesResponse getSeriesInCache(AccountingType accountingType,
SeriesRequest seriesRequest) throws ServiceException;
-
-
/**
* Retrieve Accounting Series
*
@@ -70,17 +67,16 @@ public interface AccountingManagerService extends RemoteService {
public String getSeries(AccountingType accountingType,
SeriesRequest seriesRequest) throws ServiceException;
-
/**
* Accounting Request Monitor
*
- * @param operationId
+ * @param operationId
* @return
* @throws ServiceException
*/
- public SeriesResponse operationMonitor(String operationId) throws ServiceException;
-
-
+ public SeriesResponse operationMonitor(String operationId)
+ throws ServiceException;
+
/**
*
* @param accountingType
@@ -103,13 +99,21 @@ public interface AccountingManagerService extends RemoteService {
FilterValuesRequest filterValuesRequest) throws ServiceException;
/**
- *
+ * Retrieve Context available
*
* @return
* @throws ServiceException
*/
public Context getContext() throws ServiceException;
+ /**
+ * Retrieve spaces available
+ *
+ * @return
+ * @throws ServiceException
+ */
+ public Spaces getSpaces() throws ServiceException;
+
/**
*
* @param itemDescription
@@ -144,6 +148,4 @@ public interface AccountingManagerService extends RemoteService {
*/
public Boolean isRootScope() 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 6a09b67..4decd07 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
@@ -6,6 +6,7 @@ package org.gcube.portlets.admin.accountingmanager.client.rpc;
import java.util.ArrayList;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
import org.gcube.portlets.admin.accountingmanager.shared.data.Context;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesRequest;
@@ -38,12 +39,11 @@ public interface AccountingManagerServiceAsync {
/**
* Retrieve client monitor timeout
- *
+ *
* @param callback
*/
void getClientMonitorTimeout(AsyncCallback callback);
-
/**
* Retrieve Accounting Series in Cache
*
@@ -67,16 +67,16 @@ public interface AccountingManagerServiceAsync {
*/
void getSeries(AccountingType accountingType, SeriesRequest seriesRequest,
AsyncCallback callback);
-
-
+
/**
* Accounting Request Monitor
*
* @param operationId
* @param callback
*/
- void operationMonitor(String operationId, AsyncCallback callback);
-
+ void operationMonitor(String operationId,
+ AsyncCallback callback);
+
/**
*
* @param accountingType
@@ -95,6 +95,12 @@ public interface AccountingManagerServiceAsync {
*/
void getContext(AsyncCallback callback);
+ /**
+ *
+ * @param callback
+ */
+ void getSpaces(AsyncCallback callback);
+
/**
*
* @param itemDescription
@@ -118,14 +124,12 @@ public interface AccountingManagerServiceAsync {
* return the list of enabled tabs
*/
void getEnableTabs(AsyncCallback callback);
-
+
/**
* Check if the user is in root scope
*
* @param callback
*/
void isRootScope(AsyncCallback callback);
-
-
}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingClientStateData.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingClientStateData.java
index 4dee1fd..d638822 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingClientStateData.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/state/AccountingClientStateData.java
@@ -4,6 +4,7 @@ import java.io.Serializable;
import java.util.ArrayList;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
import org.gcube.portlets.admin.accountingmanager.shared.data.Context;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey;
import org.gcube.portlets.admin.accountingmanager.shared.data.query.SeriesRequest;
@@ -23,12 +24,30 @@ public class AccountingClientStateData implements Serializable {
private SeriesResponse seriesResponse;
private ArrayList availableFilterKeys;
private Context availableContext;
+ private Spaces availableSpaces;
private Boolean rootScope;
public AccountingClientStateData() {
super();
}
-
+
+ /**
+ *
+ * @param accountingType
+ * @param rootScope
+ */
+ public AccountingClientStateData(AccountingType accountingType,
+ Boolean rootScope) {
+ super();
+ this.accountingType = accountingType;
+ this.seriesRequest = null;
+ this.seriesResponse = null;
+ this.availableFilterKeys = null;
+ this.availableContext = null;
+ this.availableSpaces = null;
+ this.rootScope = rootScope;
+ }
+
/**
*
* @param accountingType
@@ -41,13 +60,14 @@ public class AccountingClientStateData implements Serializable {
public AccountingClientStateData(AccountingType accountingType,
SeriesRequest seriesRequest, SeriesResponse seriesResponse,
ArrayList availableFilterKeys, Context availableContext,
- Boolean rootScope) {
+ Spaces availableSpaces, Boolean rootScope) {
super();
this.accountingType = accountingType;
this.seriesRequest = seriesRequest;
this.seriesResponse = seriesResponse;
this.availableFilterKeys = availableFilterKeys;
this.availableContext = availableContext;
+ this.availableSpaces = availableSpaces;
this.rootScope = rootScope;
}
@@ -99,13 +119,22 @@ public class AccountingClientStateData implements Serializable {
this.accountingType = accountingType;
}
+ public Spaces getAvailableSpaces() {
+ return availableSpaces;
+ }
+
+ public void setAvailableSpaces(Spaces availableSpaces) {
+ this.availableSpaces = availableSpaces;
+ }
+
@Override
public String toString() {
return "AccountingClientStateData [accountingType=" + accountingType
+ ", seriesRequest=" + seriesRequest + ", seriesResponse="
+ seriesResponse + ", availableFilterKeys="
+ availableFilterKeys + ", availableContext="
- + availableContext + ", rootScope=" + rootScope + "]";
+ + availableContext + ", availableSpaces=" + availableSpaces
+ + ", rootScope=" + rootScope + "]";
}
}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingClientCallable.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingClientCallable.java
index 79a2dc8..915bd28 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingClientCallable.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingClientCallable.java
@@ -29,11 +29,12 @@ public class AccountingClientCallable implements Callable {
private TaskRequest taskRequest;
private AccountingCache accountingCache;
- public AccountingClientCallable(TaskRequest taskRequest, AccountingCache accountingCache) {
+ public AccountingClientCallable(TaskRequest taskRequest,
+ AccountingCache accountingCache) {
super();
this.taskRequest = taskRequest;
this.accountingCache = accountingCache;
- logger.debug("AccountingClientCallable: "+taskRequest);
+ logger.debug("AccountingClientCallable: " + taskRequest);
}
@Override
@@ -41,28 +42,30 @@ public class AccountingClientCallable implements Callable {
try {
HttpSession httpSession = taskRequest.getHttpSession();
- if(httpSession==null){
+ if (httpSession == null) {
logger.error("Error retrieving HttpSession in AccountingClientCallable: is null");
return TaskStatus.ERROR;
}
-
-
- logger.info("Set SecurityToken: "+taskRequest.getServiceCredentials().getToken());
- SecurityTokenProvider.instance.set(taskRequest.getServiceCredentials().getToken());
- logger.info("Set ScopeProvider: "+taskRequest.getServiceCredentials().getScope());
- ScopeProvider.instance.set(taskRequest.getServiceCredentials().getScope());
-
-
+
AccountingCallerInterface accountingCaller;
if (Constants.DEBUG_MODE) {
accountingCaller = new AccountingCallerTester();
} else {
+ logger.info("Set SecurityToken: "
+ + taskRequest.getServiceCredentials().getToken());
+ SecurityTokenProvider.instance.set(taskRequest
+ .getServiceCredentials().getToken());
+ logger.info("Set ScopeProvider: "
+ + taskRequest.getServiceCredentials().getScope());
+ ScopeProvider.instance.set(taskRequest.getServiceCredentials()
+ .getScope());
accountingCaller = new AccountingCaller();
+
}
SeriesResponse seriesResponse = null;
- try {
+ try {
seriesResponse = accountingCaller.getSeries(
taskRequest.getAccountingType(),
taskRequest.getSeriesRequest());
@@ -96,7 +99,6 @@ public class AccountingClientCallable implements Callable {
+ taskRequest.getAccountingType().name()
+ "_" + taskRequest.getSeriesRequest().toString());
-
accountingCache.putSeries(key, seriesResponse);
AccountingStateData accountingStateData = new AccountingStateData(
@@ -130,6 +132,6 @@ public class AccountingClientCallable implements Callable {
+ e.getLocalizedMessage(), e);
return TaskStatus.ERROR;
}
-
+
}
}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingClientDaemon.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingClientDaemon.java
index c194ba9..8b69297 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingClientDaemon.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingClientDaemon.java
@@ -139,17 +139,25 @@ public class AccountingClientDaemon implements Runnable {
private void retrieveTimeOut() {
long timeo = 0;
- try {
- LiferayGroupManager groupManagement = new LiferayGroupManager();
- String scope = groupManagement
- .getInfrastructureScope(groupManagement.getRootVO()
- .getGroupId());
- logger.debug("Retrieving thread pool timeout in scope: " + scope);
- ThreadPoolInfo threadPoolInfo = BuildThreadPoolInfo.build(scope);
- timeo = threadPoolInfo.getTimeout();
- } catch (Throwable e) {
- logger.error("Error retrieving thread pool timeout!", e);
- return;
+ if (Constants.DEBUG_MODE) {
+ logger.info("AccountingManager use default configuration for threadpool");
+ timeo = Constants.SERVICE_CLIENT_TIMEOUT_DEFAULT_MILLIS;
+ } else {
+
+ try {
+ LiferayGroupManager groupManagement = new LiferayGroupManager();
+ String scope = groupManagement
+ .getInfrastructureScope(groupManagement.getRootVO()
+ .getGroupId());
+ logger.debug("Retrieving thread pool timeout in scope: "
+ + scope);
+ ThreadPoolInfo threadPoolInfo = BuildThreadPoolInfo
+ .build(scope);
+ timeo = threadPoolInfo.getTimeout();
+ } catch (Throwable e) {
+ logger.error("Error retrieving thread pool timeout!", e);
+ return;
+ }
}
if (timeo > 0) {
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 869dfc7..a105b1f 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
@@ -23,6 +23,7 @@ import org.gcube.portlets.admin.accountingmanager.server.util.TaskRequest;
import org.gcube.portlets.admin.accountingmanager.server.util.TaskWrapper;
import org.gcube.portlets.admin.accountingmanager.shared.Constants;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
import org.gcube.portlets.admin.accountingmanager.shared.data.Context;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesRequest;
@@ -101,15 +102,29 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet
}
}
-
+
@Override
public EnableTabs getEnableTabs() throws ServiceException {
try {
ServiceCredentials serviceCredentials = SessionUtil
.getServiceCredentials(this.getThreadLocalRequest());
+ logger.debug("getEnableTabs()");
+
+ boolean isRootScope=false;
+ if (Constants.DEBUG_MODE) {
+ isRootScope=true;
+ } else {
+ LiferayGroupManager groupManagement = new LiferayGroupManager();
+ isRootScope = groupManagement.isRootVO(groupManagement
+ .getGroupIdFromInfrastructureScope(serviceCredentials
+ .getScope()));
+ }
+ logger.debug("RootScope: " + isRootScope);
+
EnableTabs enableTabs = BuildEnableTabs.build(serviceCredentials
- .getScope());
+ .getScope(), isRootScope);
+ logger.debug("EnableTabs: " + enableTabs);
return enableTabs;
} catch (ServiceException e) {
@@ -125,15 +140,14 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet
@Override
public Long getClientMonitorTimeout() throws ServiceException {
try {
- SessionUtil
- .getServiceCredentials(this.getThreadLocalRequest());
+ SessionUtil.getServiceCredentials(this.getThreadLocalRequest());
ServletContext sc = getServletContext();
Long timeout = (Long) sc
.getAttribute(SessionConstants.ACCOUNTING_CLIENT_MONITOR_TIME_OUT_PERIODMILLIS);
logger.debug("Accounting Client Monitor Time Out in milliseconds: "
+ timeout);
-
+
return timeout;
} catch (ServiceException e) {
@@ -141,13 +155,12 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet
throw e;
} catch (Throwable e) {
e.printStackTrace();
- logger.error("getClientMonitorTimeout(): " + e.getLocalizedMessage(), e);
+ logger.error(
+ "getClientMonitorTimeout(): " + e.getLocalizedMessage(), e);
throw new ServiceException(e.getLocalizedMessage());
}
}
-
-
-
+
/**
*
* {@inheritDoc}
@@ -384,6 +397,39 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet
}
+ /**
+ *
+ * {@inheritDoc}
+ */
+ @Override
+ public Spaces getSpaces() throws ServiceException {
+ try {
+ HttpServletRequest httpRequest = this.getThreadLocalRequest();
+ @SuppressWarnings("unused")
+ ServiceCredentials serviceCredentials = SessionUtil
+ .getServiceCredentials(httpRequest);
+
+ AccountingCallerInterface accountingCaller;
+ if (Constants.DEBUG_MODE) {
+ accountingCaller = new AccountingCallerTester();
+ } else {
+ accountingCaller = new AccountingCaller();
+ }
+ Spaces categories = accountingCaller.getSpaces();
+
+ return categories;
+
+ } catch (ServiceException e) {
+ e.printStackTrace();
+ throw e;
+ } catch (Throwable e) {
+ e.printStackTrace();
+ logger.error("getCategories(): " + e.getLocalizedMessage(), e);
+ throw new ServiceException(e.getLocalizedMessage());
+ }
+
+ }
+
/**
*
* {@inheritDoc}
@@ -424,16 +470,16 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet
if (Constants.DEBUG_MODE) {
logger.debug("RootScope: " + true);
return true;
+ } else {
+ LiferayGroupManager groupManagement = new LiferayGroupManager();
+ Boolean isRoot = groupManagement.isRootVO(groupManagement
+ .getGroupIdFromInfrastructureScope(serviceCredentials
+ .getScope()));
+
+ logger.debug("RootScope: " + isRoot);
+ return isRoot;
}
- LiferayGroupManager groupManagement = new LiferayGroupManager();
- Boolean isRoot = groupManagement.isRootVO(groupManagement
- .getGroupIdFromInfrastructureScope(serviceCredentials
- .getScope()));
-
- logger.debug("RootScope: " + isRoot);
- return isRoot;
-
} catch (ServiceException e) {
e.printStackTrace();
throw e;
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCaller.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCaller.java
index 4a3d8be..db59d91 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCaller.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCaller.java
@@ -6,19 +6,24 @@ import org.gcube.portlets.admin.accountingmanager.server.amservice.command.Accou
import org.gcube.portlets.admin.accountingmanager.server.amservice.command.AccountingCommandContext;
import org.gcube.portlets.admin.accountingmanager.server.amservice.command.AccountingCommandGetFilterKeys;
import org.gcube.portlets.admin.accountingmanager.server.amservice.command.AccountingCommandGetFilterValues;
+import org.gcube.portlets.admin.accountingmanager.server.amservice.command.AccountingCommandSpaces;
+import org.gcube.portlets.admin.accountingmanager.server.amservice.command.AccountingCommandGetSpaces;
import org.gcube.portlets.admin.accountingmanager.server.amservice.command.AccountingCommandTop;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQuery;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQuery4Job;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQuery4Portlet;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQuery4Service;
+import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQuery4Space;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQuery4Storage;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQuery4Task;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQueryBasic;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQueryBuilder;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQueryContext;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQueryDirector;
+import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQuerySpaces;
import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQueryTop;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesRequest;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesResponse;
@@ -56,6 +61,14 @@ public class AccountingCaller implements AccountingCallerInterface {
return accountingCommand.execute();
}
+
+
+ public Spaces getSpaces() throws ServiceException {
+ AccountingCommandGetSpaces accountingCommand = new AccountingCommandGetSpaces();
+ return accountingCommand.execute();
+
+ }
+
public SeriesResponse getSeries(AccountingType accountingType,
SeriesRequest seriesRequest) throws ServiceException {
@@ -94,6 +107,11 @@ public class AccountingCaller implements AccountingCallerInterface {
AccountingCommandContext accountingCommandContext = new AccountingCommandContext(
accountingQueryContext, accountingType);
return accountingCommandContext.execute();
+ case Spaces:
+ AccountingQuerySpaces accountingQuerySpace = (AccountingQuerySpaces) query;
+ AccountingCommandSpaces accountingCommandSpace = new AccountingCommandSpaces(
+ accountingQuerySpace, accountingType);
+ return accountingCommandSpace.execute();
default:
throw new ServiceException(
"Error in invocation: Operation not supported");
@@ -130,6 +148,8 @@ public class AccountingCaller implements AccountingCallerInterface {
return new AccountingQuery4Storage(seriesRequest);
case TASK:
return new AccountingQuery4Task(seriesRequest);
+ case SPACE:
+ return new AccountingQuery4Space(seriesRequest);
default:
throw new ServiceException("Error request type is unknow!");
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCallerInterface.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCallerInterface.java
index d5fd349..58f2aa4 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCallerInterface.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCallerInterface.java
@@ -3,6 +3,7 @@ package org.gcube.portlets.admin.accountingmanager.server.amservice;
import java.util.ArrayList;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesRequest;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValuesResponse;
@@ -22,11 +23,11 @@ public interface AccountingCallerInterface {
throws ServiceException;
public FilterValuesResponse getFilterValues(
- FilterValuesRequest filterValuesRequest)
- throws ServiceException;
+ FilterValuesRequest filterValuesRequest) throws ServiceException;
+
+ public Spaces getSpaces() throws ServiceException;
public SeriesResponse getSeries(AccountingType accountingType,
- SeriesRequest seriesRequest)
- throws ServiceException;
+ SeriesRequest seriesRequest) throws ServiceException;
}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCallerTester.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCallerTester.java
index 8ae1629..7aed75c 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCallerTester.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCallerTester.java
@@ -12,6 +12,7 @@ import java.util.List;
import org.gcube.accounting.analytics.TemporalConstraint;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterTop;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
import org.gcube.portlets.admin.accountingmanager.shared.data.Context;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValue;
@@ -21,6 +22,7 @@ import org.gcube.portlets.admin.accountingmanager.shared.data.query.SeriesReques
import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesJob;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesResponse;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesService;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesSpace;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesStorage;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.job.SeriesJobBasic;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.job.SeriesJobContext;
@@ -36,6 +38,10 @@ import org.gcube.portlets.admin.accountingmanager.shared.data.response.service.S
import org.gcube.portlets.admin.accountingmanager.shared.data.response.service.SeriesServiceDataTop;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.service.SeriesServiceDefinition;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.service.SeriesServiceTop;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.space.SeriesSpaceSpaces;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.space.SeriesSpaceData;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.space.SeriesSpaceDataSpaces;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.space.SeriesSpaceDefinition;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.storage.SeriesStorageBasic;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.storage.SeriesStorageContext;
import org.gcube.portlets.admin.accountingmanager.shared.data.response.storage.SeriesStorageData;
@@ -72,13 +78,13 @@ public class AccountingCallerTester implements AccountingCallerInterface {
return new ArrayList();
}
ArrayList filterKeys = new ArrayList();
-
+
FilterKey key = new FilterKey("ConsumerId");
filterKeys.add(key);
-
+
key = new FilterKey("ClassName");
filterKeys.add(key);
-
+
for (int i = 0; i < 20; i++) {
key = new FilterKey("ServiceName" + i);
filterKeys.add(key);
@@ -99,14 +105,14 @@ public class AccountingCallerTester implements AccountingCallerInterface {
try {
logger.debug("getFilterValue(): [FilterValueRequest="
+ filterValuesRequest + "]");
- FilterValuesResponse filterValuesResponse=null;
+ FilterValuesResponse filterValuesResponse = null;
if (filterValuesRequest == null
|| filterValuesRequest.getAccountingType() == null
|| filterValuesRequest.getFilterKey() == null) {
filterValuesResponse = new FilterValuesResponse(
new ArrayList());
return filterValuesResponse;
-
+
}
ArrayList filterValues = new ArrayList();
@@ -116,15 +122,11 @@ public class AccountingCallerTester implements AccountingCallerInterface {
switch (filterValuesRequest.getAccountingType()) {
case JOB:
- values = Arrays.asList(vals);
case PORTLET:
- values = Arrays.asList(vals);
case SERVICE:
- values = Arrays.asList(vals);
case STORAGE:
- values = Arrays.asList(vals);
case TASK:
- values = Arrays.asList(vals);
+ case SPACE:
default:
values = Arrays.asList(vals);
}
@@ -133,9 +135,8 @@ public class AccountingCallerTester implements AccountingCallerInterface {
filterValues.add(new FilterValue(value));
}
}
-
- filterValuesResponse = new FilterValuesResponse(
- filterValues);
+
+ filterValuesResponse = new FilterValuesResponse(filterValues);
return filterValuesResponse;
} catch (Throwable e) {
logger.error("Error in getFilterValues(): "
@@ -435,6 +436,81 @@ public class AccountingCallerTester implements AccountingCallerInterface {
seriesResponse = new SeriesService(serieServiceDefinition);
break;
+ case SPACE:
+ SeriesSpaceDefinition serieSpaceDefinition = null;
+ if (seriesRequest.getAccountingFilterDefinition()
+ .getChartType() != null) {
+ ArrayList seriesSpaceData = new ArrayList<>();
+ switch (seriesRequest.getAccountingPeriod().getPeriod()) {
+ case DAILY:
+ case HOURLY:
+ case MINUTELY:
+ for (int i = 0; i < 30; i++) {
+ SeriesSpaceData data = new SeriesSpaceData(
+ new Date(), new Double(
+ 10000 * Math.random()).longValue());
+ seriesSpaceData.add(data);
+ }
+ break;
+ case MONTHLY:
+ while (startCalendar.compareTo(endCalendar) <= 0) {
+ SeriesSpaceData data = new SeriesSpaceData(
+ startCalendar.getTime(), new Double(
+ 10000 * Math.random()).longValue());
+ seriesSpaceData.add(data);
+ startCalendar.add(Calendar.MONTH, 1);
+ }
+ break;
+ case YEARLY:
+ while (startCalendar.compareTo(endCalendar) <= 0) {
+ SeriesSpaceData data = new SeriesSpaceData(
+ startCalendar.getTime(), new Double(
+ 10000 * Math.random()).longValue());
+ seriesSpaceData.add(data);
+ startCalendar.add(Calendar.YEAR, 1);
+ }
+ break;
+ default:
+ break;
+
+ }
+
+ switch (seriesRequest.getAccountingFilterDefinition()
+ .getChartType()) {
+ case Basic:
+ case Top:
+ case Context:
+ break;
+ case Spaces:
+ // AccountingFilterContext accountingFilterContext =
+ // (AccountingFilterContext) seriesRequest
+ // .getAccountingFilterDefinition();
+ ArrayList seriesSpaceDataSpacesList = new ArrayList<>();
+ ArrayList spacesList = new ArrayList<>();
+
+ for (int i = 1; i < 3; i++) {
+ String space = new String("Space" + i);
+ spacesList.add(space);
+ SeriesSpaceDataSpaces seriesSpaceDataSpaces = new SeriesSpaceDataSpaces(
+ space, seriesSpaceData);
+ seriesSpaceDataSpacesList
+ .add(seriesSpaceDataSpaces);
+ }
+
+ Spaces spaces=new Spaces(spacesList);
+ serieSpaceDefinition = new SeriesSpaceSpaces(
+ spaces, seriesSpaceDataSpacesList);
+
+ default:
+ break;
+
+ }
+ }
+
+ seriesResponse = new SeriesSpace(serieSpaceDefinition);
+
+ break;
+
case STORAGE:
SeriesStorageDefinition serieStorageDefinition = null;
if (seriesRequest.getAccountingFilterDefinition()
@@ -549,4 +625,13 @@ public class AccountingCallerTester implements AccountingCallerInterface {
}
}
+
+ @Override
+ public Spaces getSpaces() throws ServiceException {
+ ArrayList categoriesList = new ArrayList<>();
+ categoriesList.add("Space1");
+ categoriesList.add("Space2");
+ Spaces categories = new Spaces(categoriesList);
+ return categories;
+ }
}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/command/AccountingCommandGetFilterKeys.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/command/AccountingCommandGetFilterKeys.java
index 5fa8fcf..73a8594 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/command/AccountingCommandGetFilterKeys.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/command/AccountingCommandGetFilterKeys.java
@@ -6,6 +6,7 @@ import java.util.SortedSet;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery;
import org.gcube.accounting.datamodel.aggregation.AggregatedJobUsageRecord;
import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord;
+import org.gcube.accounting.datamodel.aggregation.AggregatedStorageStatusRecord;
import org.gcube.accounting.datamodel.aggregation.AggregatedStorageUsageRecord;
import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey;
@@ -15,20 +16,21 @@ import org.slf4j.LoggerFactory;
/**
*
- * @author Giancarlo Panichi
- * email: g.panichi@isti.cnr.it
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
*
*/
-public class AccountingCommandGetFilterKeys implements AccountingCommand> {
- private static final Logger logger = LoggerFactory.getLogger(AccountingCommandGetFilterKeys.class);
-
+public class AccountingCommandGetFilterKeys implements
+ AccountingCommand> {
+ private static final Logger logger = LoggerFactory
+ .getLogger(AccountingCommandGetFilterKeys.class);
+
private AccountingType accountingType;
-
- public AccountingCommandGetFilterKeys(AccountingType accountingType){
- this.accountingType=accountingType;
+
+ public AccountingCommandGetFilterKeys(AccountingType accountingType) {
+ this.accountingType = accountingType;
}
-
-
+
@Override
public ArrayList execute() throws ServiceException {
try {
@@ -40,29 +42,34 @@ public class AccountingCommandGetFilterKeys implements AccountingCommand filterKeys = new ArrayList();
SortedSet keys;
-
switch (accountingType) {
case JOB:
- keys = AccountingPersistenceQuery.getQuerableKeys(AggregatedJobUsageRecord.class);
+ keys = AccountingPersistenceQuery
+ .getQuerableKeys(AggregatedJobUsageRecord.class);
break;
case PORTLET:
// keys=rrq.getKeys(AggregatedPortletUsageRecord.class);
return filterKeys;
case SERVICE:
- keys = AccountingPersistenceQuery.getQuerableKeys(AggregatedServiceUsageRecord.class);
+ keys = AccountingPersistenceQuery
+ .getQuerableKeys(AggregatedServiceUsageRecord.class);
break;
case STORAGE:
- keys =AccountingPersistenceQuery.getQuerableKeys(AggregatedStorageUsageRecord.class);
+ keys = AccountingPersistenceQuery
+ .getQuerableKeys(AggregatedStorageUsageRecord.class);
break;
case TASK:
// keys=rrq.getKeys(AggregatedTaskUsageRecord.class);
return filterKeys;
+ case SPACE:
+ keys = AccountingPersistenceQuery
+ .getQuerableKeys(AggregatedStorageStatusRecord.class);
+ break;
default:
return filterKeys;
}
-
-
- logger.debug("AccountingPersistenceQuery.getQuerableKeys: "+keys);
+
+ logger.debug("AccountingPersistenceQuery.getQuerableKeys: " + keys);
for (String key : keys) {
if (key != null && !key.isEmpty()) {
filterKeys.add(new FilterKey(key));
@@ -71,7 +78,8 @@ public class AccountingCommandGetFilterKeys implements AccountingCommandg.panichi@isti.cnr.it
+ *
+ */
+public class AccountingCommandGetSpaces implements
+ AccountingCommand {
+ private static final Logger logger = LoggerFactory
+ .getLogger(AccountingCommandGetSpaces.class);
+
+ public AccountingCommandGetSpaces() {
+ }
+
+ @Override
+ public Spaces execute() throws ServiceException {
+ try {
+ logger.debug("getSpaces()");
+ SortedSet keys = null;
+ AccountingPersistenceQuery apq = AccountingPersistenceQueryFactory
+ .getInstance();
+
+ keys = apq.getSpaceProvidersIds();
+
+ logger.debug("AccountingPersistenceQuery.getSpaces: " + keys);
+ if (keys == null || keys.isEmpty()) {
+ return null;
+ }
+
+ ArrayList spaceList = new ArrayList<>();
+
+ for (String key : keys) {
+ if (key != null && !key.isEmpty()) {
+ spaceList.add(key);
+ }
+ }
+ Spaces categories = new Spaces(spaceList);
+
+ logger.debug("Spaces:" + categories);
+
+ return categories;
+ } catch (Throwable e) {
+ logger.error("Error in AccountingCommandGetSpaces(): "
+ + e.getLocalizedMessage());
+ e.printStackTrace();
+ throw new ServiceException("No spaces available!");
+
+ }
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/command/AccountingCommandSpaces.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/command/AccountingCommandSpaces.java
new file mode 100644
index 0000000..efc3505
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/command/AccountingCommandSpaces.java
@@ -0,0 +1,111 @@
+package org.gcube.portlets.admin.accountingmanager.server.amservice.command;
+
+import java.util.Calendar;
+import java.util.SortedMap;
+
+import org.gcube.accounting.analytics.Filter;
+import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery;
+import org.gcube.accounting.analytics.persistence.AccountingPersistenceQueryFactory;
+import org.gcube.portlets.admin.accountingmanager.server.amservice.query.AccountingQuerySpaces;
+import org.gcube.portlets.admin.accountingmanager.server.amservice.response.SeriesResponse4SpaceSpaces;
+import org.gcube.portlets.admin.accountingmanager.server.amservice.response.SeriesResponseBuilder;
+import org.gcube.portlets.admin.accountingmanager.server.amservice.response.SeriesResponseDirector;
+import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingType;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesResponse;
+import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ */
+public class AccountingCommandSpaces implements
+ AccountingCommand {
+ private static final Logger logger = LoggerFactory
+ .getLogger(AccountingCommandSpaces.class);
+
+ private AccountingQuerySpaces accountingQuerySpaces;
+ private AccountingType accountingType;
+
+ public AccountingCommandSpaces(
+ AccountingQuerySpaces accountingQuerySpaces,
+ AccountingType accountingType) {
+ this.accountingQuerySpaces = accountingQuerySpaces;
+ this.accountingType = accountingType;
+ }
+
+ @Override
+ public SeriesResponse execute() throws ServiceException {
+ try {
+ AccountingPersistenceQuery apq = AccountingPersistenceQueryFactory
+ .getInstance();
+
+ logger.debug("Query Spaces: " + accountingQuerySpaces.getSpaces());
+
+ SortedMap> spaceSM;
+
+ Spaces spaces = accountingQuerySpaces.getSpaces();
+
+ if (spaces == null) {
+ throw new ServiceException(
+ "Error retrieving Spaces param: null!");
+ }
+
+ spaceSM = apq.getSpaceTimeSeries(accountingQuerySpaces.getType(),
+ accountingQuerySpaces.getTemporalConstraint(),
+ accountingQuerySpaces.getFilters(), spaces.getSpacesList());
+
+ if (spaceSM == null) {
+ throw new ServiceException(
+ "Error retrieving info for space: sorted map is null!");
+ }
+
+ logger.debug("SpaceSM: " + spaceSM);
+
+ SeriesResponseBuilder seriesResponseBuilder = getSeriesResponseBuilder(
+ accountingType, spaces, spaceSM);
+
+ SeriesResponseDirector seriesResponseDirector = new SeriesResponseDirector();
+ seriesResponseDirector
+ .setSeriesResponseBuilder(seriesResponseBuilder);
+ seriesResponseDirector.constructSeriesResponse();
+ SeriesResponse seriesResponse = seriesResponseDirector
+ .getSeriesResponse();
+
+ if (seriesResponse == null) {
+ throw new ServiceException("Error creating series response!");
+ }
+ logger.debug("SeriesResponse Created: " + seriesResponse);
+ return seriesResponse;
+
+ } catch (Throwable e) {
+ logger.error("Error in AccountingCommandSpace(): "
+ + e.getLocalizedMessage());
+ e.printStackTrace();
+ throw new ServiceException("No data available!");
+
+ }
+ }
+
+ private SeriesResponseBuilder getSeriesResponseBuilder(
+ AccountingType accountingType, Spaces spaces,
+ SortedMap> spaceSM)
+ throws ServiceException {
+ if (accountingType == null) {
+ throw new ServiceException("Error accounting type is null");
+ }
+
+ switch (accountingType) {
+ case SPACE:
+ return new SeriesResponse4SpaceSpaces(spaces, spaceSM);
+ default:
+ throw new ServiceException("Error request type is unknow!");
+
+ }
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Space.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Space.java
new file mode 100644
index 0000000..db73245
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Space.java
@@ -0,0 +1,106 @@
+package org.gcube.portlets.admin.accountingmanager.server.amservice.query;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+import org.gcube.accounting.analytics.Filter;
+import org.gcube.accounting.analytics.TemporalConstraint;
+import org.gcube.accounting.datamodel.aggregation.AggregatedStorageStatusRecord;
+import org.gcube.portlets.admin.accountingmanager.server.amservice.PeriodModeMap;
+import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilter;
+import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilterSpaces;
+import org.gcube.portlets.admin.accountingmanager.shared.data.query.SeriesRequest;
+import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Accounting Query 4 Space
+ *
+ * @author "Giancarlo Panichi" email: g.panichi@isti.cnr.it
+ *
+ */
+public class AccountingQuery4Space extends AccountingQueryBuilder {
+ protected static Logger logger = LoggerFactory
+ .getLogger(AccountingQuery4Space.class);
+ private SeriesRequest seriesRequest;
+
+ public AccountingQuery4Space(SeriesRequest seriesRequest) {
+ this.seriesRequest = seriesRequest;
+ }
+
+ @Override
+ public void buildOpEx() throws ServiceException {
+
+ Calendar startCalendar = GregorianCalendar
+ .getInstance(TemporalConstraint.DEFAULT_TIME_ZONE);
+ try {
+ startCalendar.setTime(sdf.parse(seriesRequest.getAccountingPeriod()
+ .getStartDate()));
+ } catch (ParseException e) {
+ e.printStackTrace();
+ throw new ServiceException("Start Date not valid!");
+ }
+
+ Calendar endCalendar = GregorianCalendar
+ .getInstance(TemporalConstraint.DEFAULT_TIME_ZONE);
+ try {
+ endCalendar.setTime(sdf.parse(seriesRequest.getAccountingPeriod()
+ .getEndDate()));
+ } catch (ParseException e) {
+ e.printStackTrace();
+ throw new ServiceException("End Date not valid!");
+ }
+
+ endCalendar.set(GregorianCalendar.HOUR_OF_DAY, 23);
+ endCalendar.set(GregorianCalendar.MINUTE, 59);
+ endCalendar.set(GregorianCalendar.SECOND, 59);
+ endCalendar.set(GregorianCalendar.MILLISECOND, 999);
+
+ TemporalConstraint temporalConstraint = new TemporalConstraint(
+ startCalendar.getTimeInMillis(), endCalendar.getTimeInMillis(),
+ PeriodModeMap.getMode(seriesRequest.getAccountingPeriod()
+ .getPeriod()));
+
+ ArrayList filters = null;
+ ArrayList accountingFilters = null;
+ AccountingQuery invocation = null;
+
+ if (seriesRequest != null
+ && seriesRequest.getAccountingFilterDefinition() != null) {
+ if (seriesRequest.getAccountingFilterDefinition() instanceof AccountingFilterSpaces) {
+ AccountingFilterSpaces accountingFilterSpace = (AccountingFilterSpaces) seriesRequest
+ .getAccountingFilterDefinition();
+ accountingFilters = accountingFilterSpace.getFilters();
+ filters = new ArrayList();
+ if (accountingFilters != null) {
+ for (AccountingFilter accountigFilters : accountingFilters) {
+ Filter filter = new Filter(accountigFilters
+ .getFilterKey().getKey(),
+ accountigFilters.getFilterValue());
+ filters.add(filter);
+ }
+ }
+ invocation = new AccountingQuerySpaces(
+ AggregatedStorageStatusRecord.class,
+ accountingFilterSpace.getSpaces(),
+ temporalConstraint, filters);
+
+ } else {
+ logger.error("Invalid Request: " + seriesRequest);
+ throw new ServiceException("Invalid Request!");
+
+ }
+
+ } else {
+ logger.error("Invalid Request: " + seriesRequest);
+ throw new ServiceException("Invalid Request!");
+ }
+
+ accountingQuerySpec.setOp(invocation);
+
+ }
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuerySpaces.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuerySpaces.java
new file mode 100644
index 0000000..cf2df68
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuerySpaces.java
@@ -0,0 +1,73 @@
+package org.gcube.portlets.admin.accountingmanager.server.amservice.query;
+
+import java.util.ArrayList;
+
+import org.gcube.accounting.analytics.Filter;
+import org.gcube.accounting.analytics.TemporalConstraint;
+import org.gcube.accounting.datamodel.AggregatedUsageRecord;
+import org.gcube.portlets.admin.accountingmanager.shared.data.ChartType;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
+
+/**
+ *
+ * @author giancarlo email: g.panichi@isti.cnr.it
+ *
+ */
+public class AccountingQuerySpaces extends AccountingQuery {
+ private Class extends AggregatedUsageRecord, ?>> type;
+ private Spaces spaces;
+ private TemporalConstraint temporalConstraint;
+ private ArrayList filters;
+
+ public AccountingQuerySpaces(
+ Class extends AggregatedUsageRecord, ?>> type, Spaces spaces,
+ TemporalConstraint temporalConstraint, ArrayList filters) {
+ super();
+ chartType = ChartType.Spaces;
+ this.type = type;
+ this.temporalConstraint = temporalConstraint;
+ this.filters = filters;
+ this.spaces = spaces;
+ }
+
+ public Class extends AggregatedUsageRecord, ?>> getType() {
+ return type;
+ }
+
+ public void setType(Class extends AggregatedUsageRecord, ?>> type) {
+ this.type = type;
+ }
+
+ public TemporalConstraint getTemporalConstraint() {
+ return temporalConstraint;
+ }
+
+ public void setTemporalConstraint(TemporalConstraint temporalConstraint) {
+ this.temporalConstraint = temporalConstraint;
+ }
+
+ public ArrayList getFilters() {
+ return filters;
+ }
+
+ public void setFilters(ArrayList filters) {
+ this.filters = filters;
+ }
+
+ public Spaces getSpaces() {
+ return spaces;
+ }
+
+ public void setSpaces(Spaces spaces) {
+ this.spaces = spaces;
+ }
+
+ @Override
+ public String toString() {
+ return "AccountingQuerySpaces [type=" + type + ", spaces=" + spaces
+ + ", temporalConstraint=" + temporalConstraint + ", filters="
+ + filters + "]";
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/response/SeriesResponse4SpaceSpaces.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/response/SeriesResponse4SpaceSpaces.java
new file mode 100644
index 0000000..b26efd8
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/response/SeriesResponse4SpaceSpaces.java
@@ -0,0 +1,78 @@
+package org.gcube.portlets.admin.accountingmanager.server.amservice.response;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.SortedMap;
+
+import org.gcube.accounting.analytics.Filter;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.SeriesSpace;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.space.SeriesSpaceSpaces;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.space.SeriesSpaceData;
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.space.SeriesSpaceDataSpaces;
+import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Categories Series Response 4 Space
+ *
+ * @author "Giancarlo Panichi" email: g.panichi@isti.cnr.it
+ *
+ */
+public class SeriesResponse4SpaceSpaces extends SeriesResponseBuilder {
+ protected static Logger logger = LoggerFactory
+ .getLogger(SeriesResponse4SpaceSpaces.class);
+ private Spaces spaces;
+ private SortedMap> spaceSM;
+
+ public SeriesResponse4SpaceSpaces(Spaces spaces,
+ SortedMap> spaceSM) {
+ this.spaces = spaces;
+ this.spaceSM = spaceSM;
+ }
+
+ @Override
+ public void buildSeriesResponse() throws ServiceException {
+ try {
+ if (spaceSM == null || spaceSM.isEmpty()) {
+ logger.error("Error creating series for space accounting: No data available!");
+ throw new ServiceException("No data available!");
+ }
+
+ ArrayList seriesSpaceDataContextList = new ArrayList<>();
+
+ for (Filter spaceValue : spaceSM.keySet()) {
+
+ ArrayList series = new ArrayList<>();
+ SortedMap infos = spaceSM.get(spaceValue);
+ for (Calendar calendar : infos.keySet()) {
+ Long value = infos.get(calendar);
+
+ series.add(new SeriesSpaceData(calendar.getTime(), value));
+
+ }
+ SeriesSpaceDataSpaces seriesSpaceDataContext = new SeriesSpaceDataSpaces(
+ spaceValue.getValue(), series);
+ seriesSpaceDataContextList.add(seriesSpaceDataContext);
+
+ }
+
+ SeriesSpaceSpaces seriesSpaceContext = new SeriesSpaceSpaces(
+ spaces, seriesSpaceDataContextList);
+ SeriesSpace seriesSpace = new SeriesSpace(seriesSpaceContext);
+
+ seriesResponseSpec.setSr(seriesSpace);
+
+ } catch (Throwable e) {
+ logger.error("Error creating series for space accounting categories chart: "
+ + e.getLocalizedMessage());
+ e.printStackTrace();
+ throw new ServiceException(
+ "Error creating series for space accounting categories chart: "
+ + e.getLocalizedMessage());
+ }
+
+ }
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/is/BuildEnableTabs.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/is/BuildEnableTabs.java
index 3f87818..4241d74 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/is/BuildEnableTabs.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/is/BuildEnableTabs.java
@@ -21,24 +21,30 @@ public class BuildEnableTabs {
private static Logger logger = LoggerFactory
.getLogger(BuildEnableTabs.class);
- public static EnableTabs build(String scope) throws ServiceException {
+ public static EnableTabs build(String scope, boolean isRootScope)
+ throws ServiceException {
ArrayList enableTabList = new ArrayList<>();
-
+
if (Constants.DEBUG_MODE) {
- EnableTab enableTabData = new EnableTab(
+ EnableTab enableTabDataSpace = new EnableTab(AccountingType.SPACE,
+ null);
+ enableTabList.add(enableTabDataSpace);
+ EnableTab enableTabDataService = new EnableTab(
AccountingType.SERVICE, null);
- enableTabList.add(enableTabData);
+ enableTabList.add(enableTabDataService);
+
} else {
- EnableTabsJAXB enableTabsJAXB=null;
+ EnableTabsJAXB enableTabsJAXB = null;
try {
- enableTabsJAXB= InformationSystemUtils
- .retrieveEnableTab(scope);
- } catch(ServiceException e){
+ enableTabsJAXB = InformationSystemUtils
+ .retrieveEnableTab(scope);
+ } catch (ServiceException e) {
logger.info(e.getLocalizedMessage());
}
-
+
logger.debug("Enable Tabs: " + enableTabsJAXB);
- if (enableTabsJAXB != null && enableTabsJAXB.getEnableTabs() != null
+ if (enableTabsJAXB != null
+ && enableTabsJAXB.getEnableTabs() != null
&& !enableTabsJAXB.getEnableTabs().isEmpty()) {
AccountingType type;
for (EnableTabJAXB enableTab : enableTabsJAXB.getEnableTabs()) {
@@ -49,29 +55,43 @@ public class BuildEnableTabs {
&& !enableTab.getRoles().isEmpty()) {
ArrayList enableRoles = new ArrayList<>();
enableRoles.addAll(enableTab.getRoles());
- enableTabList.add(new EnableTab(type,
- enableRoles));
+ enableTabList.add(new EnableTab(type, enableRoles));
} else {
- enableTabList
- .add(new EnableTab(type, null));
+ enableTabList.add(new EnableTab(type, null));
}
}
}
} else {
- logger.info("AccountingManager use default configuration for scope: "+scope);
+ logger.info("AccountingManager use default configuration for scope: "
+ + scope);
EnableTab enableTabDataService = new EnableTab(
AccountingType.SERVICE, null);
enableTabList.add(enableTabDataService);
EnableTab enableTabDataStorage = new EnableTab(
AccountingType.STORAGE, null);
enableTabList.add(enableTabDataStorage);
- EnableTab enableTabDataJob = new EnableTab(
- AccountingType.JOB, null);
+ EnableTab enableTabDataJob = new EnableTab(AccountingType.JOB,
+ null);
enableTabList.add(enableTabDataJob);
-
+
}
}
+ if (isRootScope) {
+ boolean spaceTabPresent = false;
+ for (EnableTab enableTab : enableTabList) {
+ if (enableTab.getAccountingType().compareTo(
+ AccountingType.SPACE) == 0) {
+ spaceTabPresent = true;
+ break;
+ }
+ }
+ if (!spaceTabPresent) {
+ EnableTab enableTabDataSpace = new EnableTab(
+ AccountingType.SPACE, null);
+ enableTabList.add(enableTabDataSpace);
+ }
+ }
EnableTabs enableTabs = new EnableTabs(enableTabList);
logger.debug("EnableTabsData: " + enableTabs);
return enableTabs;
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/AccountingFilterSpaces.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/AccountingFilterSpaces.java
new file mode 100644
index 0000000..f2ee5e7
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/AccountingFilterSpaces.java
@@ -0,0 +1,74 @@
+package org.gcube.portlets.admin.accountingmanager.shared.data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ */
+public class AccountingFilterSpaces extends AccountingFilterDefinition
+ implements Serializable {
+
+ private static final long serialVersionUID = -6805006183397381154L;
+ private Spaces spaces;
+ private ArrayList filters;
+
+ public AccountingFilterSpaces() {
+ super();
+ this.chartType = ChartType.Spaces;
+ spaces = null;
+ filters = null;
+
+ }
+
+ /**
+ *
+ * @param spaces
+ */
+ public AccountingFilterSpaces(Spaces spaces) {
+ super();
+ chartType = ChartType.Spaces;
+ this.spaces = spaces;
+ this.filters = null;
+ }
+
+ /**
+ *
+ * @param spaces
+ * @param filters
+ */
+ public AccountingFilterSpaces(Spaces spaces,
+ ArrayList filters) {
+ super();
+ chartType = ChartType.Spaces;
+ this.spaces = spaces;
+ this.filters = filters;
+
+ }
+
+ public Spaces getSpaces() {
+ return spaces;
+ }
+
+ public void setSpaces(Spaces spaces) {
+ this.spaces = spaces;
+ }
+
+ public ArrayList getFilters() {
+ return filters;
+ }
+
+ public void setFilters(ArrayList filters) {
+ this.filters = filters;
+ }
+
+ @Override
+ public String toString() {
+ return "AccountingFilterSpaces [spaces=" + spaces + ", filters="
+ + filters + "]";
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/AccountingType.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/AccountingType.java
index 67add99..b6935a5 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/AccountingType.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/AccountingType.java
@@ -14,7 +14,8 @@ public enum AccountingType {
SERVICE,
PORTLET,
TASK,
- JOB;
+ JOB,
+ SPACE;
public static AccountingType getTypeFromString(String value){
for(AccountingType a:values()){
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/ChartType.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/ChartType.java
index b339d0e..efa5bd0 100644
--- a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/ChartType.java
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/ChartType.java
@@ -14,7 +14,7 @@ import java.util.List;
public enum ChartType {
- Basic("Basic"),Top("Top"), Context("Context");
+ Basic("Basic"),Top("Top"), Context("Context"), Spaces("Spaces");
/**
*
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/Genres.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/Genres.java
new file mode 100644
index 0000000..77de56d
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/Genres.java
@@ -0,0 +1,39 @@
+package org.gcube.portlets.admin.accountingmanager.shared.data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ */
+public class Genres implements Serializable {
+
+ private static final long serialVersionUID = -1704075020370137961L;
+ private ArrayList genresList;
+
+ public Genres() {
+ super();
+ }
+
+ public Genres(ArrayList genresList) {
+ super();
+ this.genresList = genresList;
+ }
+
+ public ArrayList getGenresList() {
+ return genresList;
+ }
+
+ public void setGenresList(ArrayList genresList) {
+ this.genresList = genresList;
+ }
+
+ @Override
+ public String toString() {
+ return "Genres [genresList=" + genresList + "]";
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/GenresData.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/GenresData.java
new file mode 100644
index 0000000..5b51b98
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/GenresData.java
@@ -0,0 +1,46 @@
+package org.gcube.portlets.admin.accountingmanager.shared.data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ */
+public class GenresData implements Serializable {
+
+ private static final long serialVersionUID = 719740085818609829L;
+ private String genre;
+
+ public GenresData() {
+ super();
+ }
+
+ public GenresData(String genre) {
+ super();
+ this.genre = genre;
+ }
+
+ public String getGenre() {
+ return genre;
+ }
+
+ public void setGenre(String genre) {
+ this.genre = genre;
+ }
+
+ public String getLabel() {
+ return genre;
+ }
+
+ public void setLabel(String genre) {
+ this.genre = genre;
+ }
+
+ @Override
+ public String toString() {
+ return "GenresData [genre=" + genre + "]";
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/Spaces.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/Spaces.java
new file mode 100644
index 0000000..27e3da5
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/Spaces.java
@@ -0,0 +1,39 @@
+package org.gcube.portlets.admin.accountingmanager.shared.data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ */
+public class Spaces implements Serializable {
+
+ private static final long serialVersionUID = -1704075020370137961L;
+ private ArrayList spacesList;
+
+ public Spaces() {
+ super();
+ }
+
+ public Spaces(ArrayList spacesList) {
+ super();
+ this.spacesList = spacesList;
+ }
+
+ public ArrayList getSpacesList() {
+ return spacesList;
+ }
+
+ public void setSpacesList(ArrayList spacesList) {
+ this.spacesList = spacesList;
+ }
+
+ @Override
+ public String toString() {
+ return "Spaces [spacesList=" + spacesList + "]";
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/SpacesData.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/SpacesData.java
new file mode 100644
index 0000000..ae3b097
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/SpacesData.java
@@ -0,0 +1,46 @@
+package org.gcube.portlets.admin.accountingmanager.shared.data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ */
+public class SpacesData implements Serializable {
+
+ private static final long serialVersionUID = 719740085818609829L;
+ private String space;
+
+ public SpacesData() {
+ super();
+ }
+
+ public SpacesData(String space) {
+ super();
+ this.space = space;
+ }
+
+ public String getSpace() {
+ return space;
+ }
+
+ public void setSpace(String space) {
+ this.space = space;
+ }
+
+ public String getLabel() {
+ return space;
+ }
+
+ public void setLabel(String space) {
+ this.space = space;
+ }
+
+ @Override
+ public String toString() {
+ return "SpacesData [space=" + space + "]";
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/SeriesSpace.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/SeriesSpace.java
new file mode 100644
index 0000000..dda4dce
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/SeriesSpace.java
@@ -0,0 +1,40 @@
+package org.gcube.portlets.admin.accountingmanager.shared.data.response;
+
+import org.gcube.portlets.admin.accountingmanager.shared.data.response.space.SeriesSpaceDefinition;
+
+/**
+ *
+ * @author giancarlo email: g.panichi@isti.cnr.it
+ *
+ */
+public class SeriesSpace extends SeriesResponse {
+
+ private static final long serialVersionUID = -1311805875898959881L;
+ private SeriesSpaceDefinition serieSpaceDefinition;
+
+ public SeriesSpace() {
+ super();
+ }
+
+ public SeriesSpace(SeriesSpaceDefinition serieSpaceDefinition) {
+ super();
+ this.serieSpaceDefinition = serieSpaceDefinition;
+ }
+
+ public SeriesSpaceDefinition getSerieSpaceDefinition() {
+ return serieSpaceDefinition;
+ }
+
+ public void setSerieSpaceDefinition(
+ SeriesSpaceDefinition serieSpaceDefinition) {
+ this.serieSpaceDefinition = serieSpaceDefinition;
+ }
+
+ @Override
+ public String toString() {
+ return "SeriesSpace [serieSpaceDefinition=" + serieSpaceDefinition
+ + "]";
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceData.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceData.java
new file mode 100644
index 0000000..010e497
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceData.java
@@ -0,0 +1,50 @@
+package org.gcube.portlets.admin.accountingmanager.shared.data.response.space;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ * @author giancarlo email: g.panichi@isti.cnr.it
+ *
+ */
+public class SeriesSpaceData implements Serializable {
+
+ private static final long serialVersionUID = -3946372711632911008L;
+ private Date date;
+ private Long dataVolume;
+
+ public SeriesSpaceData() {
+ super();
+ }
+
+ public SeriesSpaceData(Date date, Long dataVolume) {
+ super();
+ this.date = date;
+ this.dataVolume = dataVolume;
+ }
+
+ public Date getDate() {
+ return date;
+ }
+
+ public void setDate(Date date) {
+ this.date = date;
+ }
+
+ public Long getDataVolume() {
+ return dataVolume;
+ }
+
+ public void setDataVolume(Long dataVolume) {
+ this.dataVolume = dataVolume;
+ }
+
+ @Override
+ public String toString() {
+ return "SeriesSpaceData [date=" + date + ", dataVolume=" + dataVolume
+ + "]";
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceDataSpaces.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceDataSpaces.java
new file mode 100644
index 0000000..fdc86cb
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceDataSpaces.java
@@ -0,0 +1,55 @@
+package org.gcube.portlets.admin.accountingmanager.shared.data.response.space;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+
+/**
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ */
+public class SeriesSpaceDataSpaces implements Serializable {
+
+ private static final long serialVersionUID = 1601335458514606805L;
+ private String space;
+ private ArrayList series;
+
+ public SeriesSpaceDataSpaces() {
+ super();
+ }
+
+ /**
+ *
+ * @param space
+ * @param series
+ */
+ public SeriesSpaceDataSpaces(String space, ArrayList series) {
+ super();
+ this.space = space;
+ this.series = series;
+ }
+
+ public String getSpace() {
+ return space;
+ }
+
+ public void setSpace(String space) {
+ this.space = space;
+ }
+
+ public ArrayList getSeries() {
+ return series;
+ }
+
+ public void setSeries(ArrayList series) {
+ this.series = series;
+ }
+
+ @Override
+ public String toString() {
+ return "SeriesSpaceDataSpaces [space=" + space + ", series=" + series
+ + "]";
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceDefinition.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceDefinition.java
new file mode 100644
index 0000000..2947417
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceDefinition.java
@@ -0,0 +1,31 @@
+package org.gcube.portlets.admin.accountingmanager.shared.data.response.space;
+
+import java.io.Serializable;
+
+import org.gcube.portlets.admin.accountingmanager.shared.data.ChartType;
+
+/**
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ */
+public class SeriesSpaceDefinition implements Serializable {
+
+ private static final long serialVersionUID = -1371973741194014153L;
+ protected ChartType chartType;
+
+ public SeriesSpaceDefinition() {
+ super();
+ }
+
+ public ChartType getChartType() {
+ return chartType;
+ }
+
+ @Override
+ public String toString() {
+ return "SeriesSpaceDefinition [chartType=" + chartType + "]";
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceSpaces.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceSpaces.java
new file mode 100644
index 0000000..bdecb1f
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/response/space/SeriesSpaceSpaces.java
@@ -0,0 +1,58 @@
+package org.gcube.portlets.admin.accountingmanager.shared.data.response.space;
+
+import java.util.ArrayList;
+
+import org.gcube.portlets.admin.accountingmanager.shared.data.ChartType;
+import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
+
+/**
+ *
+ * @author Giancarlo Panichi email: g.panichi@isti.cnr.it
+ *
+ */
+public class SeriesSpaceSpaces extends SeriesSpaceDefinition {
+
+ private static final long serialVersionUID = -1704880534497695545L;
+ private Spaces spaces;
+ private ArrayList seriesSpaceDataCategoriesList;
+
+ public SeriesSpaceSpaces() {
+ super();
+ this.chartType = ChartType.Spaces;
+
+ }
+
+ public SeriesSpaceSpaces(Spaces spaces,
+ ArrayList seriesSpaceDataCategoriesList) {
+ super();
+ this.chartType = ChartType.Spaces;
+ this.spaces = spaces;
+ this.seriesSpaceDataCategoriesList = seriesSpaceDataCategoriesList;
+ }
+
+ public Spaces getSpaces() {
+ return spaces;
+ }
+
+ public void setSpaces(Spaces spaces) {
+ this.spaces = spaces;
+ }
+
+ public ArrayList getSeriesSpaceDataCategoriesList() {
+ return seriesSpaceDataCategoriesList;
+ }
+
+ public void setSeriesSpaceDataCategoriesList(
+ ArrayList seriesSpaceDataCategoriesList) {
+ this.seriesSpaceDataCategoriesList = seriesSpaceDataCategoriesList;
+ }
+
+ @Override
+ public String toString() {
+ return "SeriesSpaceSpaces [spaces=" + spaces
+ + ", seriesSpaceDataCategoriesList="
+ + seriesSpaceDataCategoriesList + "]";
+ }
+
+}
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 05133b2..75f5a18 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
@@ -49,10 +49,11 @@
name="locale" values="es" /> -->
-
+ /> -->
diff --git a/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_128.png b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_128.png
new file mode 100644
index 0000000..df774d9
Binary files /dev/null and b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_128.png differ
diff --git a/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_24.png b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_24.png
new file mode 100644
index 0000000..a36181f
Binary files /dev/null and b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_24.png differ
diff --git a/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_32.png b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_32.png
new file mode 100644
index 0000000..c440fe0
Binary files /dev/null and b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_32.png differ
diff --git a/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_48.png b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_48.png
new file mode 100644
index 0000000..182f498
Binary files /dev/null and b/src/main/resources/org/gcube/portlets/admin/accountingmanager/client/resource/accounting-space_48.png differ
diff --git a/src/main/webapp/WEB-INF/liferay-portlet.xml b/src/main/webapp/WEB-INF/liferay-portlet.xml
index f9887cd..96afd88 100644
--- a/src/main/webapp/WEB-INF/liferay-portlet.xml
+++ b/src/main/webapp/WEB-INF/liferay-portlet.xml
@@ -8,5 +8,6 @@
false
false
false
+ AccountingManagerCSS