Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Select.java
   *
   * Copyright 2008 Mark Logic Corporation.
   * Portions Copyright 2007 Sun Microsystems, Inc.
   * All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common
  * Development and Distribution License("CDDL") (collectively, the
  * "License"). You may not use this file except in compliance with the
  * License. You can obtain a copy of the License at
  * https://xproc.dev.java.net/public/CDDL+GPL.html or
  * docs/CDDL+GPL.txt in the distribution. See the License for the
  * specific language governing permissions and limitations under the
  * License. When distributing the software, include this License Header
  * Notice in each file and include the License file at docs/CDDL+GPL.txt.
  */
 
 package com.xmlcalabash.io;
 
 
 
Ideally, I'd like this code to perform the selections in a lazy fashion, but that's hard because it has to be possible to answer questions about how many documents will be returned. So for now, I'm just doing it all up front.

Author(s):
ndw
 
 public class Select implements ReadablePipe {
     private ReadablePipe source = null;
     private String select = null;
     private XdmNode context = null;
     private DocumentSequence documents = null;
     private XPathSelector selector = null;
     private XProcRuntime runtime = null;
     private boolean initialized = false;
     private int docindex = 0;
     private Step reader = null;
     private Logger logger = Logger.getLogger(this.getClass().getName());

    
Creates a new instance of Select
 
     public Select(XProcRuntime runtimeReadablePipe readFromString xpathExprXdmNode xpathContext) {
          = readFrom;
          = xpathExpr;
          = xpathContext;
         this. = runtime;
          = new DocumentSequence(runtime);
     }
 
     public void canReadSequence(boolean sequence) {
         // nop; always true
     }
 
     public boolean readSequence() {
         return true;
     }
     
     private void readSource() {
          = true;
         try {
             NamespaceBinding bindings = new NamespaceBinding(,);
             XPathCompiler xcomp = .getProcessor().newXPathCompiler();
             xcomp.setBaseURI(.getBaseURI());
             for (String prefix : bindings.getNamespaceBindings().keySet()) {
                 xcomp.declareNamespace(prefixbindings.getNamespaceBindings().get(prefix));
             }
 
             XPathExecutable xexec = xcomp.compile();
              = xexec.load();
             // FIXME: Set getVariables
         } catch (SaxonApiException sae) {
             throw new XProcException(sae);
         }
 
         while (.moreDocuments()) {
             // Ok, time to go looking for things to select from.
             try {
                 XdmNode doc = .read();
 
                 if ( != null) {
                     .finest(null.getNode(), .getName() + " select read '" + (doc == null ? "null" : doc.getBaseURI()) + "' from " + );
                 }
 
                 .setContextItem(doc);
 
                 Iterator iter = .iterator();
                 while (iter.hasNext()) {
                    XdmItem item = (XdmItemiter.next();
                    XdmNode node = null;
                    try {
                        node = (XdmNodeitem;
                    } catch (ClassCastException cce) {
                        throw new XProcException ("Select matched non-node!?");
                    }
                    XdmDestination dest = new XdmDestination();
                    S9apiUtils.writeXdmValue(nodedestnode.getBaseURI());
                    XdmNode sdoc = dest.getXdmNode();
                    if ( != null) {
                        .finest(null.getNode(), .getName() + " select wrote '" + (sdoc == null ? "null" : sdoc.getBaseURI()) + "' to " + );
                    }
                    .add(sdoc);
                }
            } catch (SaxonApiException sae) {
                throw new XProcException(sae);
            }
        }
    }
    
    public void resetReader() {
         = 0;
    }
    
    public boolean moreDocuments() {
        if (!) {
            readSource();
        }
        return  < .size();
    }
    public boolean closed() {
        return true;
    }
    public int documentCount() {
        if (!) {
            readSource();
        }
        return .size();
    }
    public DocumentSequence documents() {
        return ;
    }
    public void setReader(Step step) {
         = step;
    }
    public XdmNode read () throws SaxonApiException {
        if (!) {
            readSource();
        }
        XdmNode doc = null;
        if (moreDocuments()) {
            doc = .get(++);
        }
        if ( != null) {
            .finest(null.getNode(), .getName() + " read '" + (doc == null ? "null" : doc.getBaseURI()) + "' from " + this);
        }
        return doc;
    }
New to GrepCode? Check out our FAQ X