/* * Copyright (c) 2015 Data Harmonisation Panel * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * Data Harmonisation Panel <http://www.dhpanel.eu> */ package eu.esdihumboldt.hale.io.jdbc.ui; import java.io.IOException; import java.io.OutputStream; import java.net.URI; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import eu.esdihumboldt.hale.common.core.io.ExportProvider; import eu.esdihumboldt.hale.common.core.io.supplier.LocatableOutputSupplier; import eu.esdihumboldt.hale.ui.io.target.AbstractTarget; /** * Target for JDBC URLs. * * @author Simon Templer */ public class JDBCTarget extends AbstractTarget<ExportProvider> { private ComboViewer driver; private Text host; private Text database; @Override public void createControls(Composite page) { page.setLayout(GridLayoutFactory.swtDefaults().numColumns(2).create()); GridDataFactory labelData = GridDataFactory.swtDefaults().align(SWT.END, SWT.CENTER); GridDataFactory compData = GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER) .grab(true, false); // driver Label labelDriver = new Label(page, SWT.NONE); labelDriver.setText("Driver"); labelData.applyTo(labelDriver); driver = JDBCComponents.createDriverSelector(page); compData.applyTo(driver.getControl()); // driver selection listener driver.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { updateState(); } }); // host Label labelHost = new Label(page, SWT.NONE); labelHost.setText("Host(:Port)"); labelData.applyTo(labelHost); host = new Text(page, SWT.BORDER | SWT.SINGLE); compData.applyTo(host); host.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { updateState(); } }); // database Label labelDatabase = new Label(page, SWT.NONE); labelDatabase.setText("Database"); labelData.applyTo(labelDatabase); database = new Text(page, SWT.BORDER | SWT.SINGLE); compData.applyTo(database); database.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { updateState(); } }); // initial state update updateState(); } /** * Update the page state. */ protected void updateState() { setValid(buildURI() != null); } private URI buildURI() { return JDBCComponents.buildURI(getPage(), driver, host, database); } @Override public boolean updateConfiguration(ExportProvider provider) { final URI targetURI = buildURI(); if (targetURI != null) { provider.setTarget(new LocatableOutputSupplier<OutputStream>() { @Override public OutputStream getOutput() throws IOException { throw new UnsupportedOperationException(); } @Override public URI getLocation() { return targetURI; } }); return true; } return false; } }