Example usage for org.hibernate.tool.hbm2ddl SchemaExport setFormat

List of usage examples for org.hibernate.tool.hbm2ddl SchemaExport setFormat

Introduction

In this page you can find the example usage for org.hibernate.tool.hbm2ddl SchemaExport setFormat.

Prototype

public SchemaExport setFormat(boolean format) 

Source Link

Document

Should we format the sql strings?

Usage

From source file:de.juplo.plugins.hibernate4.Hbm2DdlMojo.java

License:Apache License

@Override
public void execute() throws MojoFailureException, MojoExecutionException {
    if (skip) {/*from  w  w w .j  a v a 2 s.c o m*/
        getLog().info("Exectuion of hibernate4-maven-plugin:export was skipped!");
        project.getProperties().setProperty(EXPORT_SKIPPED_PROPERTY, "true");
        return;
    }

    File dir = new File(outputDirectory);
    if (!dir.exists())
        throw new MojoExecutionException(
                "Cannot scan for annotated classes in " + outputDirectory + ": directory does not exist!");

    Map<String, String> md5s;
    boolean modified = false;
    File saved = new File(buildDirectory + File.separator + MD5S);

    if (saved.exists()) {
        try {
            FileInputStream fis = new FileInputStream(saved);
            ObjectInputStream ois = new ObjectInputStream(fis);
            md5s = (HashMap<String, String>) ois.readObject();
            ois.close();
        } catch (Exception e) {
            md5s = new HashMap<String, String>();
            getLog().warn("Cannot read timestamps from saved: " + e);
        }
    } else {
        md5s = new HashMap<String, String>();
        try {
            saved.createNewFile();
        } catch (IOException e) {
            getLog().warn("Cannot create saved for timestamps: " + e);
        }
    }

    ClassLoader classLoader = null;
    try {
        getLog().debug("Creating ClassLoader for project-dependencies...");
        List<String> classpathFiles = project.getCompileClasspathElements();
        if (scanTestClasses)
            classpathFiles.addAll(project.getTestClasspathElements());
        URL[] urls = new URL[classpathFiles.size()];
        for (int i = 0; i < classpathFiles.size(); ++i) {
            getLog().debug("Dependency: " + classpathFiles.get(i));
            urls[i] = new File(classpathFiles.get(i)).toURI().toURL();
        }
        classLoader = new URLClassLoader(urls, getClass().getClassLoader());
    } catch (Exception e) {
        getLog().error("Error while creating ClassLoader!", e);
        throw new MojoExecutionException(e.getMessage());
    }

    Set<Class<?>> classes = new TreeSet<Class<?>>(new Comparator<Class<?>>() {
        @Override
        public int compare(Class<?> a, Class<?> b) {
            return a.getName().compareTo(b.getName());
        }
    });

    try {
        AnnotationDB db = new AnnotationDB();
        getLog().info("Scanning directory " + outputDirectory + " for annotated classes...");
        URL dirUrl = dir.toURI().toURL();
        db.scanArchives(dirUrl);
        if (scanTestClasses) {
            dir = new File(testOutputDirectory);
            if (!dir.exists())
                throw new MojoExecutionException("Cannot scan for annotated test-classes in "
                        + testOutputDirectory + ": directory does not exist!");
            getLog().info("Scanning directory " + testOutputDirectory + " for annotated classes...");
            dirUrl = dir.toURI().toURL();
            db.scanArchives(dirUrl);
        }

        Set<String> classNames = new HashSet<String>();
        if (db.getAnnotationIndex().containsKey(Entity.class.getName()))
            classNames.addAll(db.getAnnotationIndex().get(Entity.class.getName()));
        if (db.getAnnotationIndex().containsKey(MappedSuperclass.class.getName()))
            classNames.addAll(db.getAnnotationIndex().get(MappedSuperclass.class.getName()));
        if (db.getAnnotationIndex().containsKey(Embeddable.class.getName()))
            classNames.addAll(db.getAnnotationIndex().get(Embeddable.class.getName()));

        MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
        for (String name : classNames) {
            Class<?> annotatedClass = classLoader.loadClass(name);
            classes.add(annotatedClass);
            InputStream is = annotatedClass.getResourceAsStream(annotatedClass.getSimpleName() + ".class");
            byte[] buffer = new byte[1024 * 4]; // copy data in 4MB-chunks
            int i;
            while ((i = is.read(buffer)) > -1)
                digest.update(buffer, 0, i);
            is.close();
            byte[] bytes = digest.digest();
            BigInteger bi = new BigInteger(1, bytes);
            String newMd5 = String.format("%0" + (bytes.length << 1) + "x", bi);
            String oldMd5 = !md5s.containsKey(name) ? "" : md5s.get(name);
            if (!newMd5.equals(oldMd5)) {
                getLog().debug("Found new or modified annotated class: " + name);
                modified = true;
                md5s.put(name, newMd5);
            } else {
                getLog().debug(oldMd5 + " -> class unchanged: " + name);
            }
        }
    } catch (ClassNotFoundException e) {
        getLog().error("Error while adding annotated classes!", e);
        throw new MojoExecutionException(e.getMessage());
    } catch (Exception e) {
        getLog().error("Error while scanning!", e);
        throw new MojoFailureException(e.getMessage());
    }

    if (classes.isEmpty())
        throw new MojoFailureException("No annotated classes found in directory " + outputDirectory);

    getLog().debug("Detected classes with mapping-annotations:");
    for (Class<?> annotatedClass : classes)
        getLog().debug("  " + annotatedClass.getName());

    Properties properties = new Properties();

    /** Try to read configuration from properties-file */
    try {
        File file = new File(hibernateProperties);
        if (file.exists()) {
            getLog().info("Reading properties from file " + hibernateProperties + "...");
            properties.load(new FileInputStream(file));
        } else
            getLog().info("No hibernate-properties-file found! (Checked path: " + hibernateProperties + ")");
    } catch (IOException e) {
        getLog().error("Error while reading properties!", e);
        throw new MojoExecutionException(e.getMessage());
    }

    /** Overwrite values from propertie-file or set, if given */
    if (driverClassName != null) {
        if (properties.containsKey(DRIVER_CLASS))
            getLog().debug("Overwriting property " + DRIVER_CLASS + "=" + properties.getProperty(DRIVER_CLASS)
                    + " with the value " + driverClassName);
        else
            getLog().debug("Using the value " + driverClassName);
        properties.setProperty(DRIVER_CLASS, driverClassName);
    }
    if (url != null) {
        if (properties.containsKey(URL))
            getLog().debug("Overwriting property " + URL + "=" + properties.getProperty(URL)
                    + " with the value " + url);
        else
            getLog().debug("Using the value " + url);
        properties.setProperty(URL, url);
    }
    if (username != null) {
        if (properties.containsKey(USERNAME))
            getLog().debug("Overwriting property " + USERNAME + "=" + properties.getProperty(USERNAME)
                    + " with the value " + username);
        else
            getLog().debug("Using the value " + username);
        properties.setProperty(USERNAME, username);
    }
    if (password != null) {
        if (properties.containsKey(PASSWORD))
            getLog().debug("Overwriting property " + PASSWORD + "=" + properties.getProperty(PASSWORD)
                    + " with the value " + password);
        else
            getLog().debug("Using the value " + password);
        properties.setProperty(PASSWORD, password);
    }
    if (hibernateDialect != null) {
        if (properties.containsKey(DIALECT))
            getLog().debug("Overwriting property " + DIALECT + "=" + properties.getProperty(DIALECT)
                    + " with the value " + hibernateDialect);
        else
            getLog().debug("Using the value " + hibernateDialect);
        properties.setProperty(DIALECT, hibernateDialect);
    }
    if (hibernateNamingStrategy != null) {
        if (properties.contains(NAMING_STRATEGY))
            getLog().debug("Overwriting property " + NAMING_STRATEGY + "="
                    + properties.getProperty(NAMING_STRATEGY) + " with the value " + hibernateNamingStrategy);
        else
            getLog().debug("Using the value " + hibernateNamingStrategy);
        properties.setProperty(NAMING_STRATEGY, hibernateNamingStrategy);
    }

    /** The generated SQL varies with the dialect! */
    if (md5s.containsKey(DIALECT)) {
        String dialect = properties.getProperty(DIALECT);
        if (md5s.get(DIALECT).equals(dialect))
            getLog().debug("SQL-dialect unchanged.");
        else {
            getLog().debug("SQL-dialect changed: " + dialect);
            modified = true;
            md5s.put(DIALECT, dialect);
        }
    } else {
        modified = true;
        md5s.put(DIALECT, properties.getProperty(DIALECT));
    }

    if (properties.isEmpty()) {
        getLog().error("No properties set!");
        throw new MojoFailureException("Hibernate-Configuration is missing!");
    }

    Configuration config = new Configuration();
    config.setProperties(properties);

    if (properties.containsKey(NAMING_STRATEGY)) {
        String namingStrategy = properties.getProperty(NAMING_STRATEGY);
        getLog().debug("Explicitly set NamingStrategy: " + namingStrategy);
        try {
            @SuppressWarnings("unchecked")
            Class<NamingStrategy> namingStrategyClass = (Class<NamingStrategy>) Class.forName(namingStrategy);
            config.setNamingStrategy(namingStrategyClass.newInstance());
        } catch (Exception e) {
            getLog().error("Error setting NamingStrategy", e);
            throw new MojoExecutionException(e.getMessage());
        }
    }

    getLog().debug("Adding annotated classes to hibernate-mapping-configuration...");
    for (Class<?> annotatedClass : classes) {
        getLog().debug("Class " + annotatedClass);
        config.addAnnotatedClass(annotatedClass);
    }

    Target target = null;
    try {
        target = Target.valueOf(this.target.toUpperCase());
    } catch (IllegalArgumentException e) {
        getLog().error("Invalid value for configuration-option \"target\": " + this.target);
        getLog().error("Valid values are: NONE, SCRIPT, EXPORT, BOTH");
        throw new MojoExecutionException("Invalid value for configuration-option \"target\"");
    }
    Type type = null;
    try {
        type = Type.valueOf(this.type.toUpperCase());
    } catch (IllegalArgumentException e) {
        getLog().error("Invalid value for configuration-option \"type\": " + this.type);
        getLog().error("Valid values are: NONE, CREATE, DROP, BOTH");
        throw new MojoExecutionException("Invalid value for configuration-option \"type\"");
    }

    if (target.equals(Target.SCRIPT) || target.equals(Target.NONE)) {
        project.getProperties().setProperty(EXPORT_SKIPPED_PROPERTY, "true");
    }
    if (!modified && !target.equals(Target.SCRIPT) && !target.equals(Target.NONE) && !force) {
        getLog().info("No modified annotated classes found and dialect unchanged.");
        getLog().info("Skipping schema generation!");
        project.getProperties().setProperty(EXPORT_SKIPPED_PROPERTY, "true");
        return;
    }

    getLog().info("Gathered hibernate-configuration (turn on debugging for details):");
    for (Entry<Object, Object> entry : properties.entrySet())
        getLog().info("  " + entry.getKey() + " = " + entry.getValue());

    Connection connection = null;
    try {
        /**
         * The connection must be established outside of hibernate, because
         * hibernate does not use the context-classloader of the current
         * thread and, hence, would not be able to resolve the driver-class!
         */
        switch (target) {
        case EXPORT:
        case BOTH:
            switch (type) {
            case CREATE:
            case DROP:
            case BOTH:
                Class driverClass = classLoader.loadClass(properties.getProperty(DRIVER_CLASS));
                getLog().debug("Registering JDBC-driver " + driverClass.getName());
                DriverManager.registerDriver(new DriverProxy((Driver) driverClass.newInstance()));
                getLog().debug("Opening JDBC-connection to " + properties.getProperty(URL) + " as "
                        + properties.getProperty(USERNAME) + " with password "
                        + properties.getProperty(PASSWORD));
                connection = DriverManager.getConnection(properties.getProperty(URL),
                        properties.getProperty(USERNAME), properties.getProperty(PASSWORD));
            }
        }
    } catch (ClassNotFoundException e) {
        getLog().error("Dependency for driver-class " + properties.getProperty(DRIVER_CLASS) + " is missing!");
        throw new MojoExecutionException(e.getMessage());
    } catch (Exception e) {
        getLog().error("Cannot establish connection to database!");
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        if (!drivers.hasMoreElements())
            getLog().error("No drivers registered!");
        while (drivers.hasMoreElements())
            getLog().debug("Driver: " + drivers.nextElement());
        throw new MojoExecutionException(e.getMessage());
    }

    ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
    MavenLogAppender.startPluginLog(this);
    try {
        /**
         * Change class-loader of current thread, so that hibernate can
         * see all dependencies!
         */
        Thread.currentThread().setContextClassLoader(classLoader);

        SchemaExport export = new SchemaExport(config, connection);
        export.setOutputFile(outputFile);
        export.setDelimiter(delimiter);
        export.setFormat(format);
        export.execute(target, type);

        for (Object exception : export.getExceptions())
            getLog().debug(exception.toString());
    } finally {
        /** Stop Log-Capturing */
        MavenLogAppender.endPluginLog(this);

        /** Restore the old class-loader (TODO: is this really necessary?) */
        Thread.currentThread().setContextClassLoader(contextClassLoader);

        /** Close the connection */
        try {
            if (connection != null)
                connection.close();
        } catch (SQLException e) {
            getLog().error("Error while closing connection: " + e.getMessage());
        }
    }

    /** Write md5-sums for annotated classes to file */
    try {
        FileOutputStream fos = new FileOutputStream(saved);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(md5s);
        oos.close();
        fos.close();
    } catch (Exception e) {
        getLog().error("Cannot write md5-sums to file: " + e);
    }
}

