From bd3e856520eebaf9fe6508320ea95a3fe717f9e0 Mon Sep 17 00:00:00 2001 From: "giancarlo.panichi" Date: Fri, 4 Sep 2015 16:17:13 +0000 Subject: [PATCH] 69: Create new Accounting Portlet Task-Url: https://support.d4science.org/issues/69 Fixed the behavior of the filters git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/admin/accounting-manager@118910 82a268e6-3cf1-43bd-a215-b396298e98cf --- pom.xml | 7 - .../client/filters/ActiveFiltersPanel.java | 80 +- .../charts/AccountingChart4Storage.java | 7 +- .../charts/service/VariableAxisChart.java | 4 +- .../AccountingFilterProperties.java | 3 +- .../server/AccountingManagerServiceImpl.java | 82 +- .../server/amservice/AccountingCaller.java | 2 +- .../query/AccountingQuery4Service.java | 2 +- .../query/AccountingQuery4Storage.java | 2 +- .../amservice/query/AccountingQuery4Task.java | 4 +- .../shared/data/AccountingFilter.java | 8 +- .../accountingmanager/accountingman.gwt.xml | 5 +- src/main/webapp/AccountingManager.html | 2 + .../jsp/AccountingManagerPortlet_view.jsp | 1 + .../accountingman/js/modules/exporting.js | 767 ++++++++++++++++++ 15 files changed, 913 insertions(+), 63 deletions(-) create mode 100644 src/main/webapp/accountingman/js/modules/exporting.js diff --git a/pom.xml b/pom.xml index d77fbcb..6ec7ecd 100644 --- a/pom.xml +++ b/pom.xml @@ -121,13 +121,6 @@ - - com.sencha.gxt diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/filters/ActiveFiltersPanel.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/filters/ActiveFiltersPanel.java index 051a75a..ce3485b 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/filters/ActiveFiltersPanel.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/filters/ActiveFiltersPanel.java @@ -58,6 +58,7 @@ import com.sencha.gxt.widget.core.client.event.SelectEvent; import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler; import com.sencha.gxt.widget.core.client.form.ComboBox; import com.sencha.gxt.widget.core.client.form.FieldSet; +import com.sencha.gxt.widget.core.client.form.StringComboBox; import com.sencha.gxt.widget.core.client.form.validator.EmptyValidator; import com.sencha.gxt.widget.core.client.grid.ColumnConfig; import com.sencha.gxt.widget.core.client.grid.ColumnModel; @@ -82,10 +83,12 @@ public class ActiveFiltersPanel extends SimpleContainer { private AccountingStateData accountingStateData; private ListStore storeComboFilterKey; private ComboBox comboFilterKey; - private ListStore storeComboFilterValue; + private ListStore storeComboFilterValue; + private StringComboBox comboFilterValue; private GridRowEditing editing; private TextButton addButton; private int seq; + public interface FilterKeyPropertiesCombo extends PropertyAccess { @@ -96,15 +99,18 @@ public class ActiveFiltersPanel extends SimpleContainer { } - public interface FilterValuePropertiesCombo extends - PropertyAccess { + - @Path("id") - ModelKeyProvider id(); - - LabelProvider value(); - - } + /* + * public interface FilterValuePropertiesCombo extends + * PropertyAccess { + * + * @Path("id") ModelKeyProvider id(); + * + * LabelProvider value(); + * + * } + */ interface FilterKeyTemplates extends XTemplates { @XTemplate("{value}") @@ -149,17 +155,29 @@ public class ActiveFiltersPanel extends SimpleContainer { } }); - ColumnConfig valueColumn = new ColumnConfig( + /* + * ColumnConfig valueColumn = new + * ColumnConfig( props.filterValue(), + * 130, "Value"); valueColumn.setMenuDisabled(true); + * valueColumn.setCell(new AbstractCell() { + * + * @Override public void render(Context context, FilterValue + * filterValue, SafeHtmlBuilder sb) { FilterValueTemplates + * filterValueTemplates = GWT .create(FilterValueTemplates.class); + * sb.append(filterValueTemplates.format(filterValue.getValue())); } }); + */ + + ColumnConfig valueColumn = new ColumnConfig( props.filterValue(), 130, "Value"); valueColumn.setMenuDisabled(true); - valueColumn.setCell(new AbstractCell() { + valueColumn.setCell(new AbstractCell() { @Override - public void render(Context context, FilterValue filterValue, + public void render(Context context, String filterValue, SafeHtmlBuilder sb) { FilterValueTemplates filterValueTemplates = GWT .create(FilterValueTemplates.class); - sb.append(filterValueTemplates.format(filterValue.getValue())); + sb.append(filterValueTemplates.format(filterValue)); } }); @@ -214,21 +232,33 @@ public class ActiveFiltersPanel extends SimpleContainer { comboFilterKey = new ComboBox(storeComboFilterKey, filterKeyPropertiesCombo.key()); comboFilterKey.setClearValueOnParseError(false); + comboFilterKey.setEditable(false); comboFilterKey.setTriggerAction(TriggerAction.ALL); addHandlersForComboFilterKey(filterKeyPropertiesCombo.key()); // Value + /* FilterValuePropertiesCombo filterValuePropertiesCombo = GWT .create(FilterValuePropertiesCombo.class); + */ + storeComboFilterValue = new ListStore(new ModelKeyProvider() { - storeComboFilterValue = new ListStore( - filterValuePropertiesCombo.id()); - - ComboBox comboFilterValue = new ComboBox( - storeComboFilterValue, filterValuePropertiesCombo.value()); + @Override + public String getKey(String item) { + return item; + } + }); + + comboFilterValue = new StringComboBox(); + comboFilterValue.setStore(storeComboFilterValue); comboFilterValue.setClearValueOnParseError(false); - comboFilterValue.addValidator(new EmptyValidator()); + comboFilterValue.setEditable(true); + comboFilterValue.setForceSelection(false); + + // comboFilterValue.setFinishEditOnEnter(false); + // comboFilterValue.setAutoValidate(true); + comboFilterValue.addValidator(new EmptyValidator()); comboFilterValue.setTriggerAction(TriggerAction.ALL); // final TextField valueField = new TextField(); @@ -445,7 +475,7 @@ public class ActiveFiltersPanel extends SimpleContainer { fk = remainingFilterKeys.get(0); seq++; AccountingFilter newAccountingFilter = new AccountingFilter( - seq, fk, new FilterValue()); + seq, fk, ""); Log.debug("newAccountingFilter: " + newAccountingFilter); editing.cancelEditing(); addStatus = true; @@ -469,7 +499,8 @@ public class ActiveFiltersPanel extends SimpleContainer { FilterValuesRequest requestFilterValue = new FilterValuesRequest( filterKey, accountingStateData.getAccountingType()); - AccountingManagerServiceAsync.INSTANCE.getFilterValues(requestFilterValue, + AccountingManagerServiceAsync.INSTANCE.getFilterValues( + requestFilterValue, new AsyncCallback>() { @Override @@ -489,10 +520,13 @@ public class ActiveFiltersPanel extends SimpleContainer { @Override public void onSuccess(ArrayList result) { Log.debug("FilterValues: " + result); + ArrayList values=new ArrayList(); + for(FilterValue fv:result){ + values.add(fv.getValue()); + } storeComboFilterValue.clear(); - storeComboFilterValue.addAll(result); + storeComboFilterValue.addAll(values); storeComboFilterValue.commitChanges(); - } }); } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Storage.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Storage.java index feb04d3..cd6b41c 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Storage.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/AccountingChart4Storage.java @@ -13,8 +13,11 @@ 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.GlobalOptions; +import com.github.highcharts4gwt.model.highcharts.option.api.Navigation; import com.github.highcharts4gwt.model.highcharts.option.api.SeriesArea; import com.github.highcharts4gwt.model.highcharts.option.api.SeriesColumn; +import com.github.highcharts4gwt.model.highcharts.option.api.navigation.ButtonOptions; import com.sencha.gxt.widget.core.client.container.MarginData; import com.sencha.gxt.widget.core.client.container.SimpleContainer; @@ -66,10 +69,10 @@ public class AccountingChart4Storage extends AccountingChartBuilder { HighchartsOptionFactory highchartsFactory = new JsoHighchartsOptionFactory(); ChartOptions options = highchartsFactory.createChartOptions(); options.chart().zoomType("xy"); - + options.exporting().buttons().contextButton().enabled(true); options.title().text("Accounting Storage"); - options.subtitle().text("Click and drag in the plot area to zoom in"); + /*options.subtitle().text("Click and drag in the plot area to zoom in"); */ ArrayString colors = options.colors(); // colors.setValue(0, "#cc0038"); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/VariableAxisChart.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/VariableAxisChart.java index cbf7da8..fd62d92 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/VariableAxisChart.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/maindata/charts/service/VariableAxisChart.java @@ -114,7 +114,7 @@ public class VariableAxisChart extends SimpleContainer { options.title().text("Accounting Service"); - options.subtitle().text("Click and drag in the plot area to zoom in"); + /*options.subtitle().text("Click and drag in the plot area to zoom in");*/ ArrayString colors = options.colors(); // colors.setValue(0, "#cc0038"); @@ -309,7 +309,7 @@ public class VariableAxisChart extends SimpleContainer { options.title().text("Accounting Service"); - options.subtitle().text("Click and drag in the plot area to zoom in"); + /*options.subtitle().text("Click and drag in the plot area to zoom in");*/ ArrayString colors = options.colors(); // colors.setValue(0, "#cc0038"); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/properties/AccountingFilterProperties.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/properties/AccountingFilterProperties.java index 028fbd5..70cacfa 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/client/properties/AccountingFilterProperties.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/client/properties/AccountingFilterProperties.java @@ -2,7 +2,6 @@ package org.gcube.portlets.admin.accountingmanager.client.properties; import org.gcube.portlets.admin.accountingmanager.shared.data.AccountingFilter; import org.gcube.portlets.admin.accountingmanager.shared.data.FilterKey; -import org.gcube.portlets.admin.accountingmanager.shared.data.FilterValue; import com.sencha.gxt.core.client.ValueProvider; import com.sencha.gxt.data.shared.ModelKeyProvider; @@ -21,6 +20,6 @@ public interface AccountingFilterProperties extends ValueProvider filterKey(); - ValueProvider filterValue(); + ValueProvider filterValue(); } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java index e9ecca9..25b3265 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java @@ -27,8 +27,8 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet; * * Support service request * - * @author giancarlo - * email: g.panichi@isti.cnr.it + * @author giancarlo email: g.panichi@isti.cnr.it * */ @SuppressWarnings("serial") @@ -104,7 +104,7 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet } } - + /** * * {@inheritDoc} @@ -126,12 +126,21 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet case PORTLET: return new ArrayList(); case SERVICE: - return new ArrayList(Arrays.asList(new FilterKey("consumerId"), - new FilterKey("host"), new FilterKey("scope"), new FilterKey("serviceName"),new FilterKey("serviceClass"))); + return new ArrayList(Arrays.asList(new FilterKey( + "consumerId"), new FilterKey("calledMethod"), + new FilterKey("callerHost"), new FilterKey("host"), + new FilterKey("operationResult"), + new FilterKey("scope"), new FilterKey("serviceClass"), + new FilterKey("serviceName"))); case STORAGE: - return new ArrayList(Arrays.asList(new FilterKey("consumerId"), - new FilterKey("dataType"), new FilterKey("scope"), new FilterKey("providerURI"), new FilterKey("resourceOwner"))); + return new ArrayList(Arrays.asList(new FilterKey( + "consumerId"), new FilterKey("dataType"), + new FilterKey("operationResult"), new FilterKey( + "operationType"), new FilterKey("providerURI"), + new FilterKey("resourceOwner"), new FilterKey( + "resourceScope"), new FilterKey("resourceURI"), + new FilterKey("scope"))); case TASK: return new ArrayList(); default: @@ -148,13 +157,14 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet } } - + /** * * {@inheritDoc} */ @Override - public ArrayList getFilterValues(FilterValuesRequest filterValuesRequest) + public ArrayList getFilterValues( + FilterValuesRequest filterValuesRequest) throws AccountingManagerServiceException { try { HttpSession session = this.getThreadLocalRequest().getSession(); @@ -163,16 +173,59 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet if (filterValuesRequest.getFilterKey() == null) { return new ArrayList(); } - - switch(filterValuesRequest.getFilterKey().getKey()){ + + switch (filterValuesRequest.getFilterKey().getKey()) { case "consumerId": - return new ArrayList(Arrays.asList(new FilterValue("giancarlo.panichi"), - new FilterValue("gianpaolo.coro"), new FilterValue("luca.frosini"))); + return new ArrayList(Arrays.asList( + new FilterValue("giancarlo.panichi"), new FilterValue( + "luca.frosini"), new FilterValue( + "gianpaolo.coro"), new FilterValue( + "valentina.marioli"))); + case "calledMethod": + return new ArrayList( + Arrays.asList(new FilterValue("batchExecute"))); + case "callerHost": + return new ArrayList( + Arrays.asList(new FilterValue("146.48.122.190"))); + case "host": + return new ArrayList( + Arrays.asList(new FilterValue( + "node7.d.d4science.research-infrastructures.eu:8080"))); + case "operationResult": + return new ArrayList( + Arrays.asList(new FilterValue("SUCCESS"))); + case "operationType": + return new ArrayList( + Arrays.asList(new FilterValue("UPDATE"))); + case "scope": + return new ArrayList( + Arrays.asList(new FilterValue("/gcube/devsec/devVRE"))); + case "serviceClass": + return new ArrayList( + Arrays.asList(new FilterValue("DataAnalysis"))); + case "serviceName": + return new ArrayList( + Arrays.asList(new FilterValue("TabularData"))); + case "dataType": + return new ArrayList( + Arrays.asList(new FilterValue("STORAGE"))); + case "providerURI": + return new ArrayList( + Arrays.asList(new FilterValue("NOT_PROVIDED"))); + case "resourceOwner": + return new ArrayList( + Arrays.asList(new FilterValue("valentina.marioli"))); + case "resourceScope": + return new ArrayList( + Arrays.asList(new FilterValue("/gcube"))); + case "resourceURI": + return new ArrayList( + Arrays.asList(new FilterValue("NOT_PROVIDED"))); + default: return new ArrayList(); } - } catch (AccountingManagerServiceException e) { e.printStackTrace(); throw e; @@ -183,6 +236,5 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet } } - } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCaller.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCaller.java index fbf2e4b..56bef18 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCaller.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/AccountingCaller.java @@ -89,7 +89,7 @@ public class AccountingCaller { } catch (Throwable e) { logger.error("Error in GetSeries(): " + e.getLocalizedMessage()); e.printStackTrace(); - throw new AccountingManagerServiceException(e.getLocalizedMessage()); + throw new AccountingManagerServiceException("No data available!"); } } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Service.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Service.java index 556e3f9..8258275 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Service.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Service.java @@ -45,7 +45,7 @@ public class AccountingQuery4Service extends AccountingQueryBuilder { filters = new ArrayList(); for (AccountingFilter accountigFilters : accountingFilters) { Filter filter = new Filter(accountigFilters.getFilterKey() - .getKey(), accountigFilters.getFilterValue().getValue()); + .getKey(), accountigFilters.getFilterValue()); filters.add(filter); } } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Storage.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Storage.java index e3b982f..e11837b 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Storage.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Storage.java @@ -45,7 +45,7 @@ public class AccountingQuery4Storage extends AccountingQueryBuilder { filters = new ArrayList(); for (AccountingFilter accountigFilters : accountingFilters) { Filter filter = new Filter(accountigFilters.getFilterKey() - .getKey(), accountigFilters.getFilterValue().getValue()); + .getKey(), accountigFilters.getFilterValue()); filters.add(filter); } } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Task.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Task.java index 53f8be3..07e74b7 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Task.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/amservice/query/AccountingQuery4Task.java @@ -1,6 +1,6 @@ package org.gcube.portlets.admin.accountingmanager.server.amservice.query; -import org.gcube.accounting.aggregation.AggregatedStorageUsageRecord; +import org.gcube.accounting.aggregation.AggregatedTaskUsageRecord; import org.gcube.accounting.analytics.TemporalConstraint; import org.gcube.portlets.admin.accountingmanager.server.amservice.PeriodModeMap; import org.gcube.portlets.admin.accountingmanager.shared.data.query.SeriesRequest; @@ -34,7 +34,7 @@ public class AccountingQuery4Task extends AccountingQueryBuilder { .getPeriod())); AccountingQuery invocation = new AccountingQuery( - AggregatedStorageUsageRecord.class, temporalConstraint,null); + AggregatedTaskUsageRecord.class, temporalConstraint,null); accountingQuerySpec.setOp(invocation); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/AccountingFilter.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/AccountingFilter.java index 7758a2a..14d8ed5 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/AccountingFilter.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/data/AccountingFilter.java @@ -13,13 +13,13 @@ public class AccountingFilter implements Serializable { private static final long serialVersionUID = 7200526591393559078L; private int id; private FilterKey filterKey; - private FilterValue filterValue; + private String filterValue; public AccountingFilter() { super(); } - public AccountingFilter(int id, FilterKey filterKey, FilterValue filterValue) { + public AccountingFilter(int id, FilterKey filterKey, String filterValue) { super(); this.id=id; this.filterKey = filterKey; @@ -42,11 +42,11 @@ public class AccountingFilter implements Serializable { this.filterKey = filterKey; } - public FilterValue getFilterValue() { + public String getFilterValue() { return filterValue; } - public void setFilterValue(FilterValue filterValue) { + public void setFilterValue(String filterValue) { this.filterValue = filterValue; } diff --git a/src/main/resources/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml b/src/main/resources/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml index d5db214..fa01260 100644 --- a/src/main/resources/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml +++ b/src/main/resources/org/gcube/portlets/admin/accountingmanager/accountingman.gwt.xml @@ -48,15 +48,14 @@ name="locale" values="es" /> --> - - - + diff --git a/src/main/webapp/AccountingManager.html b/src/main/webapp/AccountingManager.html index 7c77b0e..d8dc92d 100644 --- a/src/main/webapp/AccountingManager.html +++ b/src/main/webapp/AccountingManager.html @@ -33,6 +33,8 @@ src="accountingman/js/highcharts-3d.js"> +