/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.core.db.setup;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.rhq.core.db.DatabaseType;
class View {
private DBSetup m_parent;
private String m_strName;
private String m_strQuery;
private DataSet m_dataset;
protected View(Node node, DatabaseType dbtype, DBSetup dbsetup) throws SAXException {
m_parent = dbsetup;
boolean queryIsSet = false;
if (View.isView(node)) {
NamedNodeMap map = node.getAttributes();
for (int iTab = 0; iTab < map.getLength(); iTab++) {
Node nodeMap = map.item(iTab);
if (nodeMap.getNodeName().equalsIgnoreCase("name")) {
this.m_strName = nodeMap.getNodeValue();
} else {
System.out.println("Unknown attribute '" + nodeMap.getNodeName() + "' in tag 'table'");
}
}
NodeList childNodes = node.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node child = childNodes.item(i);
if (child.getNodeName().equalsIgnoreCase("query") && child.hasChildNodes()) {
this.m_strQuery = child.getFirstChild().getNodeValue();
queryIsSet = true;
}
}
if (!queryIsSet) {
throw new SAXException("no query specified");
}
} else {
throw new SAXException("node is not a table.");
}
}
/**
* protected View(ResultSet set, DatabaseMetaData meta, DBSetup dbsetup) throws SQLException { this.m_parent =
* dbsetup; this.m_strName = set.getString(3); this.m_listColumns = Column.getColumns(meta, this); this.m_dataset =
* new SqlDataSet(this); }
*/
protected void create(Collection typemaps) throws SQLException {
List commands = new java.util.Vector();
this.getCreateCommands(commands, typemaps, m_parent.getDatabaseType());
for (Object command : commands) {
String strCmd = (String) command;
m_parent.doSQL(strCmd);
}
}
private void doCmd(List collCmds) throws SQLException {
for (Object collCmd : collCmds) {
String strCmd = (String) collCmd;
m_parent.doSQL(strCmd);
}
}
protected void drop() throws SQLException {
List<String> collCmds = new ArrayList<String>();
this.getDropCommands(collCmds);
doCmd(collCmds);
}
protected void getCreateCommands(List cmds, Collection typemaps, DatabaseType dbtype) {
String strCmd = "CREATE VIEW " + this.getName() + " AS " + this.getQuery();
cmds.add(0, strCmd);
}
protected DataSet getDataSet() {
return this.m_dataset;
}
protected void getDropCommands(List cmds) {
String strCmd = "DROP VIEW " + this.getName();
cmds.add(strCmd);
}
protected String getQueryCommand() {
String strCmd = "SELECT * ";
strCmd = strCmd + "FROM " + this.getName();
return strCmd;
}
protected String getName() {
return this.m_strName.toUpperCase();
}
protected String getQuery() {
return this.m_strQuery;
}
protected static List<View> getViews(Node node, DatabaseType dbtype, DBSetup parent) {
List<View> colResult = new ArrayList<View>();
NodeList listViews = node.getChildNodes();
for (int i = 0; i < listViews.getLength(); i++) {
Node nodeView = listViews.item(i);
if (View.isView(nodeView)) {
try {
colResult.add(new View(nodeView, dbtype, parent));
} catch (SAXException e) {
// ignore
}
}
}
return colResult;
}
protected static boolean isView(Node nodeTable) {
return nodeTable.getNodeName().equalsIgnoreCase("view");
}
protected DBSetup getDBSetup() {
return m_parent;
}
protected static void uninstallCleanup(DBSetup parent) throws SQLException {
}
}