// Path: Java/statsdb-api/src/main/java/uk/ac/tgac/statsdb/analysis/QCAnalysis.java
// public interface QCAnalysis {
//   /**
//    * Get the QCAnalysis ID
//    * @return the QCAnalysis object ID
//    */
//   public long getId();
// 
//   /**
//    * Sets the ID of this QCAnalysis object
//    * @param id
//    */
//   public void setId(long id);
// 
//   /**
//    * Retrieve an analysis property value associated with a given key
//    *
//    * @param key
//    * @return
//    * @throws QCAnalysisException
//    */
//   public String getProperty(String key) throws QCAnalysisException;
// 
//   /**
//    * Add an analysis property
//    *
//    * @param key
//    * @param value
//    * @throws QCAnalysisException
//    */
//   public void addProperty(String key, String value) throws QCAnalysisException;
// 
//   /**
//    * Add a partition value
//    *
//    * @param range
//    * @param key
//    * @param value
//    * @throws QCAnalysisException
//    */
//   public void addPartitionValue(String range, String key, String value) throws QCAnalysisException;
// 
//   /**
//    * Add a position value
//    *
//    * @param position
//    * @param key
//    * @param value
//    * @throws QCAnalysisException
//    */
//   public void addPositionValue(String position, String key, String value) throws QCAnalysisException;
// 
//   /**
//    * Add a general value
//    *
//    * @param valueType
//    * @param valueScope
//    * @param descriptor
//    * @throws QCAnalysisException
//    */
//   public void addGeneralValue(String valueType, String valueScope, String descriptor) throws QCAnalysisException;
// 
//   /**
//    * Add a value type scope
//    *
//    * @param valueTypeKey
//    * @param valueScope
//    * @throws QCAnalysisException
//    */
//   public void addValueType(String valueTypeKey, String valueScope) throws QCAnalysisException;
// 
//   /**
//    * Add a value type description
//    *
//    * @param valueTypeKey
//    * @param valueDescription
//    * @throws QCAnalysisException
//    */
//   public void addValueDescription(String valueTypeKey, String valueDescription) throws QCAnalysisException;
// 
//   /**
//    * Retrieve all analysis properties
//    *
//    * @return a map of key:value pairs
//    */
//   public Map<String, String> getProperties();
// 
//   /**
//    * Retrieve all analysis general values
//    *
//    * @return a map of key:value pairs
//    */
//   public Map<String,String> getGeneralValues();
// 
//   /**
//    * Retrieve all analysis partition values
//    *
//    * @return a list of PartitionValues
//    */
//   public List<PartitionValue> getPartitionValues();
// 
//   /**
//    * Retrieve all analysis position values
//    *
//    * @return a list of PositionValues
//    */
//   public List<PositionValue> getPositionValues();
// 
//   /**
//    * Retrieve all analysis value descriptions
//    *
//    * @return a map of key:value pairs
//    */
//   public Map<String, String> getValueDescriptions();
// 
//   /**
//    * Retrieve all analysis value type scopes
//    *
//    * @return a map of key:value pairs
//    */
//   public Map<String, String> getValueScopes();
// }
// 
// Path: Java/statsdb-api/src/main/java/uk/ac/tgac/statsdb/exception/QCAnalysisException.java
// public class QCAnalysisException extends Exception {
//   public QCAnalysisException(String s) {
//     super(s);
//   }
// 
//   public QCAnalysisException(String s, Throwable cause) {
//     super(s);
//     if (cause != null) {
//         initCause(cause);
//     }
//   }
// }


import net.sourceforge.fluxion.spi.Spi;
import uk.ac.tgac.statsdb.analysis.QCAnalysis;
import uk.ac.tgac.statsdb.exception.QCAnalysisException;
package uk.ac.tgac.statsdb.run.parser;


/**
 * Interface defining contract to parse the output of a QC application into the StatsDB QCAnalysis data type.
 *
 * This interface is marked with the @Spi annotation, meaning it can be resolved at runtime by the ServiceLoader
 * architecture.
 *
 * @author Rob Davey
 * @date 01/07/13
 * @since 1.0-SNAPSHOT
 */
