001/*
002 * mzTab-M reference implementation and validation API.
003 * This is the mzTab-M reference implementation and validation API service.
004 *
005 * OpenAPI spec version: 2.0.0
006 * Contact: nils.hoffmann@isas.de
007 *
008 * NOTE: This class is auto generated by the swagger code generator program.
009 * https://github.com/swagger-api/swagger-codegen.git
010 * Do not edit the class manually.
011 */
012
013
014package de.isas.mztab2.model;
015
016import java.util.Objects;
017import java.util.Arrays;
018import com.fasterxml.jackson.annotation.JsonProperty;
019import com.fasterxml.jackson.annotation.JsonCreator;
020import com.fasterxml.jackson.annotation.JsonValue;
021import de.isas.mztab2.model.Assay;
022import de.isas.mztab2.model.CV;
023import de.isas.mztab2.model.ColumnParameterMapping;
024import de.isas.mztab2.model.Contact;
025import de.isas.mztab2.model.Database;
026import de.isas.mztab2.model.Instrument;
027import de.isas.mztab2.model.MsRun;
028import de.isas.mztab2.model.Parameter;
029import de.isas.mztab2.model.Publication;
030import de.isas.mztab2.model.Sample;
031import de.isas.mztab2.model.SampleProcessing;
032import de.isas.mztab2.model.Software;
033import de.isas.mztab2.model.StudyVariable;
034import de.isas.mztab2.model.Uri;
035import io.swagger.annotations.ApiModel;
036import io.swagger.annotations.ApiModelProperty;
037import java.util.ArrayList;
038import java.util.List;
039import com.fasterxml.jackson.dataformat.xml.annotation.*;
040import javax.xml.bind.annotation.*;
041import javax.validation.constraints.*;
042import javax.validation.Valid;
043import de.isas.lipidomics.mztab2.validation.constraints.*;
044/**
045 * 
046 * The metadata section provides additional information about the dataset(s) reported in the mzTab file. All fields in the metadata section are optional apart from those noted as mandatory. The fields in the metadata section MUST be reported in order of the various fields listed here. The field’s name and value MUST be separated by a tab character. 
047
048 * 
049 *
050 * <p>mzTab-M specification example(s):</p>
051 * <pre><code>MTD       mzTab-version   2.0.0-M
052MTD     mzTab-ID        MTBL1234
053MTD     title   Effects of Rapamycin on metabolite profile
054...
055</code></pre>
056 * 
057 *
058 */
059@ApiModel(description = "The metadata section provides additional information about the dataset(s) reported in the mzTab file. All fields in the metadata section are optional apart from those noted as mandatory. The fields in the metadata section MUST be reported in order of the various fields listed here. The field’s name and value MUST be separated by a tab character.  ")
060@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaClientCodegen", date = "2019-08-07T11:09:24.487+02:00")
061@XmlRootElement(name = "Metadata")
062@XmlAccessorType(XmlAccessType.FIELD)
063@JacksonXmlRootElement(localName = "Metadata")
064public class Metadata {
065
066  /**
067   * Property enumeration for Metadata.
068   */
069  public static enum Properties {
070      prefix("prefix"), 
071      mzTabVersion("mzTab-version"), 
072      mzTabID("mzTab-ID"), 
073      title("title"), 
074      description("description"), 
075      sampleProcessing("sample_processing"), 
076      instrument("instrument"), 
077      software("software"), 
078      publication("publication"), 
079      contact("contact"), 
080      uri("uri"), 
081      externalStudyUri("external_study_uri"), 
082      quantificationMethod("quantification_method"), 
083      studyVariable("study_variable"), 
084      msRun("ms_run"), 
085      assay("assay"), 
086      sample("sample"), 
087      custom("custom"), 
088      cv("cv"), 
089      database("database"), 
090      derivatizationAgent("derivatization_agent"), 
091      smallMoleculeQuantificationUnit("small_molecule-quantification_unit"), 
092      smallMoleculeFeatureQuantificationUnit("small_molecule_feature-quantification_unit"), 
093      smallMoleculeIdentificationReliability("small_molecule-identification_reliability"), 
094      idConfidenceMeasure("id_confidence_measure"), 
095      colunitSmallMolecule("colunit-small_molecule"), 
096      colunitSmallMoleculeFeature("colunit-small_molecule_feature"), 
097      colunitSmallMoleculeEvidence("colunit-small_molecule_evidence");
098
099    private final String propertyName;
100
101    private Properties(String propertyName) {
102      this.propertyName = propertyName;
103    }
104
105    public String getPropertyName() {
106      return propertyName;
107    }
108
109    public String toString() {
110      return propertyName;
111    }
112
113    public String toUpper() {
114      return propertyName.toUpperCase();
115    }
116
117    public static Properties of(String value) {
118      if(value==null) {
119        throw new NullPointerException("Argument value must not be null!");
120      }
121      return Arrays.asList(Properties.values()).stream().filter(m -> m.propertyName.equals(value.toLowerCase())).findAny().orElseThrow(IllegalArgumentException::new);
122    }
123  };
124  
125  /**
126   * The metadata section prefix. MUST always be MTD.
127
128   */
129  public enum PrefixEnum {
130    MTD("MTD");
131
132    private String value;
133
134    PrefixEnum(String value) {
135      this.value = value;
136    }
137
138    @JsonValue
139    public String getValue() {
140      return value;
141    }
142
143    @Override
144    public String toString() {
145      return String.valueOf(value);
146    }
147
148    @JsonCreator
149    public static PrefixEnum fromValue(String text) {
150      for (PrefixEnum b : PrefixEnum.values()) {
151        if (String.valueOf(b.value).equals(text)) {
152          return b;
153        }
154      }
155      return null;
156    }
157  }
158
159  @JsonProperty("prefix")
160  @JacksonXmlProperty(localName = "prefix")
161  @XmlElement(name = "prefix")
162  private PrefixEnum prefix = PrefixEnum.MTD;
163  @JsonProperty("mzTab-version")
164  @JacksonXmlProperty(localName = "mzTab-version")
165  @XmlElement(name = "mzTab-version")
166  private String mzTabVersion = null;
167  @JsonProperty("mzTab-ID")
168  @JacksonXmlProperty(localName = "mzTab-ID")
169  @XmlElement(name = "mzTab-ID")
170  private String mzTabID = null;
171  @JsonProperty("title")
172  @JacksonXmlProperty(localName = "title")
173  @XmlElement(name = "title")
174  private String title = null;
175  @JsonProperty("description")
176  @JacksonXmlProperty(localName = "description")
177  @XmlElement(name = "description")
178  private String description = null;
179  @JsonProperty("sample_processing")
180  // Is a container wrapped=false
181  // items.name=sampleProcessing items.baseName=sampleProcessing items.xmlName= items.xmlNamespace=
182  // items.example= items.type=SampleProcessing
183  @XmlElement(name = "sampleProcessing")
184  private List<SampleProcessing> sampleProcessing = null;
185  @JsonProperty("instrument")
186  // Is a container wrapped=false
187  // items.name=instrument items.baseName=instrument items.xmlName= items.xmlNamespace=
188  // items.example= items.type=Instrument
189  @XmlElement(name = "instrument")
190  private List<Instrument> instrument = null;
191  @JsonProperty("software")
192  // Is a container wrapped=false
193  // items.name=software items.baseName=software items.xmlName= items.xmlNamespace=
194  // items.example= items.type=Software
195  @XmlElement(name = "software")
196  private List<Software> software = new ArrayList<>();
197  @JsonProperty("publication")
198  // Is a container wrapped=false
199  // items.name=publication items.baseName=publication items.xmlName= items.xmlNamespace=
200  // items.example= items.type=Publication
201  @XmlElement(name = "publication")
202  private List<Publication> publication = null;
203  @JsonProperty("contact")
204  // Is a container wrapped=false
205  // items.name=contact items.baseName=contact items.xmlName= items.xmlNamespace=
206  // items.example= items.type=Contact
207  @XmlElement(name = "contact")
208  private List<Contact> contact = null;
209  @JsonProperty("uri")
210  // Is a container wrapped=false
211  // items.name=uri items.baseName=uri items.xmlName= items.xmlNamespace=
212  // items.example= items.type=Uri
213  @XmlElement(name = "uri")
214  private List<Uri> uri = null;
215  @JsonProperty("external_study_uri")
216  // Is a container wrapped=false
217  // items.name=externalStudyUri items.baseName=externalStudyUri items.xmlName= items.xmlNamespace=
218  // items.example= items.type=Uri
219  @XmlElement(name = "externalStudyUri")
220  private List<Uri> externalStudyUri = null;
221  @JsonProperty("quantification_method")
222  @JacksonXmlProperty(localName = "quantification_method")
223  @XmlElement(name = "quantification_method")
224  private Parameter quantificationMethod = null;
225  @JsonProperty("study_variable")
226  // Is a container wrapped=false
227  // items.name=studyVariable items.baseName=studyVariable items.xmlName= items.xmlNamespace=
228  // items.example= items.type=StudyVariable
229  @XmlElement(name = "studyVariable")
230  private List<StudyVariable> studyVariable = new ArrayList<>();
231  @JsonProperty("ms_run")
232  // Is a container wrapped=false
233  // items.name=msRun items.baseName=msRun items.xmlName= items.xmlNamespace=
234  // items.example= items.type=MsRun
235  @XmlElement(name = "msRun")
236  private List<MsRun> msRun = new ArrayList<>();
237  @JsonProperty("assay")
238  // Is a container wrapped=false
239  // items.name=assay items.baseName=assay items.xmlName= items.xmlNamespace=
240  // items.example= items.type=Assay
241  @XmlElement(name = "assay")
242  private List<Assay> assay = new ArrayList<>();
243  @JsonProperty("sample")
244  // Is a container wrapped=false
245  // items.name=sample items.baseName=sample items.xmlName= items.xmlNamespace=
246  // items.example= items.type=Sample
247  @XmlElement(name = "sample")
248  private List<Sample> sample = null;
249  @JsonProperty("custom")
250  // Is a container wrapped=false
251  // items.name=custom items.baseName=custom items.xmlName= items.xmlNamespace=
252  // items.example= items.type=Parameter
253  @XmlElement(name = "custom")
254  private List<Parameter> custom = null;
255  @JsonProperty("cv")
256  // Is a container wrapped=false
257  // items.name=cv items.baseName=cv items.xmlName= items.xmlNamespace=
258  // items.example= items.type=CV
259  @XmlElement(name = "cv")
260  private List<CV> cv = new ArrayList<>();
261  @JsonProperty("database")
262  // Is a container wrapped=false
263  // items.name=database items.baseName=database items.xmlName= items.xmlNamespace=
264  // items.example= items.type=Database
265  @XmlElement(name = "database")
266  private List<Database> database = new ArrayList<>();
267  @JsonProperty("derivatization_agent")
268  // Is a container wrapped=false
269  // items.name=derivatizationAgent items.baseName=derivatizationAgent items.xmlName= items.xmlNamespace=
270  // items.example= items.type=Parameter
271  @XmlElement(name = "derivatizationAgent")
272  private List<Parameter> derivatizationAgent = null;
273  @JsonProperty("small_molecule-quantification_unit")
274  @JacksonXmlProperty(localName = "small_molecule-quantification_unit")
275  @XmlElement(name = "small_molecule-quantification_unit")
276  private Parameter smallMoleculeQuantificationUnit = null;
277  @JsonProperty("small_molecule_feature-quantification_unit")
278  @JacksonXmlProperty(localName = "small_molecule_feature-quantification_unit")
279  @XmlElement(name = "small_molecule_feature-quantification_unit")
280  private Parameter smallMoleculeFeatureQuantificationUnit = null;
281  @JsonProperty("small_molecule-identification_reliability")
282  @JacksonXmlProperty(localName = "small_molecule-identification_reliability")
283  @XmlElement(name = "small_molecule-identification_reliability")
284  private Parameter smallMoleculeIdentificationReliability = null;
285  @JsonProperty("id_confidence_measure")
286  // Is a container wrapped=false
287  // items.name=idConfidenceMeasure items.baseName=idConfidenceMeasure items.xmlName= items.xmlNamespace=
288  // items.example= items.type=Parameter
289  @XmlElement(name = "idConfidenceMeasure")
290  private List<Parameter> idConfidenceMeasure = new ArrayList<>();
291  @JsonProperty("colunit-small_molecule")
292  // Is a container wrapped=false
293  // items.name=colunitSmallMolecule items.baseName=colunitSmallMolecule items.xmlName= items.xmlNamespace=
294  // items.example= items.type=ColumnParameterMapping
295  @XmlElement(name = "colunitSmallMolecule")
296  private List<ColumnParameterMapping> colunitSmallMolecule = null;
297  @JsonProperty("colunit-small_molecule_feature")
298  // Is a container wrapped=false
299  // items.name=colunitSmallMoleculeFeature items.baseName=colunitSmallMoleculeFeature items.xmlName= items.xmlNamespace=
300  // items.example= items.type=ColumnParameterMapping
301  @XmlElement(name = "colunitSmallMoleculeFeature")
302  private List<ColumnParameterMapping> colunitSmallMoleculeFeature = null;
303  @JsonProperty("colunit-small_molecule_evidence")
304  // Is a container wrapped=false
305  // items.name=colunitSmallMoleculeEvidence items.baseName=colunitSmallMoleculeEvidence items.xmlName= items.xmlNamespace=
306  // items.example= items.type=ColumnParameterMapping
307  @XmlElement(name = "colunitSmallMoleculeEvidence")
308  private List<ColumnParameterMapping> colunitSmallMoleculeEvidence = null;
309
310 /**
311   * Builder method for prefix.
312   *
313   * @see Metadata#setPrefix Metadata#setPrefix for specification examples
314   * @see Metadata#getPrefix Metadata#getPrefix for validation constraints
315   * @param prefix a {@code PrefixEnum} parameter.
316   * @return Metadata
317  **/
318  public Metadata prefix(PrefixEnum prefix) {
319   this.prefix = prefix;
320   return this;
321  }
322
323   /**
324   * The metadata section prefix. MUST always be MTD.
325
326   *
327   * @return prefix
328  **/
329  @NotNull
330  @ApiModelProperty(example = "MTD", required = true, value = "The metadata section prefix. MUST always be MTD. ")
331  public PrefixEnum getPrefix() {
332    return prefix;
333  }
334
335 /**
336   * Set prefix.
337   *
338   * 
339   * 
340   * @see #getPrefix Metadata#getPrefix for validation constraints
341   * @param prefix a {@code PrefixEnum} parameter.
342  **/
343  public void setPrefix(PrefixEnum prefix) {
344    this.prefix = prefix;
345  }
346
347
348 /**
349   * Builder method for mzTabVersion.
350   *
351   * @see Metadata#setMzTabVersion Metadata#setMzTabVersion for specification examples
352   * @see Metadata#getMzTabVersion Metadata#getMzTabVersion for validation constraints
353   * @param mzTabVersion a {@code String} parameter.
354   * @return Metadata
355  **/
356  public Metadata mzTabVersion(String mzTabVersion) {
357   this.mzTabVersion = mzTabVersion;
358   return this;
359  }
360
361   /**
362   * The version of the mzTab file. The suffix MUST be &quot;-M&quot; for mzTab for metabolomics (mzTab-M).
363
364   *
365   * @return mzTabVersion
366  **/
367  @NotNull
368 @Pattern(regexp="^\\d{1}\\.\\d{1}\\.\\d{1}-[A-Z]{1}$")  @ApiModelProperty(required = true, value = "The version of the mzTab file. The suffix MUST be \"-M\" for mzTab for metabolomics (mzTab-M). ")
369  public String getMzTabVersion() {
370    return mzTabVersion;
371  }
372
373 /**
374   * Set mzTabVersion.
375   *
376   * <p>mzTab-M specification example(s):</p>
377   * <pre><code>MTD     mzTab-version   2.0.0-M
378MTD     mzTab-version   2.0.1-M
379</code></pre>
380   * 
381   * 
382   * @see #getMzTabVersion Metadata#getMzTabVersion for validation constraints
383   * @param mzTabVersion a {@code String} parameter.
384  **/
385  public void setMzTabVersion(String mzTabVersion) {
386    this.mzTabVersion = mzTabVersion;
387  }
388
389
390 /**
391   * Builder method for mzTabID.
392   *
393   * @see Metadata#setMzTabID Metadata#setMzTabID for specification examples
394   * @see Metadata#getMzTabID Metadata#getMzTabID for validation constraints
395   * @param mzTabID a {@code String} parameter.
396   * @return Metadata
397  **/
398  public Metadata mzTabID(String mzTabID) {
399   this.mzTabID = mzTabID;
400   return this;
401  }
402
403   /**
404   * The ID of the mzTab file, this could be supplied by the repository from which it is downloaded or a local identifier from the lab producing the file. It is not intended to be a globally unique ID but carry some locally useful meaning.
405
406   *
407   * @return mzTabID
408  **/
409  @NotNull
410  @ApiModelProperty(example = "MTD mzTab-ID MTBLS214", required = true, value = "The ID of the mzTab file, this could be supplied by the repository from which it is downloaded or a local identifier from the lab producing the file. It is not intended to be a globally unique ID but carry some locally useful meaning. ")
411  public String getMzTabID() {
412    return mzTabID;
413  }
414
415 /**
416   * Set mzTabID.
417   *
418   * 
419   * 
420   * @see #getMzTabID Metadata#getMzTabID for validation constraints
421   * @param mzTabID a {@code String} parameter.
422  **/
423  public void setMzTabID(String mzTabID) {
424    this.mzTabID = mzTabID;
425  }
426
427
428 /**
429   * Builder method for title.
430   *
431   * @see Metadata#setTitle Metadata#setTitle for specification examples
432   * @see Metadata#getTitle Metadata#getTitle for validation constraints
433   * @param title a {@code String} parameter.
434   * @return Metadata
435  **/
436  public Metadata title(String title) {
437   this.title = title;
438   return this;
439  }
440
441   /**
442   * The file’s human readable title.
443
444   *
445   * @return title
446  **/
447  @ApiModelProperty(example = "MTD title My first test experiment", value = "The file’s human readable title. ")
448  public String getTitle() {
449    return title;
450  }
451
452 /**
453   * Set title.
454   *
455   * 
456   * 
457   * @see #getTitle Metadata#getTitle for validation constraints
458   * @param title a {@code String} parameter.
459  **/
460  public void setTitle(String title) {
461    this.title = title;
462  }
463
464
465 /**
466   * Builder method for description.
467   *
468   * @see Metadata#setDescription Metadata#setDescription for specification examples
469   * @see Metadata#getDescription Metadata#getDescription for validation constraints
470   * @param description a {@code String} parameter.
471   * @return Metadata
472  **/
473  public Metadata description(String description) {
474   this.description = description;
475   return this;
476  }
477
478   /**
479   * The file’s human readable description.
480
481   *
482   * @return description
483  **/
484  @ApiModelProperty(example = "MTD description An experiment investigating the effects of Il-6.", value = "The file’s human readable description. ")
485  public String getDescription() {
486    return description;
487  }
488
489 /**
490   * Set description.
491   *
492   * 
493   * 
494   * @see #getDescription Metadata#getDescription for validation constraints
495   * @param description a {@code String} parameter.
496  **/
497  public void setDescription(String description) {
498    this.description = description;
499  }
500
501
502 /**
503   * Builder method for sampleProcessing.
504   *
505   * @see Metadata#setSampleProcessing Metadata#setSampleProcessing for specification examples
506   * @see Metadata#getSampleProcessing Metadata#getSampleProcessing for validation constraints
507   * @param sampleProcessing a {@code List<SampleProcessing>} parameter.
508   * @return Metadata
509  **/
510  public Metadata sampleProcessing(List<SampleProcessing> sampleProcessing) {
511   this.sampleProcessing = sampleProcessing;
512   return this;
513  }
514
515  /**
516   * Add a single sampleProcessingItem to the sampleProcessing collection.
517   *
518   * @see Metadata#getSampleProcessing Metadata#getSampleProcessing for validation constraints
519   * @param sampleProcessingItem a {@code SampleProcessing} parameter.
520   * @return Metadata
521   */
522  public Metadata addSampleProcessingItem(SampleProcessing sampleProcessingItem) {
523    if (this.sampleProcessing == null) {
524      this.sampleProcessing = new ArrayList<>();
525    }
526    this.sampleProcessing.add(sampleProcessingItem);
527    return this;
528  }
529
530   /**
531   * A list of parameters describing a sample processing, preparation or handling step similar to a biological or analytical methods report. The order of the sample_processing items should reflect the order these processing steps were performed in. If multiple parameters are given for a step these MUST be separated by a “|”. If derivatization was performed, it MUST be reported here as a general step, e.g. &#39;silylation&#39; and the actual derivatization agens MUST be specified in the Section 6.2.54 part.
532
533   *
534   * @return sampleProcessing
535  **/
536  @Valid
537  @ApiModelProperty(value = "A list of parameters describing a sample processing, preparation or handling step similar to a biological or analytical methods report. The order of the sample_processing items should reflect the order these processing steps were performed in. If multiple parameters are given for a step these MUST be separated by a “|”. If derivatization was performed, it MUST be reported here as a general step, e.g. 'silylation' and the actual derivatization agens MUST be specified in the Section 6.2.54 part. ")
538  public List<SampleProcessing> getSampleProcessing() {
539    return sampleProcessing;
540  }
541
542 /**
543   * Set sampleProcessing.
544   *
545   * <p>mzTab-M specification example(s):</p>
546   * <pre><code>MTD     sample_processing[1]    [MSIO, MSIO:0000107, metabolism quenching using precooled 60 percent methanol ammonium bicarbonate buffer,]
547MTD     sample_processing[2]    [MSIO, MSIO:0000146, centrifugation,]
548MTD     sample_processing[3]    [MSIO, MSIO:0000141, metabolite extraction,]
549MTD     sample_processing[4]    [MSIO, MSIO:0000141, silylation,]
550</code></pre>
551   * 
552   * 
553   * @see #getSampleProcessing Metadata#getSampleProcessing for validation constraints
554   * @param sampleProcessing a {@code List<SampleProcessing>} parameter.
555  **/
556  public void setSampleProcessing(List<SampleProcessing> sampleProcessing) {
557    this.sampleProcessing = sampleProcessing;
558  }
559
560
561 /**
562   * Builder method for instrument.
563   *
564   * @see Metadata#setInstrument Metadata#setInstrument for specification examples
565   * @see Metadata#getInstrument Metadata#getInstrument for validation constraints
566   * @param instrument a {@code List<Instrument>} parameter.
567   * @return Metadata
568  **/
569  public Metadata instrument(List<Instrument> instrument) {
570   this.instrument = instrument;
571   return this;
572  }
573
574  /**
575   * Add a single instrumentItem to the instrument collection.
576   *
577   * @see Metadata#getInstrument Metadata#getInstrument for validation constraints
578   * @param instrumentItem a {@code Instrument} parameter.
579   * @return Metadata
580   */
581  public Metadata addInstrumentItem(Instrument instrumentItem) {
582    if (this.instrument == null) {
583      this.instrument = new ArrayList<>();
584    }
585    this.instrument.add(instrumentItem);
586    return this;
587  }
588
589   /**
590   * The name, source, analyzer and detector of the instruments used in the experiment. Multiple instruments are numbered [1-n].
591   *
592   * @return instrument
593  **/
594  @Valid
595  @ApiModelProperty(value = "The name, source, analyzer and detector of the instruments used in the experiment. Multiple instruments are numbered [1-n].")
596  public List<Instrument> getInstrument() {
597    return instrument;
598  }
599
600 /**
601   * Set instrument.
602   *
603   * <p>mzTab-M specification example(s):</p>
604   * <pre><code>MTD     instrument[1]-name      [MS, MS:1000449, LTQ Orbitrap,]
605MTD     instrument[1]-source    [MS, MS:1000073, ESI,]
606
607MTD     instrument[2]-source    [MS, MS:1000598, ETD,]
608MTD     instrument[1]-analyzer[1]       [MS, MS:1000291, linear ion trap,]
609
610MTD     instrument[2]-analyzer[1]       [MS, MS:1000484, orbitrap,]
611MTD     instrument[1]-detector  [MS, MS:1000253, electron multiplier,]
612
613MTD     instrument[2]-detector  [MS, MS:1000348, focal plane collector,]
614</code></pre>
615   * 
616   * 
617   * @see #getInstrument Metadata#getInstrument for validation constraints
618   * @param instrument a {@code List<Instrument>} parameter.
619  **/
620  public void setInstrument(List<Instrument> instrument) {
621    this.instrument = instrument;
622  }
623
624
625 /**
626   * Builder method for software.
627   *
628   * @see Metadata#setSoftware Metadata#setSoftware for specification examples
629   * @see Metadata#getSoftware Metadata#getSoftware for validation constraints
630   * @param software a {@code List<Software>} parameter.
631   * @return Metadata
632  **/
633  public Metadata software(List<Software> software) {
634   this.software = software;
635   return this;
636  }
637
638  /**
639   * Add a single softwareItem to the software collection.
640   *
641   * @see Metadata#getSoftware Metadata#getSoftware for validation constraints
642   * @param softwareItem a {@code Software} parameter.
643   * @return Metadata
644   */
645  public Metadata addSoftwareItem(Software softwareItem) {
646    this.software.add(softwareItem);
647    return this;
648  }
649
650   /**
651   * Software used to analyze the data and obtain the reported results. The parameter’s value SHOULD contain the software’s version. The order (numbering) should reflect the order in which the tools were used. A software setting used. This field MAY occur multiple times for a single software. The value of this field is deliberately set as a String, since there currently do not exist CV terms for every possible setting.
652   *
653   * @return software
654  **/
655  @NotNull
656  @Valid
657  @ApiModelProperty(required = true, value = "Software used to analyze the data and obtain the reported results. The parameter’s value SHOULD contain the software’s version. The order (numbering) should reflect the order in which the tools were used. A software setting used. This field MAY occur multiple times for a single software. The value of this field is deliberately set as a String, since there currently do not exist CV terms for every possible setting.")
658  public List<Software> getSoftware() {
659    return software;
660  }
661
662 /**
663   * Set software.
664   *
665   * <p>mzTab-M specification example(s):</p>
666   * <pre><code>MTD     software[1]     [MS, MS:1002879, Progenesis QI, 3.0]
667MTD     software[1]-setting     Fragment tolerance = 0.1 Da
668
669MTD     software[2]-setting     Parent tolerance = 0.5 Da
670</code></pre>
671   * 
672   * 
673   * @see #getSoftware Metadata#getSoftware for validation constraints
674   * @param software a {@code List<Software>} parameter.
675  **/
676  public void setSoftware(List<Software> software) {
677    this.software = software;
678  }
679
680
681 /**
682   * Builder method for publication.
683   *
684   * @see Metadata#setPublication Metadata#setPublication for specification examples
685   * @see Metadata#getPublication Metadata#getPublication for validation constraints
686   * @param publication a {@code List<Publication>} parameter.
687   * @return Metadata
688  **/
689  public Metadata publication(List<Publication> publication) {
690   this.publication = publication;
691   return this;
692  }
693
694  /**
695   * Add a single publicationItem to the publication collection.
696   *
697   * @see Metadata#getPublication Metadata#getPublication for validation constraints
698   * @param publicationItem a {@code Publication} parameter.
699   * @return Metadata
700   */
701  public Metadata addPublicationItem(Publication publicationItem) {
702    if (this.publication == null) {
703      this.publication = new ArrayList<>();
704    }
705    this.publication.add(publicationItem);
706    return this;
707  }
708
709   /**
710   * A publication associated with this file. Several publications can be given by indicating the number in the square brackets after “publication”. PubMed ids must be prefixed by “pubmed:”, DOIs by “doi:”. Multiple identifiers MUST be separated by “|”.
711   *
712   * @return publication
713  **/
714  @Valid
715  @ApiModelProperty(value = "A publication associated with this file. Several publications can be given by indicating the number in the square brackets after “publication”. PubMed ids must be prefixed by “pubmed:”, DOIs by “doi:”. Multiple identifiers MUST be separated by “|”.")
716  public List<Publication> getPublication() {
717    return publication;
718  }
719
720 /**
721   * Set publication.
722   *
723   * <p>mzTab-M specification example(s):</p>
724   * <pre><code>MTD     publication[1]  pubmed:21063943|doi:10.1007/978-1-60761-987-1_6
725MTD     publication[2]  pubmed:20615486|doi:10.1016/j.jprot.2010.06.008
726</code></pre>
727   * 
728   * 
729   * @see #getPublication Metadata#getPublication for validation constraints
730   * @param publication a {@code List<Publication>} parameter.
731  **/
732  public void setPublication(List<Publication> publication) {
733    this.publication = publication;
734  }
735
736
737 /**
738   * Builder method for contact.
739   *
740   * @see Metadata#setContact Metadata#setContact for specification examples
741   * @see Metadata#getContact Metadata#getContact for validation constraints
742   * @param contact a {@code List<Contact>} parameter.
743   * @return Metadata
744  **/
745  public Metadata contact(List<Contact> contact) {
746   this.contact = contact;
747   return this;
748  }
749
750  /**
751   * Add a single contactItem to the contact collection.
752   *
753   * @see Metadata#getContact Metadata#getContact for validation constraints
754   * @param contactItem a {@code Contact} parameter.
755   * @return Metadata
756   */
757  public Metadata addContactItem(Contact contactItem) {
758    if (this.contact == null) {
759      this.contact = new ArrayList<>();
760    }
761    this.contact.add(contactItem);
762    return this;
763  }
764
765   /**
766   * The contact’s name, affiliation and e-mail. Several contacts can be given by indicating the number in the square brackets after &quot;contact&quot;. A contact has to be supplied in the format [first name] [initials] [last name].
767   *
768   * @return contact
769  **/
770  @Valid
771  @ApiModelProperty(value = "The contact’s name, affiliation and e-mail. Several contacts can be given by indicating the number in the square brackets after \"contact\". A contact has to be supplied in the format [first name] [initials] [last name].")
772  public List<Contact> getContact() {
773    return contact;
774  }
775
776 /**
777   * Set contact.
778   *
779   * <p>mzTab-M specification example(s):</p>
780   * <pre><code>MTD     contact[1]-name James D. Watson
781MTD     contact[1]-affiliation  Cambridge University, UK
782MTD     contact[1]-email        watson@cam.ac.uk
783MTD     contact[2]-name Francis Crick
784MTD     contact[2]-affiliation  Cambridge University, UK
785MTD     contact[2]-email        crick@cam.ac.uk
786</code></pre>
787   * 
788   * 
789   * @see #getContact Metadata#getContact for validation constraints
790   * @param contact a {@code List<Contact>} parameter.
791  **/
792  public void setContact(List<Contact> contact) {
793    this.contact = contact;
794  }
795
796
797 /**
798   * Builder method for uri.
799   *
800   * @see Metadata#setUri Metadata#setUri for specification examples
801   * @see Metadata#getUri Metadata#getUri for validation constraints
802   * @param uri a {@code List<Uri>} parameter.
803   * @return Metadata
804  **/
805  public Metadata uri(List<Uri> uri) {
806   this.uri = uri;
807   return this;
808  }
809
810  /**
811   * Add a single uriItem to the uri collection.
812   *
813   * @see Metadata#getUri Metadata#getUri for validation constraints
814   * @param uriItem a {@code Uri} parameter.
815   * @return Metadata
816   */
817  public Metadata addUriItem(Uri uriItem) {
818    if (this.uri == null) {
819      this.uri = new ArrayList<>();
820    }
821    this.uri.add(uriItem);
822    return this;
823  }
824
825   /**
826   * A URI pointing to the file’s source data (e.g., a MetaboLights records).
827   *
828   * @return uri
829  **/
830  @Valid
831  @ApiModelProperty(value = "A URI pointing to the file’s source data (e.g., a MetaboLights records).")
832  public List<Uri> getUri() {
833    return uri;
834  }
835
836 /**
837   * Set uri.
838   *
839   * <p>mzTab-M specification example(s):</p>
840   * <pre><code>MTD     uri[1]  https://www.ebi.ac.uk/metabolights/MTBLS517
841</code></pre>
842   * 
843   * 
844   * @see #getUri Metadata#getUri for validation constraints
845   * @param uri a {@code List<Uri>} parameter.
846  **/
847  public void setUri(List<Uri> uri) {
848    this.uri = uri;
849  }
850
851
852 /**
853   * Builder method for externalStudyUri.
854   *
855   * @see Metadata#setExternalStudyUri Metadata#setExternalStudyUri for specification examples
856   * @see Metadata#getExternalStudyUri Metadata#getExternalStudyUri for validation constraints
857   * @param externalStudyUri a {@code List<Uri>} parameter.
858   * @return Metadata
859  **/
860  public Metadata externalStudyUri(List<Uri> externalStudyUri) {
861   this.externalStudyUri = externalStudyUri;
862   return this;
863  }
864
865  /**
866   * Add a single externalStudyUriItem to the externalStudyUri collection.
867   *
868   * @see Metadata#getExternalStudyUri Metadata#getExternalStudyUri for validation constraints
869   * @param externalStudyUriItem a {@code Uri} parameter.
870   * @return Metadata
871   */
872  public Metadata addExternalStudyUriItem(Uri externalStudyUriItem) {
873    if (this.externalStudyUri == null) {
874      this.externalStudyUri = new ArrayList<>();
875    }
876    this.externalStudyUri.add(externalStudyUriItem);
877    return this;
878  }
879
880   /**
881   * A URI pointing to an external file with more details about the study design (e.g., an ISA-TAB file).
882   *
883   * @return externalStudyUri
884  **/
885  @Valid
886  @ApiModelProperty(value = "A URI pointing to an external file with more details about the study design (e.g., an ISA-TAB file).")
887  public List<Uri> getExternalStudyUri() {
888    return externalStudyUri;
889  }
890
891 /**
892   * Set externalStudyUri.
893   *
894   * <p>mzTab-M specification example(s):</p>
895   * <pre><code>MTD     external_study_uri[1]   https://www.ebi.ac.uk/metabolights/MTBLS517/files/i_Investigation.txt
896</code></pre>
897   * 
898   * 
899   * @see #getExternalStudyUri Metadata#getExternalStudyUri for validation constraints
900   * @param externalStudyUri a {@code List<Uri>} parameter.
901  **/
902  public void setExternalStudyUri(List<Uri> externalStudyUri) {
903    this.externalStudyUri = externalStudyUri;
904  }
905
906
907 /**
908   * Builder method for quantificationMethod.
909   *
910   * @see Metadata#setQuantificationMethod Metadata#setQuantificationMethod for specification examples
911   * @see Metadata#getQuantificationMethod Metadata#getQuantificationMethod for validation constraints
912   * @param quantificationMethod a {@code Parameter} parameter.
913   * @return Metadata
914  **/
915  public Metadata quantificationMethod(Parameter quantificationMethod) {
916   this.quantificationMethod = quantificationMethod;
917   return this;
918  }
919
920   /**
921   * The quantification method used in the experiment reported in the file.
922   *
923   * @return quantificationMethod
924  **/
925  @NotNull
926  @Valid
927  @ApiModelProperty(required = true, value = "The quantification method used in the experiment reported in the file.")
928  public Parameter getQuantificationMethod() {
929    return quantificationMethod;
930  }
931
932 /**
933   * Set quantificationMethod.
934   *
935   * 
936   * 
937   * @see #getQuantificationMethod Metadata#getQuantificationMethod for validation constraints
938   * @param quantificationMethod a {@code Parameter} parameter.
939  **/
940  public void setQuantificationMethod(Parameter quantificationMethod) {
941    this.quantificationMethod = quantificationMethod;
942  }
943
944
945 /**
946   * Builder method for studyVariable.
947   *
948   * @see Metadata#setStudyVariable Metadata#setStudyVariable for specification examples
949   * @see Metadata#getStudyVariable Metadata#getStudyVariable for validation constraints
950   * @param studyVariable a {@code List<StudyVariable>} parameter.
951   * @return Metadata
952  **/
953  public Metadata studyVariable(List<StudyVariable> studyVariable) {
954   this.studyVariable = studyVariable;
955   return this;
956  }
957
958  /**
959   * Add a single studyVariableItem to the studyVariable collection.
960   *
961   * @see Metadata#getStudyVariable Metadata#getStudyVariable for validation constraints
962   * @param studyVariableItem a {@code StudyVariable} parameter.
963   * @return Metadata
964   */
965  public Metadata addStudyVariableItem(StudyVariable studyVariableItem) {
966    this.studyVariable.add(studyVariableItem);
967    return this;
968  }
969
970   /**
971   * Specification of study_variable.
972(empty) name: A name for each study variable (experimental condition or factor), to serve as a list of the study variables that MUST be reported in the following tables. For software that does not capture study variables, a single study variable MUST be reported, linking to all assays. This single study variable MUST have the identifier “undefined“.
973assay_refs: Bar-separated references to the IDs of assays grouped in the study variable.
974average_function: The function used to calculate the study variable quantification value and the operation used is not arithmetic mean (default) e.g. “geometric mean”, “median”. The 1-n refers to different study variables.
975variation_function: The function used to calculate the study variable quantification variation value if it is reported and the operation used is not coefficient of variation (default) e.g. “standard error”.
976description: A textual description of the study variable.
977factors: Additional parameters or factors, separated by bars, that are known about study variables allowing the capture of more complex, such as nested designs.
978
979   *
980   * @return studyVariable
981  **/
982  @NotNull
983  @Valid
984  @ApiModelProperty(required = true, value = "Specification of study_variable. (empty) name: A name for each study variable (experimental condition or factor), to serve as a list of the study variables that MUST be reported in the following tables. For software that does not capture study variables, a single study variable MUST be reported, linking to all assays. This single study variable MUST have the identifier “undefined“. assay_refs: Bar-separated references to the IDs of assays grouped in the study variable. average_function: The function used to calculate the study variable quantification value and the operation used is not arithmetic mean (default) e.g. “geometric mean”, “median”. The 1-n refers to different study variables. variation_function: The function used to calculate the study variable quantification variation value if it is reported and the operation used is not coefficient of variation (default) e.g. “standard error”. description: A textual description of the study variable. factors: Additional parameters or factors, separated by bars, that are known about study variables allowing the capture of more complex, such as nested designs. ")
985  public List<StudyVariable> getStudyVariable() {
986    return studyVariable;
987  }
988
989 /**
990   * Set studyVariable.
991   *
992   * <p>mzTab-M specification example(s):</p>
993   * <pre><code>MTD     study_variable[1]       control
994MTD     study_variable[1]-assay_refs    assay[1]| assay[2]| assay[3]
995MTD     study_variable-average_function [MS, MS:1002883, median, ]
996MTD     study_variable-variation_function       [MS, MS:1002885, standard error, ]
997MTD     study_variable[1]-description   Group B (spike-in 0.74 fmol/uL)
998MTD     study_variable[1]-factors       [,,rapamycin dose,0.5mg]
999MTD     study_variable[2]       1 minute
1000</code></pre>
1001   * 
1002   * 
1003   * @see #getStudyVariable Metadata#getStudyVariable for validation constraints
1004   * @param studyVariable a {@code List<StudyVariable>} parameter.
1005  **/
1006  public void setStudyVariable(List<StudyVariable> studyVariable) {
1007    this.studyVariable = studyVariable;
1008  }
1009
1010
1011 /**
1012   * Builder method for msRun.
1013   *
1014   * @see Metadata#setMsRun Metadata#setMsRun for specification examples
1015   * @see Metadata#getMsRun Metadata#getMsRun for validation constraints
1016   * @param msRun a {@code List<MsRun>} parameter.
1017   * @return Metadata
1018  **/
1019  public Metadata msRun(List<MsRun> msRun) {
1020   this.msRun = msRun;
1021   return this;
1022  }
1023
1024  /**
1025   * Add a single msRunItem to the msRun collection.
1026   *
1027   * @see Metadata#getMsRun Metadata#getMsRun for validation constraints
1028   * @param msRunItem a {@code MsRun} parameter.
1029   * @return Metadata
1030   */
1031  public Metadata addMsRunItem(MsRun msRunItem) {
1032    this.msRun.add(msRunItem);
1033    return this;
1034  }
1035
1036   /**
1037   * Specification of ms_run. 
1038location: Location of the external data file e.g. raw files on which analysis has been performed. If the actual location of the MS run is unknown, a “null” MUST be used as a place holder value, since the [1-n] cardinality is referenced elsewhere. If pre-fractionation has been performed, then [1-n] ms_runs SHOULD be created per assay. 
1039instrument_ref: If different instruments are used in different runs, instrument_ref can be used to link a specific instrument to a specific run. 
1040format: Parameter specifying the data format of the external MS data file. If ms_run[1-n]-format is present, ms_run[1-n]-id_format SHOULD also be present, following the parameters specified in Table 1. 
1041id_format: Parameter specifying the id format used in the external data file. If ms_run[1-n]-id_format is present, ms_run[1-n]-format SHOULD also be present.
1042fragmentation_method: The type(s) of fragmentation used in a given ms run.
1043scan_polarity: The polarity mode of a given run. Usually only one value SHOULD be given here except for the case of mixed polarity runs.
1044hash: Hash value of the corresponding external MS data file defined in ms_run[1-n]-location. If ms_run[1-n]-hash is present, ms_run[1-n]-hash_method SHOULD also be present.
1045hash_method: A parameter specifying the hash methods used to generate the String in ms_run[1-n]-hash. Specifics of the hash method used MAY follow the definitions of the mzML format. If ms_run[1-n]-hash is present, ms_run[1-n]-hash_method SHOULD also be present.
1046
1047   *
1048   * @return msRun
1049  **/
1050  @NotNull
1051  @Valid
1052  @ApiModelProperty(required = true, value = "Specification of ms_run.  location: Location of the external data file e.g. raw files on which analysis has been performed. If the actual location of the MS run is unknown, a “null” MUST be used as a place holder value, since the [1-n] cardinality is referenced elsewhere. If pre-fractionation has been performed, then [1-n] ms_runs SHOULD be created per assay.  instrument_ref: If different instruments are used in different runs, instrument_ref can be used to link a specific instrument to a specific run.  format: Parameter specifying the data format of the external MS data file. If ms_run[1-n]-format is present, ms_run[1-n]-id_format SHOULD also be present, following the parameters specified in Table 1.  id_format: Parameter specifying the id format used in the external data file. If ms_run[1-n]-id_format is present, ms_run[1-n]-format SHOULD also be present. fragmentation_method: The type(s) of fragmentation used in a given ms run. scan_polarity: The polarity mode of a given run. Usually only one value SHOULD be given here except for the case of mixed polarity runs. hash: Hash value of the corresponding external MS data file defined in ms_run[1-n]-location. If ms_run[1-n]-hash is present, ms_run[1-n]-hash_method SHOULD also be present. hash_method: A parameter specifying the hash methods used to generate the String in ms_run[1-n]-hash. Specifics of the hash method used MAY follow the definitions of the mzML format. If ms_run[1-n]-hash is present, ms_run[1-n]-hash_method SHOULD also be present. ")
1053  public List<MsRun> getMsRun() {
1054    return msRun;
1055  }
1056
1057 /**
1058   * Set msRun.
1059   *
1060   * <p>mzTab-M specification example(s):</p>
1061   * <pre><code>COM     location can be a local or remote URI
1062MTD     ms_run[1]-location      file:///C:/path/to/my/file.mzML
1063MTD     ms_run[1]-instrument_ref        instrument[1]
1064MTD     ms_run[1]-format        [MS, MS:1000584, mzML file, ]
1065MTD     ms_run[1]-id_format     [MS, MS:1000530, mzML unique identifier, ]
1066MTD     ms_run[1]-fragmentation_method[1]       [MS, MS:1000133, CID, ]
1067COM     for mixed polarity scan scenarios
1068MTD     ms_run[1]-scan_polarity[1]      [MS, MS:1000130, positive scan, ]
1069MTD     ms_run[1]-scan_polarity[2]      [MS, MS:1000129, negative scan, ]
1070MTD     ms_run[1]-hash_method   [MS, MS:1000569, SHA-1, ]
1071MTD     ms_run[1]-hash  de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3
1072</code></pre>
1073   * 
1074   * 
1075   * @see #getMsRun Metadata#getMsRun for validation constraints
1076   * @param msRun a {@code List<MsRun>} parameter.
1077  **/
1078  public void setMsRun(List<MsRun> msRun) {
1079    this.msRun = msRun;
1080  }
1081
1082
1083 /**
1084   * Builder method for assay.
1085   *
1086   * @see Metadata#setAssay Metadata#setAssay for specification examples
1087   * @see Metadata#getAssay Metadata#getAssay for validation constraints
1088   * @param assay a {@code List<Assay>} parameter.
1089   * @return Metadata
1090  **/
1091  public Metadata assay(List<Assay> assay) {
1092   this.assay = assay;
1093   return this;
1094  }
1095
1096  /**
1097   * Add a single assayItem to the assay collection.
1098   *
1099   * @see Metadata#getAssay Metadata#getAssay for validation constraints
1100   * @param assayItem a {@code Assay} parameter.
1101   * @return Metadata
1102   */
1103  public Metadata addAssayItem(Assay assayItem) {
1104    this.assay.add(assayItem);
1105    return this;
1106  }
1107
1108   /**
1109   * Specification of assay.
1110(empty) name: A name for each assay, to serve as a list of the assays that MUST be reported in the following tables. 
1111custom: Additional custom parameters or values for a given assay. 
1112external_uri: An external reference uri to further information about the assay, for example via a reference to an object within an ISA-TAB file. 
1113sample_ref: An association from a given assay to the sample analysed. 
1114ms_run_ref: An association from a given assay to the source MS run. All assays MUST reference exactly one ms_run unless a workflow with pre-fractionation is being encoded, in which case each assay MUST reference n ms_runs where n fractions have been collected. Multiple assays SHOULD reference the same ms_run to capture multiplexed experimental designs.
1115
1116   *
1117   * @return assay
1118  **/
1119  @NotNull
1120  @Valid
1121  @ApiModelProperty(required = true, value = "Specification of assay. (empty) name: A name for each assay, to serve as a list of the assays that MUST be reported in the following tables.  custom: Additional custom parameters or values for a given assay.  external_uri: An external reference uri to further information about the assay, for example via a reference to an object within an ISA-TAB file.  sample_ref: An association from a given assay to the sample analysed.  ms_run_ref: An association from a given assay to the source MS run. All assays MUST reference exactly one ms_run unless a workflow with pre-fractionation is being encoded, in which case each assay MUST reference n ms_runs where n fractions have been collected. Multiple assays SHOULD reference the same ms_run to capture multiplexed experimental designs. ")
1122  public List<Assay> getAssay() {
1123    return assay;
1124  }
1125
1126 /**
1127   * Set assay.
1128   *
1129   * <p>mzTab-M specification example(s):</p>
1130   * <pre><code>MTD     assay[1]        first assay
1131MTD     assay[1]-custom[1]      [MS, , Assay operator, Fred Blogs]
1132MTD     assay[1]-sample_ref     sample[1]
1133MTD     assay[1]-ms_run_ref     ms_run[1]
1134MTD     assay[1]-external_uri   https://www.ebi.ac.uk/metabolights/MTBLS517/files/i_Investigation.txt?STUDYASSAY=a_e04_c18pos.txt
1135MTD     assay[2]        second assay
1136MTD     assay[2]-sample_ref     sample[2]
1137</code></pre>
1138   * 
1139   * 
1140   * @see #getAssay Metadata#getAssay for validation constraints
1141   * @param assay a {@code List<Assay>} parameter.
1142  **/
1143  public void setAssay(List<Assay> assay) {
1144    this.assay = assay;
1145  }
1146
1147
1148 /**
1149   * Builder method for sample.
1150   *
1151   * @see Metadata#setSample Metadata#setSample for specification examples
1152   * @see Metadata#getSample Metadata#getSample for validation constraints
1153   * @param sample a {@code List<Sample>} parameter.
1154   * @return Metadata
1155  **/
1156  public Metadata sample(List<Sample> sample) {
1157   this.sample = sample;
1158   return this;
1159  }
1160
1161  /**
1162   * Add a single sampleItem to the sample collection.
1163   *
1164   * @see Metadata#getSample Metadata#getSample for validation constraints
1165   * @param sampleItem a {@code Sample} parameter.
1166   * @return Metadata
1167   */
1168  public Metadata addSampleItem(Sample sampleItem) {
1169    if (this.sample == null) {
1170      this.sample = new ArrayList<>();
1171    }
1172    this.sample.add(sampleItem);
1173    return this;
1174  }
1175
1176   /**
1177   * Specification of sample.
1178(empty) name: A name for each sample to serve as a list of the samples that MUST be reported in the following tables. Samples MUST be reported if a statistical design is being captured (i.e. bio or tech replicates). If the type of replicates are not known, samples SHOULD NOT be reported. 
1179species: The respective species of the samples analysed. For more complex cases, such as metagenomics, optional columns and userParams should be used. 
1180tissue: The respective tissue(s) of the sample. 
1181cell_type: The respective cell type(s) of the sample. 
1182disease: The respective disease(s) of the sample. 
1183description: A human readable description of the sample. 
1184custom: Custom parameters describing the sample’s additional properties. Dates MUST be provided in ISO-8601 format.
1185
1186   *
1187   * @return sample
1188  **/
1189  @Valid
1190  @ApiModelProperty(value = "Specification of sample. (empty) name: A name for each sample to serve as a list of the samples that MUST be reported in the following tables. Samples MUST be reported if a statistical design is being captured (i.e. bio or tech replicates). If the type of replicates are not known, samples SHOULD NOT be reported.  species: The respective species of the samples analysed. For more complex cases, such as metagenomics, optional columns and userParams should be used.  tissue: The respective tissue(s) of the sample.  cell_type: The respective cell type(s) of the sample.  disease: The respective disease(s) of the sample.  description: A human readable description of the sample.  custom: Custom parameters describing the sample’s additional properties. Dates MUST be provided in ISO-8601 format. ")
1191  public List<Sample> getSample() {
1192    return sample;
1193  }
1194
1195 /**
1196   * Set sample.
1197   *
1198   * <p>mzTab-M specification example(s):</p>
1199   * <pre><code>COM     Experiment where all samples consisted of the same two species
1200MTD     sample[1]       individual number 1
1201MTD     sample[1]-species[1]    [NCBITaxon, NCBITaxon:9606, Homo sapiens, ]
1202MTD     sample[1]-tissue[1]     [BTO, BTO:0000759, liver, ]
1203MTD     sample[1]-cell_type[1]  [CL, CL:0000182, hepatocyte, ]
1204MTD     sample[1]-disease[1]    [DOID, DOID:684, hepatocellular carcinoma, ]
1205MTD     sample[1]-disease[2]    [DOID, DOID:9451, alcoholic fatty liver, ]
1206MTD     sample[1]-description   Hepatocellular carcinoma samples.
1207MTD     sample[1]-custom[1]     [,,Extraction date, 2011-12-21]
1208MTD     sample[1]-custom[2]     [,,Extraction reason, liver biopsy]
1209MTD     sample[2]       individual number 2
1210MTD     sample[2]-species[1]    [NCBITaxon, NCBITaxon:9606, Homo sapiens, ]
1211MTD     sample[2]-tissue[1]     [BTO, BTO:0000759, liver, ]
1212MTD     sample[2]-cell_type[1]  [CL, CL:0000182, hepatocyte, ]
1213MTD     sample[2]-description   Healthy control samples.
1214</code></pre>
1215   * 
1216   * 
1217   * @see #getSample Metadata#getSample for validation constraints
1218   * @param sample a {@code List<Sample>} parameter.
1219  **/
1220  public void setSample(List<Sample> sample) {
1221    this.sample = sample;
1222  }
1223
1224
1225 /**
1226   * Builder method for custom.
1227   *
1228   * @see Metadata#setCustom Metadata#setCustom for specification examples
1229   * @see Metadata#getCustom Metadata#getCustom for validation constraints
1230   * @param custom a {@code List<Parameter>} parameter.
1231   * @return Metadata
1232  **/
1233  public Metadata custom(List<Parameter> custom) {
1234   this.custom = custom;
1235   return this;
1236  }
1237
1238  /**
1239   * Add a single customItem to the custom collection.
1240   *
1241   * @see Metadata#getCustom Metadata#getCustom for validation constraints
1242   * @param customItem a {@code Parameter} parameter.
1243   * @return Metadata
1244   */
1245  public Metadata addCustomItem(Parameter customItem) {
1246    if (this.custom == null) {
1247      this.custom = new ArrayList<>();
1248    }
1249    this.custom.add(customItem);
1250    return this;
1251  }
1252
1253   /**
1254   * Any additional parameters describing the analysis reported.
1255   *
1256   * @return custom
1257  **/
1258  @Valid
1259  @ApiModelProperty(value = "Any additional parameters describing the analysis reported.")
1260  public List<Parameter> getCustom() {
1261    return custom;
1262  }
1263
1264 /**
1265   * Set custom.
1266   *
1267   * <p>mzTab-M specification example(s):</p>
1268   * <pre><code>MTD custom[1] [,,MS operator, Florian]
1269</code></pre>
1270   * 
1271   * 
1272   * @see #getCustom Metadata#getCustom for validation constraints
1273   * @param custom a {@code List<Parameter>} parameter.
1274  **/
1275  public void setCustom(List<Parameter> custom) {
1276    this.custom = custom;
1277  }
1278
1279
1280 /**
1281   * Builder method for cv.
1282   *
1283   * @see Metadata#setCv Metadata#setCv for specification examples
1284   * @see Metadata#getCv Metadata#getCv for validation constraints
1285   * @param cv a {@code List<CV>} parameter.
1286   * @return Metadata
1287  **/
1288  public Metadata cv(List<CV> cv) {
1289   this.cv = cv;
1290   return this;
1291  }
1292
1293  /**
1294   * Add a single cvItem to the cv collection.
1295   *
1296   * @see Metadata#getCv Metadata#getCv for validation constraints
1297   * @param cvItem a {@code CV} parameter.
1298   * @return Metadata
1299   */
1300  public Metadata addCvItem(CV cvItem) {
1301    this.cv.add(cvItem);
1302    return this;
1303  }
1304
1305   /**
1306   * Specification of controlled vocabularies.
1307label: A string describing the labels of the controlled vocabularies/ontologies used in the mzTab file as a short-hand e.g. &quot;MS&quot; for PSI-MS.
1308full_name: A string describing the full names of the controlled vocabularies/ontologies used in the mzTab file.
1309version: A string describing the version of the controlled vocabularies/ontologies used in the mzTab file.
1310uri: A string containing the URIs of the controlled vocabularies/ontologies used in the mzTab file.
1311
1312   *
1313   * @return cv
1314  **/
1315  @NotNull
1316  @Valid
1317  @ApiModelProperty(required = true, value = "Specification of controlled vocabularies. label: A string describing the labels of the controlled vocabularies/ontologies used in the mzTab file as a short-hand e.g. \"MS\" for PSI-MS. full_name: A string describing the full names of the controlled vocabularies/ontologies used in the mzTab file. version: A string describing the version of the controlled vocabularies/ontologies used in the mzTab file. uri: A string containing the URIs of the controlled vocabularies/ontologies used in the mzTab file. ")
1318  public List<CV> getCv() {
1319    return cv;
1320  }
1321
1322 /**
1323   * Set cv.
1324   *
1325   * <p>mzTab-M specification example(s):</p>
1326   * <pre><code>MTD     cv[1]-label     MS
1327MTD     cv[1]-full_name PSI-MS controlled vocabulary
1328MTD     cv[1]-version   4.1.11
1329MTD     cv[1]-uri       https://raw.githubusercontent.com/HUPO-PSI/psi-ms-CV/master/psi-ms.obo
1330</code></pre>
1331   * 
1332   * 
1333   * @see #getCv Metadata#getCv for validation constraints
1334   * @param cv a {@code List<CV>} parameter.
1335  **/
1336  public void setCv(List<CV> cv) {
1337    this.cv = cv;
1338  }
1339
1340
1341 /**
1342   * Builder method for database.
1343   *
1344   * @see Metadata#setDatabase Metadata#setDatabase for specification examples
1345   * @see Metadata#getDatabase Metadata#getDatabase for validation constraints
1346   * @param database a {@code List<Database>} parameter.
1347   * @return Metadata
1348  **/
1349  public Metadata database(List<Database> database) {
1350   this.database = database;
1351   return this;
1352  }
1353
1354  /**
1355   * Add a single databaseItem to the database collection.
1356   *
1357   * @see Metadata#getDatabase Metadata#getDatabase for validation constraints
1358   * @param databaseItem a {@code Database} parameter.
1359   * @return Metadata
1360   */
1361  public Metadata addDatabaseItem(Database databaseItem) {
1362    this.database.add(databaseItem);
1363    return this;
1364  }
1365
1366   /**
1367   * Specification of databases.
1368(empty): The description of databases used. For cases, where a known database has not been used for identification, a userParam SHOULD be inserted to describe any identification performed e.g. de novo. If no identification has been performed at all then &quot;no database&quot; should be inserted followed by null.
1369prefix: The prefix used in the “identifier” column of data tables. For the “no database” case &quot;null&quot; must be used.
1370version: The database version is mandatory where identification has been performed. This may be a formal version number e.g. “1.4.1”, a date of access “2016-10-27” (ISO-8601 format) or “Unknown” if there is no suitable version that can be annotated.
1371uri: The URI to the database. For the “no database” case, &quot;null&quot; must be reported.
1372
1373   *
1374   * @return database
1375  **/
1376  @NotNull
1377  @Valid
1378  @ApiModelProperty(required = true, value = "Specification of databases. (empty): The description of databases used. For cases, where a known database has not been used for identification, a userParam SHOULD be inserted to describe any identification performed e.g. de novo. If no identification has been performed at all then \"no database\" should be inserted followed by null. prefix: The prefix used in the “identifier” column of data tables. For the “no database” case \"null\" must be used. version: The database version is mandatory where identification has been performed. This may be a formal version number e.g. “1.4.1”, a date of access “2016-10-27” (ISO-8601 format) or “Unknown” if there is no suitable version that can be annotated. uri: The URI to the database. For the “no database” case, \"null\" must be reported. ")
1379  public List<Database> getDatabase() {
1380    return database;
1381  }
1382
1383 /**
1384   * Set database.
1385   *
1386   * <p>mzTab-M specification example(s):</p>
1387   * <pre><code>MTD     database[1]     [MIRIAM, MIR:00100079, HMDB, ]
1388MTD     database[1]-prefix      hmdb
1389MTD     database[1]-version     3.6
1390MTD     database[1]-uri http://www.hmdb.ca/
1391MTD     database[2]     [,, "de novo", ]
1392MTD     database[2]-prefix      dn
1393MTD     database[2]-version     Unknown
1394MTD     database[2]-uri null
1395MTD     database[3]     [,, "no database", null ]
1396MTD     database[3]-prefix      null
1397MTD     database[3]-version     Unknown
1398MTD     database[3]-uri null
1399</code></pre>
1400   * 
1401   * 
1402   * @see #getDatabase Metadata#getDatabase for validation constraints
1403   * @param database a {@code List<Database>} parameter.
1404  **/
1405  public void setDatabase(List<Database> database) {
1406    this.database = database;
1407  }
1408
1409
1410 /**
1411   * Builder method for derivatizationAgent.
1412   *
1413   * @see Metadata#setDerivatizationAgent Metadata#setDerivatizationAgent for specification examples
1414   * @see Metadata#getDerivatizationAgent Metadata#getDerivatizationAgent for validation constraints
1415   * @param derivatizationAgent a {@code List<Parameter>} parameter.
1416   * @return Metadata
1417  **/
1418  public Metadata derivatizationAgent(List<Parameter> derivatizationAgent) {
1419   this.derivatizationAgent = derivatizationAgent;
1420   return this;
1421  }
1422
1423  /**
1424   * Add a single derivatizationAgentItem to the derivatizationAgent collection.
1425   *
1426   * @see Metadata#getDerivatizationAgent Metadata#getDerivatizationAgent for validation constraints
1427   * @param derivatizationAgentItem a {@code Parameter} parameter.
1428   * @return Metadata
1429   */
1430  public Metadata addDerivatizationAgentItem(Parameter derivatizationAgentItem) {
1431    if (this.derivatizationAgent == null) {
1432      this.derivatizationAgent = new ArrayList<>();
1433    }
1434    this.derivatizationAgent.add(derivatizationAgentItem);
1435    return this;
1436  }
1437
1438   /**
1439   * A description of derivatization agents applied to small molecules, using userParams or CV terms where possible.
1440   *
1441   * @return derivatizationAgent
1442  **/
1443  @Valid
1444  @ApiModelProperty(value = "A description of derivatization agents applied to small molecules, using userParams or CV terms where possible.")
1445  public List<Parameter> getDerivatizationAgent() {
1446    return derivatizationAgent;
1447  }
1448
1449 /**
1450   * Set derivatizationAgent.
1451   *
1452   * <p>mzTab-M specification example(s):</p>
1453   * <pre><code>MTD     derivatization_agent[1] [XLMOD, XLMOD:07014, N-methyl-N-t-butyldimethylsilyltrifluoroacetamide, ]
1454</code></pre>
1455   * 
1456   * 
1457   * @see #getDerivatizationAgent Metadata#getDerivatizationAgent for validation constraints
1458   * @param derivatizationAgent a {@code List<Parameter>} parameter.
1459  **/
1460  public void setDerivatizationAgent(List<Parameter> derivatizationAgent) {
1461    this.derivatizationAgent = derivatizationAgent;
1462  }
1463
1464
1465 /**
1466   * Builder method for smallMoleculeQuantificationUnit.
1467   *
1468   * @see Metadata#setSmallMoleculeQuantificationUnit Metadata#setSmallMoleculeQuantificationUnit for specification examples
1469   * @see Metadata#getSmallMoleculeQuantificationUnit Metadata#getSmallMoleculeQuantificationUnit for validation constraints
1470   * @param smallMoleculeQuantificationUnit a {@code Parameter} parameter.
1471   * @return Metadata
1472  **/
1473  public Metadata smallMoleculeQuantificationUnit(Parameter smallMoleculeQuantificationUnit) {
1474   this.smallMoleculeQuantificationUnit = smallMoleculeQuantificationUnit;
1475   return this;
1476  }
1477
1478   /**
1479   * Defines what type of units are reported in the small molecule summary quantification / abundance fields.
1480   *
1481   * @return smallMoleculeQuantificationUnit
1482  **/
1483  @NotNull
1484  @Valid
1485  @ApiModelProperty(required = true, value = "Defines what type of units are reported in the small molecule summary quantification / abundance fields.")
1486  public Parameter getSmallMoleculeQuantificationUnit() {
1487    return smallMoleculeQuantificationUnit;
1488  }
1489
1490 /**
1491   * Set smallMoleculeQuantificationUnit.
1492   *
1493   * 
1494   * 
1495   * @see #getSmallMoleculeQuantificationUnit Metadata#getSmallMoleculeQuantificationUnit for validation constraints
1496   * @param smallMoleculeQuantificationUnit a {@code Parameter} parameter.
1497  **/
1498  public void setSmallMoleculeQuantificationUnit(Parameter smallMoleculeQuantificationUnit) {
1499    this.smallMoleculeQuantificationUnit = smallMoleculeQuantificationUnit;
1500  }
1501
1502
1503 /**
1504   * Builder method for smallMoleculeFeatureQuantificationUnit.
1505   *
1506   * @see Metadata#setSmallMoleculeFeatureQuantificationUnit Metadata#setSmallMoleculeFeatureQuantificationUnit for specification examples
1507   * @see Metadata#getSmallMoleculeFeatureQuantificationUnit Metadata#getSmallMoleculeFeatureQuantificationUnit for validation constraints
1508   * @param smallMoleculeFeatureQuantificationUnit a {@code Parameter} parameter.
1509   * @return Metadata
1510  **/
1511  public Metadata smallMoleculeFeatureQuantificationUnit(Parameter smallMoleculeFeatureQuantificationUnit) {
1512   this.smallMoleculeFeatureQuantificationUnit = smallMoleculeFeatureQuantificationUnit;
1513   return this;
1514  }
1515
1516   /**
1517   * Defines what type of units are reported in the small molecule feature quantification / abundance fields.
1518   *
1519   * @return smallMoleculeFeatureQuantificationUnit
1520  **/
1521  @NotNull
1522  @Valid
1523  @ApiModelProperty(required = true, value = "Defines what type of units are reported in the small molecule feature quantification / abundance fields.")
1524  public Parameter getSmallMoleculeFeatureQuantificationUnit() {
1525    return smallMoleculeFeatureQuantificationUnit;
1526  }
1527
1528 /**
1529   * Set smallMoleculeFeatureQuantificationUnit.
1530   *
1531   * 
1532   * 
1533   * @see #getSmallMoleculeFeatureQuantificationUnit Metadata#getSmallMoleculeFeatureQuantificationUnit for validation constraints
1534   * @param smallMoleculeFeatureQuantificationUnit a {@code Parameter} parameter.
1535  **/
1536  public void setSmallMoleculeFeatureQuantificationUnit(Parameter smallMoleculeFeatureQuantificationUnit) {
1537    this.smallMoleculeFeatureQuantificationUnit = smallMoleculeFeatureQuantificationUnit;
1538  }
1539
1540
1541 /**
1542   * Builder method for smallMoleculeIdentificationReliability.
1543   *
1544   * @see Metadata#setSmallMoleculeIdentificationReliability Metadata#setSmallMoleculeIdentificationReliability for specification examples
1545   * @see Metadata#getSmallMoleculeIdentificationReliability Metadata#getSmallMoleculeIdentificationReliability for validation constraints
1546   * @param smallMoleculeIdentificationReliability a {@code Parameter} parameter.
1547   * @return Metadata
1548  **/
1549  public Metadata smallMoleculeIdentificationReliability(Parameter smallMoleculeIdentificationReliability) {
1550   this.smallMoleculeIdentificationReliability = smallMoleculeIdentificationReliability;
1551   return this;
1552  }
1553
1554   /**
1555   * The system used for giving reliability / confidence codes to small molecule identifications MUST be specified if not using the default codes.
1556   *
1557   * @return smallMoleculeIdentificationReliability
1558  **/
1559  @Valid
1560  @ApiModelProperty(value = "The system used for giving reliability / confidence codes to small molecule identifications MUST be specified if not using the default codes.")
1561  public Parameter getSmallMoleculeIdentificationReliability() {
1562    return smallMoleculeIdentificationReliability;
1563  }
1564
1565 /**
1566   * Set smallMoleculeIdentificationReliability.
1567   *
1568   * 
1569   * 
1570   * @see #getSmallMoleculeIdentificationReliability Metadata#getSmallMoleculeIdentificationReliability for validation constraints
1571   * @param smallMoleculeIdentificationReliability a {@code Parameter} parameter.
1572  **/
1573  public void setSmallMoleculeIdentificationReliability(Parameter smallMoleculeIdentificationReliability) {
1574    this.smallMoleculeIdentificationReliability = smallMoleculeIdentificationReliability;
1575  }
1576
1577
1578 /**
1579   * Builder method for idConfidenceMeasure.
1580   *
1581   * @see Metadata#setIdConfidenceMeasure Metadata#setIdConfidenceMeasure for specification examples
1582   * @see Metadata#getIdConfidenceMeasure Metadata#getIdConfidenceMeasure for validation constraints
1583   * @param idConfidenceMeasure a {@code List<Parameter>} parameter.
1584   * @return Metadata
1585  **/
1586  public Metadata idConfidenceMeasure(List<Parameter> idConfidenceMeasure) {
1587   this.idConfidenceMeasure = idConfidenceMeasure;
1588   return this;
1589  }
1590
1591  /**
1592   * Add a single idConfidenceMeasureItem to the idConfidenceMeasure collection.
1593   *
1594   * @see Metadata#getIdConfidenceMeasure Metadata#getIdConfidenceMeasure for validation constraints
1595   * @param idConfidenceMeasureItem a {@code Parameter} parameter.
1596   * @return Metadata
1597   */
1598  public Metadata addIdConfidenceMeasureItem(Parameter idConfidenceMeasureItem) {
1599    this.idConfidenceMeasure.add(idConfidenceMeasureItem);
1600    return this;
1601  }
1602
1603   /**
1604   * The type of small molecule confidence measures or scores MUST be reported as a CV parameter [1-n]. The CV parameter definition should formally state whether the ordering is high to low or vice versa. The order of the scores SHOULD reflect their importance for the identification and be used to determine the identification’s rank.
1605   *
1606   * @return idConfidenceMeasure
1607  **/
1608  @NotNull
1609  @Valid
1610  @ApiModelProperty(required = true, value = "The type of small molecule confidence measures or scores MUST be reported as a CV parameter [1-n]. The CV parameter definition should formally state whether the ordering is high to low or vice versa. The order of the scores SHOULD reflect their importance for the identification and be used to determine the identification’s rank.")
1611  public List<Parameter> getIdConfidenceMeasure() {
1612    return idConfidenceMeasure;
1613  }
1614
1615 /**
1616   * Set idConfidenceMeasure.
1617   *
1618   * <p>mzTab-M specification example(s):</p>
1619   * <pre><code>MTD     id_confidence_measure[1]        [MS,MS:1002889,Progenesis MetaScope Score,]
1620MTD     id_confidence_measure[2]        [MS,MS:1002890,fragmentation score,]
1621MTD     id_confidence_measure[3]        [MS,MS:1002891,isotopic fit score,]
1622</code></pre>
1623   * 
1624   * 
1625   * @see #getIdConfidenceMeasure Metadata#getIdConfidenceMeasure for validation constraints
1626   * @param idConfidenceMeasure a {@code List<Parameter>} parameter.
1627  **/
1628  public void setIdConfidenceMeasure(List<Parameter> idConfidenceMeasure) {
1629    this.idConfidenceMeasure = idConfidenceMeasure;
1630  }
1631
1632
1633 /**
1634   * Builder method for colunitSmallMolecule.
1635   *
1636   * @see Metadata#setColunitSmallMolecule Metadata#setColunitSmallMolecule for specification examples
1637   * @see Metadata#getColunitSmallMolecule Metadata#getColunitSmallMolecule for validation constraints
1638   * @param colunitSmallMolecule a {@code List<ColumnParameterMapping>} parameter.
1639   * @return Metadata
1640  **/
1641  public Metadata colunitSmallMolecule(List<ColumnParameterMapping> colunitSmallMolecule) {
1642   this.colunitSmallMolecule = colunitSmallMolecule;
1643   return this;
1644  }
1645
1646  /**
1647   * Add a single colunitSmallMoleculeItem to the colunitSmallMolecule collection.
1648   *
1649   * @see Metadata#getColunitSmallMolecule Metadata#getColunitSmallMolecule for validation constraints
1650   * @param colunitSmallMoleculeItem a {@code ColumnParameterMapping} parameter.
1651   * @return Metadata
1652   */
1653  public Metadata addColunitSmallMoleculeItem(ColumnParameterMapping colunitSmallMoleculeItem) {
1654    if (this.colunitSmallMolecule == null) {
1655      this.colunitSmallMolecule = new ArrayList<>();
1656    }
1657    this.colunitSmallMolecule.add(colunitSmallMoleculeItem);
1658    return this;
1659  }
1660
1661   /**
1662   * Defines the used unit for a column in the small molecule section. The format of the value has to be \{column name}&#x3D;\{Parameter defining the unit}. This field MUST NOT be used to define a unit for quantification columns. The unit used for small molecule quantification values MUST be set in small_molecule-quantification_unit.
1663   *
1664   * @return colunitSmallMolecule
1665  **/
1666  @Valid
1667  @ApiModelProperty(value = "Defines the used unit for a column in the small molecule section. The format of the value has to be \\{column name}=\\{Parameter defining the unit}. This field MUST NOT be used to define a unit for quantification columns. The unit used for small molecule quantification values MUST be set in small_molecule-quantification_unit.")
1668  public List<ColumnParameterMapping> getColunitSmallMolecule() {
1669    return colunitSmallMolecule;
1670  }
1671
1672 /**
1673   * Set colunitSmallMolecule.
1674   *
1675   * <p>mzTab-M specification example(s):</p>
1676   * <pre><code>COM     colunit for optional small molecule summary column with the name 'opt_global_cv_MS:MS:1002954_collisional_cross_sectional_area'
1677MTD     colunit-small_molecule  opt_global_cv_MS:MS:1002954_collisional_cross_sectional_area=[UO,UO:00003241, square angstrom,]
1678</code></pre>
1679   * 
1680   * 
1681   * @see #getColunitSmallMolecule Metadata#getColunitSmallMolecule for validation constraints
1682   * @param colunitSmallMolecule a {@code List<ColumnParameterMapping>} parameter.
1683  **/
1684  public void setColunitSmallMolecule(List<ColumnParameterMapping> colunitSmallMolecule) {
1685    this.colunitSmallMolecule = colunitSmallMolecule;
1686  }
1687
1688
1689 /**
1690   * Builder method for colunitSmallMoleculeFeature.
1691   *
1692   * @see Metadata#setColunitSmallMoleculeFeature Metadata#setColunitSmallMoleculeFeature for specification examples
1693   * @see Metadata#getColunitSmallMoleculeFeature Metadata#getColunitSmallMoleculeFeature for validation constraints
1694   * @param colunitSmallMoleculeFeature a {@code List<ColumnParameterMapping>} parameter.
1695   * @return Metadata
1696  **/
1697  public Metadata colunitSmallMoleculeFeature(List<ColumnParameterMapping> colunitSmallMoleculeFeature) {
1698   this.colunitSmallMoleculeFeature = colunitSmallMoleculeFeature;
1699   return this;
1700  }
1701
1702  /**
1703   * Add a single colunitSmallMoleculeFeatureItem to the colunitSmallMoleculeFeature collection.
1704   *
1705   * @see Metadata#getColunitSmallMoleculeFeature Metadata#getColunitSmallMoleculeFeature for validation constraints
1706   * @param colunitSmallMoleculeFeatureItem a {@code ColumnParameterMapping} parameter.
1707   * @return Metadata
1708   */
1709  public Metadata addColunitSmallMoleculeFeatureItem(ColumnParameterMapping colunitSmallMoleculeFeatureItem) {
1710    if (this.colunitSmallMoleculeFeature == null) {
1711      this.colunitSmallMoleculeFeature = new ArrayList<>();
1712    }
1713    this.colunitSmallMoleculeFeature.add(colunitSmallMoleculeFeatureItem);
1714    return this;
1715  }
1716
1717   /**
1718   * Defines the used unit for a column in the small molecule feature section. The format of the value has to be \{column name}&#x3D;\{Parameter defining the unit}. This field MUST NOT be used to define a unit for quantification columns. The unit used for small molecule quantification values MUST be set in small_molecule_feature-quantification_unit.
1719   *
1720   * @return colunitSmallMoleculeFeature
1721  **/
1722  @Valid
1723  @ApiModelProperty(value = "Defines the used unit for a column in the small molecule feature section. The format of the value has to be \\{column name}=\\{Parameter defining the unit}. This field MUST NOT be used to define a unit for quantification columns. The unit used for small molecule quantification values MUST be set in small_molecule_feature-quantification_unit.")
1724  public List<ColumnParameterMapping> getColunitSmallMoleculeFeature() {
1725    return colunitSmallMoleculeFeature;
1726  }
1727
1728 /**
1729   * Set colunitSmallMoleculeFeature.
1730   *
1731   * <p>mzTab-M specification example(s):</p>
1732   * <pre><code>COM     colunit for optional small molecule feature column with the name 'opt_ms_run[1]_cv_MS:MS:1002476_ion_mobility_drift_time' referencing ms_run[1]
1733MTD     colunit-small_molecule_feature  opt_ms_run[1]_cv_MS:MS:1002476_ion_mobility_drift_time=[UO,UO:0000031, minute,]
1734</code></pre>
1735   * 
1736   * 
1737   * @see #getColunitSmallMoleculeFeature Metadata#getColunitSmallMoleculeFeature for validation constraints
1738   * @param colunitSmallMoleculeFeature a {@code List<ColumnParameterMapping>} parameter.
1739  **/
1740  public void setColunitSmallMoleculeFeature(List<ColumnParameterMapping> colunitSmallMoleculeFeature) {
1741    this.colunitSmallMoleculeFeature = colunitSmallMoleculeFeature;
1742  }
1743
1744
1745 /**
1746   * Builder method for colunitSmallMoleculeEvidence.
1747   *
1748   * @see Metadata#setColunitSmallMoleculeEvidence Metadata#setColunitSmallMoleculeEvidence for specification examples
1749   * @see Metadata#getColunitSmallMoleculeEvidence Metadata#getColunitSmallMoleculeEvidence for validation constraints
1750   * @param colunitSmallMoleculeEvidence a {@code List<ColumnParameterMapping>} parameter.
1751   * @return Metadata
1752  **/
1753  public Metadata colunitSmallMoleculeEvidence(List<ColumnParameterMapping> colunitSmallMoleculeEvidence) {
1754   this.colunitSmallMoleculeEvidence = colunitSmallMoleculeEvidence;
1755   return this;
1756  }
1757
1758  /**
1759   * Add a single colunitSmallMoleculeEvidenceItem to the colunitSmallMoleculeEvidence collection.
1760   *
1761   * @see Metadata#getColunitSmallMoleculeEvidence Metadata#getColunitSmallMoleculeEvidence for validation constraints
1762   * @param colunitSmallMoleculeEvidenceItem a {@code ColumnParameterMapping} parameter.
1763   * @return Metadata
1764   */
1765  public Metadata addColunitSmallMoleculeEvidenceItem(ColumnParameterMapping colunitSmallMoleculeEvidenceItem) {
1766    if (this.colunitSmallMoleculeEvidence == null) {
1767      this.colunitSmallMoleculeEvidence = new ArrayList<>();
1768    }
1769    this.colunitSmallMoleculeEvidence.add(colunitSmallMoleculeEvidenceItem);
1770    return this;
1771  }
1772
1773   /**
1774   * Defines the used unit for a column in the small molecule evidence section. The format of the value has to be \{column name}&#x3D;\{Parameter defining the unit}.
1775   *
1776   * @return colunitSmallMoleculeEvidence
1777  **/
1778  @Valid
1779  @ApiModelProperty(value = "Defines the used unit for a column in the small molecule evidence section. The format of the value has to be \\{column name}=\\{Parameter defining the unit}.")
1780  public List<ColumnParameterMapping> getColunitSmallMoleculeEvidence() {
1781    return colunitSmallMoleculeEvidence;
1782  }
1783
1784 /**
1785   * Set colunitSmallMoleculeEvidence.
1786   *
1787   * <p>mzTab-M specification example(s):</p>
1788   * <pre><code>COM     colunit for optional small molecule evidence column with the name 'opt_global_mass_error'
1789MTD     colunit-small_molecule_evidence opt_global_mass_error=[UO, UO:0000169, parts per million, ]
1790</code></pre>
1791   * 
1792   * 
1793   * @see #getColunitSmallMoleculeEvidence Metadata#getColunitSmallMoleculeEvidence for validation constraints
1794   * @param colunitSmallMoleculeEvidence a {@code List<ColumnParameterMapping>} parameter.
1795  **/
1796  public void setColunitSmallMoleculeEvidence(List<ColumnParameterMapping> colunitSmallMoleculeEvidence) {
1797    this.colunitSmallMoleculeEvidence = colunitSmallMoleculeEvidence;
1798  }
1799
1800
1801  @Override
1802  public boolean equals(java.lang.Object o) {
1803    if (this == o) {
1804      return true;
1805    }
1806    if (o == null || getClass() != o.getClass()) {
1807      return false;
1808    }
1809    Metadata metadata = (Metadata) o;
1810    return Objects.equals(this.prefix, metadata.prefix) &&
1811        Objects.equals(this.mzTabVersion, metadata.mzTabVersion) &&
1812        Objects.equals(this.mzTabID, metadata.mzTabID) &&
1813        Objects.equals(this.title, metadata.title) &&
1814        Objects.equals(this.description, metadata.description) &&
1815        Objects.equals(this.sampleProcessing, metadata.sampleProcessing) &&
1816        Objects.equals(this.instrument, metadata.instrument) &&
1817        Objects.equals(this.software, metadata.software) &&
1818        Objects.equals(this.publication, metadata.publication) &&
1819        Objects.equals(this.contact, metadata.contact) &&
1820        Objects.equals(this.uri, metadata.uri) &&
1821        Objects.equals(this.externalStudyUri, metadata.externalStudyUri) &&
1822        Objects.equals(this.quantificationMethod, metadata.quantificationMethod) &&
1823        Objects.equals(this.studyVariable, metadata.studyVariable) &&
1824        Objects.equals(this.msRun, metadata.msRun) &&
1825        Objects.equals(this.assay, metadata.assay) &&
1826        Objects.equals(this.sample, metadata.sample) &&
1827        Objects.equals(this.custom, metadata.custom) &&
1828        Objects.equals(this.cv, metadata.cv) &&
1829        Objects.equals(this.database, metadata.database) &&
1830        Objects.equals(this.derivatizationAgent, metadata.derivatizationAgent) &&
1831        Objects.equals(this.smallMoleculeQuantificationUnit, metadata.smallMoleculeQuantificationUnit) &&
1832        Objects.equals(this.smallMoleculeFeatureQuantificationUnit, metadata.smallMoleculeFeatureQuantificationUnit) &&
1833        Objects.equals(this.smallMoleculeIdentificationReliability, metadata.smallMoleculeIdentificationReliability) &&
1834        Objects.equals(this.idConfidenceMeasure, metadata.idConfidenceMeasure) &&
1835        Objects.equals(this.colunitSmallMolecule, metadata.colunitSmallMolecule) &&
1836        Objects.equals(this.colunitSmallMoleculeFeature, metadata.colunitSmallMoleculeFeature) &&
1837        Objects.equals(this.colunitSmallMoleculeEvidence, metadata.colunitSmallMoleculeEvidence);
1838  }
1839
1840  @Override
1841  public int hashCode() {
1842    return Objects.hash(prefix, mzTabVersion, mzTabID, title, description, sampleProcessing, instrument, software, publication, contact, uri, externalStudyUri, quantificationMethod, studyVariable, msRun, assay, sample, custom, cv, database, derivatizationAgent, smallMoleculeQuantificationUnit, smallMoleculeFeatureQuantificationUnit, smallMoleculeIdentificationReliability, idConfidenceMeasure, colunitSmallMolecule, colunitSmallMoleculeFeature, colunitSmallMoleculeEvidence);
1843  }
1844
1845
1846  @Override
1847  public String toString() {
1848    StringBuilder sb = new StringBuilder();
1849    sb.append("class Metadata {\n");
1850    
1851    sb.append("    prefix: ").append(toIndentedString(prefix)).append("\n");
1852    sb.append("    mzTabVersion: ").append(toIndentedString(mzTabVersion)).append("\n");
1853    sb.append("    mzTabID: ").append(toIndentedString(mzTabID)).append("\n");
1854    sb.append("    title: ").append(toIndentedString(title)).append("\n");
1855    sb.append("    description: ").append(toIndentedString(description)).append("\n");
1856    sb.append("    sampleProcessing: ").append(toIndentedString(sampleProcessing)).append("\n");
1857    sb.append("    instrument: ").append(toIndentedString(instrument)).append("\n");
1858    sb.append("    software: ").append(toIndentedString(software)).append("\n");
1859    sb.append("    publication: ").append(toIndentedString(publication)).append("\n");
1860    sb.append("    contact: ").append(toIndentedString(contact)).append("\n");
1861    sb.append("    uri: ").append(toIndentedString(uri)).append("\n");
1862    sb.append("    externalStudyUri: ").append(toIndentedString(externalStudyUri)).append("\n");
1863    sb.append("    quantificationMethod: ").append(toIndentedString(quantificationMethod)).append("\n");
1864    sb.append("    studyVariable: ").append(toIndentedString(studyVariable)).append("\n");
1865    sb.append("    msRun: ").append(toIndentedString(msRun)).append("\n");
1866    sb.append("    assay: ").append(toIndentedString(assay)).append("\n");
1867    sb.append("    sample: ").append(toIndentedString(sample)).append("\n");
1868    sb.append("    custom: ").append(toIndentedString(custom)).append("\n");
1869    sb.append("    cv: ").append(toIndentedString(cv)).append("\n");
1870    sb.append("    database: ").append(toIndentedString(database)).append("\n");
1871    sb.append("    derivatizationAgent: ").append(toIndentedString(derivatizationAgent)).append("\n");
1872    sb.append("    smallMoleculeQuantificationUnit: ").append(toIndentedString(smallMoleculeQuantificationUnit)).append("\n");
1873    sb.append("    smallMoleculeFeatureQuantificationUnit: ").append(toIndentedString(smallMoleculeFeatureQuantificationUnit)).append("\n");
1874    sb.append("    smallMoleculeIdentificationReliability: ").append(toIndentedString(smallMoleculeIdentificationReliability)).append("\n");
1875    sb.append("    idConfidenceMeasure: ").append(toIndentedString(idConfidenceMeasure)).append("\n");
1876    sb.append("    colunitSmallMolecule: ").append(toIndentedString(colunitSmallMolecule)).append("\n");
1877    sb.append("    colunitSmallMoleculeFeature: ").append(toIndentedString(colunitSmallMoleculeFeature)).append("\n");
1878    sb.append("    colunitSmallMoleculeEvidence: ").append(toIndentedString(colunitSmallMoleculeEvidence)).append("\n");
1879    sb.append("}");
1880    return sb.toString();
1881  }
1882
1883  /**
1884   * Convert the given object to string with each line indented by 4 spaces
1885   * (except the first line).
1886   */
1887  private String toIndentedString(java.lang.Object o) {
1888    if (o == null) {
1889      return "null";
1890    }
1891    return o.toString().replace("\n", "\n    ");
1892  }
1893
1894}
1895