package net.rrm.ehour.backup.service.restore; import net.rrm.ehour.backup.common.BackupConfig; import net.rrm.ehour.backup.common.BackupJoinTable; import org.apache.log4j.Logger; import javax.xml.namespace.QName; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; public class JoinTableParser { private static final Logger LOG = Logger.getLogger(JoinTableParser.class); private final XMLEventReader xmlReader; private final BackupConfig backupConfig; public JoinTableParser(XMLEventReader xmlReader, BackupConfig backupConfig) { this.xmlReader = xmlReader; this.backupConfig = backupConfig; } public JoinTables parseJoinTables(JoinTables joinTables) throws XMLStreamException { LOG.info("Join tables found, parsing"); while (xmlReader.hasNext()) { XMLEvent containerEvent = xmlReader.nextTag(); if (containerEvent.isEndElement()) { break; } parseJoinTable(joinTables); } LOG.info("Join tables parsed"); return joinTables; } private void parseJoinTable(JoinTables joinTables) throws XMLStreamException { while (xmlReader.hasNext()) { XMLEvent event = xmlReader.nextTag(); if (event.isEndElement()) { break; } if (event.isStartElement()) { StartElement startElement = event.asStartElement(); String joinTableName = startElement.getName().getLocalPart(); BackupJoinTable backupJoinTable = backupConfig.joinTableForName(joinTableName); if (backupJoinTable == null) { throw new IllegalArgumentException("Unknown join table name: " + joinTableName); } else { String source = startElement.getAttributeByName(new QName(backupJoinTable.getAttributeSource())).getValue(); String target = startElement.getAttributeByName(new QName(backupJoinTable.getAttributeTarget())).getValue(); joinTables.put(joinTableName, source, target); } xmlReader.nextTag(); } } } }