@Spi
public interface QcReportParser<T> {
  /**
   * Parse a report of type T, populating a given QCAnalysis object properties and values
   * @param in object of type T
   * @param qcAnalysis to populate with report contents
   * @throws QCAnalysisException when the report could not be parsed
   */
// Path: Java/statsdb-api/src/main/java/uk/ac/tgac/statsdb/analysis/QCAnalysis.java
// public interface QCAnalysis {
//   /**
//    * Get the QCAnalysis ID
//    * @return the QCAnalysis object ID
//    */
//   public long getId();
// 
//   /**
//    * Sets the ID of this QCAnalysis object
//    * @param id
//    */
//   public void setId(long id);
// 
//   /**
//    * Retrieve an analysis property value associated with a given key
//    *
//    * @param key
//    * @return
//    * @throws QCAnalysisException
//    */
//   public String getProperty(String key) throws QCAnalysisException;
// 
//   /**
//    * Add an analysis property
//    *
//    * @param key
//    * @param value
//    * @throws QCAnalysisException
//    */
//   public void addProperty(String key, String value) throws QCAnalysisException;
// 
//   /**
//    * Add a partition value
//    *
//    * @param range
//    * @param key
//    * @param value
//    * @throws QCAnalysisException
//    */
//   public void addPartitionValue(String range, String key, String value) throws QCAnalysisException;
// 
//   /**
//    * Add a position value
//    *
//    * @param position
//    * @param key
//    * @param value
//    * @throws QCAnalysisException
//    */
//   public void addPositionValue(String position, String key, String value) throws QCAnalysisException;
// 
//   /**
//    * Add a general value
//    *
//    * @param valueType
//    * @param valueScope
//    * @param descriptor
//    * @throws QCAnalysisException
//    */
//   public void addGeneralValue(String valueType, String valueScope, String descriptor) throws QCAnalysisException;
// 
//   /**
//    * Add a value type scope
//    *
//    * @param valueTypeKey
//    * @param valueScope
//    * @throws QCAnalysisException
//    */
//   public void addValueType(String valueTypeKey, String valueScope) throws QCAnalysisException;
// 
//   /**
//    * Add a value type description
//    *
//    * @param valueTypeKey
//    * @param valueDescription
//    * @throws QCAnalysisException
//    */
//   public void addValueDescription(String valueTypeKey, String valueDescription) throws QCAnalysisException;
// 
//   /**
//    * Retrieve all analysis properties
//    *
//    * @return a map of key:value pairs
//    */
//   public Map<String, String> getProperties();
// 
//   /**
//    * Retrieve all analysis general values
//    *
//    * @return a map of key:value pairs
//    */
//   public Map<String,String> getGeneralValues();
// 
//   /**
//    * Retrieve all analysis partition values
//    *
//    * @return a list of PartitionValues
//    */
//   public List<PartitionValue> getPartitionValues();
// 
//   /**
//    * Retrieve all analysis position values
//    *
//    * @return a list of PositionValues
//    */
//   public List<PositionValue> getPositionValues();
// 
//   /**
//    * Retrieve all analysis value descriptions
//    *
//    * @return a map of key:value pairs
//    */
//   public Map<String, String> getValueDescriptions();
// 
//   /**
//    * Retrieve all analysis value type scopes
//    *
//    * @return a map of key:value pairs
//    */
//   public Map<String, String> getValueScopes();
// }
// 
// Path: Java/statsdb-api/src/main/java/uk/ac/tgac/statsdb/exception/QCAnalysisException.java
// public class QCAnalysisException extends Exception {
//   public QCAnalysisException(String s) {
//     super(s);
//   }
// 
//   public QCAnalysisException(String s, Throwable cause) {
//     super(s);
//     if (cause != null) {
//         initCause(cause);
//     }
//   }
// }


// Path: Java/statsdb-api/src/main/java/uk/ac/tgac/statsdb/run/parser/QcReportParser.java
import net.sourceforge.fluxion.spi.Spi;
import uk.ac.tgac.statsdb.analysis.QCAnalysis;
import uk.ac.tgac.statsdb.exception.QCAnalysisException;

package uk.ac.tgac.statsdb.run.parser;


/**
 * Interface defining contract to parse the output of a QC application into the StatsDB QCAnalysis data type.
 *
 * This interface is marked with the @Spi annotation, meaning it can be resolved at runtime by the ServiceLoader
 * architecture.
 *
 * @author Rob Davey
 * @date 01/07/13
 * @since 1.0-SNAPSHOT
 */
@Spi
public interface QcReportParser<T> {
  /**
   * Parse a report of type T, populating a given QCAnalysis object properties and values
   * @param in object of type T
   * @param qcAnalysis to populate with report contents
   * @throws QCAnalysisException when the report could not be parsed
   */
  void parseReport(T in, QCAnalysis qcAnalysis) throws QCAnalysisException;