package org.pentaho.reporting.engine.classic.core.modules.misc.connections.parser;
import org.pentaho.database.model.IDatabaseConnection;
import org.pentaho.reporting.libraries.xmlns.parser.AbstractXmlReadHandler;
import org.pentaho.reporting.libraries.xmlns.parser.ParseException;
import org.pentaho.reporting.libraries.xmlns.parser.XmlReadHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.util.ArrayList;
public class DatabaseConnectionsReadHandler extends AbstractXmlReadHandler {
private static final String NODE_ROOT = "databaseMeta"; //$NON-NLS-1$
private DatabaseConnectionCollection collection;
private ArrayList<DatabaseMetaReadHandler> readHandlers;
public DatabaseConnectionsReadHandler() {
readHandlers = new ArrayList<DatabaseMetaReadHandler>();
}
protected XmlReadHandler getHandlerForChild( final String uri, final String tagName, final Attributes atts )
throws SAXException {
if ( isSameNamespace( uri ) == false ) {
return null;
}
if ( NODE_ROOT.equals( tagName ) ) {
final DatabaseMetaReadHandler readHandler = new DatabaseMetaReadHandler();
readHandlers.add( readHandler );
return readHandler;
}
return null;
}
protected void doneParsing() throws SAXException {
final ArrayList<IDatabaseConnection> connections = new ArrayList<IDatabaseConnection>();
for ( int i = 0; i < readHandlers.size(); i++ ) {
final DatabaseMetaReadHandler readHandler = readHandlers.get( i );
connections.add( readHandler.getObject() );
}
try {
collection =
new DatabaseConnectionCollection( connections.toArray( new IDatabaseConnection[connections.size()] ) );
} catch ( IOException e ) {
throw new ParseException( e, getLocator() );
}
}
public DatabaseConnectionCollection getObject() throws SAXException {
return collection;
}
}