/*
* 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.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
class XmlDataSet extends DataSet {
private Iterator m_iterator;
private List m_listCurRow;
protected XmlDataSet(Table table, Node nodeTable) {
super(table.getName(), table.getDBSetup());
Collection<List<Data>> collRows = new ArrayList<List<Data>>();
NodeList listData = nodeTable.getChildNodes();
for (int i = 0; i < listData.getLength(); i++) {
Node node = listData.item(i);
if (XmlDataSet.isDataSet(node)) {
List<Data> listRow = new ArrayList<Data>();
NamedNodeMap map = node.getAttributes();
for (int iAttr = 0; iAttr < map.getLength(); iAttr++) {
listRow.add(new Data(map.item(iAttr)));
}
collRows.add(listRow);
}
}
this.m_iterator = collRows.iterator();
}
protected int getNumberColumns() {
return this.m_listCurRow == null ? 0 : this.m_listCurRow.size();
}
protected Data getData(int columnIndex) {
return (Data) this.m_listCurRow.get(columnIndex);
}
protected boolean next() {
boolean bResult;
bResult = this.m_iterator.hasNext();
if (bResult) {
this.m_listCurRow = (List) this.m_iterator.next();
} else {
this.m_listCurRow = null;
}
return bResult;
}
protected static boolean isDataSet(Node node) {
String strTmp = node.getNodeName();
return strTmp.equalsIgnoreCase("data");
}
}