View Javadoc

    1   /*
    2    * joey-gen and its relative products are published under the terms
    3    * of the Apache Software License.
    4    *
    5    * Created on 2004/08/16 14:24:25
    6    */
    7   package org.asyrinx.joey.gen.model.rdb.xml;
    8
    9   import java.io.FileInputStream;
    10  import java.io.IOException;
    11  import java.io.InputStream;
    12
    13  import org.apache.commons.logging.LogFactory;
    14  import org.asyrinx.brownie.core.xml.digester.AsyrinxDigester;
    15  import org.asyrinx.joey.gen.model.EnumerationEntry;
    16  import org.asyrinx.joey.gen.model.rdb.Column;
    17  import org.asyrinx.joey.gen.model.rdb.Database;
    18  import org.asyrinx.joey.gen.model.rdb.Databases;
    19  import org.asyrinx.joey.gen.model.rdb.RdbEnumeration;
    20  import org.asyrinx.joey.gen.model.rdb.ForeignKey;
    21  import org.asyrinx.joey.gen.model.rdb.ForeignKeyEntry;
    22  import org.asyrinx.joey.gen.model.rdb.Index;
    23  import org.asyrinx.joey.gen.model.rdb.IndexEntry;
    24  import org.asyrinx.joey.gen.model.rdb.Table;
    25  import org.asyrinx.joey.gen.model.rdb.TablePattern;
    26  import org.asyrinx.joey.gen.model.rdb.TablePatternParam;
    27  import org.asyrinx.joey.gen.model.rdb.Unique;
    28  import org.xml.sax.SAXException;
    29
    30  /***
    31   * @author akima
    32   */
    33  public class XmlToRdbImpl implements XmlToRdb {
    34
    35      /***
    36       *
    37       */
    38      public XmlToRdbImpl() {
    39          super();
    40      }
    41
    42      private boolean debug = false;
    43
    44      public Databases load(String filename) throws IOException, SAXException {
    45          final FileInputStream inputStream = new FileInputStream(filename);
    46          return load(inputStream);
    47      }
    48
    49      public Databases load(InputStream sourceStream) throws IOException, SAXException {
    50          final AsyrinxDigester d = new AsyrinxDigester();
    51          d.setValidating(false);
    52          if (isDebug()) {
    53              d.setLogger(LogFactory.getLog(this.getClass()));
    54          }
    55
    56          d.addBodyToProp("*/description", "description");
    57
    58          d.addRoot("databases", Databases.class);
    59          d.addProps("databases/database", Database.class);
    60          d.addSetProperties("database");
    61
    62          d.addProps("*/database/enum", RdbEnumeration.class);
    63          d.addProps("*/database/enum/enum-entry", EnumerationEntry.class);
    64
    65          d.addProps("*/database/table", Table.class);
    66
    67          d.addProps("*/table/pattern", TablePattern.class);
    68          d.addProps("*/table/pattern/param", TablePatternParam.class);
    69
    70          d.addProps("*/column", Column.class);
    71
    72          d.addProps("*/foreign-key", ForeignKey.class);
    73          d.addProps("*/foreign-key/reference", ForeignKeyEntry.class);
    74
    75          d.addProps("*/index", Index.class);
    76          d.addProps("*/index/index-column", IndexEntry.class);
    77
    78          d.addProps("*/unique", Unique.class);
    79          d.addProps("*/unique/unique-column", IndexEntry.class);
    80
    81          final Object result = d.parse(sourceStream);
    82
    83          return (Databases) result;
    84      }
    85
    86      /***
    87       * @return Returns the debug.
    88       */
    89      public boolean isDebug() {
    90          return debug;
    91      }
    92
    93      /***
    94       * @param debug
    95       *            The debug to set.
    96       */
    97      public void setDebug(boolean debug) {
    98          this.debug = debug;
    99      }
    100 }