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.Parameter;
023import io.swagger.annotations.ApiModel;
024import io.swagger.annotations.ApiModelProperty;
025import java.util.ArrayList;
026import java.util.List;
027import com.fasterxml.jackson.dataformat.xml.annotation.*;
028import javax.xml.bind.annotation.*;
029import javax.validation.constraints.*;
030import javax.validation.Valid;
031import de.isas.lipidomics.mztab2.validation.constraints.*;
032/**
033 * 
034 * Specification of study_variable.
035(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“.
036assay_refs: Bar-separated references to the IDs of assays grouped in the study variable.
037average_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.
038variation_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”.
039description: A textual description of the study variable.
040factors: Additional parameters or factors, separated by bars, that are known about study variables allowing the capture of more complex, such as nested designs.  
041
042 * 
043 *
044 * <p>mzTab-M specification example(s):</p>
045 * <pre><code>MTD       study_variable[1]       control
046MTD     study_variable[1]-assay_refs    assay[1]| assay[2]| assay[3]
047MTD     study_variable-average_function [MS, MS:1002883, median, ]
048MTD     study_variable-variation_function       [MS, MS:1002885, standard error, ]
049MTD     study_variable[1]-description   Group B (spike-in 0.74 fmol/uL)
050MTD     study_variable[1]-factors       [,,time point, 1 minute]|[,,rapamycin dose,0.5mg]
051MTD     study_variable[2]       1 minute 0.5mg rapamycin
052</code></pre>
053 * 
054 *
055 */
056@com.fasterxml.jackson.annotation.JsonIdentityInfo(generator = com.fasterxml.jackson.annotation.ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = StudyVariable.class)
057@ApiModel(description = "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.   ")
058@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaClientCodegen", date = "2021-01-02T19:25:37.430+01:00")
059@XmlRootElement(name = "StudyVariable")
060@XmlAccessorType(XmlAccessType.FIELD)
061@JacksonXmlRootElement(localName = "StudyVariable")
062public class StudyVariable {
063
064  /**
065   * Property enumeration for StudyVariable.
066   */
067  public static enum Properties {
068      id("id"), 
069      name("name"), 
070      assayRefs("assay_refs"), 
071      averageFunction("average_function"), 
072      variationFunction("variation_function"), 
073      description("description"), 
074      factors("factors");
075
076    private final String propertyName;
077
078    private Properties(String propertyName) {
079      this.propertyName = propertyName;
080    }
081
082    public String getPropertyName() {
083      return propertyName;
084    }
085
086    public String toString() {
087      return propertyName;
088    }
089
090    public String toUpper() {
091      return propertyName.toUpperCase();
092    }
093
094    public static Properties of(String value) {
095      if(value==null) {
096        throw new NullPointerException("Argument value must not be null!");
097      }
098      return Arrays.asList(Properties.values()).stream().filter(m -> m.propertyName.equals(value.toLowerCase())).findAny().orElseThrow(IllegalArgumentException::new);
099    }
100  };
101  
102  @JsonProperty("id")
103  @JacksonXmlProperty(localName = "id")
104  @XmlElement(name = "id")
105  private Integer id = null;
106  @JsonProperty("name")
107  @JacksonXmlProperty(localName = "name")
108  @XmlElement(name = "name")
109  private String name = null;
110  @JsonProperty("assay_refs")
111  // Is a container wrapped=false
112  // items.name=assayRefs items.baseName=assayRefs items.xmlName= items.xmlNamespace=
113  // items.example= items.type=Assay
114  @XmlElement(name = "assayRefs")
115  private List<Assay> assayRefs = null;
116  @JsonProperty("average_function")
117  @JacksonXmlProperty(localName = "average_function")
118  @XmlElement(name = "average_function")
119  private Parameter averageFunction = null;
120  @JsonProperty("variation_function")
121  @JacksonXmlProperty(localName = "variation_function")
122  @XmlElement(name = "variation_function")
123  private Parameter variationFunction = null;
124  @JsonProperty("description")
125  @JacksonXmlProperty(localName = "description")
126  @XmlElement(name = "description")
127  private String description = null;
128  @JsonProperty("factors")
129  // Is a container wrapped=false
130  // items.name=factors items.baseName=factors items.xmlName= items.xmlNamespace=
131  // items.example= items.type=Parameter
132  @XmlElement(name = "factors")
133  private List<Parameter> factors = null;
134
135 /**
136   * Builder method for id.
137   *
138   * @see StudyVariable#setId StudyVariable#setId for specification examples
139   * @see StudyVariable#getId StudyVariable#getId for validation constraints
140   * @param id a {@code Integer} parameter.
141   * @return StudyVariable
142  **/
143  public StudyVariable id(Integer id) {
144   this.id = id;
145   return this;
146  }
147
148   /**
149   * <p>Get id.</p>
150   *
151   * <p>Minimum: 1</p>
152   * @return id
153  **/
154  @NotNull
155 @Min(1)  @ApiModelProperty(required = true, value = "")
156  public Integer getId() {
157    return id;
158  }
159
160 /**
161   * Set id.
162   *
163   * 
164   * 
165   * @see #getId StudyVariable#getId for validation constraints
166   * @param id a {@code Integer} parameter.
167  **/
168  public void setId(Integer id) {
169    this.id = id;
170  }
171
172
173 /**
174   * Builder method for name.
175   *
176   * @see StudyVariable#setName StudyVariable#setName for specification examples
177   * @see StudyVariable#getName StudyVariable#getName for validation constraints
178   * @param name a {@code String} parameter.
179   * @return StudyVariable
180  **/
181  public StudyVariable name(String name) {
182   this.name = name;
183   return this;
184  }
185
186   /**
187   * The study variable name.
188   *
189   * @return name
190  **/
191  @NotNull
192  @ApiModelProperty(required = true, value = "The study variable name.")
193  public String getName() {
194    return name;
195  }
196
197 /**
198   * Set name.
199   *
200   * 
201   * 
202   * @see #getName StudyVariable#getName for validation constraints
203   * @param name a {@code String} parameter.
204  **/
205  public void setName(String name) {
206    this.name = name;
207  }
208
209
210 /**
211   * Builder method for assayRefs.
212   *
213   * @see StudyVariable#setAssayRefs StudyVariable#setAssayRefs for specification examples
214   * @see StudyVariable#getAssayRefs StudyVariable#getAssayRefs for validation constraints
215   * @param assayRefs a {@code List<Assay>} parameter.
216   * @return StudyVariable
217  **/
218  public StudyVariable assayRefs(List<Assay> assayRefs) {
219   this.assayRefs = assayRefs;
220   return this;
221  }
222
223  /**
224   * Add a single assayRefsItem to the assayRefs collection.
225   *
226   * @see StudyVariable#getAssayRefs StudyVariable#getAssayRefs for validation constraints
227   * @param assayRefsItem a {@code Assay} parameter.
228   * @return StudyVariable
229   */
230  public StudyVariable addAssayRefsItem(Assay assayRefsItem) {
231    if (this.assayRefs == null) {
232      this.assayRefs = new ArrayList<>();
233    }
234    this.assayRefs.add(assayRefsItem);
235    return this;
236  }
237
238   /**
239   * The assays referenced by this study variable.
240   *
241   * @return assayRefs
242  **/
243  @Valid
244  @ApiModelProperty(value = "The assays referenced by this study variable.")
245  public List<Assay> getAssayRefs() {
246    return assayRefs;
247  }
248
249 /**
250   * Set assayRefs.
251   *
252   * 
253   * 
254   * @see #getAssayRefs StudyVariable#getAssayRefs for validation constraints
255   * @param assayRefs a {@code List<Assay>} parameter.
256  **/
257  public void setAssayRefs(List<Assay> assayRefs) {
258    this.assayRefs = assayRefs;
259  }
260
261
262 /**
263   * Builder method for averageFunction.
264   *
265   * @see StudyVariable#setAverageFunction StudyVariable#setAverageFunction for specification examples
266   * @see StudyVariable#getAverageFunction StudyVariable#getAverageFunction for validation constraints
267   * @param averageFunction a {@code Parameter} parameter.
268   * @return StudyVariable
269  **/
270  public StudyVariable averageFunction(Parameter averageFunction) {
271   this.averageFunction = averageFunction;
272   return this;
273  }
274
275   /**
276   * The function used to calculate summarised small molecule quantities over the assays referenced by this study variable.
277   *
278   * @return averageFunction
279  **/
280  @Valid
281  @ApiModelProperty(value = "The function used to calculate summarised small molecule quantities over the assays referenced by this study variable.")
282  public Parameter getAverageFunction() {
283    return averageFunction;
284  }
285
286 /**
287   * Set averageFunction.
288   *
289   * 
290   * 
291   * @see #getAverageFunction StudyVariable#getAverageFunction for validation constraints
292   * @param averageFunction a {@code Parameter} parameter.
293  **/
294  public void setAverageFunction(Parameter averageFunction) {
295    this.averageFunction = averageFunction;
296  }
297
298
299 /**
300   * Builder method for variationFunction.
301   *
302   * @see StudyVariable#setVariationFunction StudyVariable#setVariationFunction for specification examples
303   * @see StudyVariable#getVariationFunction StudyVariable#getVariationFunction for validation constraints
304   * @param variationFunction a {@code Parameter} parameter.
305   * @return StudyVariable
306  **/
307  public StudyVariable variationFunction(Parameter variationFunction) {
308   this.variationFunction = variationFunction;
309   return this;
310  }
311
312   /**
313   * The function used to calculate the variation of small molecule quantities over the assays referenced by this study variable.
314   *
315   * @return variationFunction
316  **/
317  @Valid
318  @ApiModelProperty(value = "The function used to calculate the variation of small molecule quantities over the assays referenced by this study variable.")
319  public Parameter getVariationFunction() {
320    return variationFunction;
321  }
322
323 /**
324   * Set variationFunction.
325   *
326   * 
327   * 
328   * @see #getVariationFunction StudyVariable#getVariationFunction for validation constraints
329   * @param variationFunction a {@code Parameter} parameter.
330  **/
331  public void setVariationFunction(Parameter variationFunction) {
332    this.variationFunction = variationFunction;
333  }
334
335
336 /**
337   * Builder method for description.
338   *
339   * @see StudyVariable#setDescription StudyVariable#setDescription for specification examples
340   * @see StudyVariable#getDescription StudyVariable#getDescription for validation constraints
341   * @param description a {@code String} parameter.
342   * @return StudyVariable
343  **/
344  public StudyVariable description(String description) {
345   this.description = description;
346   return this;
347  }
348
349   /**
350   * A free-form description of this study variable.
351   *
352   * @return description
353  **/
354  @ApiModelProperty(value = "A free-form description of this study variable.")
355  public String getDescription() {
356    return description;
357  }
358
359 /**
360   * Set description.
361   *
362   * 
363   * 
364   * @see #getDescription StudyVariable#getDescription for validation constraints
365   * @param description a {@code String} parameter.
366  **/
367  public void setDescription(String description) {
368    this.description = description;
369  }
370
371
372 /**
373   * Builder method for factors.
374   *
375   * @see StudyVariable#setFactors StudyVariable#setFactors for specification examples
376   * @see StudyVariable#getFactors StudyVariable#getFactors for validation constraints
377   * @param factors a {@code List<Parameter>} parameter.
378   * @return StudyVariable
379  **/
380  public StudyVariable factors(List<Parameter> factors) {
381   this.factors = factors;
382   return this;
383  }
384
385  /**
386   * Add a single factorsItem to the factors collection.
387   *
388   * @see StudyVariable#getFactors StudyVariable#getFactors for validation constraints
389   * @param factorsItem a {@code Parameter} parameter.
390   * @return StudyVariable
391   */
392  public StudyVariable addFactorsItem(Parameter factorsItem) {
393    if (this.factors == null) {
394      this.factors = new ArrayList<>();
395    }
396    this.factors.add(factorsItem);
397    return this;
398  }
399
400   /**
401   * Parameters indicating which factors were used for the assays referenced by this study variable, and at which levels.
402   *
403   * @return factors
404  **/
405  @Valid
406  @ApiModelProperty(value = "Parameters indicating which factors were used for the assays referenced by this study variable, and at which levels.")
407  public List<Parameter> getFactors() {
408    return factors;
409  }
410
411 /**
412   * Set factors.
413   *
414   * 
415   * 
416   * @see #getFactors StudyVariable#getFactors for validation constraints
417   * @param factors a {@code List<Parameter>} parameter.
418  **/
419  public void setFactors(List<Parameter> factors) {
420    this.factors = factors;
421  }
422
423
424  @Override
425  public boolean equals(java.lang.Object o) {
426    if (this == o) {
427      return true;
428    }
429    if (o == null || getClass() != o.getClass()) {
430      return false;
431    }
432    StudyVariable studyVariable = (StudyVariable) o;
433    return Objects.equals(this.id, studyVariable.id) &&
434        Objects.equals(this.name, studyVariable.name) &&
435        Objects.equals(this.assayRefs, studyVariable.assayRefs) &&
436        Objects.equals(this.averageFunction, studyVariable.averageFunction) &&
437        Objects.equals(this.variationFunction, studyVariable.variationFunction) &&
438        Objects.equals(this.description, studyVariable.description) &&
439        Objects.equals(this.factors, studyVariable.factors);
440  }
441
442  @Override
443  public int hashCode() {
444    return Objects.hash(id, name, assayRefs, averageFunction, variationFunction, description, factors);
445  }
446
447
448  @Override
449  public String toString() {
450    StringBuilder sb = new StringBuilder();
451    sb.append("class StudyVariable {\n");
452    
453    sb.append("    id: ").append(toIndentedString(id)).append("\n");
454    sb.append("    name: ").append(toIndentedString(name)).append("\n");
455    sb.append("    assayRefs: ").append(toIndentedString(assayRefs)).append("\n");
456    sb.append("    averageFunction: ").append(toIndentedString(averageFunction)).append("\n");
457    sb.append("    variationFunction: ").append(toIndentedString(variationFunction)).append("\n");
458    sb.append("    description: ").append(toIndentedString(description)).append("\n");
459    sb.append("    factors: ").append(toIndentedString(factors)).append("\n");
460    sb.append("}");
461    return sb.toString();
462  }
463
464  /**
465   * Convert the given object to string with each line indented by 4 spaces
466   * (except the first line).
467   */
468  private String toIndentedString(java.lang.Object o) {
469    if (o == null) {
470      return "null";
471    }
472    return o.toString().replace("\n", "\n    ");
473  }
474
475}
476