package com.k_int.commons.installer.dbsetup;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.*;
import java.io.InputStream;
import java.net.URL;
import org.apache.commons.digester.*;
import org.apache.commons.digester.xmlrules.*;

public class DBUpdater {

  public static Log log = LogFactory.getLog(DBUpdater.class);

  public static void main(String[] args) {
    ApplicationContext ctx = null;

    if ( args.length == 0 ) {
      log.error("Usage: COLWSInstaller app_context_def.xml+++");
      System.exit(1);
    }

    // 1. Configure spring context
    ctx = new ClassPathXmlApplicationContext( args );

    // 2. Sync DB Schema
    org.hibernate.Session session = null;
    try {
      org.hibernate.SessionFactory factory = (org.hibernate.SessionFactory) ctx.getBean("COLWSSessionFactory");
      session = factory.openSession();
      // 3. Sync Data Needed

     } finally {
       if ( session != null ) {
         try { session.close(); } catch (Exception e) { }
       }
    }
  }

  public void updateDatabaseFromConfigResource(InputStream descriptor) {

    try {
      log.debug("updateDatabaseFromConfigResource - get URL");
      URL rules = DBUpdater.class.getClassLoader().getResource("com/k_int/commons/installer/dbsetup/dbinstall_digester_rules.xml");
      Digester digester = DigesterLoader.createDigester(rules);
      if ( digester == null )
        throw new RuntimeException("Problem parsing digester rules");
      //result = (QueryDescriptor) digester.parse(descriptor);
      digester.parse(descriptor);
    }
    catch ( Exception e ) {
      throw new RuntimeException("Problem parsing descriptor",e);
    }
  }

}
