ref 8397:Accounting Manager - Add the Spaces management

https://support.d4science.org/issues/8397

Added the Spaces management

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/admin/accounting-manager@148337 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Giancarlo Panichi 2017-05-05 15:07:30 +00:00
parent 7e1f1bbcbd
commit 62be662e2f
51 changed files with 2763 additions and 261 deletions

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/accounting-manager-1.6.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<classpathentry kind="src" output="target/accounting-manager-1.7.0-SNAPSHOT/WEB-INF/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/accounting-manager-1.6.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<classpathentry excluding="**" kind="src" output="target/accounting-manager-1.7.0-SNAPSHOT/WEB-INF/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
@ -45,5 +45,5 @@
</classpathentry>
<classpathentry kind="lib" path="/home/giancarlo/gwt/gwt-2.6.1/validation-api-1.0.0.GA.jar" sourcepath="/home/giancarlo/gwt/gwt-2.6.1/validation-api-1.0.0.GA-sources.jar"/>
<classpathentry kind="lib" path="/home/giancarlo/gwt/gwt-2.6.1/validation-api-1.0.0.GA-sources.jar"/>
<classpathentry kind="output" path="target/accounting-manager-1.6.0-SNAPSHOT/WEB-INF/classes"/>
<classpathentry kind="output" path="target/accounting-manager-1.7.0-SNAPSHOT/WEB-INF/classes"/>
</classpath>

View File

