// 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 java.io.File;
import fr.efl.chaine.xslt.InvalidSyntaxException;
import fr.efl.chaine.xslt.utils.ParameterValue;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
import java.util.regex.Matcher;
import net.sf.saxon.s9api.QName;
import net.sf.saxon.s9api.Serializer;
import net.sf.saxon.s9api.XdmAtomicValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
     * Returns <tt>true</tt> if the output should not be written anywhere
     * @return {@code true} if this output should produce nothing
     */
    public boolean isNullOutput() {
        return nullOutput;
    }
    /**
     * Returns a copy of outputProperties
     * @return A new copy of output properties
     */
    public Properties getOutputProperties() {
        Properties ret = new Properties();
        for(Object key: outputProperties.keySet()) {
            String sKey = key.toString();
            ret.setProperty(sKey,outputProperties.getProperty(sKey));
        }
        return ret;
    }
    public String getOutputProperty(final String key) {
        return outputProperties.getProperty(key);
    }
    
    /**
     * Renvoie le fichier destination
     * @param sourceFile Le fichier source traité
     * @param parameters Parameters to give. Should be used only to parse the escapes
     * @return The file to create
     * @throws InvalidSyntaxException If this output has no been correctly defined
     * @throws java.net.URISyntaxException If the constructed URI is no valid
     */
// 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/Output.java
import java.io.File;
import fr.efl.chaine.xslt.InvalidSyntaxException;
import fr.efl.chaine.xslt.utils.ParameterValue;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
import java.util.regex.Matcher;
import net.sf.saxon.s9api.QName;
import net.sf.saxon.s9api.Serializer;
import net.sf.saxon.s9api.XdmAtomicValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

     * Returns <tt>true</tt> if the output should not be written anywhere
     * @return {@code true} if this output should produce nothing
     */
    public boolean isNullOutput() {
        return nullOutput;
    }
    /**
     * Returns a copy of outputProperties
     * @return A new copy of output properties
     */
    public Properties getOutputProperties() {
        Properties ret = new Properties();
        for(Object key: outputProperties.keySet()) {
            String sKey = key.toString();
            ret.setProperty(sKey,outputProperties.getProperty(sKey));
        }
        return ret;
    }
    public String getOutputProperty(final String key) {
        return outputProperties.getProperty(key);
    }
    
    /**
     * Renvoie le fichier destination
     * @param sourceFile Le fichier source traité
     * @param parameters Parameters to give. Should be used only to parse the escapes
     * @return The file to create
     * @throws InvalidSyntaxException If this output has no been correctly defined
     * @throws java.net.URISyntaxException If the constructed URI is no valid
     */
    public File getDestinationFile(File sourceFile, HashMap<QName,ParameterValue> parameters) throws InvalidSyntaxException, URISyntaxException {