- 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:
Loredana Liccardo 2014-09-12 12:05:22 +00:00
parent 82cf7995f2
commit 5386131130
14 changed files with 1566 additions and 757 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -9,5 +9,6 @@ public enum EventsTypeEnum {
RANDOM_SAMPLING_EVENT,
LOAD_TABLES_EVENT,
SELECTED_TABLE_EVENT,
CANCEL_EXECUTION_QUERY;
CANCEL_EXECUTION_QUERY,
REFRESH_DATA;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,7 +3,7 @@
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="true" monitoring="autodetect"
dynamicConfig="true">
<defaultCache
maxEntriesLocalHeap="10000"