/**
* Licensed to Neo Technology under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Neo Technology licenses this file to you 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.neo4j.neoclipse.connection.dialogs;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.neoclipse.Activator;
import org.neo4j.neoclipse.connection.Alias;
import org.neo4j.neoclipse.connection.ConnectionsView;
import org.neo4j.neoclipse.preference.Preferences;
import org.neo4j.neoclipse.util.ApplicationUtil;
import org.neo4j.neoclipse.view.ErrorMessage;
/**
* @author Radhakrishna Kalyan
*
*/
public class CreateAliasDialog extends TitleAreaDialog
{
private static final int SIZING_TEXT_FIELD_WIDTH = 250;
public enum Type
{
CREATE( "New" ),
EDIT( "Edit" );
private String name;
Type( String str )
{
name = str;
}
public String getName()
{
return name;
}
}
private final Type type;
private Text nameField;
private DirectoryFieldEditor urlField;
private Button autoConnectButton;
private Button allowUpgrade;
private Text userField;
private Text passwordField;
public CreateAliasDialog( Shell parentShell, Type type )
{
super( parentShell );
this.type = type;
}
@Override
protected void configureShell( Shell shell )
{
super.configureShell( shell );
if ( type == Type.CREATE )
{
shell.setText( "Create new connection" );
}
else if ( type == Type.EDIT )
{
shell.setText( "Edit connection" );
}
}
@Override
protected void createButtonsForButtonBar( Composite parent )
{
super.createButtonsForButtonBar( parent );
validate();
}
@Override
protected Control createContents( Composite parent )
{
Control contents = super.createContents( parent );
if ( type == Type.CREATE )
{
setTitle( "Create new connection" );
}
else if ( type == Type.EDIT )
{
setTitle( "Edit connection" );
Alias selectedAlias = Activator.getDefault().getConnectionsView().getSelectedAlias();
nameField.setEnabled( false );
autoConnectButton.setEnabled( false );
allowUpgrade.setSelection( Boolean.parseBoolean( selectedAlias
.getConfigurationByKey( GraphDatabaseSettings.allow_store_upgrade.name() ) ) );
nameField.setText( selectedAlias.getName() );
urlField.setStringValue( selectedAlias.getUri() );
userField.setText( ApplicationUtil.returnEmptyIfBlank( selectedAlias.getUserName() ) );
passwordField.setEchoChar( '*' );
passwordField.setText( ApplicationUtil.returnEmptyIfBlank( selectedAlias.getPassword() ) );
}
return contents;
}
@Override
protected Control createDialogArea( Composite parent )
{
// top level composite
Composite parentComposite = (Composite) super.createDialogArea( parent );
// create a composite with standard margins and spacing
Composite composite = new Composite( parentComposite, SWT.NONE );
GridLayout layout = new GridLayout();
layout.marginHeight = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_MARGIN );
layout.marginWidth = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_MARGIN );
layout.verticalSpacing = convertVerticalDLUsToPixels( IDialogConstants.VERTICAL_SPACING );
layout.horizontalSpacing = convertHorizontalDLUsToPixels( IDialogConstants.HORIZONTAL_SPACING );
composite.setLayout( layout );
composite.setLayoutData( new GridData( GridData.FILL_BOTH ) );
composite.setFont( parentComposite.getFont() );
Composite nameGroup = new Composite( composite, SWT.NONE );
layout = new GridLayout();
layout.numColumns = 3;
layout.marginWidth = 10;
nameGroup.setLayout( layout );
GridData data = new GridData( SWT.FILL, SWT.CENTER, true, false );
nameGroup.setLayoutData( data );
Label label = new Label( nameGroup, SWT.WRAP );
label.setText( ( "Name *" ) );
nameField = new Text( nameGroup, SWT.BORDER );
data = new GridData( GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL );
data.horizontalSpan = 2;
data.widthHint = SIZING_TEXT_FIELD_WIDTH;
nameField.setLayoutData( data );
nameField.addKeyListener( new KeyListener()
{
@Override
public void keyPressed( org.eclipse.swt.events.KeyEvent e )
{
validate();
};
@Override
public void keyReleased( org.eclipse.swt.events.KeyEvent e )
{
validate();
};
} );
urlField = new DirectoryFieldEditor( Preferences.DATABASE_LOCATION, "URI *", nameGroup );
urlField.getTextControl( nameGroup ).addKeyListener( new KeyListener()
{
@Override
public void keyReleased( KeyEvent arg0 )
{
validate();
}
@Override
public void keyPressed( KeyEvent arg0 )
{
validate();
}
} );
urlField.setPropertyChangeListener( new IPropertyChangeListener()
{
@Override
public void propertyChange( PropertyChangeEvent event )
{
validate();
}
} );
new Label( nameGroup, SWT.NONE );
Label label3 = new Label( nameGroup, SWT.WRAP );
label3.setText( ( "i.e http://localhost:7474/db/data/ or C:/neo4j/db " ) );
data = new GridData( GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL );
data.horizontalSpan = 2;
data.widthHint = SIZING_TEXT_FIELD_WIDTH;
label3.setLayoutData( data );
new Label( nameGroup, SWT.NONE );
Composite connectionPropertiesComposite = new Composite( nameGroup, SWT.NONE );
connectionPropertiesComposite.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
gridLayout.marginWidth = 0;
connectionPropertiesComposite.setLayout( gridLayout );
data = new GridData( GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL );
data.horizontalSpan = 2;
connectionPropertiesComposite.setLayoutData( data );
autoConnectButton = new Button( connectionPropertiesComposite, SWT.CHECK );
GridData gd_autoLogonButton = new GridData( 108, SWT.DEFAULT );
autoConnectButton.setLayoutData( gd_autoLogonButton );
autoConnectButton.setText( "Auto Connect" );
allowUpgrade = new Button( connectionPropertiesComposite, SWT.CHECK );
GridData gd_allowUpgrade = new GridData( 128, SWT.DEFAULT );
allowUpgrade.setLayoutData( gd_allowUpgrade );
allowUpgrade.setText( GraphDatabaseSettings.allow_store_upgrade.name() );
allowUpgrade.setSelection( true );
Label label4 = new Label( nameGroup, SWT.WRAP );
label4.setText( ( "User" ) );
userField = new Text( nameGroup, SWT.BORDER );
data = new GridData( GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL );
data.horizontalSpan = 2;
data.widthHint = SIZING_TEXT_FIELD_WIDTH;
userField.setLayoutData( data );
Label label5 = new Label( nameGroup, SWT.WRAP );
label5.setText( ( "Password" ) );
passwordField = new Text( nameGroup, SWT.BORDER );
passwordField.setEchoChar( '*' );
data = new GridData( GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL );
data.horizontalSpan = 2;
data.widthHint = SIZING_TEXT_FIELD_WIDTH;
passwordField.setLayoutData( data );
new Label( nameGroup, SWT.NONE );
connectionPropertiesComposite = new Composite( nameGroup, SWT.NONE );
connectionPropertiesComposite.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
gridLayout = new GridLayout();
gridLayout.numColumns = 2;
gridLayout.marginWidth = 0;
connectionPropertiesComposite.setLayout( gridLayout );
data = new GridData( GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL );
data.horizontalSpan = 2;
connectionPropertiesComposite.setLayoutData( data );
return parentComposite;
}
@Override
protected void okPressed()
{
try
{
Alias alias = new Alias( nameField.getText(), urlField.getStringValue(), userField.getText(),
passwordField.getText() );
alias.addConfiguration( GraphDatabaseSettings.allow_store_upgrade.name(),
Boolean.toString( allowUpgrade.getSelection() ) );
if ( type == Type.EDIT )
{
Alias selectedAlias = Activator.getDefault().getConnectionsView().getSelectedAlias();
Activator.getDefault().getAliasManager().removeAlias( selectedAlias );
}
Activator.getDefault().getAliasManager().addAlias( alias );
ConnectionsView connectionsView = Activator.getDefault().getConnectionsView();
if ( autoConnectButton.getSelection() )
{
connectionsView.startOrStopConnection( alias );
}
close();
}
catch ( Exception e )
{
ErrorMessage.showDialog( type.getName() + " connection problem", e );
}
}
@Override
protected void setShellStyle( int newShellStyle )
{
super.setShellStyle( newShellStyle | SWT.RESIZE );
}
private void validate()
{
boolean enableDisable = false;
if ( !urlField.getStringValue().trim().isEmpty() && ( nameField.getText().trim().length() > 0 ) )
{
enableDisable = true;
}
Button okBtn = getButton( IDialogConstants.OK_ID );
if ( okBtn != null )
{
okBtn.setEnabled( enableDisable );
}
}
}