MzXMLRawDataFile.java

package io.github.msdk.io.mzxml;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import javax.annotation.Nonnull;

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;

import io.github.msdk.datamodel.chromatograms.Chromatogram;
import io.github.msdk.datamodel.files.FileType;
import io.github.msdk.datamodel.rawdata.MsScan;
import io.github.msdk.datamodel.rawdata.RawDataFile;

/**
 * <p>MzXMLRawDataFile class.</p>
 *
 */
public class MzXMLRawDataFile implements RawDataFile {

  private static final @Nonnull FileType fileType = FileType.MZXML;

  private final @Nonnull File sourceFile;

  private final @Nonnull List<MsScan> msScans;
  private final @Nonnull List<Chromatogram> chromatograms;

  private @Nonnull String name;

  /**
   * <p>
   * Constructor for MzXMLRawDataFile.
   * </p>
   *
   * @param sourceFile a {@link java.io.File} object.
   */
  public MzXMLRawDataFile(@Nonnull File sourceFile) {
    this.sourceFile = sourceFile;
    this.name = sourceFile.getName();
    this.msScans = new ArrayList<>();
    this.chromatograms = new ArrayList<>();
  }

  /** {@inheritDoc} */
  @Override
  @Nonnull
  public String getName() {
    return name;
  }

  /** {@inheritDoc} */
  @Override
  @Nonnull
  public Optional<File> getOriginalFile() {
    return Optional.ofNullable(sourceFile);
  }

  /** {@inheritDoc} */
  @Override
  @Nonnull
  public FileType getRawDataFileType() {
    return fileType;
  }

  /** {@inheritDoc} */
  @Override
  public @Nonnull List<MsScan> getScans() {
    return ImmutableList.copyOf(msScans);
  }

  /**
   * {@inheritDoc}
   *
   * @param scan a {@link io.github.msdk.datamodel.rawdata.MsScan} object.
   */
  public void addScan(@Nonnull MsScan scan) {
    Preconditions.checkNotNull(scan);
    synchronized (msScans) {
      msScans.add(scan);
    }
  }

  /**
   * {@inheritDoc}
   *
   * @param scan a {@link io.github.msdk.datamodel.rawdata.MsScan} object.
   */
  public void removeScan(@Nonnull MsScan scan) {
    Preconditions.checkNotNull(scan);
    synchronized (msScans) {
      msScans.remove(scan);
    }
  }

  /** {@inheritDoc} */
  @SuppressWarnings("null")
  @Override
  @Nonnull
  public List<Chromatogram> getChromatograms() {
    return ImmutableList.copyOf(chromatograms);
  }

  /** {@inheritDoc} */
  @Override
  public void dispose() {}

  /** {@inheritDoc} */
  @Override
  @Nonnull
  public List<String> getMsFunctions() {
    ArrayList<String> msFunctionList = new ArrayList<>();
    synchronized (msScans) {
      for (MsScan scan : msScans) {
        String f = scan.getMsFunction();
        if ((f != null) && (!msFunctionList.contains(f)))
          msFunctionList.add(f);
      }
    }
    return msFunctionList;
  }

}