From source file:org.bedework.calcore.hibernate.SchemaBuilderImpl.java

License:Apache License

@Override
public void execute(final Properties props, final String outputFile, final boolean export,
        final String delimiter) throws CalFacadeException {
    try {//from   w w  w  .  j a  va 2 s.  c om
        SchemaExport se = new SchemaExport(getConfiguration(props));

        if (delimiter != null) {
            se.setDelimiter(delimiter);
        }

        se.setFormat(true);
        se.setHaltOnError(false);
        se.setOutputFile(outputFile);

        se.execute(false, // script - causes write to System.out if true
                export, false, // drop
                true); // create
    } catch (Throwable t) {
        throw new CalFacadeException(t);
    }
}

From source file:org.bedework.synch.service.Synch.java

License:Apache License

@Override
public String schema() {
    String result = "Export complete: check logs";

    try {/*from   w w w  .j  a  v  a2 s. c om*/
        SchemaExport se = new SchemaExport(getConfiguration());

        if (getDelimiter() != null) {
            se.setDelimiter(getDelimiter());
        }

        se.setFormat(getFormat());
        se.setHaltOnError(getHaltOnError());
        se.setOutputFile(getSchemaOutFile());
        se.setImportFile(getSqlIn());

        se.execute(false, // script - causes write to System.out if true
                getExport(), getDrop(), getCreate());
    } catch (Throwable t) {
        error(t);
        result = "Exception: " + t.getLocalizedMessage();
    } finally {
        create = false;
        drop = false;
        export = false;
    }

    return result;
}

