--- /dev/null
+package com.quantum.wizards;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import com.quantum.Messages;
+import com.quantum.adapters.AdapterFactory;
+import com.quantum.adapters.DatabaseAdapter;
+import com.quantum.model.JDBCDriver;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+
+
+/**
+ * @author BC
+ */
+public abstract class URLSetupControl extends Composite {
+
+ private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+ private String urlPattern;
+ private Map properties = Collections.synchronizedMap(new HashMap());
+ private final JDBCDriver driver;
+ private String connectionURL;
+
+ /**
+ * @param parent
+ * @param style
+ */
+ public URLSetupControl(Composite parent, JDBCDriver driver) {
+ super(parent, SWT.NONE);
+ this.driver = driver;
+ GridLayout layout = new GridLayout();
+ setLayout(layout);
+ this.urlPattern = AdapterFactory.getInstance().getURLPattern(driver.getClassName());
+
+ setPropertyDefaults();
+ setConnectionURL(URLBuilder.createURL(this.urlPattern, getProperties()));
+ }
+
+ /**
+ *
+ */
+ protected void createPart() {
+ Group group = new Group(this, SWT.SHADOW_ETCHED_IN);
+ group.setText(Messages.getString(URLSetupControl.class, "text"));
+ group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+
+ createPart(group);
+ }
+
+ /**
+ *
+ */
+ private void setPropertyDefaults() {
+ DatabaseAdapter adapter =
+ AdapterFactory.getInstance().getAdapter(getDriver().getType());
+ Map properties = (adapter == null) ? new HashMap() : adapter.getDefaultConnectionParameters();
+ for (Iterator i = properties.keySet().iterator(); i.hasNext();) {
+ String key = (String) i.next();
+ putProperty(key, (String) properties.get(key));
+
+ }
+ }
+
+ protected abstract void createPart(Composite parent);
+
+ private Map getProperties() {
+ return this.properties;
+ }
+
+ protected String getProperty(String name) {
+ String value = (String) this.properties.get(name);
+ return value == null ? "" : value;
+ }
+
+ protected void putProperty(String name, String value) {
+ this.properties.put(name, value);
+ setConnectionURL(URLBuilder.createURL(this.urlPattern, getProperties()));
+ }
+
+ public void addPropertyChangeListener(PropertyChangeListener listener) {
+ this.propertyChangeSupport.addPropertyChangeListener(listener);
+ }
+ public void removePropertyChangeListener(PropertyChangeListener listener) {
+ this.propertyChangeSupport.removePropertyChangeListener(listener);
+ }
+ protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
+ this.propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
+ }
+
+ protected JDBCDriver getDriver() {
+ return this.driver;
+ }
+ public String getConnectionURL() {
+ return this.connectionURL == null ? "" : this.connectionURL;
+ }
+ public void setConnectionURL(String connectionURL) {
+ if (connectionURL != null && !connectionURL.equals(this.connectionURL)) {
+ String original = this.connectionURL;
+ this.connectionURL = connectionURL;
+ firePropertyChange("connectionURL", original, connectionURL);
+ }
+ }
+}