public Output getPrimaryOutput() { int count = 0; Output defPrimary = null; for (Output output : outputs) { if ("#current".equals(output.getPort())) { // nop; this one never counts } else { if (output.getPrimary() || !output.getPrimarySet()) { defPrimary = output; } count++; if (output.getPrimary()) { return output; } } } if (count == 1) { return defPrimary; } else { return null; } }
public XOutput(XProcRuntime runtime, Output output) { this.runtime = runtime; node = output.getNode(); port = output.getPort(); sequenceOk = output.getSequence(); documents = new DocumentSequence(runtime); readers = new Vector<ReadablePipe> (); }
public UntilUnchanged(XProcRuntime xproc, XdmNode node, String name) { super(xproc, node, name); declaration = this; stepType = XProcConstants.cx_until_unchanged; Output current = new Output(xproc, node); current.setPort("#current"); current.setSequence(true); addOutput(current); }
if (!"#current".equals(output.getPort())) { Input input = getInput("|" + output.getPort()); if (input == null) { input = new Input(runtime, output.getNode()); input.setPort("|" + output.getPort()); input.setSequence(true); // the other half will check input.setPrimary(output.getPrimary()); addInput(input); Output output = new Output(runtime, input.getNode()); output.setPort(input.getPort() + "|"); output.setSequence(true); // the other half will check output.setPrimary(input.getPrimary()); addOutput(output);
if (output.getPrimarySet() && output.getPrimary()) { if (!allowPrimary) { throw XProcException.staticError(8, node, "The \"primary\" attribute is not allowed in this context."); if (output.getBinding().size() != 0) { Input input = new Input(runtime, output.getNode()); input.setPort("|" + output.getPort()); for (Binding binding : output.getBinding()) { input.addBinding(binding); output.clearBindings(); input.setPrimary(output.getPrimary()); input.setSequence(output.getSequence()); step.addInput(input); if (step.getInput(output.getPort()) != null || step.getOutput(output.getPort()) != null) { runtime.error(null, node, "Duplicate port name: " + output.getPort(), XProcConstants.staticError(11)); } else { step.addOutput(output); if (outputCount == 1 && !maybePrimaryOutput.getPrimary() && !maybePrimaryOutput.getPrimarySet()) { maybePrimaryOutput.setPrimary(true); String port = output.getPort(); if (serializations.containsKey(port)) { Serialization serial = serializations.get(port); output.setSerialization(serial); serializations.remove(port);
outputs.put(output.getPort(), output); if (outputs.containsKey(output.getPort())) { Output s1output = outputs.get(output.getPort()); Output chooseOut = getOutput(output.getPort()); chooseOut.setSequence(chooseOut.getSequence() || output.getSequence()); if (output.getPort().endsWith("|") || output.getPort().startsWith("!")) { if (s1output.getPrimary() != output.getPrimary()) { valid = false; error("Output port " + output.getPort() + " has different primary status.", XProcConstants.staticError(7)); error("Output port " + output.getPort() + " is extra.", XProcConstants.staticError(7));
outputs.put(output.getPort(), output); if (outputs.containsKey(output.getPort())) { Output s1output = outputs.get(output.getPort()); if (output.getPort().endsWith("|") || output.getPort().startsWith("!")) { if (s1output.getPrimary() != output.getPrimary()) { valid = false; runtime.error(null, p_group.getNode(), "Output port " + output.getPort() + " has different primary status.", XProcConstants.staticError(9)); runtime.error(null, p_group.getNode(), "Output port " + output.getPort() + " is extra.", XProcConstants.staticError(9));
private Output readOutput(Step parent, XdmNode node) { checkAttributes(node, new String[] { "port", "primary", "sequence" }, false); String port = checkNCName(node.getAttributeValue(new QName("port"))); if (port == null) { throw XProcException.staticError(38, node, "You must specify a port name for all p:output ports."); } String primary = node.getAttributeValue(new QName("primary")); String sequence = node.getAttributeValue(new QName("sequence")); Output output = new Output(runtime, node); output.setPort(port); output.setSequence(sequence); output.setPrimary(primary); for (XdmNode snode : new AxisNodes(runtime, node, Axis.CHILD, AxisNodes.PIPELINE)) { Binding binding = readBinding(parent, snode); if (binding != null) { output.addBinding(binding); } } checkExtensionAttributes(node, output); return output; }
output.getPort(), output.getSequence(), output.getPrimary()));
public void instantiate(Step step) { instantiateReaders(step); for (Output output : step.outputs()) { String port = output.getPort(); XOutput xoutput = new XOutput(runtime, output); xoutput.setLogger(step.getLog(port)); addOutput(xoutput); WritablePipe wpipe = xoutput.getWriter(); wpipe.canWriteSequence(output.getSequence()); outputs.put(port, wpipe); logger.trace(MessageFormatter.nodeMessage(step.getNode(), step.getName() + " writes to " + wpipe + " for " + port)); } parent.addStep(this); }
@Override protected void augmentIO() { // Output bindings on a compound step are really the input half of an input/output binding; // create the other half for (Output output : outputs) { Input input = getInput("|" + output.getPort()); if (input == null) { input = new Input(runtime, output.getNode()); input.setPort("|" + output.getPort()); input.setSequence(true); // the other half will check input.setPrimary(output.getPrimary()); addInput(input); } } // The only input on catch is errors and it's special } }
declOutputs.put(output.getPort(), output); String port = output.getPort(); if (!port.endsWith("|")) { if (!declOutputs.containsKey(port) && !declOutputs.containsKey("*")) { valid = false; } else { output.setPrimary(declOutputs.get(port).getPrimary());
if (output.getBinding().size() == 0 && !output.getPort().endsWith("|") && !output.getPort().startsWith("#")) { uboutputs.add(output); while (outputIter.hasNext()) { Output output = outputIter.next(); if (output.getPrimary()) { error("Unbound primary output: " + output, new QName("", "ERR")); valid = false;
public Output getOutput(String portName) { for (Output output : outputs) { if (portName.equals(output.getPort())) { return output; } } return null; }
private void xmlReport(Output output) { if (!output.getPort().endsWith("|")) { pr.println(" <output port='" + output.getPort() + "'>"); Serialization ser = output.getSerialization(); if (ser != null) { pr.println(" <serialization method='" + ser.getMethod() + "'/>"); } for (Binding binding : output.getBinding()) { xmlReport(binding); } pr.println(" </output>"); } }
if (output != null && output.getBinding().size() > 0) { for (Binding binding : output.getBinding()) { input.addBinding(binding); output.clearBindings(); } else if (port == null) { if (declBinding != null) {
protected void dump(int depth) { String indent = ""; for (int count = 0; count < depth; count++) { indent += " "; } logger.trace(indent + "output " + getPort()); for (Binding binding : getBinding()) { binding.dump(depth+2); } }