// Path: src/be/uzleuven/gc/logistics/GBSX/utils/argumentsAndParameters/Arguments.java
// public interface Arguments {
//     
//     
//     /**
//      * returns the argument for the given name (-name), or invalid if no argument exists for the given name
//      * @param sortName String | the name of the argument
//      * @return GBSargument if any exists for the given name, else GBSaguments.INVALID_ARGUMENT
//      */
//     public Arguments getArgument(String sortName);
//     
//     
//     /**
//      * 
//      * @return String | the option name of the argument
//      */
//     public String getSortName();
//     
// }
// 
// Path: src/be/uzleuven/gc/logistics/GBSX/utils/enzyme/model/Enzyme.java
// public interface Enzyme{    
//     /**
//      * 
//      * @return String the name of the enzyme
//      */
//     public String getName();
//     
//     /**
//      * 
//      * @return collection of String the sites after the cut
//      */
//     public Collection<String> getInitialCutSiteRemnant();
//     
//     /**
//      * 
//      * @return collection of String the complement sites after the cut
//      */
//     public Collection<String> getComplementCutSiteRemnant();
//     
// }
// 
// Path: src/be/uzleuven/gc/logistics/GBSX/utils/enzyme/model/EnzymeCollection.java
// public class EnzymeCollection {
//     
//     
//     HashSet<Enzyme> enzymeSet = new HashSet();
//     
//     /**
//      * creates a enzymeCollection from the known system enzymes
//      */
//     public EnzymeCollection(){
//         for (Enzyme enzyme : EnzymeEnum.values()){
//             this.enzymeSet.add(enzyme);
//         }
//     }
//     
//     /**
//      * creates a new enzymeCollection from the given enzymes + the neutral enzyme
//      * @param enzymeCollection collection of enzymes
//      */
//     public EnzymeCollection(Collection<Enzyme> enzymeCollection){
//         this.enzymeSet = new HashSet(enzymeCollection);
//         this.enzymeSet.add(this.getNeutralEnzyme());
//     }
//     
//     /**
//      * adds all given enzymes to the collection
//      * @param enzymeCollection | collection of enzymes
//      */
//     public void addEnzymes(Collection<Enzyme> enzymeCollection){
//         this.enzymeSet.addAll(enzymeCollection);
//     }
//     
//     /**
//      * replaces the enzymes from this collection with the new collection
//      * @param enzymeCollection | collection of enzymes
//      */
//     public void replaceEnzymes(Collection<Enzyme> enzymeCollection){
//         this.enzymeSet = new HashSet(enzymeCollection);
//     }
//     
//     /**
//      * 
//      * @return a Collection of all known enzymes
//      */
//     public Collection<Enzyme> getAllEnzymes(){
//         return this.enzymeSet;
//     }
//     
//     /**
//      * 
//      * @param name String | the name of the enzyme
//      * @return Enzyme | the enzyme with the given name
//      */
//     public Enzyme getEnzyme(String name){
//         for (Enzyme enzyme : this.enzymeSet){
//             if (enzyme.getName().toLowerCase().equals(name.toLowerCase())){
//                 return enzyme;
//             }
//         }
//         return EnzymeEnum.NAN;
//     }
//     
//     /**
//      * returns the neutral NAN enzyme
//      * @return Enzyme | a neutral nan enzyme
//      * @see EnzymeEnum#NAN
//      */
//     public Enzyme getNeutralEnzyme(){
//         return EnzymeEnum.NAN;
//     }
//     
//     
//     
// }
// 
// Path: src/be/uzleuven/gc/logistics/GBSX/utils/argumentsAndParameters/Parameters.java
// public interface Parameters {
//     
//     
//     /**
//      * 
//      * @param argument 
//      * @return true if the given argument is a parameter
//      */
//     public boolean containsParameter(Arguments argument);
//     
//     /**
//      * 
//      * @param argument 
//      * @return the asked argument as a String
//      */
//     public String getParameter(Arguments argument);
//     
//     /**
//      * adds the given parameter for the given argument
//      * @param argument  | the argument
//      * @param parameter String | the parameter
//      * @throws RuntimeException when the given argument is an invalid argument
//      */
//     public void setParameter(Arguments argument, String parameter);
//     
//     /**
//      * checks if all required parameters are set
//      * @return the String "All values are set" if all required parameters are set, else an error message
//      */
//     public boolean areRequiredParametersSet();
//     
//     /**
//      * checks if all required parameters are set
//      * @return the boolean true if all required parameters are set
//      */
//     public String getErrorRequiredParametersSet();
//     
//     /**
//      * configures a log file for all known parameters
//      * @return String to put in the log file
//      */
//     public String getParametersLogString();
//     
//     /**
//      * makes a help for all known parameters
//      * @return String | the help page
//      */
//     public String getParametersHelp();
//     
//     /**
//      * 
//      * @return String | the output directory of the tool
//      */
//     public String getOutputDirectory();
// }


