/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright 2008 - 2009 Pentaho Corporation. All rights reserved. */ package org.pentaho.pac.client.datasources; import org.pentaho.pac.client.i18n.Messages; import org.pentaho.pac.common.NameValue; import org.pentaho.pac.common.datasources.PentahoDataSource; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.PasswordTextBox; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; public class DataSourceGeneralPanel extends VerticalPanel { public static final int PASSWORD_MAX_LENGTH = 50; HorizontalPanel jdbcClassNamePanel = new HorizontalPanel(); TextBox userNameTextBox = new TextBox(); PasswordTextBox passwordTextBox = new PasswordTextBox(); TextBox jndiNameTextBox = new TextBox(); TextBox urlTextBox = new TextBox(); private final ListBox driverList = new ListBox(); TextBox driverClassNameTextBox = new TextBox(); boolean driverClassListBoxHasValue = false; public DataSourceGeneralPanel() { jdbcClassNamePanel.add(driverClassNameTextBox); driverClassNameTextBox.setWidth("100%"); //$NON-NLS-1$ constructDatasourcePanel(); } private void constructDatasourcePanel() { add(new Label(Messages.getString("jndiName"))); //$NON-NLS-1$ add(jndiNameTextBox); add(new Label(Messages.getString("jdbcDriverClass"))); //$NON-NLS-1$ add(jdbcClassNamePanel); jdbcClassNamePanel.setWidth("100%");//$NON-NLS-1$ add(new Label(Messages.getString("dbUserName"))); //$NON-NLS-1$ add(userNameTextBox); add(new Label(Messages.getString("dbPassword"))); //$NON-NLS-1$ add(passwordTextBox); passwordTextBox.setMaxLength(PASSWORD_MAX_LENGTH); add(new Label(Messages.getString("dbUrl"))); //$NON-NLS-1$ add(urlTextBox); jndiNameTextBox.setWidth("100%"); //$NON-NLS-1$ driverList.setWidth("100%"); //$NON-NLS-1$ userNameTextBox.setWidth("100%"); //$NON-NLS-1$ passwordTextBox.setWidth("100%"); //$NON-NLS-1$ urlTextBox.setWidth("100%"); //$NON-NLS-1$ } public String getUserName() { return userNameTextBox.getText(); } public void setUserName(String userName) { this.userNameTextBox.setText(userName); } public String getPassword() { return passwordTextBox.getText(); } public void setPassword(String password) { this.passwordTextBox.setText(password); } public String getJndiName() { return jndiNameTextBox.getText(); } public void setJndiName(String jndiName) { jndiNameTextBox.setText(jndiName); } public String getDriverClass() { String returnValue = null; if(driverClassListBoxHasValue) { if((driverList.getSelectedIndex() >= 0) && (driverList.getSelectedIndex() < driverList.getItemCount())){ returnValue = driverList.getValue(driverList.getSelectedIndex()); } } else { returnValue = driverClassNameTextBox.getText(); } return returnValue; } public void setDriverClass(String className) { if(driverClassListBoxHasValue) { for (int i = 0; i < driverList.getItemCount(); i++) { if (driverList.getValue(i).equals(className)) { driverList.setSelectedIndex(i); } } } else { driverClassNameTextBox.setText(className); } } public String getUrl() { return urlTextBox.getText(); } public void setUrl(String url) { urlTextBox.setText(url); } public TextBox getUserNameTextBox() { return userNameTextBox; } public PasswordTextBox getPasswordTextBox() { return passwordTextBox; } public TextBox getJndiNameTextBox() { return jndiNameTextBox; } public ListBox getDriverClassListBox() { return driverList; } public TextBox getDriverClassTextBox() { return driverClassNameTextBox; } public TextBox getUrlTextBox() { return urlTextBox; } public void setDataSource(PentahoDataSource dataSource) { if (dataSource == null) { setUserName(""); //$NON-NLS-1$ setPassword(""); //$NON-NLS-1$ setJndiName(""); //$NON-NLS-1$ setDriverClass(""); //$NON-NLS-1$ setUrl(""); //$NON-NLS-1$ } else { setUserName(dataSource.getUserName()); setPassword(dataSource.getPassword()); setJndiName(dataSource.getName()); setDriverClass(dataSource.getDriverClass()); setUrl(dataSource.getUrl()); } } public PentahoDataSource getDataSource() { PentahoDataSource dataSource = new PentahoDataSource(); dataSource.setUserName(getUserName()); dataSource.setPassword(getPassword()); dataSource.setName(getJndiName()); dataSource.setDriverClass(getDriverClass()); dataSource.setUrl(getUrl()); return dataSource; } public void setEnabled(boolean enabled) { userNameTextBox.setEnabled(enabled); passwordTextBox.setEnabled(enabled); jndiNameTextBox.setEnabled(enabled); driverList.setEnabled(enabled); urlTextBox.setEnabled(enabled); driverClassNameTextBox.setEnabled(enabled); } public void refresh(NameValue[] drivers) { // First remove all the item in the list and then add the latest ones for(int i=0; i< driverList.getItemCount();i++) { driverList.removeItem(i); } if(drivers != null && drivers.length > 0) { for (NameValue res : drivers) driverList.addItem(res.getName(), res.getValue()); driverClassListBoxHasValue = drivers != null && drivers.length > 0; if(driverClassListBoxHasValue) { driverClassNameTextBox.removeFromParent(); jdbcClassNamePanel.add(driverList); driverList.setWidth("100%"); //$NON-NLS-1$ } else { driverList.removeFromParent(); jdbcClassNamePanel.add(driverClassNameTextBox); driverClassNameTextBox.setWidth("100%"); //$NON-NLS-1$ } } else { driverList.removeFromParent(); jdbcClassNamePanel.add(driverClassNameTextBox); driverClassNameTextBox.setWidth("100%"); //$NON-NLS-1$ } } }