/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.jevis.commons.driver.inputHandler; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.joda.time.DateTime; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** * * @author Broder */ public abstract class InputHandler implements Iterable<Object> { protected Object _rawInput; protected List<InputStream> _inputStream; protected String[] _csvInput; private String[] _stringArrayOutput; private boolean _stringArrayOutputParsed; private String _stringOutput; private boolean _stringOutputParsed; private Node _xmlInput; protected List<Document> _document; private Object _tmpInput; private String _filePath; protected String _filePattern; protected DateTime _lastReadout; public InputHandler(Object rawInput) { _inputStream = new ArrayList<InputStream>(); _rawInput = rawInput; _document = new ArrayList<Document>(); } public void setInput(Object input) { _rawInput = input; } public abstract void convertInput(); @Override public Iterator iterator() { return _inputStream.iterator(); } public Object getRawInput() { return _rawInput; } public String[] getStringArrayInput() { if (!_stringArrayOutputParsed) { List<String> stringInput = new ArrayList<String>(); for (InputStream s : _inputStream) { try { // String inputStreamString = new Scanner(s, "UTF-8").useDelimiter("\\A").next(); String tmp = null; BufferedReader buf = new BufferedReader(new InputStreamReader(s)); while ((tmp = buf.readLine()) != null) { stringInput.add(tmp); } // String inputStreamString = IOUtils.toString(s, "UTF-8"); // for (int i = 0; i < inputStreamString.length; i++) { // stringInput.add(inputStreamString[i]); // } } catch (IOException ex) { Logger.getLogger(InputHandler.class.getName()).log(Level.SEVERE, null, ex); } } String[] inputArray = new String[stringInput.size()]; _stringArrayOutput = stringInput.toArray(inputArray); _stringArrayOutputParsed = true; } return _stringArrayOutput; } public void setCSVInput(String[] input) { _csvInput = input; } public void setTmpInput(Object o) { _tmpInput = o; } public Object getTmpInput() { return _tmpInput; } public String[] getCSVInput() { return _csvInput; } public void setXMLInput(Node input) { _xmlInput = input; } public Node getXMLInput() { return _xmlInput; } public void setInputStream(List<InputStream> input) { _inputStream = input; } public String getStringInput() { if (!_stringOutputParsed) { StringBuilder buffer = new StringBuilder(); for (InputStream s : _inputStream) { String tmp = null; BufferedReader buf = new BufferedReader(new InputStreamReader(s)); try { while ((tmp = buf.readLine()) != null) { buffer.append(tmp); } } catch (IOException ex) { Logger.getLogger(InputHandler.class.getName()).log(Level.SEVERE, null, ex); } } _stringOutput = buffer.toString(); _stringOutputParsed = true; } return _stringOutput; } public List<Document> getDocuments() { if (_document.isEmpty()) { try { String stringInput = getStringInput(); DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); // never forget this! DocumentBuilder builder = domFactory.newDocumentBuilder(); _document.add(builder.parse(new InputSource(new StringReader(stringInput)))); } catch (ParserConfigurationException ex) { Logger.getLogger(InputHandler.class.getName()).log(Level.SEVERE, null, ex); } catch (SAXException ex) { Logger.getLogger(InputHandler.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(InputHandler.class.getName()).log(Level.SEVERE, null, ex); } } return _document; } public void setFilePath(String fileName) { _filePath = fileName; } public void setFilePattern(String filePattern) { _filePattern = filePattern; } public String getFilePath() { return _filePath; } public void setDateTime(DateTime lastReadout) { _lastReadout = lastReadout; } }