Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.xmlcalabash.runtime;
  
Created by IntelliJ IDEA. User: ndw Date: Oct 15, 2008 Time: 7:03:35 AM To change this template use File | Settings | File Templates.
 
 public class XViewport extends XCompoundStep implements ProcessMatchingNodes {
     private Pipe current = null;
     private ProcessMatch matcher = null;
     private int sequencePosition = 0;
     private int sequenceLength = 0;
 
     public XViewport(XProcRuntime runtimeStep stepXCompoundStep parent) {
         super(runtimestepparent);
     }
 
     public ReadablePipe getBinding(String stepNameString portName) {
         if (.equals(stepName) && ("#current".equals(portName) || "current".equals(portName))) {
             if ( == null) {
                  = new Pipe();
             }
             return new Pipe(,.documents());
         } else {
             return super.getBinding(stepNameportName);
         }
     }
 
     protected void copyInputs() throws SaxonApiException {
         // nop;
     }
 
     public void reset() {
         super.reset();
          = 0;
          = 0;
     }
 
     public void run() throws SaxonApiException {
         fine(null"Running p:viewport " + .getName());
 
         XProcData data = .getXProcData();
         data.openFrame(this);
 
         if ( == null) {
              = new Pipe();
         }
 
         RuntimeValue match = ((Viewport).getMatch();
 
         String iport = "#viewport-source";
         ReadablePipe vsource = null;
 
         if (.get(iport).size() != 1) {
             throw XProcException.dynamicError(3);
         } else {
             vsource = .get(iport).get(0);
         }
 
         XdmNode doc = vsource.read();
         if (doc == null || vsource.moreDocuments()) {
             throw XProcException.dynamicError(3);
         }
         
          = new ProcessMatch(this);
 
         // FIXME: Only do this if we really need to!
          = .count(docmatchfalse);
 
 
         .start(this);
         .match(docmatch);
         .finish(this);
 
         for (String port : .keySet()) {
             if (port.startsWith("|")) {
                 String wport = port.substring(1);
                 WritablePipe pipe = .get(wport);
                 XdmNode result = .getResult();
                 pipe.write(result);
                 finest(.getNode(), "Viewport output copy from matcher to " + pipe);
             }
         }
    }
    public boolean processStartDocument(XdmNode node) {
        return true;
    }
    public void processEndDocument(XdmNode node) {
        // nop
    }
    public boolean processStartElement(XdmNode node) {
        // Use a TreeWriter to make the matching node into a proper document
        TreeWriter treeWriter = new TreeWriter();
        treeWriter.startDocument(node.getBaseURI());
        treeWriter.addSubtree(node);
        treeWriter.endDocument();
        .resetWriter();
        .write(treeWriter.getResult());
        finest(.getNode(), "Viewport copy matching node to " + );
        ++;
        // Calculate all the variables
        for (Variable var : .getVariables()) {
            RuntimeValue value = computeValue(var);
            if ("p3".equals(var.getName().getLocalName())) {
                ..println("DEBUG ME1: " + value.getString());
            }
            .put(var.getName(), value);
        }
        try {
            for (XStep step : ) {
                step.reset();
                step.run();
            }
        } catch (SaxonApiException sae) {
            throw new XProcException(sae);
        }
        try {
            int count = 0;
            for (String port : .keySet()) {
                if (port.startsWith("|")) {
                    for (ReadablePipe reader : .get(port)) {
                        while (reader.moreDocuments()) {
                            count++;
                            if (count > 1) {
                                XOutput output = getOutput(port.substring(1));
                                if (!output.getSequence()) {
                                    throw XProcException.dynamicError(7);
                                }
                            }
                            XdmNode doc = reader.read();
                            .addSubtree(doc);
                        }
                        reader.resetReader();
                    }
                }
            }
        } catch (SaxonApiException sae) {
            throw new XProcException(sae);
        }
        return false;
    }
    public void processEndElement(XdmNode node) {
        // nop
    }
    public void processText(XdmNode node) {
        throw new UnsupportedOperationException("Can't run a viewport over text, PI, or comments");
    }
    public void processComment(XdmNode node) {
        throw new UnsupportedOperationException("Can't run a viewport over text, PI, or comments");
    }
    public void processPI(XdmNode node) {
        throw new UnsupportedOperationException("Can't run a viewport over text, PI, or comments");
    }
    public void processAttribute(XdmNode node) {
        throw new UnsupportedOperationException("Can't run a viewport over attributes");
    }
New to GrepCode? Check out our FAQ X