/* * 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.MessageDialog; 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.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPropertyPage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.PropertyPage; import org.eclipsetrader.repository.hibernate.internal.Activator; import org.eclipsetrader.repository.hibernate.internal.RepositoryDefinition; public class RepositoryProperties extends PropertyPage implements IWorkbenchPropertyPage { private ComboViewer database; private Text description; private Text schema; private Text url; private Text user; private Text password; private ModifyListener modifyListener = new ModifyListener() { @Override public void modifyText(ModifyEvent e) { setValid(isValid()); } }; public RepositoryProperties() { setTitle("General"); } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) */ @Override protected Control createContents(Composite parent) { Composite content = new Composite(parent, SWT.NONE); GridLayout gridLayout = new GridLayout(2, false); gridLayout.marginWidth = gridLayout.marginHeight = 0; content.setLayout(gridLayout); initializeDialogUnits(content); 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 | SWT.PASSWORD); 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); } performDefaults(); description.addModifyListener(modifyListener); schema.addModifyListener(modifyListener); url.addModifyListener(modifyListener); user.addModifyListener(modifyListener); password.addModifyListener(modifyListener); description.setFocus(); return content; } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#isValid() */ @Override public boolean isValid() { if ("".equals(description.getText())) { return false; } if ("".equals(schema.getText())) { return false; } if ("".equals(url.getText())) { IStructuredSelection selection = (IStructuredSelection) database.getSelection(); DatabaseElement element = (DatabaseElement) selection.getFirstElement(); if (!"org.apache.derby.jdbc.EmbeddedDriver".equals(element.getDriver()) && !"org.hsqldb.jdbcDriver".equals(element.getDriver())) { return false; } } if (!"".equals(user.getText())) { if ("".equals(password.getText())) { return false; } } return true; } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performDefaults() */ @Override protected void performDefaults() { RepositoryDefinition repository = (RepositoryDefinition) getElement().getAdapter(RepositoryDefinition.class); 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; } } description.setText(repository.getLabel()); schema.setText(repository.getSchema()); url.setText(repository.getUrl() != null ? repository.getUrl() : ""); user.setText(repository.getUser() != null ? repository.getUser() : ""); password.setText(repository.getPassword() != null ? repository.getPassword() : ""); super.performDefaults(); } protected void applyChanges() { RepositoryDefinition repository = (RepositoryDefinition) getElement().getAdapter(RepositoryDefinition.class); 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("".equals(url.getText()) ? null : url.getText()); repository.setUser("".equals(user.getText()) ? null : user.getText()); repository.setPassword("".equals(password.getText()) ? null : password.getText()); } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performOk() */ @Override public boolean performOk() { if (getControl() != null) { applyChanges(); } return super.performOk(); } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performApply() */ @Override protected void performApply() { applyChanges(); Activator.saveRepositoryDefinitions(); Shell shell = getShell(); if (MessageDialog.openQuestion(shell, "EclipseTrader", "The workbench must be restarted for the changes to take effect.\r\nRestart the workbench now ?")) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { PlatformUI.getWorkbench().restart(); } }); } } }