From source file:org.codehaus.mojo.hibernate3.exporter.Hbm2DDLExporterMojo.java

License:Apache License

/**
 * Overrides the default implementation of executing this goal.
 *
 * @throws MojoExecutionException if there is an error executing the goal
 *///from w ww  .  ja v a  2 s.  c  o m
protected void doExecute() throws MojoExecutionException {
    boolean scriptToConsole = getComponentProperty("console", true);
    boolean exportToDatabase = getComponentProperty("export", true);
    boolean haltOnError = getComponentProperty("haltonerror", false);
    boolean drop = getComponentProperty("drop", false);
    boolean create = getComponentProperty("create", true);
    String implementation = getComponentProperty("implementation", getComponent().getImplementation());

    Configuration configuration = getComponentConfiguration(implementation).getConfiguration(this);

    if (getComponentProperty("update", false)) {
        SchemaUpdate update = new SchemaUpdate(configuration);
        update.execute(scriptToConsole, exportToDatabase);
    } else {
        SchemaExport export = new SchemaExport(configuration);
        export.setDelimiter(getComponentProperty("delimiter", ";"));
        export.setHaltOnError(haltOnError);
        export.setFormat(getComponentProperty("format", false));

        String outputFilename = getComponentProperty("outputfilename");
        if (outputFilename != null) {
            File outputFile = HibernateUtils.prepareFile(
                    new File(getProject().getBasedir(), getComponent().getOutputDirectory()), outputFilename,
                    "outputfilename");
            export.setOutputFile(outputFile.toString());
        }

        if (drop && create) {
            export.create(scriptToConsole, exportToDatabase);
        } else {
            export.execute(scriptToConsole, exportToDatabase, drop, create);
        }

        if (export.getExceptions().size() > 0) {
            Iterator iterator = export.getExceptions().iterator();
            int cnt = 1;
            getLog().warn(export.getExceptions().size() + " errors occurred while performing <hbm2ddl>.");
            while (iterator.hasNext()) {
                getLog().error("Error #" + cnt + ": " + iterator.next().toString());
            }
            if (haltOnError) {
                throw new MojoExecutionException("Errors while performing <hbm2ddl>");
            }
        }
    }
}

