1 /*
2 * Created on 2003-5-22 23:22:49
3 *
4 * To change the template for this generated file go to
5 * Window>Preferences>Java>Code Generation>Code and Comments
6 */
7 package com.cyclops.dbdigger.schema.torque;
8 import java.net.URL;
9 import java.util.ArrayList;
10 import java.util.Iterator;
11 import java.util.List;
12
13 import org.apache.avalon.framework.activity.Initializable;
14 import org.apache.avalon.framework.configuration.Configurable;
15 import org.apache.avalon.framework.configuration.Configuration;
16 import org.apache.commons.digester.Digester;
17 import org.apache.commons.logging.Log;
18 import org.apache.commons.logging.LogFactory;
19
20 import com.cyclops.dbdigger.schema.DefaultDatabase;
21 import com.cyclops.dbdigger.schema.DefaultSchema;
22 import com.cyclops.dbdigger.schema.Schema;
23 import com.cyclops.dbdigger.util.ResourceScanner;
24 /***
25 *
26 * @author <a href="mailto:joeblack.guo@vtradex.com">joel guo</a>
27 * @since 2003-5-22 23:22:49
28 */
29 public class TorqueSchema
30 extends DefaultSchema
31 implements Initializable, Configurable, Schema {
32 private static final URL[] EMPTY_URL_ARRAY = new URL[0];
33 private Log logger = LogFactory.getLog(getClass());
34 private List schemaResources = new ArrayList();
35 /*** Method addDatabase()
36 * @param td TorqueDatabase object
37 */
38 private void addDatabase(TorqueDatabase td) {
39 DefaultDatabase dd = (DefaultDatabase) getDatabase(td.getName());
40 if (dd == null) {
41 dd = new DefaultDatabase();
42 dd.setName(td.getName());
43 dd.setDescription(td.getDescription());
44 addDatabase(dd);
45 }
46 td.addToDatabase(dd);
47 }
48 /*** Method addSchemaResource() in class DatabaseRepository
49 * @param resource URL as schema resource to add
50 */
51 public void addSchemaResource(URL resource) {
52 schemaResources.add(resource);
53 }
54 /*** Override method configure() of super class
55 * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
56 */
57 public void configure(Configuration conf) {
58 URL[] schemas = ResourceScanner.scan(conf.getChild("resources"));
59 for (int i = 0; i < schemas.length; i++) {
60 URL schema = schemas[i];
61 addSchemaResource(schema);
62 }
63 }
64 /*** Method getShemaResources() in class DatabaseRepository
65 * @return All schema resources in this schema
66 */
67 public URL[] getShemaResources() {
68 return (URL[]) schemaResources.toArray(EMPTY_URL_ARRAY);
69 }
70 /*** Override method initialize() of super class
71 * @see org.apache.avalon.framework.activity.Initializable#initialize()
72 */
73 public void initialize() {
74 Digester digester = new Digester();
75 digester.addObjectCreate("database", TorqueDatabase.class);
76 digester.addSetProperties("database");
77 digester.addObjectCreate("database/table", TorqueTable.class);
78 digester.addSetProperties("database/table");
79 digester.addSetNext("database/table", "addTable");
80 digester.addObjectCreate("database/table/column", TorqueColumn.class);
81 digester.addSetProperties("database/table/column");
82 digester.addSetNext("database/table/column", "addColumn");
83 for (Iterator i = schemaResources.iterator(); i.hasNext();) {
84 URL schemaResource = (URL) i.next();
85 digester.clear();
86 try {
87 TorqueDatabase td =
88 (TorqueDatabase) digester.parse(
89 schemaResource.openStream());
90 addDatabase(td);
91 } catch (Exception e) {
92 logger.error(
93 "can't parse database schema " + schemaResource,
94 e);
95 }
96 }
97 }
98 }
This page was automatically generated by Maven