diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtTreePanel.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtTreePanel.java index efeca0b..dfbf096 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtTreePanel.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtTreePanel.java @@ -841,11 +841,34 @@ public class GxtTreePanel extends LayoutContainer { } else if (Depth == 3) { // database elementType = "database"; String database = selectedItem.getName(); + //get the database type +// String dbType = selectedItem.getDatabaseType(); FileModel parent = store.getParent(selectedItem); String resource = parent.getName(); + + if (selectedItem.getDatabaseType()!=null && (selectedItem.getDatabaseType().equals(ConstantsPortlet.POSTGRES))){ //refresh schema list inputData.put("ResourceName", resource); inputData.put("DatabaseName", database); - + } + if (selectedItem.getDatabaseType()!=null && (selectedItem.getDatabaseType().equals(ConstantsPortlet.MYSQL))){ //refresh tables list + inputData.put("ResourceName", resource); + inputData.put("DatabaseName", database); + inputData.put("SchemaName", ""); + } + + + } else if (Depth == 4) { //schema + elementType = "schema"; + String schema = selectedItem.getName(); + FileModel db = store.getParent(selectedItem); + String database = db.getName(); + FileModel rs = store.getParent(db); + String resource = rs.getName(); + + inputData.put("ResourceName", resource); + inputData.put("DatabaseName", database); + inputData.put("SchemaName", schema); + } final String elemType = elementType; 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 1b5f56a..0a116ee 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 @@ -434,7 +434,7 @@ public class GxtToolbarFunctionality { // this tree level is a schema btnTablesList.enable(); btnSubmitQuery.enable(); - btnRefresCachedData.disable(); + btnRefresCachedData.enable(); // btnShowCreateTable.enable(); btnShowCreateTable.disable(); btnSimpleSample.disable(); 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 d4911e7..5edab1a 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 @@ -53,6 +53,7 @@ import org.gcube.portlets.user.databasesmanager.client.datamodel.GeneralOutputFr import org.gcube.portlets.user.databasesmanager.client.datamodel.Parameter; 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.utils.ConstantsPortlet; import org.gcube.portlets.user.databasesmanager.server.util.SessionUtil; import org.gcube.portlets.user.databasesmanager.server.util.WsUtil; @@ -139,8 +140,8 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements .getSession()); // the result generated in the LoadTables method - List result = new ArrayList(); - session.setAttribute("TablesResult", result); +// List result = new ArrayList(); +// session.setAttribute("TablesResult", result); // map that contains the submit query result and the related uid HashMap> submitQueryResult = new HashMap>(); @@ -152,16 +153,16 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements session.setAttribute("submitQueryResultParsed", submitQueryResultParsed); // information about a database - String currentDB = ""; - session.setAttribute("currentDB", currentDB); - String previousDB = ""; - session.setAttribute("previousDB", previousDB); +// String currentDB = ""; +// session.setAttribute("currentDB", currentDB); +// String previousDB = ""; +// session.setAttribute("previousDB", previousDB); // information about a schema - String currentSchema = ""; - session.setAttribute("currentSchema", currentSchema); - String previousSchema = ""; - session.setAttribute("previousSchema", previousSchema); +// String currentSchema = ""; +// session.setAttribute("currentSchema", currentSchema); +// String previousSchema = ""; +// session.setAttribute("previousSchema", previousSchema); // Hashmap that contains computationId with a uid key HashMap computationIDMap = new HashMap(); @@ -498,29 +499,94 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements inputParameters.get(1).setValue(db); inputParameters.get(2).setValue(scm); - - // create data structure - ComputationOutput outputData = new ComputationOutput(); - // computation id - String computationId = startComputation(algorithmId, inputParameters, - outputData); - - // print check on retrieving data - // logger.info("output data retrieved"); - - // data output values - LinkedHashMap mapValues = new LinkedHashMap(); - // data output keys - LinkedHashMap mapKeys = new LinkedHashMap(); - - mapValues = outputData.getMapValues(); - mapKeys = outputData.getmapKeys(); - - for (int i = 0; i < mapValues.size(); i++) { - Result row = new Result(String.valueOf(i), mapValues.get(String - .valueOf(i))); - outputParameters.add(row); + try{ + // get data from cache + // check if data exist considering as key the input parameters + String key = inputParameters.get(0).getValue()+inputParameters.get(1).getValue()+ + inputParameters.get(2).getValue(); + + // System.out.println("***KEY: " + key); + net.sf.ehcache.Element dataFromCache = getDataFromCache(key); + + Object value = null; + if (dataFromCache != null) { + value = dataFromCache.getObjectValue(); +// System.out.println("***GETTING DATA FROM CACHE"); } + if (value != null) { + outputParameters = (List) value; + + } else { + + //start computation + // create data structure + ComputationOutput outputData = new ComputationOutput(); + // computation id + String computationId = startComputation(algorithmId, inputParameters, + outputData); + + // print check on retrieving data + // logger.info("output data retrieved"); + + // data output values + LinkedHashMap mapValues = new LinkedHashMap(); + // data output keys + LinkedHashMap mapKeys = new LinkedHashMap(); + + mapValues = outputData.getMapValues(); + mapKeys = outputData.getmapKeys(); + + for (int i = 0; i < mapValues.size(); i++) { + Result row = new Result(String.valueOf(i), mapValues.get(String + .valueOf(i))); + outputParameters.add(row); + } + + // write data in cache + if (outputParameters != null + && outputParameters.size() != 0) { + // put data in cache + net.sf.ehcache.Element dataToCache = new net.sf.ehcache.Element( + inputParameters.get(0).getValue() + + inputParameters.get(1).getValue()+inputParameters.get(2).getValue(), + outputParameters); + + insertDataIntoCache(dataToCache); + // employeeCache.put(dataToCache); + } + + } + + + + }catch (Exception e) { +// e.printStackTrace(); + throw new Exception("Failed to load data. " + e); + } + + +// // create data structure +// ComputationOutput outputData = new ComputationOutput(); +// // computation id +// String computationId = startComputation(algorithmId, inputParameters, +// outputData); +// +// // print check on retrieving data +// // logger.info("output data retrieved"); +// +// // data output values +// LinkedHashMap mapValues = new LinkedHashMap(); +// // data output keys +// LinkedHashMap mapKeys = new LinkedHashMap(); +// +// mapValues = outputData.getMapValues(); +// mapKeys = outputData.getmapKeys(); +// +// for (int i = 0; i < mapValues.size(); i++) { +// Result row = new Result(String.valueOf(i), mapValues.get(String +// .valueOf(i))); +// outputParameters.add(row); +// } return outputParameters; } @@ -531,37 +597,39 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements LinkedHashMap dataInput, boolean SearchTable, String keyword) throws Exception { - ASLSession session = WsUtil.getAslSession(this.getThreadLocalRequest() - .getSession()); - List result = (List) session - .getAttribute("TablesResult"); - - // check on a database - String currentDB = ""; - currentDB = dataInput.get("DatabaseName"); - String previousDB = (String) session.getAttribute("previousDB"); - - if (!currentDB.equals(previousDB)) { - // result = null; - result = new ArrayList(); - System.gc(); - } - - previousDB = currentDB; - session.setAttribute("previousDB", previousDB); - - // check on a schema - String currentSchema = ""; - currentSchema = dataInput.get("SchemaName"); - String previousSchema = (String) session.getAttribute("previousSchema"); - if (!currentSchema.equals(previousSchema)) { - // result = null; - result = new ArrayList(); - System.gc(); - } - - previousSchema = currentSchema; - session.setAttribute("previousSchema", previousSchema); + //tables' list stored for a user session +// ASLSession session = WsUtil.getAslSession(this.getThreadLocalRequest() +// .getSession()); +// List result = (List) session +// .getAttribute("TablesResult"); +// // check on a database +// String currentDB = ""; +// currentDB = dataInput.get("DatabaseName"); +// String previousDB = (String) session.getAttribute("previousDB"); +// +// if (!currentDB.equals(previousDB)) { +// // result = null; +// result = new ArrayList(); +// System.gc(); +// } +// +// previousDB = currentDB; +// session.setAttribute("previousDB", previousDB); +// +// // check on a schema +// String currentSchema = ""; +// currentSchema = dataInput.get("SchemaName"); +// String previousSchema = (String) session.getAttribute("previousSchema"); +// if (!currentSchema.equals(previousSchema)) { +// // result = null; +// result = new ArrayList(); +// System.gc(); +// } +// +// previousSchema = currentSchema; +// session.setAttribute("previousSchema", previousSchema); + + List result = new ArrayList<>(); // get tables // if (result == null) @@ -620,7 +688,7 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements loadResult = new BasePagingLoadResult(sublist, config.getOffset(), totalNumber); - session.setAttribute("TablesResult", result); +// session.setAttribute("TablesResult", result); return loadResult; } @@ -1684,8 +1752,21 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements key = inputData.get("ResourceName"); break; case "database": + if (element.getDatabaseType().equals(ConstantsPortlet.POSTGRES)){ //refresh schema list + key = inputData.get("ResourceName") + + inputData.get("DatabaseName"); + } + if (element.getDatabaseType().equals(ConstantsPortlet.MYSQL)){ //refresh table list + key = inputData.get("ResourceName") + + inputData.get("DatabaseName") + + inputData.get("SchemaName"); + } + break; + + case "schema": key = inputData.get("ResourceName") - + inputData.get("DatabaseName"); + + inputData.get("DatabaseName") + + inputData.get("SchemaName"); break; } } @@ -1713,10 +1794,21 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements result = new GeneralOutputFromServlet(output2); break; case "database": - resourceName = inputData.get("ResourceName"); - databaseName = inputData.get("DatabaseName"); - List output3 = getDBSchema(inputData); - result = new GeneralOutputFromServlet(output3); + if (element.getDatabaseType()!=null && (element.getDatabaseType().equals(ConstantsPortlet.POSTGRES))){ //refresh schema list + List output3 = getDBSchema(inputData); + result = new GeneralOutputFromServlet(output3); + } + if (element.getDatabaseType()!=null && element.getDatabaseType().equals(ConstantsPortlet.MYSQL)){ //refresh table list + getTables(inputData); + + } +// resourceName = inputData.get("ResourceName"); +// databaseName = inputData.get("DatabaseName"); + + break; + + case "schema": + getTables(inputData); break; } }