From source file:org.jboss.bpm.monitor.model.hibernate.SchemaGenerator.java

License:Apache License

/**
 * Method that actually creates the file.
 *///from ww  w  .j  a v  a  2s.  c o m
private void generate(Dialect dialect) {
    String s = output.getAbsolutePath() + "/ddl_" + dialect.name().toLowerCase() + ".sql";
    cfg.setProperty("hibernate.dialect", dialect.getDialectClass());

    SchemaExport export = new SchemaExport(cfg);
    export.setDelimiter(";");
    export.setOutputFile(s);
    export.setFormat(true);
    export.setHaltOnError(true);
    export.execute(true, false, false, false);

    System.out.println("==================");
    System.out.println("DDL: " + s);
    System.out.println("==================");
}

From source file:org.kuali.mobility.shared.controllers.HomeController.java

License:Open Source License

/**
 * Controller method to download a ddl./*from   www  . j  a v a  2 s  .com*/
 */
@Deprecated
@SuppressWarnings({ "unchecked", "rawtypes" })
@RequestMapping(value = "ddl", method = RequestMethod.GET)
public void exportDatabaseSchema(HttpServletRequest request, HttpServletResponse response, Model uiModel) {
    PersistenceUnitInfo persistenceUnitInfo = getEntityManagerFactory().getPersistenceUnitInfo();

    Map jpaPropertyMap = getEntityManagerFactory().getJpaPropertyMap();
    jpaPropertyMap.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
    Configuration configuration = new Ejb3Configuration().configure(persistenceUnitInfo, jpaPropertyMap)
            .getHibernateConfiguration();

    SchemaExport schema = new SchemaExport(configuration);
    schema.setFormat(true);
    schema.setDelimiter(";");
    schema.setOutputFile("/tmp/schema.sql");
    schema.create(false, false);
}

