Comment 3 for bug 704933

Revision history for this message
rrmckinley (rrmckinley) wrote :

I consider this out of scope for the generator. It is very easy to solve your problem at the exporter level. I'll post what I use below. It uses a config file for the schema info. Run it many times for many config files. If you don't want to repeat your package name in the config file, then add a little "SCHEMA_NAME".toLowerCase().replace('_', '.') too my example.

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

import com.mysema.codegen.CodeWriter;
import com.mysema.query.codegen.BeanSerializer;
import com.mysema.query.codegen.EntityType;
import com.mysema.query.codegen.Property;
import com.mysema.query.codegen.SerializerConfig;
import com.mysema.query.sql.Configuration;
import com.mysema.query.sql.MetaDataExporter;
import com.mysema.query.sql.MetaDataSerializer;
import com.mysema.query.sql.NamingStrategy;

public class SqlExporter {
 Connection conn; // connection of database containing the schema to use
 MetaDataExporter exporter;

 public static void main(String args[]) throws Exception {
  SqlExporter e = new SqlExporter(args[0]);

  e.exporter.export(e.conn.getMetaData());
  System.out.println("Completed");
 }

 public SqlExporter(String conf) throws Exception {
  Properties p = new Properties();
  p.load(new FileInputStream(conf));

  String jdbcClass = p.getProperty("jdbcClass");
  String jdbcURL = p.getProperty("jdbcURL");
  String jdbcUser = p.getProperty("jdbcUser");
  String jdbcPwd = p.getProperty("jdbcPwd");

  System.out.println("Connecting to Database " + jdbcURL + " User "
    + jdbcUser);
  Class.forName(jdbcClass).newInstance();
  conn = DriverManager.getConnection(jdbcURL, jdbcUser, jdbcPwd);
  System.out.println("Connected successfully");

  String namePrefix = p.getProperty("namePrefix");
  String packageName = p.getProperty("packageName");
  String schemaPattern = p.getProperty("schemaPattern");
  String tableNamePattern = p.getProperty("tableNamePattern");
  File targetFolder = new File(p.getProperty("targetFolder"));
  String namingStrategyName = p.getProperty("namingStrategy");

  String databaseName = p.getProperty("databaseName");

  NamingStrategy namingStrategy = (NamingStrategy) Class
    .forName(namingStrategyName).newInstance();

  MetaDataSerializer serializer = new MetaDataSerializer(namePrefix, namingStrategy);
  BeanSerializer beanSerializer = new BeanSerializer();

  exporter = new MetaDataExporter();
  exporter.setSerializer(serializer);
  exporter.setBeanSerializer(beanSerializer);
  exporter.setNamePrefix(namePrefix);
  exporter.setPackageName(packageName);
  exporter.setTargetFolder(targetFolder);
  exporter.setNamingStrategy(namingStrategy);
  exporter.setSchemaPattern(schemaPattern);
  exporter.setTableNamePattern(tableNamePattern);
 }
}