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.Parameter;
022import io.swagger.annotations.ApiModel;
023import io.swagger.annotations.ApiModelProperty;
024import java.util.ArrayList;
025import java.util.List;
026import com.fasterxml.jackson.dataformat.xml.annotation.*;
027import javax.xml.bind.annotation.*;
028import javax.validation.constraints.*;
029import javax.validation.Valid;
030import de.isas.lipidomics.mztab2.validation.constraints.*;
031/**
032 * 
033 * Specification of sample.
034(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. 
035species: The respective species of the samples analysed. For more complex cases, such as metagenomics, optional columns and userParams should be used. 
036tissue: The respective tissue(s) of the sample. 
037cell_type: The respective cell type(s) of the sample. 
038disease: The respective disease(s) of the sample. 
039description: A human readable description of the sample. 
040custom: Custom parameters describing the sample's additional properties. Dates MUST be provided in ISO-8601 format.
041
042 * 
043 *
044 * <p>mzTab-M specification example(s):</p>
045 * <pre><code>COM       Experiment where all samples consisted of the same two species
046MTD     sample[1]       individual number 1
047MTD     sample[1]-species[1]    [NCBITaxon, NCBITaxon:9606, Homo sapiens, ]
048MTD     sample[1]-tissue[1]     [BTO, BTO:0000759, liver, ]
049MTD     sample[1]-cell_type[1]  [CL, CL:0000182, hepatocyte, ]
050MTD     sample[1]-disease[1]    [DOID, DOID:684, hepatocellular carcinoma, ]
051MTD     sample[1]-disease[2]    [DOID, DOID:9451, alcoholic fatty liver, ]
052MTD     sample[1]-description   Hepatocellular carcinoma samples.
053MTD     sample[1]-custom[1]     [,,Extraction date, 2011-12-21]
054MTD     sample[1]-custom[2]     [,,Extraction reason, liver biopsy]
055MTD     sample[2]       individual number 2
056MTD     sample[2]-species[1]    [NCBITaxon, NCBITaxon:9606, Homo sapiens, ]
057MTD     sample[2]-tissue[1]     [BTO, BTO:0000759, liver, ]
058MTD     sample[2]-cell_type[1]  [CL, CL:0000182, hepatocyte, ]
059MTD     sample[2]-description   Healthy control samples.
060</code></pre>
061 * 
062 *
063 */
064@com.fasterxml.jackson.annotation.JsonIdentityInfo(generator = com.fasterxml.jackson.annotation.ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Sample.class)
065@ApiModel(description = "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. ")
066@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaClientCodegen", date = "2021-01-02T19:25:37.430+01:00")
067@XmlRootElement(name = "Sample")
068@XmlAccessorType(XmlAccessType.FIELD)
069@JacksonXmlRootElement(localName = "Sample")
070public class Sample {
071
072  /**
073   * Property enumeration for Sample.
074   */
075  public static enum Properties {
076      id("id"), 
077      name("name"), 
078      custom("custom"), 
079      species("species"), 
080      tissue("tissue"), 
081      cellType("cell_type"), 
082      disease("disease"), 
083      description("description");
084
085    private final String propertyName;
086
087    private Properties(String propertyName) {
088      this.propertyName = propertyName;
089    }
090
091    public String getPropertyName() {
092      return propertyName;
093    }
094
095    public String toString() {
096      return propertyName;
097    }
098
099    public String toUpper() {
100      return propertyName.toUpperCase();
101    }
102
103    public static Properties of(String value) {
104      if(value==null) {
105        throw new NullPointerException("Argument value must not be null!");
106      }
107      return Arrays.asList(Properties.values()).stream().filter(m -> m.propertyName.equals(value.toLowerCase())).findAny().orElseThrow(IllegalArgumentException::new);
108    }
109  };
110  
111  @JsonProperty("id")
112  @JacksonXmlProperty(localName = "id")
113  @XmlElement(name = "id")
114  private Integer id = null;
115  @JsonProperty("name")
116  @JacksonXmlProperty(localName = "name")
117  @XmlElement(name = "name")
118  private String name = null;
119  @JsonProperty("custom")
120  // Is a container wrapped=false
121  // items.name=custom items.baseName=custom items.xmlName= items.xmlNamespace=
122  // items.example= items.type=Parameter
123  @XmlElement(name = "custom")
124  private List<Parameter> custom = null;
125  @JsonProperty("species")
126  // Is a container wrapped=false
127  // items.name=species items.baseName=species items.xmlName= items.xmlNamespace=
128  // items.example= items.type=Parameter
129  @XmlElement(name = "species")
130  private List<Parameter> species = null;
131  @JsonProperty("tissue")
132  // Is a container wrapped=false
133  // items.name=tissue items.baseName=tissue items.xmlName= items.xmlNamespace=
134  // items.example= items.type=Parameter
135  @XmlElement(name = "tissue")
136  private List<Parameter> tissue = null;
137  @JsonProperty("cell_type")
138  // Is a container wrapped=false
139  // items.name=cellType items.baseName=cellType items.xmlName= items.xmlNamespace=
140  // items.example= items.type=Parameter
141  @XmlElement(name = "cellType")
142  private List<Parameter> cellType = null;
143  @JsonProperty("disease")
144  // Is a container wrapped=false
145  // items.name=disease items.baseName=disease items.xmlName= items.xmlNamespace=
146  // items.example= items.type=Parameter
147  @XmlElement(name = "disease")
148  private List<Parameter> disease = null;
149  @JsonProperty("description")
150  @JacksonXmlProperty(localName = "description")
151  @XmlElement(name = "description")
152  private String description = null;
153
154 /**
155   * Builder method for id.
156   *
157   * @see Sample#setId Sample#setId for specification examples
158   * @see Sample#getId Sample#getId for validation constraints
159   * @param id a {@code Integer} parameter.
160   * @return Sample
161  **/
162  public Sample id(Integer id) {
163   this.id = id;
164   return this;
165  }
166
167   /**
168   * <p>Get id.</p>
169   *
170   * <p>Minimum: 1</p>
171   * @return id
172  **/
173 @Min(1)  @ApiModelProperty(value = "")
174  public Integer getId() {
175    return id;
176  }
177
178 /**
179   * Set id.
180   *
181   * 
182   * 
183   * @see #getId Sample#getId for validation constraints
184   * @param id a {@code Integer} parameter.
185  **/
186  public void setId(Integer id) {
187    this.id = id;
188  }
189
190
191 /**
192   * Builder method for name.
193   *
194   * @see Sample#setName Sample#setName for specification examples
195   * @see Sample#getName Sample#getName for validation constraints
196   * @param name a {@code String} parameter.
197   * @return Sample
198  **/
199  public Sample name(String name) {
200   this.name = name;
201   return this;
202  }
203
204   /**
205   * The sample&#39;s name.
206   *
207   * @return name
208  **/
209  @ApiModelProperty(value = "The sample's name.")
210  public String getName() {
211    return name;
212  }
213
214 /**
215   * Set name.
216   *
217   * 
218   * 
219   * @see #getName Sample#getName for validation constraints
220   * @param name a {@code String} parameter.
221  **/
222  public void setName(String name) {
223    this.name = name;
224  }
225
226
227 /**
228   * Builder method for custom.
229   *
230   * @see Sample#setCustom Sample#setCustom for specification examples
231   * @see Sample#getCustom Sample#getCustom for validation constraints
232   * @param custom a {@code List<Parameter>} parameter.
233   * @return Sample
234  **/
235  public Sample custom(List<Parameter> custom) {
236   this.custom = custom;
237   return this;
238  }
239
240  /**
241   * Add a single customItem to the custom collection.
242   *
243   * @see Sample#getCustom Sample#getCustom for validation constraints
244   * @param customItem a {@code Parameter} parameter.
245   * @return Sample
246   */
247  public Sample addCustomItem(Parameter customItem) {
248    if (this.custom == null) {
249      this.custom = new ArrayList<>();
250    }
251    this.custom.add(customItem);
252    return this;
253  }
254
255   /**
256   * Additional user or cv parameters.
257   *
258   * @return custom
259  **/
260  @Valid
261  @ApiModelProperty(value = "Additional user or cv parameters.")
262  public List<Parameter> getCustom() {
263    return custom;
264  }
265
266 /**
267   * Set custom.
268   *
269   * 
270   * 
271   * @see #getCustom Sample#getCustom for validation constraints
272   * @param custom a {@code List<Parameter>} parameter.
273  **/
274  public void setCustom(List<Parameter> custom) {
275    this.custom = custom;
276  }
277
278
279 /**
280   * Builder method for species.
281   *
282   * @see Sample#setSpecies Sample#setSpecies for specification examples
283   * @see Sample#getSpecies Sample#getSpecies for validation constraints
284   * @param species a {@code List<Parameter>} parameter.
285   * @return Sample
286  **/
287  public Sample species(List<Parameter> species) {
288   this.species = species;
289   return this;
290  }
291
292  /**
293   * Add a single speciesItem to the species collection.
294   *
295   * @see Sample#getSpecies Sample#getSpecies for validation constraints
296   * @param speciesItem a {@code Parameter} parameter.
297   * @return Sample
298   */
299  public Sample addSpeciesItem(Parameter speciesItem) {
300    if (this.species == null) {
301      this.species = new ArrayList<>();
302    }
303    this.species.add(speciesItem);
304    return this;
305  }
306
307   /**
308   * Biological species information on the sample.
309   *
310   * @return species
311  **/
312  @Valid
313  @ApiModelProperty(value = "Biological species information on the sample.")
314  public List<Parameter> getSpecies() {
315    return species;
316  }
317
318 /**
319   * Set species.
320   *
321   * 
322   * 
323   * @see #getSpecies Sample#getSpecies for validation constraints
324   * @param species a {@code List<Parameter>} parameter.
325  **/
326  public void setSpecies(List<Parameter> species) {
327    this.species = species;
328  }
329
330
331 /**
332   * Builder method for tissue.
333   *
334   * @see Sample#setTissue Sample#setTissue for specification examples
335   * @see Sample#getTissue Sample#getTissue for validation constraints
336   * @param tissue a {@code List<Parameter>} parameter.
337   * @return Sample
338  **/
339  public Sample tissue(List<Parameter> tissue) {
340   this.tissue = tissue;
341   return this;
342  }
343
344  /**
345   * Add a single tissueItem to the tissue collection.
346   *
347   * @see Sample#getTissue Sample#getTissue for validation constraints
348   * @param tissueItem a {@code Parameter} parameter.
349   * @return Sample
350   */
351  public Sample addTissueItem(Parameter tissueItem) {
352    if (this.tissue == null) {
353      this.tissue = new ArrayList<>();
354    }
355    this.tissue.add(tissueItem);
356    return this;
357  }
358
359   /**
360   * Biological tissue information on the sample.
361   *
362   * @return tissue
363  **/
364  @Valid
365  @ApiModelProperty(value = "Biological tissue information on the sample.")
366  public List<Parameter> getTissue() {
367    return tissue;
368  }
369
370 /**
371   * Set tissue.
372   *
373   * 
374   * 
375   * @see #getTissue Sample#getTissue for validation constraints
376   * @param tissue a {@code List<Parameter>} parameter.
377  **/
378  public void setTissue(List<Parameter> tissue) {
379    this.tissue = tissue;
380  }
381
382
383 /**
384   * Builder method for cellType.
385   *
386   * @see Sample#setCellType Sample#setCellType for specification examples
387   * @see Sample#getCellType Sample#getCellType for validation constraints
388   * @param cellType a {@code List<Parameter>} parameter.
389   * @return Sample
390  **/
391  public Sample cellType(List<Parameter> cellType) {
392   this.cellType = cellType;
393   return this;
394  }
395
396  /**
397   * Add a single cellTypeItem to the cellType collection.
398   *
399   * @see Sample#getCellType Sample#getCellType for validation constraints
400   * @param cellTypeItem a {@code Parameter} parameter.
401   * @return Sample
402   */
403  public Sample addCellTypeItem(Parameter cellTypeItem) {
404    if (this.cellType == null) {
405      this.cellType = new ArrayList<>();
406    }
407    this.cellType.add(cellTypeItem);
408    return this;
409  }
410
411   /**
412   * Biological cell type information on the sample.
413   *
414   * @return cellType
415  **/
416  @Valid
417  @ApiModelProperty(value = "Biological cell type information on the sample.")
418  public List<Parameter> getCellType() {
419    return cellType;
420  }
421
422 /**
423   * Set cellType.
424   *
425   * 
426   * 
427   * @see #getCellType Sample#getCellType for validation constraints
428   * @param cellType a {@code List<Parameter>} parameter.
429  **/
430  public void setCellType(List<Parameter> cellType) {
431    this.cellType = cellType;
432  }
433
434
435 /**
436   * Builder method for disease.
437   *
438   * @see Sample#setDisease Sample#setDisease for specification examples
439   * @see Sample#getDisease Sample#getDisease for validation constraints
440   * @param disease a {@code List<Parameter>} parameter.
441   * @return Sample
442  **/
443  public Sample disease(List<Parameter> disease) {
444   this.disease = disease;
445   return this;
446  }
447
448  /**
449   * Add a single diseaseItem to the disease collection.
450   *
451   * @see Sample#getDisease Sample#getDisease for validation constraints
452   * @param diseaseItem a {@code Parameter} parameter.
453   * @return Sample
454   */
455  public Sample addDiseaseItem(Parameter diseaseItem) {
456    if (this.disease == null) {
457      this.disease = new ArrayList<>();
458    }
459    this.disease.add(diseaseItem);
460    return this;
461  }
462
463   /**
464   * Disease information on the sample.
465   *
466   * @return disease
467  **/
468  @Valid
469  @ApiModelProperty(value = "Disease information on the sample.")
470  public List<Parameter> getDisease() {
471    return disease;
472  }
473
474 /**
475   * Set disease.
476   *
477   * 
478   * 
479   * @see #getDisease Sample#getDisease for validation constraints
480   * @param disease a {@code List<Parameter>} parameter.
481  **/
482  public void setDisease(List<Parameter> disease) {
483    this.disease = disease;
484  }
485
486
487 /**
488   * Builder method for description.
489   *
490   * @see Sample#setDescription Sample#setDescription for specification examples
491   * @see Sample#getDescription Sample#getDescription for validation constraints
492   * @param description a {@code String} parameter.
493   * @return Sample
494  **/
495  public Sample description(String description) {
496   this.description = description;
497   return this;
498  }
499
500   /**
501   * A free form description of the sample.
502   *
503   * @return description
504  **/
505  @ApiModelProperty(value = "A free form description of the sample.")
506  public String getDescription() {
507    return description;
508  }
509
510 /**
511   * Set description.
512   *
513   * 
514   * 
515   * @see #getDescription Sample#getDescription for validation constraints
516   * @param description a {@code String} parameter.
517  **/
518  public void setDescription(String description) {
519    this.description = description;
520  }
521
522
523  @Override
524  public boolean equals(java.lang.Object o) {
525    if (this == o) {
526      return true;
527    }
528    if (o == null || getClass() != o.getClass()) {
529      return false;
530    }
531    Sample sample = (Sample) o;
532    return Objects.equals(this.id, sample.id) &&
533        Objects.equals(this.name, sample.name) &&
534        Objects.equals(this.custom, sample.custom) &&
535        Objects.equals(this.species, sample.species) &&
536        Objects.equals(this.tissue, sample.tissue) &&
537        Objects.equals(this.cellType, sample.cellType) &&
538        Objects.equals(this.disease, sample.disease) &&
539        Objects.equals(this.description, sample.description);
540  }
541
542  @Override
543  public int hashCode() {
544    return Objects.hash(id, name, custom, species, tissue, cellType, disease, description);
545  }
546
547
548  @Override
549  public String toString() {
550    StringBuilder sb = new StringBuilder();
551    sb.append("class Sample {\n");
552    
553    sb.append("    id: ").append(toIndentedString(id)).append("\n");
554    sb.append("    name: ").append(toIndentedString(name)).append("\n");
555    sb.append("    custom: ").append(toIndentedString(custom)).append("\n");
556    sb.append("    species: ").append(toIndentedString(species)).append("\n");
557    sb.append("    tissue: ").append(toIndentedString(tissue)).append("\n");
558    sb.append("    cellType: ").append(toIndentedString(cellType)).append("\n");
559    sb.append("    disease: ").append(toIndentedString(disease)).append("\n");
560    sb.append("    description: ").append(toIndentedString(description)).append("\n");
561    sb.append("}");
562    return sb.toString();
563  }
564
565  /**
566   * Convert the given object to string with each line indented by 4 spaces
567   * (except the first line).
568   */
569  private String toIndentedString(java.lang.Object o) {
570    if (o == null) {
571      return "null";
572    }
573    return o.toString().replace("\n", "\n    ");
574  }
575
576}
577