Quantum version 2.4.1
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / wizards / URLSetupControlFactory.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/URLSetupControlFactory.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/URLSetupControlFactory.java
new file mode 100644 (file)
index 0000000..0b204d5
--- /dev/null
@@ -0,0 +1,80 @@
+package com.quantum.wizards;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import com.quantum.adapters.AdapterFactory;
+import com.quantum.model.JDBCDriver;
+
+import org.eclipse.swt.widgets.Composite;
+
+
+/**
+ * @author BC Holmes
+ */
+public class URLSetupControlFactory {
+       
+       public static boolean hasControl(JDBCDriver driver) {
+               return null != getControlClass(driver);
+       }
+
+       public static URLSetupControl create(JDBCDriver driver, Composite composite) {
+               Class controlClass = getControlClass(driver);
+               
+               if (BasicThreePartURLSetupControl.class == controlClass) {
+                       URLSetupControl control =  new BasicThreePartURLSetupControl(composite, driver);
+                       control.createPart();
+                       return control;
+               } else if (BasicOnePartURLSetupControl.class == controlClass) {
+                       String[] properties = getProperties(driver);
+                       URLSetupControl control = new BasicOnePartURLSetupControl(composite, driver, properties[0]);
+                       control.createPart();
+                       return control;
+               } else if (InformixURLSetupControl.class == controlClass) {
+                       URLSetupControl control = new InformixURLSetupControl(composite, driver);
+                       control.createPart();
+                       return control;
+               } else {
+                       return null;
+               }
+       }
+       
+       private static Class getControlClass(JDBCDriver driver) {
+               String[] parameters = getProperties(driver);
+               List parametersList = new ArrayList();
+               if (parameters != null) {
+                       parametersList.addAll(Arrays.asList(parameters));
+               }
+               
+               if (parametersList.size() == 3 
+                               && parametersList.contains("dbname")
+                               && parametersList.contains("hostname")
+                               && parametersList.contains("port")) {
+                       return BasicThreePartURLSetupControl.class;
+               } else if (parametersList.size() == 4 
+                                       && parametersList.contains("dbname")
+                                       && parametersList.contains("hostname")
+                                       && parametersList.contains("informixserver")
+                                       && parametersList.contains("port")) {
+                               return InformixURLSetupControl.class;
+               } else if (parametersList.size() == 1 
+                                       && (parametersList.contains("dbname")
+                                                       || parametersList.contains("datasource"))) {
+                               return BasicOnePartURLSetupControl.class;
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * @param driver
+        * @return
+        */
+       private static String[] getProperties(JDBCDriver driver) {
+               String driverClassName = driver.getClassName();
+               String urlPattern = AdapterFactory.getInstance().getURLPattern(driverClassName);
+               String[] parameters = URLBuilder.getVariableNames(urlPattern);
+               return parameters;
+       }
+}