// Path: gaulois-pipe/src/main/java/fr/efl/chaine/xslt/InvalidSyntaxException.java
// public class InvalidSyntaxException extends Exception {
// 
//     public InvalidSyntaxException() {
//     }
// 
//     public InvalidSyntaxException(String message) {
//         super(message);
//     }
// 
//     public InvalidSyntaxException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public InvalidSyntaxException(Throwable cause) {
//         super(cause);
//     }
// 
//     public InvalidSyntaxException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
//         super(message, cause, enableSuppression, writableStackTrace);
//     }
//     
// }
// 
// Path: gaulois-pipe/src/main/java/fr/efl/chaine/xslt/utils/ParameterValue.java
// public class ParameterValue {
// 
//     /**
//      * the parameter key.
//      * Since issue#15, it is a QName
//      */
//     private final QName key;
//     /**
//      * the parameter value.
//      */
//     private Object value;
//     /**
//      * This parameter datatype. If not specified, it's xs:string
//      */
//     private Datatype datatype;
//     private boolean abstractParam;
// 
//     /**
//      * Default constructor.
//      *
//      * @param key the parameter key
//      * @param value the parameter value
//      * @param datatype the parameter datatype
//      */
//     @SuppressWarnings("OverridableMethodCallInConstructor")
//     public ParameterValue(QName key, Object value, Datatype datatype) {
//         this.key = key;
//         setValue(value);
//         setDatatype(datatype);
//     }
// 
//     /**
//      * Constructs an abstract Parameter
//      * @param key The param key
//      * @param datatype The param datatype
//      */
//     @SuppressWarnings("OverridableMethodCallInConstructor")
//     public ParameterValue(QName key, Datatype datatype) {
//         this.key = key;
//         setDatatype(datatype);
//         abstractParam = true;
//     }
// 
//     /**
//      * @return the parameter key
//      */
//     public QName getKey() {
//         return key;
//     }
// 
//     /**
//      * @return the parameter value
//      */
//     public Object getValue() {
//         return value;
//     }
//     
//     public void setValue(Object value) {
//         if(value instanceof String) {
//             this.value=value;
//             abstractParam = false;
//         } else if(value instanceof XdmValue) {
//             this.value=value;
//             abstractParam = false;
//         } else if(value==null) {
//             this.value=value;
//             abstractParam = false;
//         } else {
//             throw new IllegalArgumentException("Only String or XdmValue are acceptable values for parameters");
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "[" + getKey() + "=" + (abstractParam ? "<abstract>" : getValue()) + "]";
//     }
// 
//     public Datatype getDatatype() {
//         return datatype;
//     }
// 
//     public void setDatatype(Datatype datatype) {
//         this.datatype = datatype;
//     }
//     
//     public boolean isAbstract() {
//         return abstractParam;
//     }
// 
// }


import fr.efl.chaine.xslt.InvalidSyntaxException;
import fr.efl.chaine.xslt.utils.ParameterValue;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import net.sf.saxon.s9api.QName;
/**
 * This Source Code Form is subject to the terms of 
 * the Mozilla Public License, v. 2.0. If a copy of 
 * the MPL was not distributed with this file, You 
 * can obtain one at https://mozilla.org/MPL/2.0/.
 */
package fr.efl.chaine.xslt.config;


/**
 *
 * @author cmarchand
 */
public class WhenEntry implements ParametrableStep {
    public static final QName QNAME = new QName(Config.NS, "when");
    public static final QName QN_OTHERWISE = new QName(Config.NS, "otherwise");
    public static final QName ATTR_TEST = new QName("test");
    private String test;
    private final List<ParametrableStep> steps;
    
    public WhenEntry() {
        steps = new ArrayList<>();
    }
    
    public WhenEntry(final String test) {
        this();
        this.test=test;
    }

    public String getTest() {
        return test;
    }

    public List<ParametrableStep> getSteps() {
        return steps;
    }
    
    public void addStep(ParametrableStep step) {
        steps.add(step);
    }

    /**
     * Always return null, a When can not have parameters.
     * @return {@code null}
     */
    @Override
    public Collection<ParameterValue> getParams() {
        return null;
    }

