--- /dev/null
+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;
+ }
+}