/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
package org.pentaho.di.ui.core.database.dialog;
import java.util.ArrayList;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.util.StringUtil;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.ui.core.dialog.EnterTextDialog;
/**
*
* Dialog that allows you to edit the settings of a database connection.
*
* @see <code>DatabaseInfo</code>
* @author Matt
* @since 18-05-2003
*
*/
public class DatabaseDialog extends XulDatabaseDialog {
private static Class<?> PKG = DatabaseDialog.class; // for i18n purposes, needed by Translator2!!
public DatabaseDialog( Shell parent ) {
super( parent );
}
public DatabaseDialog( Shell parent, DatabaseMeta databaseMeta ) {
super( parent );
setDatabaseMeta( databaseMeta );
}
public String open() {
return super.open();
}
public static final void checkPasswordVisible( Text wPassword ) {
String password = wPassword.getText();
java.util.List<String> list = new ArrayList<String>();
StringUtil.getUsedVariables( password, list, true );
// ONLY show the variable in clear text if there is ONE variable used
// Also, it has to be the only string in the field.
//
if ( list.size() != 1 ) {
wPassword.setEchoChar( '*' );
} else {
String variableName = null;
if ( ( password.startsWith( StringUtil.UNIX_OPEN ) && password.endsWith( StringUtil.UNIX_CLOSE ) ) ) {
// ${VAR}
// 012345
//
variableName =
password.substring( StringUtil.UNIX_OPEN.length(), password.length() - StringUtil.UNIX_CLOSE.length() );
}
if ( ( password.startsWith( StringUtil.WINDOWS_OPEN ) && password.endsWith( StringUtil.WINDOWS_CLOSE ) ) ) {
// %VAR%
// 01234
//
variableName =
password.substring( StringUtil.WINDOWS_OPEN.length(), password.length()
- StringUtil.WINDOWS_CLOSE.length() );
}
// If there is a variable name in there AND if it's defined in the system properties...
// Otherwise, we'll leave it alone.
//
if ( variableName != null && System.getProperty( variableName ) != null ) {
wPassword.setEchoChar( '\0' ); // Show it all...
} else {
wPassword.setEchoChar( '*' );
}
}
}
/**
* Test the database connection
*/
public static final void test( Shell shell, DatabaseMeta dbinfo ) {
String[] remarks = dbinfo.checkParameters();
if ( remarks.length == 0 ) {
// Get a "test" report from this database
//
String reportMessage = dbinfo.testConnection();
EnterTextDialog dialog =
new EnterTextDialog(
shell, BaseMessages.getString( PKG, "DatabaseDialog.ConnectionReport.title" ), BaseMessages
.getString( PKG, "DatabaseDialog.ConnectionReport.description" ), reportMessage.toString() );
dialog.setReadOnly();
dialog.setFixed( true );
dialog.setModal();
dialog.open();
} else {
String message = "";
for ( int i = 0; i < remarks.length; i++ ) {
message += " * " + remarks[i] + Const.CR;
}
MessageBox mb = new MessageBox( shell, SWT.OK | SWT.ICON_ERROR );
mb.setText( BaseMessages.getString( PKG, "DatabaseDialog.ErrorParameters2.title" ) );
mb.setMessage( BaseMessages.getString( PKG, "DatabaseDialog.ErrorParameters2.description", message ) );
mb.open();
}
}
public static void showDatabaseExistsDialog( Shell parent, DatabaseMeta databaseMeta ) {
String title = BaseMessages.getString( PKG, "DatabaseDialog.DatabaseNameExists.Title" );
String message = BaseMessages.getString( PKG, "DatabaseDialog.DatabaseNameExists", databaseMeta.getName() );
String okButton = BaseMessages.getString( PKG, "System.Button.OK" );
MessageDialog dialog =
new MessageDialog( parent, title, null, message, MessageDialog.ERROR, new String[] { okButton }, 0 );
dialog.open();
}
}