public static String getColumnName(Class classObj, String attributeName) {
    // Logger.out.debug("classObj, String attributeName "+classObj+" "+attributeName);
    Iterator it = cfg.getClassMapping(classObj).getPropertyClosureIterator();
    while (it.hasNext()) {
      Property property = (Property) it.next();

      // Logger.out.debug("property.getName() "+property.getName());
      // System.out.println();
      // System.out.print("property.getName() "+property.getName()+" ");
      if (property != null && property.getName().equals(attributeName)) {
        // System.out.println("property.getColumnSpan() "+property.getColumnSpan());
        Iterator colIt = property.getColumnIterator();
        while (colIt.hasNext()) {
          Column col = (Column) colIt.next();
          // System.out.println("col "+col.getName());
          return col.getName();
        }
      }
    }

    Property property = cfg.getClassMapping(classObj).getIdentifierProperty();
    // Logger.out.debug("property.getName() "+property.getName());
    if (property.getName().equals(attributeName)) {
      Iterator colIt = property.getColumnIterator(); // y("id").getColumnIterator();
      while (colIt.hasNext()) {
        Column col = (Column) colIt.next();
        return col.getName();
        // System.out.println(col.getName());
      }
    }

    return "";
  }
  /**
   * This method returns the supermost class of the class passed that is in the same package as
   * class
   *
   * @author aarti_sharma
   * @param objClass
   * @return
   */
  public static Class getSupermostClassInPackage(Object obj) {
    Class objClass = obj.getClass();
    Package objPackage = objClass.getPackage();
    Logger.out.debug("Input Class: " + objClass.getName() + " Package:" + objPackage.getName());

    PersistentClass persistentClass = cfg.getClassMapping(objClass);
    if (persistentClass != null && persistentClass.getSuperclass() != null) {

      Logger.out.debug(
          objPackage.getName()
              + " "
              + persistentClass.getName()
              + "*********"
              + persistentClass.getSuperclass().getMappedClass().getPackage().getName());
      Logger.out.debug(
          "!!!!!!!!!!! "
              + persistentClass
                  .getSuperclass()
                  .getMappedClass()
                  .getPackage()
                  .getName()
                  .equals(objPackage.getName()));
      do {
        persistentClass = persistentClass.getSuperclass();
      } while (persistentClass != null);
      Logger.out.debug(
          "Supermost class in the same package:" + persistentClass.getMappedClass().getName());
    } else {
      return objClass;
    }
    return persistentClass.getMappedClass();
  }
 /**
  * This function returns the role Id from hibernate mapping and returns the value
  *
  * @param attributeName
  * @return roleKeyId
  */
 public static String getRoleKeyId(String attributeName) {
   net.sf.hibernate.mapping.Collection col1 = cfg.getCollectionMapping(attributeName);
   Iterator colIt = col1.getElement().getColumnIterator();
   while (colIt.hasNext()) {
     Column col = (Column) colIt.next();
     return (col.getName());
   }
   return "";
 }
  /**
   * Execute the schema updates
   *
   * @param script print all DDL to the console
   */
  public void execute(boolean script, boolean doUpdate) {

    log.info("Running hbm2ddl schema update");

    Connection connection = null;
    DatabaseMetadata meta;
    Statement stmt = null;
    try {

      try {
        log.info("fetching database metadata");
        connection = connectionProvider.getConnection();
        if (!connection.getAutoCommit()) {
          connection.commit();
          connection.setAutoCommit(true);
        }
        meta = new DatabaseMetadata(connection, dialect);
        stmt = connection.createStatement();
      } catch (SQLException sqle) {
        log.error("could not get database metadata", sqle);
        throw sqle;
      }

      log.info("updating schema");

      String[] createSQL = configuration.generateSchemaUpdateScript(dialect, meta);
      for (int j = 0; j < createSQL.length; j++) {

        final String sql = createSQL[j];
        try {
          if (script) System.out.println(sql);
          if (doUpdate) {
            log.debug(sql);
            stmt.executeUpdate(sql);
          }
        } catch (SQLException e) {
          log.error("Unsuccessful: " + sql);
          log.error(e.getMessage());
        }
      }

      log.info("schema update complete");

    } catch (Exception e) {
      log.error("could not complete schema update", e);
    } finally {

      try {
        if (stmt != null) stmt.close();
        if (connection != null) connection.close();
        if (connectionProvider != null) connectionProvider.close();
      } catch (Exception e) {
        log.error("Error closing connection", e);
      }
    }
  }
 public static String getDataBaseName() {
   String dbName = "";
   String dialect = cfg.getProperty("hibernate.dialect");
   if (dialect.toLowerCase().indexOf("oracle") != -1) {
     dbName = Constants.ORACLE_DATABASE;
   } else if (dialect.toLowerCase().indexOf("mysql") != -1) {
     dbName = Constants.MYSQL_DATABASE;
   } else if (dialect.toLowerCase().indexOf("postgresql") != -1) {
     dbName = Constants.POSTGRESQL_DATABASE;
   }
   return dbName;
 }
  public static String getClassName(String tableName) {
    Iterator it = cfg.getClassMappings();
    PersistentClass persistentClass;
    while (it.hasNext()) {
      persistentClass = (PersistentClass) it.next();
      if (tableName.equalsIgnoreCase(persistentClass.getTable().getName())) {
        return persistentClass.getName();
      }
    }

    return "";
  }
  public static void main(String[] args) {
    try {
      Configuration cfg = new Configuration();

      boolean script = true;
      // If true then execute db updates, otherwise just generate and display updates
      boolean doUpdate = true;
      String propFile = null;

      for (int i = 0; i < args.length; i++) {
        if (args[i].startsWith("--")) {
          if (args[i].equals("--quiet")) {
            script = false;
          } else if (args[i].startsWith("--properties=")) {
            propFile = args[i].substring(13);
          } else if (args[i].startsWith("--config=")) {
            cfg.configure(args[i].substring(9));
          } else if (args[i].startsWith("--text")) {
            doUpdate = false;
          } else if (args[i].startsWith("--naming=")) {
            cfg.setNamingStrategy(
                (NamingStrategy) ReflectHelper.classForName(args[i].substring(9)).newInstance());
          }
        } else {
          cfg.addFile(args[i]);
        }
      }
      if (propFile != null) {
        Properties props = new Properties();
        props.load(new FileInputStream(propFile));
        new SchemaUpdate(cfg, props).execute(script, doUpdate);
      } else {
        new SchemaUpdate(cfg).execute(script, doUpdate);
      }
    } catch (Exception e) {
      log.error("Error running schema update", e);
      e.printStackTrace();
    }
  }
  /**
   * This method returns the list of subclasses of the className
   *
   * @author aarti_sharma
   * @param className
   * @return
   * @throws ClassNotFoundException
   */
  public static List getSubClassList(String className) throws ClassNotFoundException {
    List list = new ArrayList();
    Class classObj = Class.forName(className);
    Iterator it = cfg.getClassMapping(classObj).getDirectSubclasses();
    while (it.hasNext()) {
      Subclass subClass = (Subclass) it.next();

      System.out.println(subClass.getClass().getName());
      System.out.println("Name " + subClass.getName());
      list.add(subClass.getName());
    }
    return list;
  }
    static
    {
        try
        {

            InputStream stream = Thread.currentThread().getContextClassLoader().getResource("hibernate.properties").openStream();// Example.class.getResourceAsStream("hibernate.properties");
            try
            {
                pops.load(stream);
            }
            catch (IOException e1)
            {
                e1.printStackTrace();
            }
            Configuration cfg = new Configuration();
            cfg.addClass(Person.class);
            cfg.setProperties(pops);
            _sessions = cfg.buildSessionFactory();
            if (_sessions == null)
            {
                System.out.println("This _session is nULLL");
            }
        }
        catch (MappingException e)
        {
            e.printStackTrace();
        }
        catch (HibernateException e)
        {
            e.printStackTrace();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }
  /**
   * @param classObj Name of the class.
   * @param attributeName Name of the attribute.
   * @return The width of the column. Returns width of the column or zero.
   */
  public static int getColumnWidth(Class classObj, String attributeName) {
    Iterator it = cfg.getClassMapping(classObj).getPropertyClosureIterator();
    while (it.hasNext()) {
      Property property = (Property) it.next();

      if (property != null && property.getName().equals(attributeName)) {
        Iterator colIt = property.getColumnIterator();
        while (colIt.hasNext()) {
          Column col = (Column) colIt.next();
          return col.getLength();
        }
      }
    }
    // if attribute is not found than the default width will be 50.
    return 50;
  } // getColumnWidth
  /**
   * This Function finds all the relations in i.e Many-To-Many and One-To-Many All the relations are
   * kept in HashMap where key is formed as table1@table2@table_name@attributeName and value is
   * Many-To-Many or One-To-Many
   *
   * @return Map
   */
  private static void findRelations() {
    try {
      Iterator itr1 = cfg.getCollectionMappings();

      while (itr1.hasNext()) {
        Collection col = (Collection) itr1.next();

        if (col.getElement().getClass().getName().equals("net.sf.hibernate.mapping.ManyToOne")) {
          saveRelations(col, "ManyToMany");
        } else {
          saveRelations(col, "OneToMany");
        }
      }
    } catch (Exception e) {
      Logger.out.info("Error occured in fildAllRelations Function:" + e);
    }
  }
  public static void getDATA(Class classObj) {
    net.sf.hibernate.mapping.Collection coll =
        cfg.getCollectionMapping(
            "edu.wustl.catissuecore.domain.CollectionProtocolEvent.specimenRequirementCollection");
    // System.out.println(map);

    System.out.println(coll.getCollectionTable().getName());
    System.out.println(coll.getTable().getName());
    // System.out.println();

    Iterator it = coll.getColumnIterator();

    while (it.hasNext()) {
      // net.sf.hibernate.mapping.Set set = (net.sf.hibernate.mapping.Set)it.next();
      System.out.println(it.next());
    }
  }
 public SchemaUpdate(Configuration cfg) throws HibernateException {
   this(cfg, cfg.getProperties());
 }
 private void initHibernate() throws MappingException, HibernateException {
   Configuration cfg = new Configuration();
   cfg.addJar("retsdb2-hbm-xml.jar");
   mSessions = cfg.buildSessionFactory();
 }
 /**
  * This method returns the super class of the obj passed
  *
  * @author aarti_sharma
  * @param objClass
  * @return
  */
 public static Class getSuperClass(Object obj) {
   Class objClass = obj.getClass();
   PersistentClass persistentClass = cfg.getClassMapping(objClass);
   PersistentClass superClass = persistentClass.getSuperclass();
   return superClass.getClass();
 }
 public static String getRootTableName(Class classObj) {
   Table tbl = cfg.getClassMapping(classObj).getRootTable();
   if (tbl != null) return tbl.getName();
   return "";
 }