@ -1,4 +1,8 @@
<ReleaseNotes>
<Changeset component="org.gcube.portlets.admin.accounting-manager.1-7-0"
date="2017-06-12">
<Change>Added Spaces chart [Ticket #8397]</Change>
</Changeset>
<Changeset component="org.gcube.portlets.admin.accounting-manager.1-6-0"
date="2017-02-28">
<Change>Fixed download in case of multitab on different scopes</Change>

View File

@ -13,7 +13,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.gcube.portlets.admin</groupId>
<artifactId>accounting-manager</artifactId>
<version>1.6.0-SNAPSHOT</version>
<version>1.7.0-SNAPSHOT</version>
<packaging>war</packaging>

View File

@ -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<Spaces>() {
@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;

View File

@ -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<AccountingFilter> gridFilter;
private ListStore<AccountingFilter> storeFilter;
private Grid<ContextData> gridContext;
private ListStore<ContextData> storeContext;
private CheckBoxSelectionModel<ContextData> smContext;
private Grid<GenresData> gridGenres;
private ListStore<GenresData> storeGenres;
private CheckBoxSelectionModel<GenresData> smGenres;
private ColumnConfig<GenresData, String> labelGenresCol;
private boolean addStatus;
private AccountingClientStateData accountingStateData;
private ListStore<FilterKey> storeComboFilterKey;
@ -117,6 +120,7 @@ public class ActiveFiltersPanel extends SimpleContainer {
private GridRowEditing<AccountingFilter> editing;
private TextButton addButton;
private int seq;
private FieldLabel comboChartTypeLabel;
private ListStore<ChartType> storeComboChartType;
private ComboBox<ChartType> comboChartType;
private ListStore<FilterKey> storeComboTopFilterKey;
@ -415,7 +419,6 @@ public class ActiveFiltersPanel extends SimpleContainer {
}
});
storeComboChartType.addAll(ChartType.asList());
LabelProvider<ChartType> comboChartTypeLabelProvider = new LabelProvider<ChartType>() {
@ -428,16 +431,16 @@ public class ActiveFiltersPanel extends SimpleContainer {
};
// /Grid Context
ContextDataProperties propsContextData = GWT
.create(ContextDataProperties.class);
GenresDataProperties propsGenresData = GWT
.create(GenresDataProperties.class);
IdentityValueProvider<ContextData> identity = new IdentityValueProvider<ContextData>();
smContext = new CheckBoxSelectionModel<ContextData>(identity);
IdentityValueProvider<GenresData> identity = new IdentityValueProvider<GenresData>();
smGenres = new CheckBoxSelectionModel<GenresData>(identity);
ColumnConfig<ContextData, String> labelCol = new ColumnConfig<ContextData, String>(
propsContextData.label(), 356, "Scope");
labelGenresCol = new ColumnConfig<GenresData, String>(
propsGenresData.label(), 356, "Genres");
labelCol.setCell(new AbstractCell<String>() {
labelGenresCol.setCell(new AbstractCell<String>() {
@Override
public void render(Context context, String value, SafeHtmlBuilder sb) {
@ -450,26 +453,26 @@ public class ActiveFiltersPanel extends SimpleContainer {
});
List<ColumnConfig<ContextData, ?>> lContext = new ArrayList<ColumnConfig<ContextData, ?>>();
lContext.add(smContext.getColumn());
lContext.add(labelCol);
ColumnModel<ContextData> cmContextData = new ColumnModel<ContextData>(
lContext);
List<ColumnConfig<GenresData, ?>> lGenres = new ArrayList<ColumnConfig<GenresData, ?>>();
lGenres.add(smGenres.getColumn());
lGenres.add(labelGenresCol);
ColumnModel<GenresData> cmGenresData = new ColumnModel<GenresData>(
lGenres);
storeContext = new ListStore<ContextData>(propsContextData.id());
storeGenres = new ListStore<GenresData>(propsGenresData.id());
gridContext = new Grid<ContextData>(storeContext, cmContextData);
gridGenres = new Grid<GenresData>(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<FilterKey>(
@ -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<ChartType> 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<ChartType> 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<String> contexts = accountingStateData
.getAvailableContext().getContexts();
ArrayList<ContextData> ctx = new ArrayList<ContextData>();
ArrayList<GenresData> genres = new ArrayList<GenresData>();
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<ContextData> selected = new ArrayList<>();
ArrayList<GenresData> 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<String> contexts = accountingStateData.getAvailableContext()
.getContexts();
ArrayList<ContextData> ctx = new ArrayList<ContextData>();
ArrayList<GenresData> genres = new ArrayList<GenresData>();
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<String> spacesList = accountingStateData
.getAvailableSpaces().getSpacesList();
ArrayList<GenresData> genres = new ArrayList<GenresData>();
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<GenresData> 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<AccountingFilter> 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<String> spaces = accountingStateData.getAvailableSpaces()
.getSpacesList();
ArrayList<GenresData> genres = new ArrayList<GenresData>();
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<String> contextsSelected = new ArrayList<String>();
if (storeContext != null && storeContext.size() > 0
&& smContext != null) {
List<ContextData> selected = smContext.getSelectedItems();
for (ContextData cd : selected) {
contextsSelected.add(cd.getContextData());
if (storeGenres != null && storeGenres.size() > 0 && smGenres != null) {
List<GenresData> 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<String> spacesSelected = new ArrayList<String>();
if (storeGenres != null && storeGenres.size() > 0 && smGenres != null) {
List<GenresData> selected = smGenres.getSelectedItems();
for (GenresData cd : selected) {
spacesSelected.add(cd.getGenre());
}
}
Spaces spaces = new Spaces(spacesSelected);
List<AccountingFilter> filtersActives = storeFilter.getAll();
ArrayList<AccountingFilter> filtersReady = new ArrayList<AccountingFilter>();
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<AccountingFilter> 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();

View File

@ -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;
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
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;
}
}
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
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<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
onDownloadCSV();
}
});
downloadXMLItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
onDownloadXML();
}
});
downloadJSONItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
onDownloadJSON();
}
});
downloadPNGItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
String id = highchartsLayoutPanel.getElement().getId();
onDownloadPNG(id);
}
});
downloadJPGItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
String id = highchartsLayoutPanel.getElement().getId();
onDownloadJPG(id);
}
});
downloadPDFItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
String id = highchartsLayoutPanel.getElement().getId();
onDownloadPDF(id);
}
});
downloadSVGItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> 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<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
unitMeasure = ByteUnitMeasure.getKiloByteDimForStorage();
unitMeasureLabel = ByteUnitMeasure.kB;
unitButton.setIcon(AccountingManagerResources.INSTANCE
.accountingUnitkB24());
updateChart();
}
});
MBItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
unitMeasure = ByteUnitMeasure.getMegaByteDimForStorage();
unitMeasureLabel = ByteUnitMeasure.MB;
unitButton.setIcon(AccountingManagerResources.INSTANCE
.accountingUnitMB24());
updateChart();
}
});
GBItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> event) {
unitMeasure = ByteUnitMeasure.getGigaByteDimForStorage();
unitMeasureLabel = ByteUnitMeasure.GB;
unitButton.setIcon(AccountingManagerResources.INSTANCE
.accountingUnitGB24());
updateChart();
}
});
TBItem.addSelectionHandler(new SelectionHandler<Item>() {
@Override
public void onSelection(SelectionEvent<Item> 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> 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> 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<Long> 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<Data> 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<ChartDateTimeData> 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<Data> 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> 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<Data> 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) + "\"" + " }" + " }" + "}]";
}
}
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
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<SpaceChartMeasure> asList() {
List<SpaceChartMeasure> list = Arrays.asList(values());
return list;
}
}

