/** * $Id: $ * $Date: $ * */ package org.xmlsh.core.io; import java.io.IOException; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import net.sf.saxon.s9api.XdmAtomicValue; import net.sf.saxon.s9api.XdmItem; import net.sf.saxon.s9api.XdmValue; import org.xmlsh.core.CoreException; import org.xmlsh.util.Util; public class XdmItemPipe { BlockingQueue<XdmItem> mQueue ; // Special EOF marker indicating closed pipe private static final XdmItem mEOF = new XdmAtomicValue(""); private class XdmItemPipeReader implements IXdmItemReader { @Override public XdmItem read() throws CoreException { try { XdmItem item = mQueue.take(); if( item == mEOF ) return null ; return item ; } catch (InterruptedException e) { throw new CoreException(e); } } } private class XdmItemPipeWriter implements IXdmItemWriter { @Override public void write(XdmValue value) throws IOException { for( XdmItem item : value ) try { mQueue.put(item); } catch (InterruptedException e) { Util.wrapIOException(e); } } @Override public void write(XdmItem item) throws IOException { try { mQueue.put(item); } catch (InterruptedException e) { Util.wrapIOException(e); } } @Override public void close() throws IOException { write( mEOF ); } } public XdmItemPipe(int size) { mQueue = new LinkedBlockingQueue<XdmItem>(size); } public IXdmItemReader getReadEnd() { return new XdmItemPipeReader(); } public IXdmItemWriter getWriteEnd() { // TODO Auto-generated method stub return new XdmItemPipeWriter(); } } // // //Copyright (C) 2008-2014 David A. Lee. // //The contents of this file are subject to the "Simplified BSD License" (the "License"); //you may not use this file except in compliance with the License. You may obtain a copy of the //License at http://www.opensource.org/licenses/bsd-license.php // //Software distributed under the License is distributed on an "AS IS" basis, //WITHOUT WARRANTY OF ANY KIND, either express or implied. //See the License for the specific language governing rights and limitations under the License. // //The Original Code is: all this file. // //The Initial Developer of the Original Code is David A. Lee // //Portions created by (your name) are Copyright (C) (your legal entity). All Rights Reserved. // //Contributor(s): none. //