/*
* Copyright (c) 2004-2011 Marco Maccaferri and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marco Maccaferri - initial API and implementation
*/
package org.eclipsetrader.repository.hibernate.internal.ui;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
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.eclipsetrader.repository.hibernate.internal.Activator;
import org.eclipsetrader.repository.hibernate.internal.RepositoryDefinition;
public class RepositoryDialog extends TitleAreaDialog {
private ComboViewer database;
private Text description;
private Text schema;
private Text url;
private Text user;
private Text password;
private RepositoryDefinition repository;
public RepositoryDialog(Shell parentShell) {
super(parentShell);
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite content = (Composite) super.createDialogArea(parent);
Label label = new Label(content, SWT.NONE);
label.setText("Database");
database = new ComboViewer(content, SWT.READ_ONLY | SWT.DROP_DOWN);
database.getControl().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
database.setLabelProvider(new LabelProvider() {
@Override
public String getText(Object element) {
return ((DatabaseElement) element).getLabel();
}
@Override
public Image getImage(Object element) {
return ((DatabaseElement) element).getIcon();
}
});
database.setContentProvider(new ArrayContentProvider());
database.setSorter(new ViewerSorter());
database.getCombo().setVisibleItemCount(15);
label = new Label(content, SWT.NONE);
label.setText("Label");
description = new Text(content, SWT.BORDER);
description.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
label = new Label(content, SWT.NONE);
label.setText("Schema");
schema = new Text(content, SWT.BORDER);
schema.setLayoutData(new GridData(convertWidthInCharsToPixels(20), SWT.DEFAULT));
label = new Label(content, SWT.NONE);
label.setText("Connection URL");
url = new Text(content, SWT.BORDER);
url.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
((GridData) url.getLayoutData()).widthHint = convertWidthInCharsToPixels(50);
label = new Label(content, SWT.NONE);
label.setText("User Name");
user = new Text(content, SWT.BORDER);
user.setLayoutData(new GridData(convertWidthInCharsToPixels(20), SWT.DEFAULT));
label = new Label(content, SWT.NONE);
label.setText("Password");
password = new Text(content, SWT.BORDER);
password.setLayoutData(new GridData(convertWidthInCharsToPixels(20), SWT.DEFAULT));
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(Activator.CONNECTIVITY_EXTENSION_ID);
if (extensionPoint != null) {
IConfigurationElement[] configElements = extensionPoint.getConfigurationElements();
DatabaseElement[] elements = new DatabaseElement[configElements.length];
for (int i = 0; i < configElements.length; i++) {
elements[i] = new DatabaseElement(configElements[i]);
}
database.setInput(elements);
}
if (repository != null) {
DatabaseElement[] elements = (DatabaseElement[]) database.getInput();
for (int i = 0; i < elements.length; i++) {
if (elements[i].getDriver().equals(repository.getDatabaseDriver()) && elements[i].getDialect().equals(repository.getDialect())) {
database.setSelection(new StructuredSelection(elements[i]));
break;
}
}
schema.setText(repository.getSchema());
description.setText(repository.getLabel());
url.setText(repository.getUrl());
user.setText(repository.getUser());
password.setText(repository.getPassword());
}
return content;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
*/
@Override
protected void okPressed() {
IStructuredSelection selection = (IStructuredSelection) database.getSelection();
DatabaseElement element = (DatabaseElement) selection.getFirstElement();
repository.setDatabaseDriver(element.getDriver());
repository.setDialect(element.getDialect());
repository.setSchema(schema.getText());
repository.setLabel(description.getText());
repository.setUrl(url.getText());
repository.setUser(user.getText());
repository.setPassword(password.getText());
super.okPressed();
}
public RepositoryDefinition getRepository() {
return repository;
}
public void setRepository(RepositoryDefinition repository) {
this.repository = repository;
}
}