You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2018/01/25 22:09:37 UTC
[airavata-django-portal] 04/06: AIRAVATA-2615 Implementing
ExperimentState as an enum
This is an automated email from the ASF dual-hosted git repository.
machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git
commit 73b380cd3b3b420e43124e0cd1939d32ecc09c94
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Thu Jan 25 10:57:01 2018 -0500
AIRAVATA-2615 Implementing ExperimentState as an enum
---
.../django_airavata_api/js/models/BaseEnum.js | 25 ++++++++++++++++++++++
.../django_airavata_api/js/models/BaseModel.js | 10 ++++++++-
.../js/models/ExperimentState.js | 15 +++++++++++++
.../js/models/ExperimentStatus.js | 23 +++++---------------
.../js/models/FullExperiment.js | 2 +-
5 files changed, 55 insertions(+), 20 deletions(-)
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/BaseEnum.js b/django_airavata/apps/api/static/django_airavata_api/js/models/BaseEnum.js
new file mode 100644
index 0000000..bb11276
--- /dev/null
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/BaseEnum.js
@@ -0,0 +1,25 @@
+
+export default class BaseEnum {
+ constructor(name, value) {
+ this.name = name;
+ this.value = value;
+ // immutable
+ Object.freeze(this);
+ }
+ toJSON() {
+ return this.value;
+ }
+ static byName(name) {
+ return this.values.find(x => x.name === name);
+ }
+ static byValue(value) {
+ return this.values.find(x => x.value === value);
+ }
+ // This must be called to initialize static methods on the Enum subclass
+ static init(names) {
+ const enums = names.map((name, index) => new this(name, index));
+ Object.freeze(enums);
+ Object.defineProperty(this, 'values', {get: function() { return enums;}});
+ this.values.forEach(v => this[v.name] = v);
+ }
+}
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/BaseModel.js b/django_airavata/apps/api/static/django_airavata_api/js/models/BaseModel.js
index 49f773b..8b5679f 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/BaseModel.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/BaseModel.js
@@ -1,3 +1,4 @@
+import BaseEnum from './BaseEnum'
export default class BaseModel {
@@ -51,7 +52,14 @@ export default class BaseModel {
}
convertModelField(modelClass, fieldValue, fieldDefault) {
- return typeof fieldValue !== 'undefined' ? new modelClass(fieldValue) : fieldDefault;
+ if (typeof fieldValue !== 'undefined') {
+ if (modelClass.prototype instanceof BaseEnum) {
+ return modelClass.byValue(fieldValue);
+ } else {
+ return new modelClass(fieldValue);
+ }
+ }
+ return fieldDefault;
}
getDefaultValue(fieldDefault) {
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/ExperimentState.js b/django_airavata/apps/api/static/django_airavata_api/js/models/ExperimentState.js
new file mode 100644
index 0000000..ab3a626
--- /dev/null
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/ExperimentState.js
@@ -0,0 +1,15 @@
+import BaseEnum from './BaseEnum'
+
+export default class ExperimentState extends BaseEnum {
+}
+ExperimentState.init([
+ 'CREATED',
+ 'VALIDATED',
+ 'SCHEDULED',
+ 'LAUNCHED',
+ 'EXECUTING',
+ 'CANCELING',
+ 'CANCELED',
+ 'COMPLETED',
+ 'FAILED'
+]);
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/ExperimentStatus.js b/django_airavata/apps/api/static/django_airavata_api/js/models/ExperimentStatus.js
index 2b5efc7..2660cf3 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/ExperimentStatus.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/ExperimentStatus.js
@@ -1,8 +1,11 @@
import BaseModel from './BaseModel';
+import ExperimentState from './ExperimentState';
const FIELDS = [
- // TODO: state is an enum field
- 'state',
+ {
+ name: 'state',
+ type: ExperimentState,
+ },
{
name: 'timeOfStateChange',
type: 'date',
@@ -10,24 +13,8 @@ const FIELDS = [
'reason',
];
-const STATE_NAMES = {
- 0: "CREATED",
- 1: "VALIDATED",
- 2: "SCHEDULED",
- 3: "LAUNCHED",
- 4: "EXECUTING",
- 5: "CANCELING",
- 6: "CANCELED",
- 7: "COMPLETED",
- 8: "FAILED",
-}
-
export default class ExperimentStatus extends BaseModel {
constructor(data = {}) {
super(FIELDS, data);
}
-
- get stateName() {
- return STATE_NAMES[this.state];
- }
}
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/FullExperiment.js b/django_airavata/apps/api/static/django_airavata_api/js/models/FullExperiment.js
index 34e8d65..6059b2a 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/FullExperiment.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/FullExperiment.js
@@ -59,6 +59,6 @@ export default class FullExperiment extends BaseModel {
}
get experimentStatusName() {
- return this.experimentStatus ? this.experimentStatus.stateName : null;
+ return this.experimentStatus ? this.experimentStatus.state.name : null;
}
}
--
To stop receiving notification emails like this one, please contact
machristie@apache.org.