    /**
     * Does nothing, a When  can not have parameters.
     * @param param Ignored
     */
    @Override
// Path: gaulois-pipe/src/main/java/fr/efl/chaine/xslt/InvalidSyntaxException.java
// public class InvalidSyntaxException extends Exception {
// 
//     public InvalidSyntaxException() {
//     }
// 
//     public InvalidSyntaxException(String message) {
//         super(message);
//     }
// 
//     public InvalidSyntaxException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public InvalidSyntaxException(Throwable cause) {
//         super(cause);
//     }
// 
//     public InvalidSyntaxException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
//         super(message, cause, enableSuppression, writableStackTrace);
//     }
//     
// }
// 
// Path: gaulois-pipe/src/main/java/fr/efl/chaine/xslt/utils/ParameterValue.java
// public class ParameterValue {
// 
//     /**
//      * the parameter key.
//      * Since issue#15, it is a QName
//      */
//     private final QName key;
//     /**
//      * the parameter value.
//      */
//     private Object value;
//     /**
//      * This parameter datatype. If not specified, it's xs:string
//      */
//     private Datatype datatype;
//     private boolean abstractParam;
// 
//     /**
//      * Default constructor.
//      *
//      * @param key the parameter key
//      * @param value the parameter value
//      * @param datatype the parameter datatype
//      */
//     @SuppressWarnings("OverridableMethodCallInConstructor")
//     public ParameterValue(QName key, Object value, Datatype datatype) {
//         this.key = key;
//         setValue(value);
//         setDatatype(datatype);
//     }
// 
//     /**
//      * Constructs an abstract Parameter
//      * @param key The param key
//      * @param datatype The param datatype
//      */
//     @SuppressWarnings("OverridableMethodCallInConstructor")
//     public ParameterValue(QName key, Datatype datatype) {
//         this.key = key;
//         setDatatype(datatype);
//         abstractParam = true;
//     }
// 
//     /**
//      * @return the parameter key
//      */
//     public QName getKey() {
//         return key;
//     }
// 
//     /**
//      * @return the parameter value
//      */
//     public Object getValue() {
//         return value;
//     }
//     
//     public void setValue(Object value) {
//         if(value instanceof String) {
//             this.value=value;
//             abstractParam = false;
//         } else if(value instanceof XdmValue) {
//             this.value=value;
//             abstractParam = false;
//         } else if(value==null) {
//             this.value=value;
//             abstractParam = false;
//         } else {
//             throw new IllegalArgumentException("Only String or XdmValue are acceptable values for parameters");
//         }
//     }
// 
//     @Override
//     public String toString() {
//         return "[" + getKey() + "=" + (abstractParam ? "<abstract>" : getValue()) + "]";
//     }
// 
//     public Datatype getDatatype() {
//         return datatype;
//     }
// 
//     public void setDatatype(Datatype datatype) {
//         this.datatype = datatype;
//     }
//     
//     public boolean isAbstract() {
//         return abstractParam;
//     }
// 
// }


// Path: gaulois-pipe/src/main/java/fr/efl/chaine/xslt/config/WhenEntry.java
import fr.efl.chaine.xslt.InvalidSyntaxException;
import fr.efl.chaine.xslt.utils.ParameterValue;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import net.sf.saxon.s9api.QName;

/**
 * This Source Code Form is subject to the terms of 
 * the Mozilla Public License, v. 2.0. If a copy of 
 * the MPL was not distributed with this file, You 
 * can obtain one at https://mozilla.org/MPL/2.0/.
 */
package fr.efl.chaine.xslt.config;


/**
 *
 * @author cmarchand
 */
public class WhenEntry implements ParametrableStep {
    public static final QName QNAME = new QName(Config.NS, "when");
    public static final QName QN_OTHERWISE = new QName(Config.NS, "otherwise");
    public static final QName ATTR_TEST = new QName("test");
    private String test;
    private final List<ParametrableStep> steps;
    
    public WhenEntry() {
        steps = new ArrayList<>();
    }
    
    public WhenEntry(final String test) {
        this();
        this.test=test;
    }

    public String getTest() {
        return test;
    }

    public List<ParametrableStep> getSteps() {
        return steps;
    }
    
    public void addStep(ParametrableStep step) {
        steps.add(step);
    }

    /**
     * Always return null, a When can not have parameters.
     * @return {@code null}
     */
    @Override
    public Collection<ParameterValue> getParams() {
        return null;
    }

    /**
     * Does nothing, a When  can not have parameters.
     * @param param Ignored
     */
    @Override
    public void addParameter(ParameterValue param) { }