From source file:org.openbp.server.persistence.hibernate.HibernateDDLGenerator.java

License:Apache License

/**
 * Generates the DDL files.//from  w  w w. jav  a  2 s  . co  m
 */
public void generate() {
    ProcessServer processServer = new ProcessServerFactory().createProcessServer();

    PersistenceContextProvider provider = processServer.getEngine().getPersistenceContextProvider();
    if (provider == null) {
        String msg = LogUtil.error(getClass(), "No persistence context provider configured.");
        System.err.println(msg);
        System.exit(1);
        return;
    }
    if (!(provider instanceof HibernatePersistenceContextProvider)) {
        String msg = LogUtil.error(getClass(),
                "Configured persistence context provider no no Hibernate provider (class $0).",
                provider.getClass().getName());
        System.err.println(msg);
        System.exit(1);
        return;
    }

    Configuration configuration = ((HibernatePersistenceContextProvider) provider)
            .createHibernateConfiguration();

    if (dialect != null) {
        String adapterClassName = null;
        if (dialect.indexOf('.') >= 0) {
            adapterClassName = dialect;
        } else {
            adapterClassName = "org.hibernate.dialect." + dialect + "Dialect";
        }
        configuration.setProperty("hibernate.dialect", adapterClassName);
    }

    SchemaExport se = new SchemaExport(configuration);
    se.setFormat(true);
    se.setDelimiter(";");

    String outputFile;

    if ((outputFile = prepareOutputFile(getDdlCreateFileName())) != null) {
        se.setOutputFile(outputFile);
        se.execute(false, false, false, true);
    }

    if ((outputFile = prepareOutputFile(getDdlDropFileName())) != null) {
        se.setOutputFile(outputFile);
        se.execute(false, false, true, false);
    }
}

