added svcapi ui and camunda code
[it/otf.git] / otf-frontend / server / src / agenda / models / test-schedule.js
1 /*  Copyright (c) 2019 AT&T Intellectual Property.                             #\r
2 #                                                                              #\r
3 #   Licensed under the Apache License, Version 2.0 (the "License");            #\r
4 #   you may not use this file except in compliance with the License.           #\r
5 #   You may obtain a copy of the License at                                    #\r
6 #                                                                              #\r
7 #       http://www.apache.org/licenses/LICENSE-2.0                             #\r
8 #                                                                              #\r
9 #   Unless required by applicable law or agreed to in writing, software        #\r
10 #   distributed under the License is distributed on an "AS IS" BASIS,          #\r
11 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #\r
12 #   See the License for the specific language governing permissions and        #\r
13 #   limitations under the License.                                             #\r
14 ##############################################################################*/\r
15 \r
16 \r
17 const logger = require('../../lib/logger');\r
18 const utils = require('../../lib/otf-util');\r
19 const ObjectId = require('mongoose').Types.ObjectId;\r
20 \r
21 class TestSchedule {\r
22         constructor (testInstanceId, testInstanceStartDate, testInstanceExecFreqInSeconds, testInstanceEndDate,\r
23                      async, asyncTopic, asyncMode, executorId) {\r
24                 this.testInstanceId = testInstanceId;\r
25                 this.testInstanceStartDate = testInstanceStartDate;\r
26                 this.testInstanceExecFreqInSeconds = testInstanceExecFreqInSeconds;\r
27                 this.testInstanceEndDate = testInstanceEndDate;\r
28                 this.async = async;\r
29                 this.asyncTopic = asyncTopic;\r
30                 this.asyncMode = asyncMode;\r
31                 this.executorId = executorId;\r
32         }\r
33 \r
34         get testInstanceId () {\r
35                 return this._testInstanceId;\r
36         }\r
37 \r
38         set testInstanceId (value) {\r
39                 if (!value) {\r
40                         throw 'testInstanceId is required.';\r
41                 }\r
42 \r
43                 if (!utils.isValidObjectId(value)) {\r
44                         throw 'testInstanceId must be a valid ObjectId';\r
45                 }\r
46 \r
47                 this._testInstanceId = new ObjectId(value);\r
48         }\r
49 \r
50         get testInstanceStartDate () {\r
51                 return this._testInstanceStartDate;\r
52         }\r
53 \r
54         set testInstanceStartDate (value) {\r
55                 // Accepts type Date, and the "now" keyword recognized by human interval (integrated with Agenda)\r
56                 if (value !== 'now') {\r
57                         let parsedDate = Date.parse(value);\r
58 \r
59                         if (isNaN((parsedDate))) {\r
60                                 throw 'testInstanceStartDate must be a valid date, or must be ' / 'now' / '.';\r
61                         }\r
62                 }\r
63 \r
64                 this._testInstanceStartDate = value;\r
65         }\r
66 \r
67         get testInstanceExecFreqInSeconds () {\r
68                 return this._testInstanceExecFreqInSeconds;\r
69         }\r
70 \r
71         set testInstanceExecFreqInSeconds (value) {\r
72                 if (value) {\r
73                         if (typeof value !== 'number') {\r
74                                 throw 'testInstanceExecFreqInSeconds must be a number.';\r
75                         }\r
76 \r
77                         if (value < 30) {\r
78                                 throw 'testInstanceExecFreqInSeconds must be greater than or equal to 30.';\r
79                         }\r
80                 }\r
81 \r
82                 this._testInstanceExecFreqInSeconds = value;\r
83         }\r
84 \r
85         get testInstanceEndDate () {\r
86                 return this._testInstanceEndDate;\r
87         }\r
88 \r
89         set testInstanceEndDate (value) {\r
90                 // Allow a null end date\r
91                 if (value) {\r
92                         let parsedDate = Date.parse(value);\r
93 \r
94                         if (isNaN((parsedDate))) {\r
95                                 throw 'testInstanceEndDate must be a valid date.';\r
96                         }\r
97                 }\r
98 \r
99                 this._testInstanceEndDate = value;\r
100         }\r
101 \r
102         get async () {\r
103                 return this._async;\r
104         }\r
105 \r
106         set async (value) {\r
107                 this._async = value;\r
108         }\r
109 \r
110         get asyncTopic () {\r
111                 return this._asynTopic;\r
112         }\r
113 \r
114         set asyncTopic (value) {\r
115                 this._asynTopic = value;\r
116         }\r
117 \r
118         get asyncMode () {\r
119                 return this._asyncMode;\r
120         }\r
121 \r
122         set asyncMode (value) {\r
123                 this._asyncMode = value;\r
124         }\r
125 \r
126         get executorId () {\r
127                 return this._executorId;\r
128         }\r
129 \r
130         set executorId (value) {\r
131                 if (!value) {\r
132                         throw 'executorId is required.';\r
133                 }\r
134 \r
135                 if (!utils.isValidObjectId(value)) {\r
136                         throw 'executorId must be a valid ObjectId.';\r
137                 }\r
138 \r
139                 this._executorId = new ObjectId(value);\r
140         }\r
141 \r
142         print () {\r
143                 logger.debug(\r
144                         'testInstanceId: ' + this._testInstanceId + '\n' +\r
145                         'testInstanceStartDate: ' + this._testInstanceStartDate + '\n' +\r
146                         'testInstanceExecFreqInSeconds: ' + this._testInstanceExecFreqInSeconds + '\n' +\r
147                         'testInstanceStartDate: ' + this._testInstanceStartDate + '\n' +\r
148                         'async: ' + this._async + '\n' +\r
149                         'asnycTopic: ' + this._asyncTopic + '\n' +\r
150                         'executorId: ' + this._executorId);\r
151         }\r
152 }\r
153 \r
154 module.exports = TestSchedule;\r