1 package net.sourceforge.xmlfit.data.impl; 2 3 import java.io.File; 4 import java.util.Iterator; 5 6 import javax.xml.parsers.DocumentBuilder; 7 import javax.xml.parsers.DocumentBuilderFactory; 8 9 import net.sourceforge.xmlfit.data.DataSet; 10 import net.sourceforge.xmlfit.data.DataSource; 11 import net.sourceforge.xmlfit.data.DataSourceProvider; 12 13 import org.apache.log4j.Logger; 14 import org.w3c.dom.Document; 15 import org.w3c.dom.Node; 16 import org.w3c.dom.NodeList; 17 18 @DataSourceProvider(fileExtension="XML") 19 public class XMLDataSourceImpl implements DataSource, Iterator<DataSet> { 20 21 private static Logger logger = 22 Logger.getLogger(XMLDataSourceImpl.class); 23 24 private int actualIndex = 0; 25 26 private Document document; 27 28 private NodeList dataSets; 29 30 public XMLDataSourceImpl(String fileName) { 31 try { 32 DocumentBuilderFactory factory = 33 DocumentBuilderFactory.newInstance(); 34 DocumentBuilder documentBuilder = factory.newDocumentBuilder(); 35 document = documentBuilder.parse(new File(fileName)); 36 dataSets = document.getElementsByTagName("dataSet"); 37 38 } catch (Exception e) { 39 logger.error("Error on loading data file with name: " +fileName); 40 logger.error(e); 41 throw new XmlLoadingException(e); 42 } 43 } 44 45 public Iterator<DataSet> iterator() { 46 return this; 47 } 48 49 public boolean hasNext() { 50 return actualIndex < dataSets.getLength(); 51 } 52 53 public DataSet next() { 54 Node dataSetNode = dataSets.item(actualIndex++); 55 return new XMLDataSetImpl(dataSetNode); 56 } 57 58 public void remove() { 59 60 } 61 62 }