01: /* Copyright 2004 The JA-SIG Collaborative. All rights reserved.
02: * See license distributed with this file and
03: * available online at http://www.uportal.org/license.html
04: */
05:
06: package org.jasig.portal.tools.dbloader;
07:
08: import org.xml.sax.Attributes;
09: import org.xml.sax.SAXException;
10:
11: /**
12: * Handles SAX events resulting from parsing of the data.xml file.
13: *
14: * @author Ken Weiner, kweiner@unicon.net
15: * @author Mark Boyd <mark.boyd@engineer.com>
16: * @version $LastChangedRevision: 36814 $
17: */
18: class SqlServerDataHandler extends DataHandler {
19: private Configuration config = null;
20: private String identityInsertOffPrefix = "set identity_insert ";
21: private String ON = "on";
22: private String OFF = "off";
23: private boolean insideTable = false;
24: private boolean insideTableName = false;
25: private boolean insideRows = false;
26: private StringBuffer tableNameBuff = new StringBuffer();
27: private String currentTable = null;
28:
29: public SqlServerDataHandler(Configuration config) {
30: super (config);
31: this .config = config;
32: }
33:
34: public void startElement(String namespaceURI, String localName,
35: String qName, Attributes atts) {
36: if (qName.equals("table")) {
37: insideTable = true;
38: currentTable = null;
39: } else if (insideTable && !insideRows && "name".equals(qName)) {
40: insideTableName = true;
41: tableNameBuff.setLength(0);
42: } else if (insideTable && "rows".equals(qName)) {
43: insideRows = true;
44: }
45: super .startElement(namespaceURI, localName, qName, atts);
46: }
47:
48: public void endElement(String namespaceURI, String localName,
49: String qName) throws SAXException {
50: super .endElement(namespaceURI, localName, qName);
51: if (qName.equals("table")) {
52: insideTable = false;
53: if (config.getScriptWriter() != null) {
54: StringBuffer sb = new StringBuffer();
55: sb.append(identityInsertOffPrefix);
56: sb.append(currentTable).append(' ');
57: sb.append(OFF).append(config.getStatementTerminator());
58: config.getScriptWriter().println(sb.toString());
59: config.getScriptWriter().println("go");
60: }
61: currentTable = null;
62: } else if (insideTableName && "name".equals(qName)) {
63: insideTableName = false;
64: if (config.getScriptWriter() != null) {
65: currentTable = tableNameBuff.toString();
66: StringBuffer sb = new StringBuffer();
67: sb.append(identityInsertOffPrefix);
68: sb.append(currentTable).append(' ');
69: sb.append(ON).append(config.getStatementTerminator());
70: config.getScriptWriter().println(sb.toString());
71: config.getScriptWriter().println("go");
72: }
73: } else if (insideTable && "rows".equals(qName)) {
74: insideRows = false;
75: }
76: }
77:
78: public void characters(char ch[], int start, int length) {
79: super.characters(ch, start, length);
80: if (insideTableName && currentTable == null) {
81: tableNameBuff.append(ch, start, length);
82: }
83: }
84:
85: }
|