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; } }