package org.gcube.portlets.user.databasesmanager.client.panels; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.logging.Level; 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.datamodel.Row; import org.gcube.portlets.user.databasesmanager.client.datamodel.SubmitQueryData; import org.gcube.portlets.user.databasesmanager.client.events.SelectedItemEvent; import org.gcube.portlets.user.databasesmanager.client.events.SubmitQueryEvent; import org.gcube.portlets.user.databasesmanager.client.events.interfaces.SelectedItemEventHandler; import org.gcube.portlets.user.databasesmanager.client.events.interfaces.SubmitQueryEventHandler; import org.gcube.portlets.user.databasesmanager.client.toolbar.GxtToolbarFunctionality; import org.gcube.portlets.user.databasesmanager.client.utils.ConstantsPortlet; //import org.gcube.portlets.user.dbmanager.client.GWTdbManagerServiceAsync; //import org.gcube.portlets.user.dbmanager.client.datamodel.FileModel; //import org.gcube.portlets.user.dbmanager.client.datamodel.Result; //import org.gcube.portlets.user.dbmanager.client.datamodel.Row; //import org.gcube.portlets.user.dbmanager.client.datamodel.SubmitQueryData; //import org.gcube.portlets.user.dbmanager.client.events.SelectedItemEvent; //import org.gcube.portlets.user.dbmanager.client.events.SubmitQueryEvent; //import org.gcube.portlets.user.dbmanager.client.events.interfaces.SelectedItemEventHandler; //import org.gcube.portlets.user.dbmanager.client.events.interfaces.SubmitQueryEventHandler; //import org.gcube.portlets.user.dbmanager.client.toolbar.GxtToolbarFunctionality; //import org.gcube.portlets.user.dbmanager.client.utils.ConstantsPortlet; import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.util.Margins; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; import com.extjs.gxt.ui.client.widget.grid.ColumnModel; import com.extjs.gxt.ui.client.widget.grid.Grid; import com.extjs.gxt.ui.client.widget.layout.BorderLayout; import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.layout.RowData; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.MessageBoxEvent; import com.extjs.gxt.ui.client.widget.button.Button; public class GxtBorderLayoutPanel extends ContentPanel { /* Create Root Logger */ private static Logger rootLogger = Logger.getLogger("GxtBorderLayoutPanel"); private ContentPanel north; private ContentPanel west; private LayoutContainer center; private ContentPanel centerUpper; private ContentPanel centerBottom; private GxtTreePanel treePanel; private GxtToolbarFunctionality toolbar; private ArrayList parsedList; private List listAttributes; private List rows; private HandlerManager eventBus = null; // RPC service private GWTdbManagerServiceAsync RPCservice = null; public GxtBorderLayoutPanel(HandlerManager eBus, GWTdbManagerServiceAsync service) throws Exception { eventBus = eBus; RPCservice = service; north = new ContentPanel(); west = new ContentPanel(); center = new LayoutContainer(); treePanel = new GxtTreePanel(eventBus, service); toolbar = new GxtToolbarFunctionality(eventBus, RPCservice); initLayout(); createLayouts(); addHandler(); } private void initLayout() { north.setLayout(new FitLayout()); north.setTopComponent(toolbar.getToolBar()); north.add(toolbar.getToolBar()); west.setLayout(new FitLayout()); west.setHeading("Databases Resources"); west.add(treePanel); west.setScrollMode(Scroll.AUTO); center.setLayout(new BorderLayout()); } public void createLayouts() { // Border layout for the external container final BorderLayout borderLayoutNordWest = new BorderLayout(); setLayout(borderLayoutNordWest); // NORD BorderLayoutData northData = new BorderLayoutData(LayoutRegion.NORTH, 55, 55, 70); northData.setSplit(false); // Split bar between regions // northData.setFloatable(true); // northData.setCollapsible(true); // northData.setHideCollapseTool(false); // northData.setSplit(true); northData.setMargins(new Margins(0, 0, 1, 0)); // WEST BorderLayoutData westData = new BorderLayoutData(LayoutRegion.WEST, 330, 330, 400); westData.setSplit(true); westData.setCollapsible(true); westData.setMargins(new Margins(0, 1, 0, 0)); // CENTER BorderLayoutData centerData = new BorderLayoutData(LayoutRegion.CENTER); centerData.setMargins(new Margins(0)); // center.setHeading("Information"); centerData.setSplit(true); centerData.setCollapsible(true); // CENTER UPPER centerUpper = new ContentPanel(); centerUpper.setLayout(new FitLayout()); centerUpper.setHeading("Database Information"); centerUpper.setScrollMode(Scroll.NONE); // CENTER BOTTOM centerBottom = new ContentPanel(); centerBottom.setLayout(new FitLayout()); centerBottom.setHeading("Information Details"); centerBottom.setScrollMode(Scroll.AUTO); BorderLayoutData centerUpperData = new BorderLayoutData( LayoutRegion.NORTH, 250, 100, 250); centerUpperData.setSplit(true); // Split bar between regions // northData.setFloatable(true); centerUpperData.setCollapsible(false); // northData.setHideCollapseTool(false); // northData.setSplit(true); centerUpperData.setMargins(new Margins(0, 0, 1, 0)); // BorderLayoutData centerBottomData = new // BorderLayoutData(LayoutRegion.CENTER, // 50, 30, 50); BorderLayoutData centerBottomData = new BorderLayoutData( LayoutRegion.CENTER); centerBottomData.setSplit(true); centerBottomData.setCollapsible(false); centerBottomData.setMargins(new Margins(0)); // centerBottomData.setMargins(new Margins(1, 0, 0, 0)); // to add the central panels to the second container center.add(centerUpper, centerUpperData); center.add(centerBottom, centerBottomData); add(north, northData); add(west, westData); add(center, centerData); // add(east, eastData); } private void addHandler() { eventBus.addHandler(SelectedItemEvent.TYPE, new SelectedItemEventHandler() { public void onSelectedItem( SelectedItemEvent selectedItemEvent) { // System.out // .println("GxtBorderLayoutPanel: Event received"); rootLogger.log(Level.SEVERE, "Event received"); int DepthSelectedItem = treePanel .getTreeDepthSelectedItem(); // System.out.println("GxtBorderLayoutPanel-> Depth: " // + DepthSelectedItem); // element name selected String text = treePanel.getValue(); // System.out // .println("GxtBorderLayoutPanel-> item selected: " // + text); rootLogger.log(Level.INFO, "item selected: " + text); toolbar.disableButtonOnToolbar(DepthSelectedItem, treePanel.getSelectedItemIsSchema()); if (DepthSelectedItem != 3) { centerUpper.removeAll(); centerUpper.layout(true); } List data = treePanel.getTreePanel() .getSelectionModel().getSelectedItems(); FileModel selectedItem = data.get(0); if (DepthSelectedItem == 3) { // the item selected is a // database. // show database information in the panel // List data = treePanel.getTreePanel() // .getSelectionModel().getSelectedItems(); // FileModel selectedItem = data.get(0); FileModel parent = treePanel.getTreeStore() .getParent(selectedItem); // displayDBInfo(parent); // display information about the selected database displayDBInfo(data.get(0)); } //display the table name in the right panel when a table is selected if (DepthSelectedItem == 5){ centerUpper.removeAll(); centerUpper.addText(data.get(0).getName()); centerUpper.layout(true); } if ((DepthSelectedItem == 4) && (data.get(0).isSchema() == false)){ centerUpper.removeAll(); centerUpper.addText(data.get(0).getName()); centerUpper.layout(true); } // System.out // .println("GxtBorderLayoutPanel: Event finished"); rootLogger.log(Level.SEVERE, "Event finished"); } }); eventBus.addHandler(SubmitQueryEvent.TYPE, new SubmitQueryEventHandler() { @Override public void onSubmitQuery(SubmitQueryEvent submitQueryEvent) { // TODO Auto-generated method stub try { submitQuery(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } private void submitQuery() throws Exception { // System.out.println("Start RPC - submitQuery"); rootLogger.log(Level.SEVERE, "Start RPC - submitQuery"); // recover input data LinkedHashMap dataDB = treePanel .getInfoOnSelectedItem(); final SubmitQueryData dataQuery = toolbar.getSubmitQueryData(); // RPCservice.submitQuery(dataDB, dataQuery.getQuery(), // dataQuery.getReadOnlyQuery(), dataQuery.getSmartCorrection(), // dataQuery.getLanguage(), new AsyncCallback>() { // force the "true" value for the readonly input. // determine the language List data = treePanel.getTreePanel().getSelectionModel() .getSelectedItems(); FileModel selectedItem = data.get(0); String dialect; if (selectedItem.isDatabase()) { // the selected item is a database // System.out.println("the selected item is a database"); rootLogger.log(Level.INFO, "the selected item is a database"); // determine the dialect recovering the dialect dialect = selectedItem.getDBInfo().get(2).getValue(); rootLogger.log(Level.INFO, "determined Dialect for smart correction: " + dialect); } else { FileModel parent1 = treePanel.getTreeStore() .getParent(selectedItem); if (parent1.isDatabase()) { // the selected item is a schema // System.out.println("the selected item is a schema"); rootLogger.log(Level.INFO, "the selected item is a schema"); // determine the dialect recovering the dialect dialect = parent1.getDBInfo().get(2).getValue(); rootLogger.log(Level.INFO, "determined Dialect for smart correction: " + dialect); } else { // the selected item is a table // System.out.println("the selected item is a table"); rootLogger.log(Level.INFO, "the selected item is a table"); FileModel parent2 = treePanel.getTreeStore().getParent(parent1); // determine the dialect recovering the dialect dialect = parent2.getDBInfo().get(2).getValue(); rootLogger.log(Level.INFO, "determined Dialect for smart correction: " + dialect); } } String language = ConstantsPortlet.NONE; if (dialect.toUpperCase().contains(ConstantsPortlet.POSTGRES)) { language = ConstantsPortlet.POSTGRES; } if (dialect.toUpperCase().contains(ConstantsPortlet.MYSQL)) { language = ConstantsPortlet.MYSQL; } rootLogger.log(Level.INFO, "Dialect used for smart correction: " + language); RPCservice.submitQuery(dataDB, dataQuery.getQuery(), true, dataQuery.getSmartCorrection(), language, new AsyncCallback>() { // // TO REMOVE data "true" and "POSTGRES" // RPCservice.submitQuery(dataDB, dataQuery.getQuery(), // true, // dataQuery.getSmartCorrection(), "POSTGRES", // new AsyncCallback>() { @Override public void onFailure(Throwable caught) { // Window.alert(caught.getMessage()); // System.out.println("FAILURE submitQuery"); rootLogger.log(Level.SEVERE, "FAILURE RPC submitQuery"); Listener l = new Listener() { public void handleEvent(MessageBoxEvent ce) { // Button btn = ce.getButtonClicked(); // Info.display("MessageBox", "The '{0}' button was pressed", btn.getHtml()); // Button btn = ce.getButtonClicked(); Dialog form = toolbar.getDialogForm(); if (form.isMasked()) form.unmask(); } }; // MessageBox.alert("Error ","
Cause:"+caught.getCause()+"
Message:"+caught.getMessage(), l); MessageBox.alert("Error ","
Message:"+caught.getMessage(), l); } @Override public void onSuccess(List result) { // TODO Auto-generated method stub // System.out.println("SUCCESS submitQuery"); rootLogger.log(Level.SEVERE, "SUCCESS RPC submitQuery"); rows = new ArrayList(); // System.out.println("result size: " + result.size()); rootLogger.log(Level.SEVERE, "output size: " + result.size()); // recover query // Result query = result.remove(0); // recover converted query Result convertedQuery; if (dataQuery.getSmartCorrection() == true) { result.remove(0); // convertedQuery = result.get(1); } // 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); } }); } // start the parsing of the submit result in order to obtain a table private void parseResult(List result) { RPCservice.parseCVSString(result, listAttributes, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub Window.alert(caught.getMessage()); // System.out.println("FAILURE StartParse"); rootLogger.log(Level.SEVERE, "FAILURE RPC parseResult"); } @Override public void onSuccess(List rows) { // System.out.println("Success StartParse"); rootLogger.log(Level.SEVERE, "SUCCESS RPC parseResult"); if (rows != null) { Dialog form = toolbar.getDialogForm(); if (form.isMasked()) form.unmask(); form.hide(); // Display the submit query result as a table Dialog submitResult = new Dialog(); submitResult.setLayout(new FitLayout()); submitResult.setHeading("Result"); submitResult.setResizable(false); // submitResult.setHeading("Submit Query"); // submitResult.setWidth(290); // submitResult.setHeight(250); submitResult.setModal(true); submitResult.setBlinkModal(true); // submitResult.setBodyStyle("padding:9px;"); submitResult.setSize(600, 400); // submitResult.setScrollMode(Scroll.AUTO); submitResult.setScrollMode(Scroll.NONE); submitResult.setHideOnButtonClick(true); submitResult.setMaximizable(true); // submitResult.addText("Result Table"); ListStore store = new ListStore(); store.add(rows); Grid grid; grid = new Grid(store, createColumnModel()); // grid.setAutoExpandColumn("value"); grid.setBorders(true); // grid.setAutoWidth(true); RowData data = new RowData(.5, 1); data.setMargins(new Margins(6)); submitResult.add(grid, data); submitResult.show(); } } }); } // private void updateListRow(Row row){ // // // // rows.add(row); // // System.out.println("CHECK size2: " + rows.size()); // // // } // private void returnParsedeList(List result) { // // parsedList = new ArrayList(); // for (String s : result) { // // System.out.println("value: " + result); // parsedList.add(s); // } // // System.out.println("size row1: " + result.size()); // // } private void getListAttributes(String value) { // recover attribute fields fo the result table String headers = value; // System.out.println("headers: " + headers); rootLogger.log(Level.INFO, "Headers fields table: " + headers); listAttributes = parseAttributesTableResult(headers); // System.out.println("attributes number: " + listAttributes.size()); rootLogger.log(Level.INFO, "attributes number: " + listAttributes.size()); rootLogger.log(Level.INFO, "attributes list: "); for (int i = 0; i < listAttributes.size(); i++) { // System.out.println(listAttributes.get(i)); rootLogger.log(Level.INFO, "attribute: " + listAttributes.get(i)); } } private ColumnModel createColumnModel() { List configs = new ArrayList(); ColumnConfig column; column = new ColumnConfig(); column.setId("index"); column.setHeader("Index"); column.setWidth(100); column.setSortable(false); configs.add(column); for (int i = 0; i < listAttributes.size(); i++) { // System.out.println("attribute: " + listAttributes.get(i)); rootLogger.log(Level.INFO, "attribute: " + listAttributes.get(i)); column = new ColumnConfig(); column.setId(listAttributes.get(i)); // column.setId("\"" + fields.get(i) + "\""); column.setHeader(listAttributes.get(i)); column.setWidth(100); column.setSortable(false); configs.add(column); } return new ColumnModel(configs); } // private String[] parseAttributesTableResult(String value) { // // System.out.println("parsing attributes table"); // // String todelete = "[,]"; // // value = value.replaceAll(todelete, " "); // value = value.replaceAll("[ ]+", " "); // // String[] tokens = value.split("[ ]"); // return tokens; // // } private List parseAttributesTableResult(String phrase) { String delimiter = ","; List elements = new ArrayList(); int idxdelim = -1; phrase = phrase.trim(); while ((idxdelim = phrase.indexOf(delimiter)) >= 0) { elements.add(phrase.substring(0, idxdelim)); phrase = phrase.substring(idxdelim + 1).trim(); } elements.add(phrase); return elements; } private ColumnModel createColumnModelForDBInfo(List result) { List configs = new ArrayList(); ColumnConfig column = new ColumnConfig(); column.setId("index"); column.setHeader("Property"); column.setWidth(100); column.setSortable(false); configs.add(column); column = new ColumnConfig(); column.setId("value"); column.setHeader("Value"); column.setWidth(600); column.setSortable(false); configs.add(column); ListStore store = new ListStore(); store.add(result); return new ColumnModel(configs); } private void displayDBInfo(FileModel element) { // System.out.println("GxtBorderLayout->displaying info"); rootLogger.log(Level.INFO, "displaying info"); // LinkedHashMap data = element.getDBInfo(); List dataDB = element.getDBInfo(); // System.out.println("GxtBorderLayout->size info: " + dataDB.size()); rootLogger.log(Level.INFO, "info size: " + dataDB.size()); ListStore store = new ListStore(); store.add(dataDB); Grid grid = new Grid(store, createColumnModelForDBInfo(dataDB)); // grid.setAutoExpandColumn("name"); grid.setBorders(true); // grid.setAutoWidth(true); RowData data = new RowData(.5, 1); data.setMargins(new Margins(6)); centerUpper.removeAll(); centerUpper.add(grid, data); centerUpper.layout(true); } }