From source file:org.springframework.cloud.dataflow.server.repository.SchemaGenerationTests.java

License:Apache License

private void generateDdlFiles(String dialect, File tempDir, PersistenceUnitInfo persistenceUnitInfo) {
    logger.info("Generating DDL script for " + dialect);

    final MetadataSources metadata = new MetadataSources(new StandardServiceRegistryBuilder()
            .applySetting("hibernate.dialect", "org.hibernate.dialect." + dialect + "Dialect")
            .applySetting("hibernate.physical_naming_strategy", SpringPhysicalNamingStrategy.class.getName())
            .applySetting("hibernate.implicit_naming_strategy", SpringImplicitNamingStrategy.class.getName())
            .build());/*from www. j av  a 2  s  .  co  m*/

    for (String clazz : persistenceUnitInfo.getManagedClassNames()) {
        logger.info(clazz);
        metadata.addAnnotatedClassName(clazz);
    }

    final SchemaExport export;
    try {
        export = new SchemaExport();
        export.setDelimiter(";");
        export.setFormat(true);
        export.setOutputFile(new File(tempDir, "schema-" + dialect.toLowerCase() + ".sql").getAbsolutePath());
    } catch (HibernateException e) {
        throw new IllegalStateException(e);
    }
    EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.SCRIPT);
    export.execute(targetTypes, SchemaExport.Action.BOTH, metadata.buildMetadata());
}

From source file:org.stanwood.media.database.DBHelper.java

License:Open Source License

/**
 * Uses to get the database schema for a given dialect
 * @param dialect The dialect//from  www. j  a  v  a  2  s. co m
 * @return The schema
 * @throws DatabaseException Thrown if their is a problem with hibernate
 */
