source: trunk/grails-app/domain/dbnp/studycapturing/Assay.groovy

Last change on this file was 2246, checked in by business@…, 7 years ago

added caching to Assay and Study to speed up a.o. REST calls from modules

  • Property svn:keywords set to Rev Author Date
File size: 2.9 KB
Line 
1package dbnp.studycapturing
2
3import org.dbnp.gdt.*
4
5/**
6 * This class describes an Assay, which describes the application of a certain (omics) measurement to multiple samples.
7 * The actual data of these measurements are described in submodules of dbNP. The type property describes in which module
8 * this data can be found.
9 */
10class Assay extends TemplateEntity {
11    // The name of the assay, which should indicate the measurements represented in this assay to the user.
12    String name
13
14    // The dbNP module in which the assay omics data can be found. */
15    AssayModule module
16
17    /**
18     * UUID of this assay
19     */
20    String assayUUID
21
22    /**
23     * return the domain fields for this domain class
24     * @return List
25     */
26    static List<TemplateField> giveDomainFields() { return Assay.domainFields }
27
28    static List<TemplateField> domainFields = [
29            new TemplateField(
30                    name: 'name',
31                    type: TemplateFieldType.STRING,
32                    preferredIdentifier: true,
33                    comment: 'The name you give here is used to discern this assay within the study (e.g. \'liver transcriptomics\', \'blood lipidomics\')',
34                    required: true
35            ),
36            new TemplateField(
37                    name: 'module',
38                    type: TemplateFieldType.MODULE,
39                    comment: 'Select the dbNP module where the actual assay measurement data is stored',
40                    required: true
41            )
42    ]
43
44    // An Assay always belongs to one study.
45    static belongsTo = [parent: Study]
46
47    // An Assay can have many samples on which it is performed, but all samples should be within the 'parent' Study.
48    static hasMany = [samples: Sample]
49
50    static constraints = {
51        assayUUID(nullable: true, unique: true)
52    }
53
54    static mapping = {
55            cache true
56        sort "name"
57
58        // Workaround for bug http://jira.codehaus.org/browse/GRAILS-6754
59        templateTextFields type: 'text'
60    }
61
62    def String toString() {
63        return name;
64    }
65
66    def getToken() {
67        return giveUUID()
68    }
69
70    /**
71     * Basic equals method to check whether objects are equals, by comparing the ids
72     * @param o Object to compare with
73     * @return True iff the id of the given Study is equal to the id of this Study
74     */
75    public boolean equals(Object o) {
76        if (o == null)
77            return false;
78
79        if (!(o instanceof Assay))
80            return false
81
82        Assay s = (Assay) o;
83
84        return this.id == s.id
85    }
86
87    /**
88     * Returns the UUID of this sample and generates one if needed
89     */
90    public String giveUUID() {
91        if (!this.assayUUID) {
92            this.assayUUID = UUID.randomUUID().toString();
93            if (!this.save(flush: true)) {
94                log.error "Couldn't save assay UUID: " + this.getErrors();
95            }
96        }
97
98        return this.assayUUID;
99    }
100}
Note: See TracBrowser for help on using the repository browser.