View File

@ -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

View File

@ -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</a>
*
*/
public interface ContextDataProperties extends PropertyAccess<ContextData> {
@Path("contextData")
ModelKeyProvider<org.gcube.portlets.admin.accountingmanager.shared.data.ContextData> id();
public interface GenresDataProperties extends PropertyAccess<GenresData> {
@Path("genre")
ModelKeyProvider<GenresData> id();
ValueProvider<ContextData, String> label();
ValueProvider<GenresData, String> label();
}

View File

@ -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();

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -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;
}

View File

@ -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<Long> callback);
/**
* Retrieve Accounting Series in Cache
*
@ -67,16 +67,16 @@ public interface AccountingManagerServiceAsync {
*/
void getSeries(AccountingType accountingType, SeriesRequest seriesRequest,
AsyncCallback<String> callback);
/**
* Accounting Request Monitor
*
* @param operationId
* @param callback
*/
void operationMonitor(String operationId, AsyncCallback<SeriesResponse> callback);
void operationMonitor(String operationId,
AsyncCallback<SeriesResponse> callback);
/**
*
* @param accountingType
@ -95,6 +95,12 @@ public interface AccountingManagerServiceAsync {
*/
void getContext(AsyncCallback<Context> callback);
/**
*
* @param callback
*/
void getSpaces(AsyncCallback<Spaces> callback);
/**
*
* @param itemDescription
@ -118,14 +124,12 @@ public interface AccountingManagerServiceAsync {
* return the list of enabled tabs
*/
void getEnableTabs(AsyncCallback<EnableTabs> callback);
/**
* Check if the user is in root scope
*
* @param callback
*/
void isRootScope(AsyncCallback<Boolean> callback);
}

View File

@ -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<FilterKey> 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<FilterKey> 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 + "]";
}
}

View File

@ -29,11 +29,12 @@ public class AccountingClientCallable implements Callable<TaskStatus> {
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<TaskStatus> {
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<TaskStatus> {
+ taskRequest.getAccountingType().name()
+ "_" + taskRequest.getSeriesRequest().toString());
accountingCache.putSeries(key, seriesResponse);
AccountingStateData accountingStateData = new AccountingStateData(
@ -130,6 +132,6 @@ public class AccountingClientCallable implements Callable<TaskStatus> {
+ e.getLocalizedMessage(), e);
return TaskStatus.ERROR;
}
}
}

View File

@ -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) {

View File

@ -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;

View File

@ -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!");

View File

@ -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;
}

View File

@ -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<FilterKey>();
}
ArrayList<FilterKey> filterKeys = new ArrayList<FilterKey>();
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<FilterValue>());
return filterValuesResponse;
}
ArrayList<FilterValue> filterValues = new ArrayList<FilterValue>();
@ -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> 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<SeriesSpaceDataSpaces> seriesSpaceDataSpacesList = new ArrayList<>();
ArrayList<String> 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<String> categoriesList = new ArrayList<>();
categoriesList.add("Space1");
categoriesList.add("Space2");
Spaces categories = new Spaces(categoriesList);
return categories;
}
}

View File

