From ffd58356c32b9669810e4eff0f3128c375df4a62 Mon Sep 17 00:00:00 2001 From: Loredana Liccardo Date: Fri, 4 Jul 2014 10:36:43 +0000 Subject: [PATCH] randomSample implemented git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/databases-manager-portlet@98439 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/GWTdbManagerService.java | 2 + .../client/GWTdbManagerServiceAsync.java | 3 + .../client/events/EventsTypeEnum.java | 3 +- .../client/events/RandomSamplingEvent.java | 33 ++++ .../RandomSamplingEventHandler.java | 10 ++ .../client/panels/GxtBorderLayoutPanel.java | 159 +++++++++++++++--- .../toolbar/GxtToolbarFunctionality.java | 5 + .../server/GWTdbManagerServiceImpl.java | 81 +++++++++ 8 files changed, 274 insertions(+), 22 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/databasesmanager/client/events/RandomSamplingEvent.java create mode 100644 src/main/java/org/gcube/portlets/user/databasesmanager/client/events/interfaces/RandomSamplingEventHandler.java diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerService.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerService.java index a951ad7..1049b26 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerService.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerService.java @@ -37,6 +37,8 @@ public interface GWTdbManagerService extends RemoteService { List smartSample(LinkedHashMap dataInput) throws Exception; + List randomSample(LinkedHashMap dataInput) throws Exception; + List parseCVSString(List result, List attrNames) throws Exception; diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerServiceAsync.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerServiceAsync.java index 74f81ca..0f798ab 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerServiceAsync.java @@ -42,4 +42,7 @@ public interface GWTdbManagerServiceAsync { void smartSample(LinkedHashMap dataInput, AsyncCallback> callback); + void randomSample(LinkedHashMap dataInput, + AsyncCallback> callback); + } diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/EventsTypeEnum.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/EventsTypeEnum.java index 673a3c1..6edc01e 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/EventsTypeEnum.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/EventsTypeEnum.java @@ -6,6 +6,7 @@ public enum EventsTypeEnum { SUBMIT_QUERY_EVENT, SHOW_CREATE_TABLE_EVENT, SAMPLING_EVENT, - SMART_SAMPLING_EVENT; + SMART_SAMPLING_EVENT, + RANDOM_SAMPLING_EVENT; } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/RandomSamplingEvent.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/RandomSamplingEvent.java new file mode 100644 index 0000000..2218310 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/RandomSamplingEvent.java @@ -0,0 +1,33 @@ +package org.gcube.portlets.user.databasesmanager.client.events; + +import org.gcube.portlets.user.databasesmanager.client.events.interfaces.RandomSamplingEventHandler; + + +import com.google.gwt.event.shared.GwtEvent; + + +public class RandomSamplingEvent extends GwtEvent{ + + public static Type TYPE = new Type(); + + @Override + protected void dispatch(RandomSamplingEventHandler handler) { + // TODO Auto-generated method stub + + handler.onRandomSampling(this); + + } + + @Override + public Type getAssociatedType() { + // TODO Auto-generated method stub + return TYPE; + } + + public EventsTypeEnum getKey() { + + // TODO Auto-generated method stub + return EventsTypeEnum.RANDOM_SAMPLING_EVENT; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/interfaces/RandomSamplingEventHandler.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/interfaces/RandomSamplingEventHandler.java new file mode 100644 index 0000000..d22bf01 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/interfaces/RandomSamplingEventHandler.java @@ -0,0 +1,10 @@ +package org.gcube.portlets.user.databasesmanager.client.events.interfaces; + +import org.gcube.portlets.user.databasesmanager.client.events.RandomSamplingEvent; +import com.google.gwt.event.shared.EventHandler; + +public interface RandomSamplingEventHandler extends EventHandler{ + + public void onRandomSampling(RandomSamplingEvent randomSamplingEvent); + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtBorderLayoutPanel.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtBorderLayoutPanel.java index a486e68..49c04a6 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtBorderLayoutPanel.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtBorderLayoutPanel.java @@ -12,11 +12,13 @@ import org.gcube.portlets.user.databasesmanager.client.datamodel.FileModel; import org.gcube.portlets.user.databasesmanager.client.datamodel.Result; import org.gcube.portlets.user.databasesmanager.client.datamodel.Row; import org.gcube.portlets.user.databasesmanager.client.datamodel.SubmitQueryData; +import org.gcube.portlets.user.databasesmanager.client.events.RandomSamplingEvent; import org.gcube.portlets.user.databasesmanager.client.events.SamplingEvent; import org.gcube.portlets.user.databasesmanager.client.events.SelectedItemEvent; import org.gcube.portlets.user.databasesmanager.client.events.ShowCreateTableEvent; import org.gcube.portlets.user.databasesmanager.client.events.SmartSamplingEvent; import org.gcube.portlets.user.databasesmanager.client.events.SubmitQueryEvent; +import org.gcube.portlets.user.databasesmanager.client.events.interfaces.RandomSamplingEventHandler; import org.gcube.portlets.user.databasesmanager.client.events.interfaces.SamplingEventHandler; import org.gcube.portlets.user.databasesmanager.client.events.interfaces.SelectedItemEventHandler; import org.gcube.portlets.user.databasesmanager.client.events.interfaces.ShowCreateTableEventHandler; @@ -48,7 +50,6 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.MessageBoxEvent; - public class GxtBorderLayoutPanel extends ContentPanel { /* Create Root Logger */ @@ -315,17 +316,32 @@ public class GxtBorderLayoutPanel extends ContentPanel { } }); - - eventBus.addHandler(SmartSamplingEvent.TYPE, new SmartSamplingEventHandler() { - - @Override - public void onSmartSampling(SmartSamplingEvent smartSamplingEvent) { - // TODO Auto-generated method stub - - smartSample(); - - } - }); + + eventBus.addHandler(SmartSamplingEvent.TYPE, + new SmartSamplingEventHandler() { + + @Override + public void onSmartSampling( + SmartSamplingEvent smartSamplingEvent) { + // TODO Auto-generated method stub + + smartSample(); + + } + }); + + eventBus.addHandler(RandomSamplingEvent.TYPE, + new RandomSamplingEventHandler() { + + @Override + public void onRandomSampling( + RandomSamplingEvent randomSamplingEvent) { + // TODO Auto-generated method stub + + randomSample(); + + } + }); eventBus.addHandler(ShowCreateTableEvent.TYPE, new ShowCreateTableEventHandler() { @@ -634,16 +650,117 @@ public class GxtBorderLayoutPanel extends ContentPanel { }); } - - private void smartSample(){ - + + private void smartSample() { + + // to mask the entire content panel + + this.mask("Loading", "x-mask-loading"); + + // System.out.println("Start RPC - submitQuery"); + + rootLogger.log(Level.SEVERE, "Start RPC - smartSample"); + + // get the selected table + + List data = treePanel.getTreePanel().getSelectionModel() + .getSelectedItems(); + + // the selected item is a table + FileModel selectedItem = data.get(0); + + rootLogger.log(Level.INFO, "the selected table is: " + selectedItem); + + // recover data inputs for the algorithm + + LinkedHashMap dataInput = new LinkedHashMap(); + + // check if the table has an associated schema + FileModel schema; + FileModel database; + FileModel resource; + + if (treePanel.getTreeStore().getParent(selectedItem).isSchema()) { + schema = treePanel.getTreeStore().getParent(selectedItem); + database = treePanel.getTreeStore().getParent(schema); + resource = treePanel.getTreeStore().getParent(database); + + dataInput.put("ResourceName", resource.getName()); + dataInput.put("DatabaseName", database.getName()); + dataInput.put("SchemaName", schema.getName()); + dataInput.put("TableName", selectedItem.getName()); + + rootLogger.log(Level.INFO, "ResourceName: " + resource.getName()); + rootLogger.log(Level.INFO, "DatabaseName: " + database.getName()); + rootLogger.log(Level.INFO, "SchemaName: " + schema.getName()); + rootLogger.log(Level.INFO, "SchemaName: " + selectedItem.getName()); + + } else { + // the table has not a schema + database = treePanel.getTreeStore().getParent(selectedItem); + resource = treePanel.getTreeStore().getParent(database); + + dataInput.put("ResourceName", resource.getName()); + dataInput.put("DatabaseName", database.getName()); + dataInput.put("SchemaName", ""); + dataInput.put("TableName", selectedItem.getName()); + + rootLogger.log(Level.INFO, "ResourceName: " + resource.getName()); + rootLogger.log(Level.INFO, "DatabaseName: " + database.getName()); + rootLogger.log(Level.INFO, "SchemaName: " + ""); + rootLogger.log(Level.INFO, "SchemaName: " + selectedItem.getName()); + } + + // call remote service + + RPCservice.smartSample(dataInput, new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + + // Window.alert(caught.getMessage()); + // System.out.println("FAILURE"); + rootLogger.log(Level.SEVERE, "FAILURE RPC smartSample"); + + MessageBox.alert("Error ", + "
Message:" + caught.getMessage(), null); + + } + + @Override + public void onSuccess(List result) { + + rootLogger.log(Level.SEVERE, "SUCCESS RPC smartSample"); + + rows = new ArrayList(); + + // System.out.println("result size: " + result.size()); + + rootLogger.log(Level.SEVERE, "output size: " + result.size()); + + // get the attributes list for the result table + getListAttributes(result.get(0).getValue()); + + // remove the header in order to parse only the result + result.remove(0); + + // parse the result in order to obtain a table + parseResult(result); + + } + + }); + + } + + private void randomSample() { // to mask the entire content panel this.mask("Loading", "x-mask-loading"); // System.out.println("Start RPC - submitQuery"); - rootLogger.log(Level.SEVERE, "Start RPC - smartSample"); + rootLogger.log(Level.SEVERE, "Start RPC - randomSample"); // get the selected table @@ -697,14 +814,14 @@ public class GxtBorderLayoutPanel extends ContentPanel { // call remote service - RPCservice.smartSample(dataInput, new AsyncCallback>() { + RPCservice.randomSample(dataInput, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { // Window.alert(caught.getMessage()); // System.out.println("FAILURE"); - rootLogger.log(Level.SEVERE, "FAILURE RPC smartSample"); + rootLogger.log(Level.SEVERE, "FAILURE RPC randomSample"); MessageBox.alert("Error ", "
Message:" + caught.getMessage(), null); @@ -714,7 +831,7 @@ public class GxtBorderLayoutPanel extends ContentPanel { @Override public void onSuccess(List result) { - rootLogger.log(Level.SEVERE, "SUCCESS RPC smartSample"); + rootLogger.log(Level.SEVERE, "SUCCESS RPC randomSample"); rows = new ArrayList(); @@ -734,8 +851,8 @@ public class GxtBorderLayoutPanel extends ContentPanel { } }); - - + + } // start the parsing of the submit result in order to obtain a table diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/toolbar/GxtToolbarFunctionality.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/toolbar/GxtToolbarFunctionality.java index f557a6d..0a12cc7 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/toolbar/GxtToolbarFunctionality.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/toolbar/GxtToolbarFunctionality.java @@ -5,6 +5,7 @@ import java.util.logging.Logger; import org.gcube.portlets.user.databasesmanager.client.GWTdbManagerServiceAsync; import org.gcube.portlets.user.databasesmanager.client.datamodel.SubmitQueryData; +import org.gcube.portlets.user.databasesmanager.client.events.RandomSamplingEvent; import org.gcube.portlets.user.databasesmanager.client.events.SamplingEvent; import org.gcube.portlets.user.databasesmanager.client.events.ShowCreateTableEvent; import org.gcube.portlets.user.databasesmanager.client.events.SmartSamplingEvent; @@ -314,6 +315,10 @@ public class GxtToolbarFunctionality { @Override public void componentSelected(ButtonEvent ce) { // TODO Auto-generated method stub + + + //fire event + eventBus.fireEvent(new RandomSamplingEvent()); // TODO: insert the result of the sample operation diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java b/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java index f543972..de8c4fa 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java @@ -655,6 +655,85 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements return output; } + + @Override + public List randomSample(LinkedHashMap dataInput) + throws Exception { + // TODO Auto-generated method stub + + List inputParameters = new ArrayList(); + + // sample result + List output = new ArrayList(); + + // get list of algorithms + + List algorithms = new ArrayList(); + + algorithms = getDatabaseManagerAlgorithms(); + + // get algorithmId + + String algorithmId = null; + + for (int i = 0; i < algorithms.size(); i++) { + + if (algorithms.get(i).equals("RANDOMSAMPLEONTABLE")) { + + algorithmId = algorithms.get(i); + + // System.out.println("algorithmId: " + algorithmId); + + rootLogger.log(Level.SEVERE, "algorithmId: " + algorithmId); + + } + + } + + // get input parameters of the algorithm + + rootLogger.log(Level.SEVERE, "getting input parameters"); + + inputParameters = getParameters(algorithmId); + + for (int i = 0; i < inputParameters.size(); i++) { + + // System.out.println(inputParameters.get(i).getName()); + + rootLogger.log(Level.INFO, inputParameters.get(i).getName()); + + } + + inputParameters.get(0).setValue(dataInput.get("ResourceName")); + inputParameters.get(1).setValue(dataInput.get("DatabaseName")); + inputParameters.get(2).setValue(dataInput.get("SchemaName")); + inputParameters.get(3).setValue(dataInput.get("TableName")); + + // System.out.println("size outputMap pre computation: " + // + outputMap.size()); + + String computationId = startComputation(algorithmId, inputParameters); + + // retrieve data + + // System.out.println("output data retrieved"); + + // System.out.println("size outputMap: " + outputMap.size()); + + rootLogger.log(Level.SEVERE, "output data retrieved"); + rootLogger.log(Level.SEVERE, "output data size: " + outputMap.size()); + + for (int i = 0; i < outputMap.size(); i++) { + + Result row = new Result(outputKey.get(String.valueOf(i)), + outputMap.get(String.valueOf(i))); + + output.add(row); + + } + + return output; + } @Override public LinkedHashMap getTableDetails( @@ -1199,4 +1278,6 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements } + + }