public Map<String, IStatus> validate(Object value, Object context) {
      if (!allowEmptyConnection
          && (value == null || "".equals(value.toString().trim()))) { // $NON-NLS-1$
        return createErrormessage(
            ISeamFacetDataModelProperties.SEAM_CONNECTION_PROFILE,
            new Status(
                IStatus.ERROR,
                SeamCorePlugin.PLUGIN_ID,
                SeamCoreMessages.VALIDATOR_FACTORY_CONNECTION_PROFILE_IS_NOT_SELECTED));
      } else {
        IConnectionProfile connProfile =
            ProfileManager.getInstance().getProfileByName(value.toString());
        Properties props = connProfile.getBaseProperties();
        Object driverClass =
            props.get("org.eclipse.datatools.connectivity.db.driverClass"); // $NON-NLS-1$

        if (driverClass == null || "".equals(driverClass)) { // $NON-NLS-1$
          return createErrormessage(
              ISeamFacetDataModelProperties.SEAM_CONNECTION_PROFILE,
              new Status(
                  IStatus.ERROR,
                  SeamCorePlugin.PLUGIN_ID,
                  NLS.bind(
                      SeamCoreMessages
                          .VALIDATOR_FACTORY_DRIVER_CLASS_PROPERTY_IS_EMPTY_FOR_SELECTED_CONNECTION_PROFILE,
                      value)));
        }
        if (props.get("org.eclipse.datatools.connectivity.driverDefinitionID") != null) {
          DriverInstance i =
              DriverManager.getInstance()
                  .getDriverInstanceByID(
                      props
                          .get("org.eclipse.datatools.connectivity.driverDefinitionID")
                          .toString()); //$NON-NLS-1$
          if (i == null) {
            return createErrormessage(
                ISeamFacetDataModelProperties.SEAM_CONNECTION_PROFILE,
                new Status(
                    IStatus.WARNING,
                    SeamCorePlugin.PLUGIN_ID,
                    NLS.bind(
                        SeamCoreMessages
                            .VALIDATOR_FACTORY_DRIVER_CLASS_PROPERTY_IS_NOT_FOUND_FOR_SELECTED_CONNECTION_PROFILE,
                        value)));
          }
        }
      }
      return NO_ERRORS;
    }
 protected static DriverInstance getDriver(IServerType serverType) {
   if (usesH2(serverType)) {
     return DriverManager.getInstance().getDriverInstanceByName(H2_DRIVER_NAME);
   }
   return DriverManager.getInstance().getDriverInstanceByName(HSQL_DRIVER_NAME);
 }
  private void createDriver2(String jbossASLocation, IServerType serverType)
      throws ConnectionProfileException {
    if (ProfileManager.getInstance().getProfileByName(DEFAULT_DS) != null) {
      // Don't create the driver a few times
      return;
    }
    String driverPath;
    try {
      driverPath = getDriverPath(jbossASLocation, serverType);
    } catch (IOException e) {
      ServerRuntimesIntegrationActivator.getDefault()
          .getLog()
          .log(
              new Status(
                  IStatus.ERROR,
                  ServerRuntimesIntegrationActivator.PLUGIN_ID,
                  Messages.JBossRuntimeStartup_Cannott_create_new_HSQL_DB_Driver,
                  e));
      return;
    }
    if (driverPath == null) {
      ServerRuntimesIntegrationActivator.getDefault()
          .getLog()
          .log(
              new Status(
                  IStatus.ERROR,
                  ServerRuntimesIntegrationActivator.PLUGIN_ID,
                  Messages.JBossRuntimeStartup_Cannot_create_new_DB_Driver));
    }

    DriverInstance driver = getDriver(serverType);
    if (driver == null) {
      TemplateDescriptor descr = getDriverTemplateDescriptor(serverType);
      IPropertySet instance =
          new PropertySetImpl(getDriverName(serverType), getDriverDefinitionId(serverType));
      instance.setName(getDriverName(serverType));
      instance.setID(getDriverDefinitionId(serverType));
      Properties props = new Properties();

      IConfigurationElement[] template = descr.getProperties();
      for (int i = 0; i < template.length; i++) {
        IConfigurationElement prop = template[i];
        String id = prop.getAttribute("id"); // $NON-NLS-1$

        String value = prop.getAttribute("value"); // $NON-NLS-1$
        props.setProperty(id, value == null ? "" : value); // $NON-NLS-1$
      }
      props.setProperty(DTP_DB_URL_PROPERTY_ID, getDriverUrl(serverType));
      props.setProperty(IDriverMgmtConstants.PROP_DEFN_TYPE, descr.getId());
      props.setProperty(IDriverMgmtConstants.PROP_DEFN_JARLIST, driverPath);
      if (usesH2(serverType)) {
        props.setProperty(
            IDBDriverDefinitionConstants.DRIVER_CLASS_PROP_ID, "org.h2.Driver"); // $NON-NLS-1$
        props.setProperty(
            IDBDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID, "H2 driver"); // $NON-NLS-1$
        props.setProperty(IDBDriverDefinitionConstants.URL_PROP_ID, "jdbc:h2:mem"); // $NON-NLS-1$
        props.setProperty(IDBDriverDefinitionConstants.USERNAME_PROP_ID, "sa"); // $NON-NLS-1$
      }

      instance.setBaseProperties(props);
      DriverManager.getInstance().removeDriverInstance(instance.getID());
      System.gc();
      DriverManager.getInstance().addDriverInstance(instance);
    }

    driver = DriverManager.getInstance().getDriverInstanceByName(getDriverName(serverType));
    if (driver != null && ProfileManager.getInstance().getProfileByName(DEFAULT_DS) == null) {
      // create profile
      Properties props = new Properties();
      props.setProperty(
          ConnectionProfileConstants.PROP_DRIVER_DEFINITION_ID, getDriverDefinitionId(serverType));
      props.setProperty(
          IDBConnectionProfileConstants.CONNECTION_PROPERTIES_PROP_ID, ""); // $NON-NLS-1$
      props.setProperty(
          IDBDriverDefinitionConstants.DRIVER_CLASS_PROP_ID,
          driver.getProperty(IDBDriverDefinitionConstants.DRIVER_CLASS_PROP_ID));
      props.setProperty(
          IDBDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID,
          driver.getProperty(IDBDriverDefinitionConstants.DATABASE_VENDOR_PROP_ID));
      props.setProperty(
          IDBDriverDefinitionConstants.DATABASE_VERSION_PROP_ID,
          driver.getProperty(IDBDriverDefinitionConstants.DATABASE_VERSION_PROP_ID));
      props.setProperty(
          IDBDriverDefinitionConstants.DATABASE_NAME_PROP_ID, "Default"); // $NON-NLS-1$
      props.setProperty(IDBDriverDefinitionConstants.PASSWORD_PROP_ID, ""); // $NON-NLS-1$
      props.setProperty(
          IDBConnectionProfileConstants.SAVE_PASSWORD_PROP_ID, "false"); // $NON-NLS-1$
      props.setProperty(
          IDBDriverDefinitionConstants.USERNAME_PROP_ID,
          driver.getProperty(IDBDriverDefinitionConstants.USERNAME_PROP_ID));
      props.setProperty(
          IDBDriverDefinitionConstants.URL_PROP_ID,
          driver.getProperty(IDBDriverDefinitionConstants.URL_PROP_ID));

      if (usesH2(serverType)) {
        ProfileManager.getInstance()
            .createProfile(
                DEFAULT_DS,
                Messages.JBossRuntimeStartup_The_JBoss_AS_H2_embedded_database,
                H2_PROFILE_ID,
                props,
                "",
                false); //$NON-NLS-1$
      } else {
        ProfileManager.getInstance()
            .createProfile(
                DEFAULT_DS,
                Messages.JBossRuntimeStartup_The_JBoss_AS_Hypersonic_embedded_database,
                HSQL_PROFILE_ID,
                props,
                "",
                false); //$NON-NLS-1$
      }
    }
  }