// Path: core/src/main/java/edu/ucdavis/fiehnlab/spectra/hash/core/Spectrum.java
// public interface Spectrum {
// 
//     /**
//      * ion of a spectra
//      * @return
//      */
//     public List<Ion> getIons();
// 
//     /**
//      * convmerts the spectrum to a relative spectra
//      * @return
//      * @param scale
//      */
//     Spectrum toRelative(int scale);
// 
//     /**
//      *
//      * @return
//      */
//     String getOrigin();
// 
//     /**
//      * what kind of a spectra do we have
//      * @return
//      */
//     public SpectraType getType();
// }
// 
// Path: core/src/main/java/edu/ucdavis/fiehnlab/spectra/hash/core/types/SpectraType.java
// public enum SpectraType {
//     MS('1'),
//     NMR('2'),
//     UV('3'),
//     IR('4'),
//     RAMAN('5');
// 
//     /**
//      * identifier has to be a single character
//      */
//     private final char identifier;
// 
//     /**
//      * creates a new spectra type with the assoicated reference number
//      *
//      * @param referenceNumber
//      */
//     SpectraType(char referenceNumber) {
//         this.identifier = referenceNumber;
//     }
// 
//     /**
//      * access to it's identifier
//      *
//      * @return
//      */
//     public char getIdentifier() {
//         return this.identifier;
//     }
// }
// 
// Path: core/src/main/java/edu/ucdavis/fiehnlab/spectra/hash/core/util/SpectraUtil.java
// public class SpectraUtil {
// 
//     /**
//      * converts a string to a spectrum object for us, we can't really verify it, since this will cause stack overflow exceptions
//      * due to the complexity or the spectra
//      *
//      * @param spectra
//      * @param type
//      * @return
//      */
//     public static Spectrum convertStringToSpectrum(String spectra, SpectraType type, String origin) {
// 
//         String[] pairs = spectra.split(" ");
// 
//         List<Ion> ionList = new ArrayList<Ion>(200);
// 
//         for (String pair : pairs) {
//             String[] p = pair.split(":");
// 
//             Double m = Double.parseDouble(p[0]);
//             Double intensity = Double.parseDouble(p[1]);
// 
//             ionList.add(new Ion(m, intensity));
// 
//         }
// 
//         SpectrumImpl impl = new SpectrumImpl(ionList, type);
//         impl.setOrigin(origin);
// 
//         return impl;
//     }
// 
//     public static Spectrum convertStringToSpectrum(String spectra, SpectraType type) {
//         return convertStringToSpectrum( spectra,  type, "unknown");
//     }
// }


import edu.ucdavis.fiehnlab.spectra.hash.core.Spectrum;
import edu.ucdavis.fiehnlab.spectra.hash.core.types.SpectraType;
import edu.ucdavis.fiehnlab.spectra.hash.core.util.SpectraUtil;
import java.io.IOException;
import java.io.Reader;
import java.util.Scanner;
import java.util.logging.Logger;
package edu.ucdavis.fiehnlab.spectra.hash.core.io;



/**
 * reads a spectrum from the file input stream and notifies our spectrum handler
 */
public class SpectrumReader {

    private Logger logger = Logger.getLogger(getClass().getName());

    /**
     * read a spectrum and notify our handler
     *
     * @param reader
     * @param handler
     */
// Path: core/src/main/java/edu/ucdavis/fiehnlab/spectra/hash/core/Spectrum.java
// public interface Spectrum {
// 
//     /**
//      * ion of a spectra
//      * @return
//      */
//     public List<Ion> getIons();
// 
//     /**
//      * convmerts the spectrum to a relative spectra
//      * @return
//      * @param scale
//      */
//     Spectrum toRelative(int scale);
// 
//     /**
//      *
//      * @return
//      */
//     String getOrigin();
// 
//     /**
//      * what kind of a spectra do we have
//      * @return
//      */
//     public SpectraType getType();
// }
// 
// Path: core/src/main/java/edu/ucdavis/fiehnlab/spectra/hash/core/types/SpectraType.java
// public enum SpectraType {
//     MS('1'),
//     NMR('2'),
//     UV('3'),
//     IR('4'),
//     RAMAN('5');
// 
//     /**
//      * identifier has to be a single character
//      */
//     private final char identifier;
// 
//     /**
//      * creates a new spectra type with the assoicated reference number
//      *
//      * @param referenceNumber
//      */
//     SpectraType(char referenceNumber) {
//         this.identifier = referenceNumber;
//     }
// 
//     /**
//      * access to it's identifier
//      *
//      * @return
//      */
//     public char getIdentifier() {
//         return this.identifier;
//     }
// }
// 
// Path: core/src/main/java/edu/ucdavis/fiehnlab/spectra/hash/core/util/SpectraUtil.java
// public class SpectraUtil {
// 
//     /**
//      * converts a string to a spectrum object for us, we can't really verify it, since this will cause stack overflow exceptions
//      * due to the complexity or the spectra
//      *
//      * @param spectra
//      * @param type
//      * @return
//      */
//     public static Spectrum convertStringToSpectrum(String spectra, SpectraType type, String origin) {
// 
//         String[] pairs = spectra.split(" ");
// 
//         List<Ion> ionList = new ArrayList<Ion>(200);
// 
//         for (String pair : pairs) {
//             String[] p = pair.split(":");
// 
//             Double m = Double.parseDouble(p[0]);
//             Double intensity = Double.parseDouble(p[1]);
// 
//             ionList.add(new Ion(m, intensity));
// 
//         }
// 
//         SpectrumImpl impl = new SpectrumImpl(ionList, type);
//         impl.setOrigin(origin);
// 
//         return impl;
//     }
// 
//     public static Spectrum convertStringToSpectrum(String spectra, SpectraType type) {
//         return convertStringToSpectrum( spectra,  type, "unknown");
//     }
// }


// Path: core/src/main/java/edu/ucdavis/fiehnlab/spectra/hash/core/io/SpectrumReader.java
import edu.ucdavis.fiehnlab.spectra.hash.core.Spectrum;
import edu.ucdavis.fiehnlab.spectra.hash.core.types.SpectraType;
import edu.ucdavis.fiehnlab.spectra.hash.core.util.SpectraUtil;
import java.io.IOException;
import java.io.Reader;
import java.util.Scanner;
import java.util.logging.Logger;

package edu.ucdavis.fiehnlab.spectra.hash.core.io;



/**
 * reads a spectrum from the file input stream and notifies our spectrum handler
 */
public class SpectrumReader {

    private Logger logger = Logger.getLogger(getClass().getName());

    /**
     * read a spectrum and notify our handler
     *
     * @param reader
     * @param handler
     */
    public void readSpectrum(Reader reader, SpectraHandler handler, SpectraType spectraType) throws IOException {