Quantum version 2.4.1
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / wizards / URLSetupControl.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/URLSetupControl.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/URLSetupControl.java
new file mode 100644 (file)
index 0000000..b689441
--- /dev/null
@@ -0,0 +1,112 @@
+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);
+               }
+       }
+}