1 package com.bonevich.erj.xml;
2
3 import com.bonevich.erj.app.Application;
4 import com.bonevich.erj.db.SupportedDatabase;
5
6 import org.apache.commons.digester.AbstractObjectCreationFactory;
7 import org.apache.commons.digester.Digester;
8 import org.xml.sax.Attributes;
9
10 import java.io.InputStream;
11 import java.net.URL;
12
13 public class DatabaseSupportDigester
14 {
15 //////////////////////////////////////////////////////////
16 // Constants
17 private static final String NAME_STR = "name";
18 private static final String ID_STR = "id";
19 private static final String DISPLAY_STR = "display";
20
21 private static final String SYSTEM_ID = "com/bonevich/erj/xml/dtd/dbsupport.dtd";
22 private static final String PUBLIC_ID = "-//Jeffrey Bonevich//DTD ERJ Data Support 1.0//EN";
23
24 //////////////////////////////////////////////////////////
25 // Attributes
26 private Application _application;
27 private Digester _digester;
28 //private String _dtdFile = ResourceUtilities.getResourceAsURL(SYSTEM_ID).toString();
29
30 //////////////////////////////////////////////////////////
31 // Constructors
32 public DatabaseSupportDigester(Application app)
33 {
34 _application = app;
35 init();
36 }
37
38 private void init()
39 {
40 _digester = new Digester();
41 //_digester.register(PUBLIC_ID, _dtdFile);
42 _digester.setValidating(false);
43 _digester.push(_application);
44
45 _digester.addObjectCreate("erj-database-support/database", SupportedDatabase.class);
46 _digester.addSetNext("erj-database-support/database", "addSupportedDatabase");
47 _digester.addCallMethod("erj-database-support/database/name", "setName", 0);
48 _digester.addCallMethod("erj-database-support/database/display-name", "setDisplayName", 0);
49 _digester.addCallMethod("erj-database-support/database/vendor-name", "setVendorName", 0);
50 _digester.addCallMethod("erj-database-support/database/ddl-generator", "setDdlGeneratorClass", 0);
51
52 _digester.addCallMethod("erj-database-support/database/login-fields/login-field", "addLoginField", 3);
53 _digester.addCallParam("erj-database-support/database/login-fields/login-field/name", 0);
54 _digester.addCallParam("erj-database-support/database/login-fields/login-field/display-name", 1);
55 _digester.addCallParam("erj-database-support/database/login-fields/login-field/tool-tip", 2);
56
57 _digester.addFactoryCreate(
58 "erj-database-support/database/options/option-group",
59 new AbstractObjectCreationFactory()
60 {
61 public Object createObject(Attributes attributes)
62 {
63 SupportedDatabase db = (SupportedDatabase) getDigester().peek();
64 return db.createOptionGroup(attributes.getValue(ID_STR), attributes.getValue(DISPLAY_STR));
65 }
66 }
67 );
68 _digester.addCallMethod("erj-database-support/database/options/option-group/option", "addOption", 2);
69 _digester.addCallParam("erj-database-support/database/options/option-group/option", 0, ID_STR);
70 _digester.addCallParam("erj-database-support/database/options/option-group/option", 1, DISPLAY_STR);
71 }
72
73 public void digest(String filepath)
74 {
75 System.out.println("======================================================");
76 System.out.println("== READING DATABASE SUPPORT: " + filepath);
77 System.out.println();
78
79 InputStream in = null;
80 try
81 {
82 URL url = null;
83 ClassLoader cl = this.getClass().getClassLoader();
84 if (cl != null) {
85 url = cl.getResource(filepath);
86 }
87 else
88 {
89 url = ClassLoader.getSystemResource(filepath);
90 }
91
92 in = url.openStream();
93 _digester.parse(in);
94 }
95 catch(Exception e)
96 {
97 e.printStackTrace();
98 throw new RuntimeException("Unable to initialize support database info", e);
99 }
100 finally
101 {
102 try { in.close(); } catch (Exception e) {}
103 }
104 }
105
106 } /* end class ProjectProperitesDigester */
This page was automatically generated by Maven