Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Insert.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.library;
 
 import java.util.Map;

Author(s):
ndw
 
 public class Insert extends DefaultStep implements ProcessMatchingNodes {
     private static final QName _match = new QName("match");
     private static final QName _position = new QName("position");
     private ReadablePipe insertion = null;
     private ReadablePipe source = null;
     private WritablePipe result = null;
     private Map<QNameRuntimeValueinScopeOptions = null;
     private ProcessMatch matcher = null;
     private String position = null;
     private String matchPattern = null;

    
Creates a new instance of Insert
 
     public Insert(XProcRuntime runtimeXAtomicStep step) {
         super(runtime,step);
     }
 
     public void setInput(String portReadablePipe pipe) {
         if ("source".equals(port)) {
              = pipe;
         } else {
              = pipe;
         }
     }
 
     public void setOutput(String portWritablePipe pipe) {
          = pipe;
     }
 
     public void reset() {
         .resetReader();
         .resetWriter();
     }
 
     public void run() throws SaxonApiException {
         super.run();
 
          = getOption().getString();
 
         XdmNode doc = .read();
 
          = new ProcessMatch(this);
         .match(docgetOption());
 
         .write(.getResult());
     }
 
     public boolean processStartDocument(XdmNode nodethrows SaxonApiException {
         throw XProcException.stepError(25);
     }
 
     public void processEndDocument(XdmNode nodethrows SaxonApiException {
         throw XProcException.stepError(25);
     }
 
     public boolean processStartElement(XdmNode nodethrows SaxonApiException {
         if ("before".equals()) {
             doInsert();
         }
 
         .addStartElement(node);
         .addAttributes(node);
         .startContent();
 
        if ("first-child".equals()) {
            doInsert();
        }
        return true;
    }
    public void processEndElement(XdmNode nodethrows SaxonApiException {
        if ("last-child".equals()) {
            doInsert();
        }
        .addEndElement();
        if ("after".equals()) {
            doInsert();
        }
    }
    public void processText(XdmNode nodethrows SaxonApiException {
        process(node);
    }
    public void processComment(XdmNode nodethrows SaxonApiException {
        process(node);
    }
    public void processPI(XdmNode nodethrows SaxonApiException {
        process(node);
    }
    private void process(XdmNode nodethrows SaxonApiException {
        if ("before".equals()) {
            doInsert();
        }
        if (node.getNodeKind() == .) {
            .addComment(node.getStringValue());
        } else if (node.getNodeKind() == .) {
            .addPI(node.getNodeName().getLocalName(), node.getStringValue());
        } else if (node.getNodeKind() == .) {
            .addText(node.getStringValue());
        } else {
            throw new IllegalArgumentException("What kind of node was that!?");
        }
        if ("after".equals()) {
            doInsert();
        }
        if ("first-child".equals() || "last-child".equals()) {
            throw XProcException.stepError(25);
        }
    }
    public void processAttribute(XdmNode nodethrows SaxonApiException {
        throw XProcException.stepError(23);
    }
    private void doInsert() throws SaxonApiException {
        while (.moreDocuments()) {
            XdmNode doc = .read();
            XdmSequenceIterator iter = doc.axisIterator(.);
            while (iter.hasNext()) {
                XdmNode child = (XdmNodeiter.next();
                .addSubtree(child);
            }
        }
        .resetReader();
    }
New to GrepCode? Check out our FAQ X