import be.uzleuven.gc.logistics.GBSX.utils.argumentsAndParameters.Arguments;
import be.uzleuven.gc.logistics.GBSX.utils.enzyme.model.Enzyme;
import be.uzleuven.gc.logistics.GBSX.utils.enzyme.model.EnzymeCollection;
import be.uzleuven.gc.logistics.GBSX.utils.argumentsAndParameters.Parameters;
import java.util.Collection;
import java.util.HashMap;
    
    /**
     * checks if all required parameters are set
     * @return the String "All values are set" if all required parameters are set, else an error message
     */
    @Override
    public String getErrorRequiredParametersSet(){
        String error = "";
        if (! this.arguments.containsKey(BarcodeArguments.FILENAME1)){
            error += "Value required for option " + BarcodeArguments.FILENAME1.getSortName() + "\n";
        }
        if (error.equals("")){
            error = "All values are set";
        }
        return error;
    }
    
    /**
     * checks if all required parameters are set
     * @return the boolean true if all required parameters are set
     */
    @Override
    public boolean areRequiredParametersSet(){
        if (! this.arguments.containsKey(BarcodeArguments.FILENAME1)){
            return false;
        }
        return true;
    }

    @Override
// Path: src/be/uzleuven/gc/logistics/GBSX/utils/argumentsAndParameters/Arguments.java
// public interface Arguments {
//     
//     
//     /**
//      * returns the argument for the given name (-name), or invalid if no argument exists for the given name
//      * @param sortName String | the name of the argument
//      * @return GBSargument if any exists for the given name, else GBSaguments.INVALID_ARGUMENT
//      */
//     public Arguments getArgument(String sortName);
//     
//     
//     /**
//      * 
//      * @return String | the option name of the argument
//      */
//     public String getSortName();
//     
// }
// 
// Path: src/be/uzleuven/gc/logistics/GBSX/utils/enzyme/model/Enzyme.java
// public interface Enzyme{    
//     /**
//      * 
//      * @return String the name of the enzyme
//      */
//     public String getName();
//     
//     /**
//      * 
//      * @return collection of String the sites after the cut
//      */
//     public Collection<String> getInitialCutSiteRemnant();
//     
//     /**
//      * 
//      * @return collection of String the complement sites after the cut
//      */
//     public Collection<String> getComplementCutSiteRemnant();
//     
// }
// 
// Path: src/be/uzleuven/gc/logistics/GBSX/utils/enzyme/model/EnzymeCollection.java
// public class EnzymeCollection {
//     
//     
//     HashSet<Enzyme> enzymeSet = new HashSet();
//     
//     /**
//      * creates a enzymeCollection from the known system enzymes
//      */
//     public EnzymeCollection(){
//         for (Enzyme enzyme : EnzymeEnum.values()){
//             this.enzymeSet.add(enzyme);
//         }
//     }
//     
//     /**
//      * creates a new enzymeCollection from the given enzymes + the neutral enzyme
//      * @param enzymeCollection collection of enzymes
//      */
//     public EnzymeCollection(Collection<Enzyme> enzymeCollection){
//         this.enzymeSet = new HashSet(enzymeCollection);
//         this.enzymeSet.add(this.getNeutralEnzyme());
//     }
//     
//     /**
//      * adds all given enzymes to the collection
//      * @param enzymeCollection | collection of enzymes
//      */
//     public void addEnzymes(Collection<Enzyme> enzymeCollection){
//         this.enzymeSet.addAll(enzymeCollection);
//     }
//     
//     /**
//      * replaces the enzymes from this collection with the new collection
//      * @param enzymeCollection | collection of enzymes
//      */
//     public void replaceEnzymes(Collection<Enzyme> enzymeCollection){
//         this.enzymeSet = new HashSet(enzymeCollection);
//     }
//     
//     /**
//      * 
//      * @return a Collection of all known enzymes
//      */
//     public Collection<Enzyme> getAllEnzymes(){
//         return this.enzymeSet;
//     }
//     
//     /**
//      * 
//      * @param name String | the name of the enzyme
//      * @return Enzyme | the enzyme with the given name
//      */
//     public Enzyme getEnzyme(String name){
//         for (Enzyme enzyme : this.enzymeSet){
//             if (enzyme.getName().toLowerCase().equals(name.toLowerCase())){
//                 return enzyme;
//             }
//         }
//         return EnzymeEnum.NAN;
//     }
//     
//     /**
//      * returns the neutral NAN enzyme
//      * @return Enzyme | a neutral nan enzyme
//      * @see EnzymeEnum#NAN
//      */
//     public Enzyme getNeutralEnzyme(){
//         return EnzymeEnum.NAN;
//     }
//     
//     
//     
// }
// 
// Path: src/be/uzleuven/gc/logistics/GBSX/utils/argumentsAndParameters/Parameters.java
// public interface Parameters {
//     
//     
//     /**
//      * 
//      * @param argument 
//      * @return true if the given argument is a parameter
//      */
//     public boolean containsParameter(Arguments argument);
//     
//     /**
//      * 
//      * @param argument 
//      * @return the asked argument as a String
//      */
//     public String getParameter(Arguments argument);
//     
//     /**
//      * adds the given parameter for the given argument
//      * @param argument  | the argument
//      * @param parameter String | the parameter
//      * @throws RuntimeException when the given argument is an invalid argument
//      */
//     public void setParameter(Arguments argument, String parameter);
//     
//     /**
//      * checks if all required parameters are set
//      * @return the String "All values are set" if all required parameters are set, else an error message
//      */
//     public boolean areRequiredParametersSet();
//     
//     /**
//      * checks if all required parameters are set
//      * @return the boolean true if all required parameters are set
//      */
//     public String getErrorRequiredParametersSet();
//     
//     /**
//      * configures a log file for all known parameters
//      * @return String to put in the log file
//      */
//     public String getParametersLogString();
//     
//     /**
//      * makes a help for all known parameters
//      * @return String | the help page
//      */
//     public String getParametersHelp();
//     
//     /**
//      * 
//      * @return String | the output directory of the tool
//      */
//     public String getOutputDirectory();
// }