public String getSchema(String dialect) throws DatabaseException {
    try {
        Configuration config = getConfiguration("", "", "", dialect, SchemaCheck.NONE); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        SchemaExport exporter = new SchemaExport(config);
        exporter.setFormat(true);
        File file = FileHelper.createTempFile("schema", ".sql"); //$NON-NLS-1$//$NON-NLS-2$
        try {
            exporter.setOutputFile(file.getAbsolutePath());
            exporter.create(true, false);
            return FileHelper.readFileContents(file);
        } finally {
            FileHelper.delete(file);
        }
    } catch (HibernateException e) {
        throw new DatabaseException(Messages.getString("DBHelper.UnablePrintSchema"), e); //$NON-NLS-1$
    } catch (XMLParserException e) {
        throw new DatabaseException(Messages.getString("DBHelper.UnablePrintSchema"), e); //$NON-NLS-1$
    } catch (IOException e) {
        throw new DatabaseException(Messages.getString("DBHelper.UnablePrintSchema"), e); //$NON-NLS-1$
    }
}

From source file:play.modules.db.Exporter.java

License:Apache License

public static void main(String[] args) throws Exception {

    File root = new File(System.getProperty("application.path"));
    Play.init(root, System.getProperty("play.id", ""));
    List<Class> entities = Play.classloader.getAnnotatedClasses(Entity.class);
    AnnotationConfiguration cfg = new AnnotationConfiguration();
    cfg.setProperty("hibernate.hbm2ddl.auto", "create");
    for (Class _class : entities) {
        cfg.addAnnotatedClass(_class);
    }/*  w w w .  ja v a  2s .c o  m*/

    Thread.currentThread().setContextClassLoader(Play.classloader);
    final String dialect = Play.configuration.getProperty("jpa.dialect");
    if (dialect != null)
        cfg.setProperty("hibernate.dialect", dialect);

    final String driver = Play.configuration.getProperty("db.driver");
    if (driver != null)
        cfg.setProperty("hibernate.connection.driver_class", driver);

    final String user = Play.configuration.getProperty("db.user");
    if (user != null)
        cfg.setProperty("hibernate.connection.username", user);

    final String password = Play.configuration.getProperty("db.pass");
    if (password != null)
        cfg.setProperty("hibernate.connection.password", password);

    final String url = Play.configuration.getProperty("db.url");
    if (url != null)
        cfg.setProperty("hibernate.connection.url", url);

    boolean script = true;
    boolean drop = false;
    boolean create = false;
    boolean halt = false;
    boolean export = false;
    String outFile = null;
    String importFile = "/import.sql";
    String propFile = null;
    boolean format = true;
    String delim = ";";

    for (int i = 0; i < args.length; i++) {
        if (args[i].startsWith("--")) {
            if (args[i].equals("--quiet")) {
                script = false;
            } else if (args[i].equals("--drop")) {
                drop = true;
            } else if (args[i].equals("--create")) {
                create = true;
            } else if (args[i].equals("--haltonerror")) {
                halt = true;
            } else if (args[i].equals("--export")) {
                export = true;
            } else if (args[i].startsWith("--output=")) {
                outFile = args[i].substring(9);
            } else if (args[i].startsWith("--import=")) {
                importFile = args[i].substring(9);
            } else if (args[i].startsWith("--properties=")) {
                propFile = args[i].substring(13);
            } else if (args[i].equals("--noformat")) {
                format = false;
            } else if (args[i].startsWith("--delimiter=")) {
                delim = args[i].substring(12);
            } else if (args[i].startsWith("--config=")) {
                cfg.configure(args[i].substring(9));
            } else if (args[i].startsWith("--naming=")) {
                cfg.setNamingStrategy(
                        (NamingStrategy) ReflectHelper.classForName(args[i].substring(9)).newInstance());
            }
        }

    }

    if (propFile != null) {
        Properties props = new Properties();
        props.putAll(cfg.getProperties());
        props.load(new FileInputStream(propFile));
        cfg.setProperties(props);
    }

    SchemaExport se = new SchemaExport(cfg).setHaltOnError(halt).setOutputFile(outFile)
            .setImportFile(importFile).setDelimiter(delim);
    if (format) {
        se.setFormat(true);
    }
    se.execute(script, export, drop, create);
}