- encache caching mechanism added for the information in the tree model. (cache disk create in the temp directory of tomcat)
- for submitquery and samplings, message "Result not available" changed in the table has 0 rows or the query returned 0 values - directory for cache created in a corrected way and dependency for ehcache set to provided in the pom file - servlet computation made more fast removing for each algorithm the retrieving of algorithm's name and algorithm's input parameters. They have been set within each method (related to an algorithm) git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/databases-manager-portlet@99777 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
82cf7995f2
commit
5386131130
|
@ -3,5 +3,11 @@
|
|||
date="2014-06-30">
|
||||
<Change>first release</Change>
|
||||
</Changeset>
|
||||
|
||||
<Changeset component="org.gcube.portlets.user.databases-manager-portlet.1-1-0"
|
||||
date="2014-06-30">
|
||||
<Change>first release</Change>
|
||||
<Change>first release</Change>
|
||||
<Change>first release</Change>
|
||||
<Change>first release</Change>
|
||||
</Changeset>
|
||||
</ReleaseNotes>
|
|
@ -4,6 +4,7 @@ import java.util.LinkedHashMap;
|
|||
import java.util.List;
|
||||
|
||||
import org.gcube.portlets.user.databasesmanager.client.datamodel.FileModel;
|
||||
import org.gcube.portlets.user.databasesmanager.client.datamodel.GeneralOutputFromServlet;
|
||||
import org.gcube.portlets.user.databasesmanager.client.datamodel.Result;
|
||||
import org.gcube.portlets.user.databasesmanager.client.datamodel.Row;
|
||||
import com.extjs.gxt.ui.client.data.PagingLoadConfig;
|
||||
|
@ -53,4 +54,8 @@ public interface GWTdbManagerService extends RemoteService {
|
|||
Boolean removeComputation(String submitQueryUID) throws Exception;
|
||||
|
||||
void refreshDataOnServer(String submitQueryUID);
|
||||
|
||||
GeneralOutputFromServlet refreshDataTree(String ElementType,
|
||||
LinkedHashMap<String, String> inputData, FileModel element) throws Exception;
|
||||
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import java.util.LinkedHashMap;
|
|||
import java.util.List;
|
||||
|
||||
import org.gcube.portlets.user.databasesmanager.client.datamodel.FileModel;
|
||||
import org.gcube.portlets.user.databasesmanager.client.datamodel.GeneralOutputFromServlet;
|
||||
import org.gcube.portlets.user.databasesmanager.client.datamodel.Result;
|
||||
import org.gcube.portlets.user.databasesmanager.client.datamodel.Row;
|
||||
import com.extjs.gxt.ui.client.data.PagingLoadConfig;
|
||||
|
@ -51,4 +52,7 @@ public interface GWTdbManagerServiceAsync {
|
|||
AsyncCallback<PagingLoadResult<Row>> callback);
|
||||
|
||||
void refreshDataOnServer(String submitQueryUID, AsyncCallback<Void> callback);
|
||||
|
||||
void refreshDataTree(String ElementType,LinkedHashMap<String, String> inputData, FileModel element,
|
||||
AsyncCallback<GeneralOutputFromServlet> callback);
|
||||
}
|
||||
|
|
|
@ -38,6 +38,8 @@ public class FileModel extends BaseModelData implements Serializable {
|
|||
// resource data
|
||||
private String ResourceName = null;
|
||||
private String DatabaseName = null;
|
||||
//flag data cached
|
||||
// private boolean isDataCached = false;
|
||||
|
||||
public FileModel() {
|
||||
setId();
|
||||
|
@ -96,6 +98,13 @@ public class FileModel extends BaseModelData implements Serializable {
|
|||
// public boolean isSchema() {
|
||||
// return get("isSchema");
|
||||
// }
|
||||
|
||||
// public void setIsDataCached(boolean value){
|
||||
// set("isDataCached", value);
|
||||
// }
|
||||
// public boolean IsDataCached(){
|
||||
// return get("isDataCached");
|
||||
// }
|
||||
|
||||
// set if the object is a schema
|
||||
public void setIsSchema(boolean value) {
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package org.gcube.portlets.user.databasesmanager.client.datamodel;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
||||
//class that allows to wrap output generated by the servlet
|
||||
import com.extjs.gxt.ui.client.data.BaseModelData;
|
||||
|
||||
public class GeneralOutputFromServlet extends BaseModelData implements
|
||||
Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private List<FileModel> listOutput;
|
||||
private LinkedHashMap<String, FileModel> mapOutput;
|
||||
|
||||
public GeneralOutputFromServlet() {
|
||||
|
||||
}
|
||||
|
||||
public GeneralOutputFromServlet(List<FileModel> data) {
|
||||
set("listOutput", data);
|
||||
}
|
||||
|
||||
public GeneralOutputFromServlet(LinkedHashMap<String, FileModel> data) {
|
||||
set("mapOutput", data);
|
||||
}
|
||||
|
||||
public List<FileModel> getListOutput(){
|
||||
return get("listOutput");
|
||||
}
|
||||
public LinkedHashMap<String, FileModel> getMapOutput(){
|
||||
return get("mapOutput");
|
||||
}
|
||||
}
|
|
@ -9,5 +9,6 @@ public enum EventsTypeEnum {
|
|||
RANDOM_SAMPLING_EVENT,
|
||||
LOAD_TABLES_EVENT,
|
||||
SELECTED_TABLE_EVENT,
|
||||
CANCEL_EXECUTION_QUERY;
|
||||
CANCEL_EXECUTION_QUERY,
|
||||
REFRESH_DATA;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package org.gcube.portlets.user.databasesmanager.client.events;
|
||||
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.interfaces.RefreshDataEventHandler;
|
||||
import com.google.gwt.event.shared.GwtEvent;
|
||||
|
||||
|
||||
public class RefreshDataEvent extends GwtEvent<RefreshDataEventHandler> {
|
||||
|
||||
public static Type<RefreshDataEventHandler> TYPE = new Type<RefreshDataEventHandler>();
|
||||
|
||||
@Override
|
||||
public Type<RefreshDataEventHandler> getAssociatedType() {
|
||||
return TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dispatch(RefreshDataEventHandler handler) {
|
||||
handler.onRefreshData(this);
|
||||
}
|
||||
|
||||
public EventsTypeEnum getKey() {
|
||||
return EventsTypeEnum.REFRESH_DATA;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
package org.gcube.portlets.user.databasesmanager.client.events.interfaces;
|
||||
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.RefreshDataEvent;
|
||||
|
||||
import com.google.gwt.event.shared.EventHandler;
|
||||
|
||||
public interface RefreshDataEventHandler extends EventHandler {
|
||||
public void onRefreshData(RefreshDataEvent refreshDataEvent);
|
||||
}
|
|
@ -14,6 +14,7 @@ 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.LoadTablesEvent;
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.RandomSamplingEvent;
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.RefreshDataEvent;
|
||||
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.SelectedTableEvent;
|
||||
|
@ -22,6 +23,7 @@ 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.LoadTablesEventHandler;
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.interfaces.RandomSamplingEventHandler;
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.interfaces.RefreshDataEventHandler;
|
||||
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;
|
||||
|
@ -309,6 +311,15 @@ public class GxtBorderLayoutPanel extends ContentPanel {
|
|||
getTableDetails(table);
|
||||
}
|
||||
});
|
||||
|
||||
eventBus.addHandler(RefreshDataEvent.TYPE, new RefreshDataEventHandler() {
|
||||
|
||||
@Override
|
||||
public void onRefreshData(RefreshDataEvent refreshDataEvent) {
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// method to load the tables list
|
||||
|
@ -383,8 +394,8 @@ public class GxtBorderLayoutPanel extends ContentPanel {
|
|||
|
||||
if (caught
|
||||
.getMessage()
|
||||
.equals("java.lang.Exception: Result not available")) {
|
||||
MessageBox.alert("Error ", "<br/>Message:"
|
||||
.contains("Result not available")) {
|
||||
MessageBox.alert("Warning ", "<br/>Message:"
|
||||
+ "no tables available", null);
|
||||
} else {
|
||||
MessageBox.alert("Error ", "<br/>Message:"
|
||||
|
@ -401,11 +412,26 @@ public class GxtBorderLayoutPanel extends ContentPanel {
|
|||
rootLogger.log(Level.SEVERE,
|
||||
"SUCCESS RPC LoadTables");
|
||||
callback.onSuccess(result);
|
||||
|
||||
if (keyword == null) {
|
||||
startSearchTable = false;
|
||||
}
|
||||
// enable toolbar in the dialog
|
||||
toolBarTop.enable();
|
||||
|
||||
if (result!=null){
|
||||
|
||||
List<Result> data = result.getData();
|
||||
if (data.size()==0){
|
||||
MessageBox.alert("Warning ", "<br/>Message:"
|
||||
+ "no tables availables", null);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
// rootLogger.log(Level.SEVERE, "End RPC LoadTables");
|
||||
|
|
|
@ -10,7 +10,9 @@ import java.util.logging.Logger;
|
|||
import org.gcube.portlets.user.databasesmanager.client.GWTdbManagerServiceAsync;
|
||||
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.events.RefreshDataEvent;
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.SelectedItemEvent;
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.interfaces.RefreshDataEventHandler;
|
||||
import org.gcube.portlets.user.databasesmanager.client.resources.Images;
|
||||
import org.gcube.portlets.user.databasesmanager.client.utils.ConstantsPortlet;
|
||||
import com.extjs.gxt.ui.client.Style.Scroll;
|
||||
|
@ -30,6 +32,7 @@ import com.google.gwt.event.shared.HandlerManager;
|
|||
import com.google.gwt.user.client.Event;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.AbstractImagePrototype;
|
||||
import org.gcube.portlets.user.databasesmanager.client.datamodel.GeneralOutputFromServlet;
|
||||
|
||||
//class that implements the tree object
|
||||
public class GxtTreePanel extends LayoutContainer {
|
||||
|
@ -57,6 +60,7 @@ public class GxtTreePanel extends LayoutContainer {
|
|||
// tree is used)
|
||||
this.setScrollMode(Scroll.NONE);
|
||||
this.initLayout();
|
||||
addHandler();
|
||||
}
|
||||
|
||||
private void initLayout() throws Exception {
|
||||
|
@ -441,6 +445,18 @@ public class GxtTreePanel extends LayoutContainer {
|
|||
});
|
||||
}
|
||||
|
||||
private void addHandler() {
|
||||
eventBus.addHandler(RefreshDataEvent.TYPE,
|
||||
new RefreshDataEventHandler() {
|
||||
|
||||
@Override
|
||||
public void onRefreshData(RefreshDataEvent refreshDataEvent) {
|
||||
|
||||
refreshData();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// load the root
|
||||
private void loadRootItemTree() throws Exception {
|
||||
this.mask("Loading", "x-mask-loading");
|
||||
|
@ -712,11 +728,19 @@ public class GxtTreePanel extends LayoutContainer {
|
|||
}
|
||||
}
|
||||
|
||||
private void removeChildren(FileModel parent) {
|
||||
|
||||
if (parent != null) {
|
||||
store.removeAll(parent);
|
||||
rootLogger.log(Level.INFO, "children removed from the store");
|
||||
}
|
||||
}
|
||||
|
||||
// set information (useful for the submitquery operation) for the selected
|
||||
// item. The selected item can be a schema, a table and a database.
|
||||
private void setInfoOnSelectedItem(FileModel element) {
|
||||
// the selected element is a schema
|
||||
if ((treeDepthSelectedItem == 4) && (element.isSchema() == true)) {
|
||||
if ((treeDepthSelectedItem == 4) && (element.isSchema() == true)) {
|
||||
rootLogger.log(Level.SEVERE, "setInfo for selected item schema");
|
||||
// recover database name
|
||||
FileModel database = store.getParent(element);
|
||||
|
@ -730,8 +754,8 @@ public class GxtTreePanel extends LayoutContainer {
|
|||
element.setDatabaseName(DatabaseName);
|
||||
}
|
||||
|
||||
//the selected element is a table because the database is mysql type
|
||||
else if ((treeDepthSelectedItem == 4) && (element.isSchema() == false)) {
|
||||
// the selected element is a table because the database is mysql type
|
||||
else if ((treeDepthSelectedItem == 4) && (element.isSchema() == false)) {
|
||||
rootLogger.log(Level.SEVERE, "setInfo for selected item table");
|
||||
|
||||
// recover database name
|
||||
|
@ -744,8 +768,9 @@ public class GxtTreePanel extends LayoutContainer {
|
|||
|
||||
element.setResourceName(ResourceName);
|
||||
element.setDatabaseName(DatabaseName);
|
||||
}
|
||||
else if (treeDepthSelectedItem == 5) { //the selected item is a table so the database is postgres type
|
||||
} else if (treeDepthSelectedItem == 5) { // the selected item is a table
|
||||
// so the database is
|
||||
// postgres type
|
||||
rootLogger.log(Level.SEVERE, "setInfo for selected item table");
|
||||
|
||||
// recover schema name
|
||||
|
@ -761,7 +786,8 @@ public class GxtTreePanel extends LayoutContainer {
|
|||
|
||||
element.setResourceName(ResourceName);
|
||||
element.setDatabaseName(DatabaseName);
|
||||
} else if (treeDepthSelectedItem == 3) { // the selected item is a database
|
||||
} else if (treeDepthSelectedItem == 3) { // the selected item is a
|
||||
// database
|
||||
rootLogger.log(Level.SEVERE, "setInfo for selected item database");
|
||||
|
||||
// recover database name
|
||||
|
@ -774,6 +800,7 @@ public class GxtTreePanel extends LayoutContainer {
|
|||
element.setResourceName(ResourceName);
|
||||
element.setDatabaseName(DatabaseName);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// get the tree panel
|
||||
|
@ -785,4 +812,255 @@ public class GxtTreePanel extends LayoutContainer {
|
|||
public TreeStore<FileModel> getTreeStore() {
|
||||
return this.store;
|
||||
}
|
||||
|
||||
// refresh data
|
||||
private void refreshData() {
|
||||
|
||||
final GxtTreePanel tree = this;
|
||||
this.mask("Loading", "x-mask-loading");
|
||||
|
||||
List<FileModel> items = treePanel.getSelectionModel()
|
||||
.getSelectedItems();
|
||||
|
||||
final FileModel selectedItem = items.get(0);
|
||||
int Depth = store.getDepth(selectedItem);
|
||||
LinkedHashMap<String, String> inputData = new LinkedHashMap<String, String>();
|
||||
|
||||
String elementType = "";
|
||||
String value;
|
||||
|
||||
if (Depth == 1) { // root tree
|
||||
elementType = "listResources";
|
||||
value = "listResources";
|
||||
inputData.put(value, value);
|
||||
} else if (Depth == 2) { // resource
|
||||
elementType = "resource";
|
||||
value = selectedItem.getName();
|
||||
inputData.put("ResourceName", value);
|
||||
|
||||
} else if (Depth == 3) { // database
|
||||
elementType = "database";
|
||||
String database = selectedItem.getName();
|
||||
FileModel parent = store.getParent(selectedItem);
|
||||
String resource = parent.getName();
|
||||
inputData.put("ResourceName", resource);
|
||||
inputData.put("DatabaseName", database);
|
||||
|
||||
}
|
||||
|
||||
final String elemType = elementType;
|
||||
RPCservice.refreshDataTree(elemType, inputData, selectedItem,
|
||||
new AsyncCallback<GeneralOutputFromServlet>() {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
rootLogger.log(Level.SEVERE, "FAILURE refreshDataTree");
|
||||
|
||||
MessageBox.alert("Error ",
|
||||
"<br/>Message:" + caught.getMessage(), null);
|
||||
|
||||
if (tree.isMasked()) {
|
||||
tree.unmask();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(GeneralOutputFromServlet result) {
|
||||
|
||||
rootLogger.log(Level.SEVERE, "SUCCESS refreshDataTree");
|
||||
|
||||
if (result != null) {
|
||||
// remove children
|
||||
removeChildren(selectedItem);
|
||||
tree.layout(true);
|
||||
|
||||
if (elemType.equals("listResources")) {
|
||||
List<FileModel> output = new ArrayList<FileModel>();
|
||||
output = result.getListOutput();
|
||||
|
||||
if (output.size() == 0) {
|
||||
selectedItem.setIsExpanded(false);
|
||||
treePanel.setExpanded(selectedItem, false);
|
||||
} else {
|
||||
// add the children
|
||||
addChildren(selectedItem, output);
|
||||
// System.out.println("added new data");
|
||||
treePanel.setExpanded(selectedItem, true);
|
||||
}
|
||||
|
||||
selectedItem.setIsLoaded(true);
|
||||
|
||||
} else if (elemType.equals("resource")) {
|
||||
LinkedHashMap<String, FileModel> output = new LinkedHashMap<String, FileModel>();
|
||||
output = result.getMapOutput();
|
||||
|
||||
if (output.size() != 0) {
|
||||
// recover keys from the result
|
||||
Set<String> keys = output.keySet();
|
||||
Object[] array = keys.toArray();
|
||||
|
||||
// recover information for each database
|
||||
List<FileModel> children = new ArrayList<FileModel>();
|
||||
int numIterations = (output.size()) / 5;
|
||||
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
for (i = 0; i < numIterations; i++) {
|
||||
|
||||
String DatabaseType = null;
|
||||
// System.out.println("index i: " + i);
|
||||
String DBName = null;
|
||||
List<Result> DBInfo = new ArrayList<Result>();
|
||||
FileModel child = null;
|
||||
|
||||
for (j = (i * 5); j < (i + 1) * 5; j++) {
|
||||
// System.out.println("index j: " +
|
||||
// j);
|
||||
if (array[j].toString().contains(
|
||||
"Database Name")) {
|
||||
// recover the database name
|
||||
DBName = output.get(
|
||||
array[j].toString())
|
||||
.getName();
|
||||
|
||||
Result row = new Result(
|
||||
"Database Name",
|
||||
output.get(
|
||||
array[j].toString())
|
||||
.getName());
|
||||
|
||||
child = output.get(array[j]
|
||||
.toString());
|
||||
DBInfo.add(row);
|
||||
}
|
||||
|
||||
if (array[j].toString().contains(
|
||||
"URL")) {
|
||||
Result row = new Result(
|
||||
"URL",
|
||||
output.get(
|
||||
array[j].toString())
|
||||
.getName());
|
||||
DBInfo.add(row);
|
||||
}
|
||||
|
||||
if (array[j].toString().contains(
|
||||
"Driver Name")) {
|
||||
Result row = new Result(
|
||||
"Driver Name",
|
||||
output.get(
|
||||
array[j].toString())
|
||||
.getName());
|
||||
|
||||
String driver = output.get(
|
||||
array[j].toString())
|
||||
.getName();
|
||||
DBInfo.add(row);
|
||||
|
||||
if (driver
|
||||
.toUpperCase()
|
||||
.contains(
|
||||
ConstantsPortlet.POSTGRES)) {
|
||||
DatabaseType = ConstantsPortlet.POSTGRES;
|
||||
}
|
||||
|
||||
if (driver
|
||||
.toUpperCase()
|
||||
.contains(
|
||||
ConstantsPortlet.MYSQL)) {
|
||||
DatabaseType = ConstantsPortlet.MYSQL;
|
||||
}
|
||||
}
|
||||
|
||||
if (array[j].toString().contains(
|
||||
"Dialect Name")) {
|
||||
Result row = new Result(
|
||||
"Dialect Name",
|
||||
output.get(
|
||||
array[j].toString())
|
||||
.getName());
|
||||
DBInfo.add(row);
|
||||
}
|
||||
|
||||
if (array[j].toString().contains(
|
||||
"Platform Name")) {
|
||||
Result row = new Result(
|
||||
"Platform Name",
|
||||
output.get(
|
||||
array[j].toString())
|
||||
.getName());
|
||||
DBInfo.add(row);
|
||||
}
|
||||
}
|
||||
|
||||
// FileModel child = new
|
||||
// FileModel(DBName);
|
||||
|
||||
if (child != null) {
|
||||
// set that the item is a database
|
||||
child.setIsDatabase(true);
|
||||
child.setDBInfo(DBInfo);
|
||||
|
||||
// check print
|
||||
// rootLogger.log(Level.INFO,
|
||||
// "DatabaseType: " + DatabaseType);
|
||||
|
||||
// set the database type considering
|
||||
// the
|
||||
// driver information
|
||||
child.setDatabaseType(DatabaseType);
|
||||
|
||||
if (DatabaseType
|
||||
.equals(ConstantsPortlet.MYSQL)) {
|
||||
child.setIsExpanded(false);
|
||||
treePanel.setExpanded(child,
|
||||
false);
|
||||
}
|
||||
children.add(child);
|
||||
}
|
||||
}
|
||||
addChildren(selectedItem, children);
|
||||
rootLogger
|
||||
.log(Level.INFO,
|
||||
"children number: "
|
||||
+ store.getChildCount(selectedItem));
|
||||
|
||||
treePanel.setExpanded(selectedItem, true);
|
||||
} else if (output.size() == 0) {
|
||||
selectedItem.setIsExpanded(false);
|
||||
treePanel.setExpanded(selectedItem, false);
|
||||
}
|
||||
|
||||
selectedItem.setIsLoaded(true);
|
||||
|
||||
} else if (elemType.equals("database")) {
|
||||
List<FileModel> output = new ArrayList<FileModel>();
|
||||
output = result.getListOutput();
|
||||
|
||||
if (output == null) {
|
||||
rootLogger.log(Level.INFO,
|
||||
"the database has not schema");
|
||||
selectedItem.setIsExpanded(false);
|
||||
treePanel.setExpanded(selectedItem, false);
|
||||
} else {
|
||||
for (int i = 0; i < output.size(); i++) {
|
||||
// element.setIsSchema(true);
|
||||
output.get(i).setIsSchema(true);
|
||||
output.get(i).setIsExpanded(false);
|
||||
treePanel.setExpanded(output.get(i),
|
||||
false);
|
||||
}
|
||||
addChildren(selectedItem, output);
|
||||
// element.setIsLoaded(true);
|
||||
treePanel.setExpanded(selectedItem, true);
|
||||
}
|
||||
selectedItem.setIsLoaded(true);
|
||||
}
|
||||
}
|
||||
if (tree.isMasked()) {
|
||||
tree.unmask();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ 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.LoadTablesEvent;
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.RandomSamplingEvent;
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.RefreshDataEvent;
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.SamplingEvent;
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.SelectedTableEvent;
|
||||
import org.gcube.portlets.user.databasesmanager.client.events.ShowCreateTableEvent;
|
||||
|
@ -46,6 +47,7 @@ public class GxtToolbarFunctionality {
|
|||
private Button btnSimpleSample;
|
||||
private Button btnSmartSample;
|
||||
private Button btnRandomSample;
|
||||
private Button btnRefresCachedData;
|
||||
// toolbar
|
||||
private ToolBar toolBar;
|
||||
// dialog list. Each dialog contains a form
|
||||
|
@ -132,6 +134,15 @@ public class GxtToolbarFunctionality {
|
|||
btnRandomSample
|
||||
.setToolTip("retrieves 100 randomly picked rows from the table");
|
||||
toolBar.add(btnRandomSample);
|
||||
toolBar.add(new SeparatorToolItem());
|
||||
|
||||
// button for Random Sample
|
||||
btnRefresCachedData = new Button(ConstantsPortlet.REFRESHCACHEDDATA);
|
||||
btnRefresCachedData.setScale(ButtonScale.SMALL);
|
||||
btnRefresCachedData.setArrowAlign(ButtonArrowAlign.BOTTOM);
|
||||
btnRefresCachedData
|
||||
.setToolTip("refreshes data");
|
||||
toolBar.add(btnRefresCachedData);
|
||||
|
||||
// add(toolBar, new FlowData(10));
|
||||
|
||||
|
@ -143,6 +154,7 @@ public class GxtToolbarFunctionality {
|
|||
btnSimpleSample.disable();
|
||||
btnSmartSample.disable();
|
||||
btnRandomSample.disable();
|
||||
btnRefresCachedData.disable();
|
||||
}
|
||||
|
||||
private void addHandler() {
|
||||
|
@ -235,8 +247,9 @@ public class GxtToolbarFunctionality {
|
|||
new SelectionListener<ButtonEvent>() {
|
||||
@Override
|
||||
public void componentSelected(ButtonEvent ce) {
|
||||
//deactivate the button
|
||||
dialog.getButtonById(Dialog.OK).disable();
|
||||
// deactivate the button
|
||||
dialog.getButtonById(Dialog.OK)
|
||||
.disable();
|
||||
// recover info from dialog
|
||||
setInfoOnSubmitQuery(form, dialog,
|
||||
dialogID);
|
||||
|
@ -256,36 +269,37 @@ public class GxtToolbarFunctionality {
|
|||
"button Cancel event");
|
||||
|
||||
if (uidSubmitQueryList
|
||||
.get(dialogID)!=null){
|
||||
|
||||
// remove computation
|
||||
RPCservice.removeComputation(
|
||||
uidSubmitQueryList
|
||||
.get(dialogID),
|
||||
new AsyncCallback<Boolean>() {
|
||||
@Override
|
||||
public void onSuccess(
|
||||
Boolean result) {
|
||||
rootLogger
|
||||
.log(Level.SEVERE,
|
||||
"SUCCESS RPC removeComputation");
|
||||
if (result
|
||||
.booleanValue() == true) {
|
||||
.get(dialogID) != null) {
|
||||
|
||||
// remove computation
|
||||
RPCservice.removeComputation(
|
||||
uidSubmitQueryList
|
||||
.get(dialogID),
|
||||
new AsyncCallback<Boolean>() {
|
||||
@Override
|
||||
public void onSuccess(
|
||||
Boolean result) {
|
||||
rootLogger
|
||||
.log(Level.INFO,
|
||||
"computation removed with uid: "
|
||||
+ uidSubmitQueryList
|
||||
.get(dialogID));
|
||||
.log(Level.SEVERE,
|
||||
"SUCCESS RPC removeComputation");
|
||||
if (result
|
||||
.booleanValue() == true) {
|
||||
rootLogger
|
||||
.log(Level.INFO,
|
||||
"computation removed with uid: "
|
||||
+ uidSubmitQueryList
|
||||
.get(dialogID));
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onFailure(
|
||||
Throwable caught) {
|
||||
rootLogger
|
||||
.log(Level.SEVERE,
|
||||
"FAILURE RPC removeComputation");
|
||||
}
|
||||
});
|
||||
|
||||
@Override
|
||||
public void onFailure(
|
||||
Throwable caught) {
|
||||
rootLogger
|
||||
.log(Level.SEVERE,
|
||||
"FAILURE RPC removeComputation");
|
||||
}
|
||||
});
|
||||
}
|
||||
dialog.hide();
|
||||
}
|
||||
|
@ -337,6 +351,20 @@ public class GxtToolbarFunctionality {
|
|||
eventBus.fireEvent(new LoadTablesEvent());
|
||||
}
|
||||
});
|
||||
|
||||
btnRefresCachedData.addSelectionListener(new SelectionListener<ButtonEvent>(){
|
||||
|
||||
@Override
|
||||
public void componentSelected(ButtonEvent ce) {
|
||||
|
||||
rootLogger
|
||||
.log(Level.INFO,
|
||||
"REFRESH BUTTON");
|
||||
//fire event
|
||||
eventBus.fireEvent(new RefreshDataEvent());
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
// buttons enable/disable operation depending from the item selected in the
|
||||
|
@ -350,6 +378,7 @@ public class GxtToolbarFunctionality {
|
|||
switch (infoTreeDepthSelectedItem) {
|
||||
|
||||
case 1:
|
||||
btnRefresCachedData.enable();
|
||||
btnTablesList.disable();
|
||||
btnSubmitQuery.disable();
|
||||
// btnGetInfo.disable();
|
||||
|
@ -357,9 +386,11 @@ public class GxtToolbarFunctionality {
|
|||
btnSimpleSample.disable();
|
||||
btnSmartSample.disable();
|
||||
btnRandomSample.disable();
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
btnRefresCachedData.enable();
|
||||
btnTablesList.disable();
|
||||
btnSubmitQuery.disable();
|
||||
// btnGetInfo.enable();
|
||||
|
@ -367,6 +398,7 @@ public class GxtToolbarFunctionality {
|
|||
btnSimpleSample.disable();
|
||||
btnSmartSample.disable();
|
||||
btnRandomSample.disable();
|
||||
|
||||
break;
|
||||
|
||||
case 3:
|
||||
|
@ -374,6 +406,7 @@ public class GxtToolbarFunctionality {
|
|||
&& (databaseType.equals(ConstantsPortlet.MYSQL))) {
|
||||
btnTablesList.enable();
|
||||
btnSubmitQuery.enable();
|
||||
btnRefresCachedData.enable();
|
||||
// btnGetInfo.disable();
|
||||
btnShowCreateTable.disable();
|
||||
btnSimpleSample.disable();
|
||||
|
@ -385,6 +418,7 @@ public class GxtToolbarFunctionality {
|
|||
&& (databaseType.equals(ConstantsPortlet.POSTGRES))) {
|
||||
btnTablesList.disable();
|
||||
btnSubmitQuery.enable();
|
||||
btnRefresCachedData.enable();
|
||||
// btnGetInfo.disable();
|
||||
btnShowCreateTable.disable();
|
||||
btnSimpleSample.disable();
|
||||
|
@ -400,6 +434,7 @@ public class GxtToolbarFunctionality {
|
|||
// this tree level is a schema
|
||||
btnTablesList.enable();
|
||||
btnSubmitQuery.enable();
|
||||
btnRefresCachedData.disable();
|
||||
// btnShowCreateTable.enable();
|
||||
btnShowCreateTable.disable();
|
||||
btnSimpleSample.disable();
|
||||
|
@ -414,6 +449,7 @@ public class GxtToolbarFunctionality {
|
|||
btnSimpleSample.enable();
|
||||
btnSmartSample.enable();
|
||||
btnRandomSample.enable();
|
||||
btnRefresCachedData.disable();
|
||||
|
||||
}
|
||||
break;
|
||||
|
@ -425,6 +461,7 @@ public class GxtToolbarFunctionality {
|
|||
btnSimpleSample.enable();
|
||||
btnSmartSample.enable();
|
||||
btnRandomSample.enable();
|
||||
btnRefresCachedData.disable();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public class ConstantsPortlet {
|
|||
public static final String SAMPLING = "Sampling";
|
||||
public static final String SMARTSAMPLING = "Smart Sampling";
|
||||
public static final String RANDOMSAMPLING = "Random Sampling";
|
||||
public static final String REFRESHCACHEDDATA = "Refresh Data";
|
||||
|
||||
//sql Dialects
|
||||
public static final String POSTGRES = "POSTGRES";
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -3,7 +3,7 @@
|
|||
xsi:noNamespaceSchemaLocation="ehcache.xsd"
|
||||
updateCheck="true" monitoring="autodetect"
|
||||
dynamicConfig="true">
|
||||
|
||||
|
||||
|
||||
<defaultCache
|
||||
maxEntriesLocalHeap="10000"
|
||||
|
|
Loading…
Reference in New Issue