@ -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: <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
* @author Giancarlo Panichi email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class AccountingCommandGetFilterKeys implements AccountingCommand<ArrayList<FilterKey>> {
private static final Logger logger = LoggerFactory.getLogger(AccountingCommandGetFilterKeys.class);
public class AccountingCommandGetFilterKeys implements
AccountingCommand<ArrayList<FilterKey>> {
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<FilterKey> execute() throws ServiceException {
try {
@ -40,29 +42,34 @@ public class AccountingCommandGetFilterKeys implements AccountingCommand<ArrayLi
ArrayList<FilterKey> filterKeys = new ArrayList<FilterKey>();
SortedSet<String> 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 AccountingCommand<ArrayLi
logger.debug("List FilterKeys:" + filterKeys);
return filterKeys;
} catch (Throwable e) {
logger.error("Error in AccountingCommandGetFilterKeys(): " + e.getLocalizedMessage());
logger.error("Error in AccountingCommandGetFilterKeys(): "
+ e.getLocalizedMessage());
e.printStackTrace();
throw new ServiceException("No keys available!");

View File

@ -15,6 +15,7 @@ import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQueryFactory;
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.server.amservice.PeriodModeMap;
import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValue;
@ -125,6 +126,11 @@ public class AccountingCommandGetFilterValues implements
// .getFilterKey().getKey());
filterValuesResponse = new FilterValuesResponse(filterValues);
return filterValuesResponse;
case SPACE:
values = apq.getFilterValues(
AggregatedStorageStatusRecord.class, tc, filters,
filterValuesRequest.getFilterKey().getKey());
break;
default:
filterValuesResponse = new FilterValuesResponse(filterValues);
return filterValuesResponse;

View File

@ -0,0 +1,63 @@
package org.gcube.portlets.admin.accountingmanager.server.amservice.command;
import java.util.ArrayList;
import java.util.SortedSet;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQuery;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceQueryFactory;
import org.gcube.portlets.admin.accountingmanager.shared.data.Spaces;
import org.gcube.portlets.admin.accountingmanager.shared.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Giancarlo Panichi email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class AccountingCommandGetSpaces implements
AccountingCommand<Spaces> {
private static final Logger logger = LoggerFactory
.getLogger(AccountingCommandGetSpaces.class);
public AccountingCommandGetSpaces() {
}
@Override
public Spaces execute() throws ServiceException {
try {
logger.debug("getSpaces()");
SortedSet<String> keys = null;
AccountingPersistenceQuery apq = AccountingPersistenceQueryFactory
.getInstance();
keys = apq.getSpaceProvidersIds();
logger.debug("AccountingPersistenceQuery.getSpaces: " + keys);
if (keys == null || keys.isEmpty()) {
return null;
}
ArrayList<String> 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!");
}
}
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class AccountingCommandSpaces implements
AccountingCommand<SeriesResponse> {
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<Filter, SortedMap<Calendar, Long>> 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<Filter, SortedMap<Calendar, Long>> 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!");
}
}
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
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<Filter> filters = null;
ArrayList<AccountingFilter> 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<Filter>();
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);
}
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class AccountingQuerySpaces extends AccountingQuery {
private Class<? extends AggregatedUsageRecord<?, ?>> type;
private Spaces spaces;
private TemporalConstraint temporalConstraint;
private ArrayList<Filter> filters;
public AccountingQuerySpaces(
Class<? extends AggregatedUsageRecord<?, ?>> type, Spaces spaces,
TemporalConstraint temporalConstraint, ArrayList<Filter> 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<Filter> getFilters() {
return filters;
}
public void setFilters(ArrayList<Filter> 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 + "]";
}
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class SeriesResponse4SpaceSpaces extends SeriesResponseBuilder {
protected static Logger logger = LoggerFactory
.getLogger(SeriesResponse4SpaceSpaces.class);
private Spaces spaces;
private SortedMap<Filter, SortedMap<Calendar, Long>> spaceSM;
public SeriesResponse4SpaceSpaces(Spaces spaces,
SortedMap<Filter, SortedMap<Calendar, Long>> 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<SeriesSpaceDataSpaces> seriesSpaceDataContextList = new ArrayList<>();
for (Filter spaceValue : spaceSM.keySet()) {
ArrayList<SeriesSpaceData> series = new ArrayList<>();
SortedMap<Calendar, Long> 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());
}
}
}

View File

@ -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<EnableTab> 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<String> 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;

View File

@ -0,0 +1,74 @@
package org.gcube.portlets.admin.accountingmanager.shared.data;
import java.io.Serializable;
import java.util.ArrayList;
/**
*
* @author Giancarlo Panichi email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class AccountingFilterSpaces extends AccountingFilterDefinition
implements Serializable {
private static final long serialVersionUID = -6805006183397381154L;
private Spaces spaces;
private ArrayList<AccountingFilter> 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<AccountingFilter> 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<AccountingFilter> getFilters() {
return filters;
}
public void setFilters(ArrayList<AccountingFilter> filters) {
this.filters = filters;
}
@Override
public String toString() {
return "AccountingFilterSpaces [spaces=" + spaces + ", filters="
+ filters + "]";
}
}

View File

@ -14,7 +14,8 @@ public enum AccountingType {
SERVICE,
PORTLET,
TASK,
JOB;
JOB,
SPACE;
public static AccountingType getTypeFromString(String value){
for(AccountingType a:values()){

View File

@ -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");
/**
*

View File

@ -0,0 +1,39 @@
package org.gcube.portlets.admin.accountingmanager.shared.data;
import java.io.Serializable;
import java.util.ArrayList;
/**
*
* @author Giancarlo Panichi email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class Genres implements Serializable {
private static final long serialVersionUID = -1704075020370137961L;
private ArrayList<String> genresList;
public Genres() {
super();
}
public Genres(ArrayList<String> genresList) {
super();
this.genresList = genresList;
}
public ArrayList<String> getGenresList() {
return genresList;
}
public void setGenresList(ArrayList<String> genresList) {
this.genresList = genresList;
}
@Override
public String toString() {
return "Genres [genresList=" + genresList + "]";
}
}

View File

@ -0,0 +1,46 @@
package org.gcube.portlets.admin.accountingmanager.shared.data;
import java.io.Serializable;
/**
*
* @author Giancarlo Panichi email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
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 + "]";
}
}

View File

@ -0,0 +1,39 @@
package org.gcube.portlets.admin.accountingmanager.shared.data;
import java.io.Serializable;
import java.util.ArrayList;
/**
*
* @author Giancarlo Panichi email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class Spaces implements Serializable {
private static final long serialVersionUID = -1704075020370137961L;
private ArrayList<String> spacesList;
public Spaces() {
super();
}
public Spaces(ArrayList<String> spacesList) {
super();
this.spacesList = spacesList;
}
public ArrayList<String> getSpacesList() {
return spacesList;
}
public void setSpacesList(ArrayList<String> spacesList) {
this.spacesList = spacesList;
}
@Override
public String toString() {
return "Spaces [spacesList=" + spacesList + "]";
}
}

View File

@ -0,0 +1,46 @@
package org.gcube.portlets.admin.accountingmanager.shared.data;
import java.io.Serializable;
/**
*
* @author Giancarlo Panichi email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
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 + "]";
}
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
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
+ "]";
}
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
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
+ "]";
}
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class SeriesSpaceDataSpaces implements Serializable {
private static final long serialVersionUID = 1601335458514606805L;
private String space;
private ArrayList<SeriesSpaceData> series;
public SeriesSpaceDataSpaces() {
super();
}
/**
*
* @param space
* @param series
*/
public SeriesSpaceDataSpaces(String space, ArrayList<SeriesSpaceData> series) {
super();
this.space = space;
this.series = series;
}
public String getSpace() {
return space;
}
public void setSpace(String space) {
this.space = space;
}
public ArrayList<SeriesSpaceData> getSeries() {
return series;
}
public void setSeries(ArrayList<SeriesSpaceData> series) {
this.series = series;
}
@Override
public String toString() {
return "SeriesSpaceDataSpaces [space=" + space + ", series=" + series
+ "]";
}
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
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 + "]";
}
}

View File

@ -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: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class SeriesSpaceSpaces extends SeriesSpaceDefinition {
private static final long serialVersionUID = -1704880534497695545L;
private Spaces spaces;
private ArrayList<SeriesSpaceDataSpaces> seriesSpaceDataCategoriesList;
public SeriesSpaceSpaces() {
super();
this.chartType = ChartType.Spaces;
}
public SeriesSpaceSpaces(Spaces spaces,
ArrayList<SeriesSpaceDataSpaces> 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<SeriesSpaceDataSpaces> getSeriesSpaceDataCategoriesList() {
return seriesSpaceDataCategoriesList;
}
public void setSeriesSpaceDataCategoriesList(
ArrayList<SeriesSpaceDataSpaces> seriesSpaceDataCategoriesList) {
this.seriesSpaceDataCategoriesList = seriesSpaceDataCategoriesList;
}
@Override
public String toString() {
return "SeriesSpaceSpaces [spaces=" + spaces
+ ", seriesSpaceDataCategoriesList="
+ seriesSpaceDataCategoriesList + "]";
}
}

View File

@ -49,10 +49,11 @@
name="locale" values="es" /> <set-property name="locale" value="en, it, es"
/> <set-property-fallback name="locale" value="en" /> -->
<!-- <set-property name="log_ConsoleLogger" value="ENABLED" /> <set-property
<!--
<set-property name="log_ConsoleLogger" value="ENABLED" /> <set-property
name="log_DivLogger" value="ENABLED" /> <set-property name="log_GWTLogger"
value="ENABLED" /> <set-property name="log_SystemLogger" value="ENABLED"
/> -->
/> -->
<!-- Not in GWT 2.6 <set-property name="log_FirebugLogger" value="ENABLED"
/> -->

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -8,5 +8,6 @@
<layout-cacheable>false</layout-cacheable>
<instanceable>false</instanceable>
<ajaxable>false</ajaxable>
<css-class-wrapper>AccountingManagerCSS</css-class-wrapper>
</portlet>
</liferay-portlet-app>