// Path: src/be/uzleuven/gc/logistics/GBSX/barcodeDiscovery/model/BarcodeParameters.java
import be.uzleuven.gc.logistics.GBSX.utils.argumentsAndParameters.Arguments;
import be.uzleuven.gc.logistics.GBSX.utils.enzyme.model.Enzyme;
import be.uzleuven.gc.logistics.GBSX.utils.enzyme.model.EnzymeCollection;
import be.uzleuven.gc.logistics.GBSX.utils.argumentsAndParameters.Parameters;
import java.util.Collection;
import java.util.HashMap;

    
    /**
     * checks if all required parameters are set
     * @return the String "All values are set" if all required parameters are set, else an error message
     */
    @Override
    public String getErrorRequiredParametersSet(){
        String error = "";
        if (! this.arguments.containsKey(BarcodeArguments.FILENAME1)){
            error += "Value required for option " + BarcodeArguments.FILENAME1.getSortName() + "\n";
        }
        if (error.equals("")){
            error = "All values are set";
        }
        return error;
    }
    
    /**
     * checks if all required parameters are set
     * @return the boolean true if all required parameters are set
     */
    @Override
    public boolean areRequiredParametersSet(){
        if (! this.arguments.containsKey(BarcodeArguments.FILENAME1)){
            return false;
        }
        return true;
    }

    @Override
    public boolean containsParameter(Arguments argument) {