From 043839bd96b0c1e43af24bf0d026b23eb0a8839a Mon Sep 17 00:00:00 2001
From: Ramesh Kumar <ramesh.p@matriotsolutions.com>
Date: Fri, 25 Mar 2022 19:14:52 +0530
Subject: [PATCH] TMSS-1656: Fixed issue in constraints section and updated
 test script mock data

---
 .../tmss_webapp/prepareTemplateSchemas.js     | 50 ++++++++---
 .../tmss_webapp/prepareTemplateSchemas_dev.js | 85 +++++++++++++------
 .../Scheduling/Scheduling.Constraints.js      |  2 +-
 .../src/routes/Scheduling/create.js           |  4 +-
 4 files changed, 99 insertions(+), 42 deletions(-)

diff --git a/SAS/TMSS/frontend/tmss_webapp/prepareTemplateSchemas.js b/SAS/TMSS/frontend/tmss_webapp/prepareTemplateSchemas.js
index aa78fb1d563..26cc8423c8e 100644
--- a/SAS/TMSS/frontend/tmss_webapp/prepareTemplateSchemas.js
+++ b/SAS/TMSS/frontend/tmss_webapp/prepareTemplateSchemas.js
@@ -137,18 +137,21 @@ getTemplateFiles('../../../../install/opt/lofar/share/tmss/schemas').then(async(
             console.log("... Created observing_strategy_templates.json");
         });
 
-		getTemplateFiles("build/schemas/task_template").then(async(strategyFiles) => {
-			let definitionTemplates = await getTemplateFiles("build/schemas/common_schema_template");
-			console.log(definitionTemplates);
-			let definitions = {}, definitionFiles = [];
-			for (const definitionTemplate of definitionTemplates) {
-				const data = fs.readFileSync(definitionTemplate, 'utf8');
-                let definitionSchema = JSON.parse(data);
-				if (definitionSchema.schema && definitionSchema.schema.definitions) {
-					definitions = {...definitions, ...definitionSchema.schema.definitions};
-					definitionFiles.push(definitionTemplate.substring(definitionTemplate.lastIndexOf("/")+1));
-				}
+		console.log("Getting definitions from common_schema_templates....");
+		let definitionTemplates = await getTemplateFiles("build/schemas/common_schema_template");
+		console.log(definitionTemplates);
+		let definitions = {}, definitionFiles = [];
+		for (const definitionTemplate of definitionTemplates) {
+			const data = fs.readFileSync(definitionTemplate, 'utf8');
+			let definitionSchema = JSON.parse(data);
+			if (definitionSchema.schema && definitionSchema.schema.definitions) {
+				definitions = {...definitions, ...definitionSchema.schema.definitions};
+				definitionFiles.push(definitionTemplate.substring(definitionTemplate.lastIndexOf("/")+1));
 			}
+		}
+		console.log("... got definitions");
+			
+		getTemplateFiles("build/schemas/task_template").then(async(strategyFiles) => {
 			let templates = [];
             let index = 1;
             console.log("Getting task_templates");
@@ -183,6 +186,31 @@ getTemplateFiles('../../../../install/opt/lofar/share/tmss/schemas').then(async(
             fs.writeFileSync("src/__mocks__/task_templates.json", JSON.stringify({templates: JSON.parse(templates)}, null, 4));
             console.log("... Created task_templates.json");
         });
+
+		getTemplateFiles("build/schemas/scheduling_constraints_template").then(async(strategyFiles) => {
+			let index = 0
+			const constraintDefinitionKeys = [ "distance_on_sky", "elevation", "timedelta", "timestamp", "timewindow"];
+			for (const file of strategyFiles) {
+				const data = fs.readFileSync(file, 'utf8');
+				let constraintTemplate = JSON.parse(data);
+				constraintTemplate.id = index;
+				constraintTemplate.ref_resolved_schema = _.cloneDeep(constraintTemplate.schema);
+				for (const defKey of constraintDefinitionKeys) {
+					if (definitions[defKey]) {
+						constraintTemplate.ref_resolved_schema.definitions[defKey] = definitions[defKey];
+					}
+				}
+				index++;
+				constraintTemplate = JSON.stringify(constraintTemplate);
+				constraintTemplate = constraintTemplate.replace(/http:\/\/localhost:3000\/schemas\/common_schema_template\//g, "");
+				for (const defFile of definitionFiles) {
+					const fileRegex = new RegExp(defFile, 'g');
+					constraintTemplate = constraintTemplate.replace(fileRegex, "");
+				}
+				fs.writeFileSync(file, JSON.stringify(JSON.parse(constraintTemplate), null, 4));
+				console.log("... added ref_resolved_schema to constraints_template");
+			}
+		});
 		
 	});
 });
diff --git a/SAS/TMSS/frontend/tmss_webapp/prepareTemplateSchemas_dev.js b/SAS/TMSS/frontend/tmss_webapp/prepareTemplateSchemas_dev.js
index 2113630586c..53dedde1a0d 100644
--- a/SAS/TMSS/frontend/tmss_webapp/prepareTemplateSchemas_dev.js
+++ b/SAS/TMSS/frontend/tmss_webapp/prepareTemplateSchemas_dev.js
@@ -131,41 +131,44 @@ getTemplateFiles('../../backend/src/tmss/tmssapp/schemas').then(async(backEndFil
 			console.log("... Created observing_strategy_templates.json");
 		});
 		
-		getTemplateFiles("build/schemas/task_template").then(async(strategyFiles) => {
-			let definitionTemplates = await getTemplateFiles("build/schemas/common_schema_template");
-			console.log(definitionTemplates);
-			let definitions = {}, definitionFiles = [];
-			for (const definitionTemplate of definitionTemplates) {
-				const data = fs.readFileSync(definitionTemplate, 'utf8');
-                let definitionSchema = JSON.parse(data);
-				if (definitionSchema.schema && definitionSchema.schema.definitions) {
-					definitions = {...definitions, ...definitionSchema.schema.definitions};
-					definitionFiles.push(definitionTemplate.substring(definitionTemplate.lastIndexOf("\\")+1));
-				}
+		console.log("Getting definitions from common_schema_templates....");
+		let definitionTemplates = await getTemplateFiles("build/schemas/common_schema_template");
+		console.log(definitionTemplates);
+		let definitions = {}, definitionFiles = [];
+		for (const definitionTemplate of definitionTemplates) {
+			const data = fs.readFileSync(definitionTemplate, 'utf8');
+			let definitionSchema = JSON.parse(data);
+			if (definitionSchema.schema && definitionSchema.schema.definitions) {
+				definitions = {...definitions, ...definitionSchema.schema.definitions};
+				definitionFiles.push(definitionTemplate.substring(definitionTemplate.lastIndexOf("\\")+1));
 			}
+		}
+		console.log("... got definitions");
+
+		getTemplateFiles("build/schemas/task_template").then(async(strategyFiles) => {
 			let templates = [];
             let index = 1;
             console.log("Getting task_templates");
             for (const file of strategyFiles) {
                 const data = fs.readFileSync(file, 'utf8');
-                let strategyTemplate = JSON.parse(data);
-                strategyTemplate.id = index;
-				strategyTemplate.ref_resolved_schema = {definitions: definitions, properties: strategyTemplate.schema["properties"]};
-                if (strategyTemplate.name.indexOf("observation") >= 0) {
-					strategyTemplate.type =  "http://localhost:3000/api/task_type/observation";
-					strategyTemplate.type_value = "observation";
-				}	else if (strategyTemplate.name.indexOf("pipeline") >= 0) {
-					strategyTemplate.type =  "http://localhost:3000/api/task_type/pipeline";
-					strategyTemplate.type_value = "pipeline";
-				}	else if (strategyTemplate.name.indexOf("cleanup") >= 0) {
-					strategyTemplate.type =  "http://localhost:3000/api/task_type/cleanup";
-					strategyTemplate.type_value = "cleanup";
-				}	else if (strategyTemplate.name.indexOf("ingest") >= 0) {
-					strategyTemplate.type =  "http://localhost:3000/api/task_type/ingest";
-					strategyTemplate.type_value = "ingest";
+                let taskTemplate = JSON.parse(data);
+                taskTemplate.id = index;
+				taskTemplate.ref_resolved_schema = {definitions: definitions, properties: taskTemplate.schema["properties"]};
+                if (taskTemplate.name.indexOf("observation") >= 0) {
+					taskTemplate.type =  "http://localhost:3000/api/task_type/observation";
+					taskTemplate.type_value = "observation";
+				}	else if (taskTemplate.name.indexOf("pipeline") >= 0) {
+					taskTemplate.type =  "http://localhost:3000/api/task_type/pipeline";
+					taskTemplate.type_value = "pipeline";
+				}	else if (taskTemplate.name.indexOf("cleanup") >= 0) {
+					taskTemplate.type =  "http://localhost:3000/api/task_type/cleanup";
+					taskTemplate.type_value = "cleanup";
+				}	else if (taskTemplate.name.indexOf("ingest") >= 0) {
+					taskTemplate.type =  "http://localhost:3000/api/task_type/ingest";
+					taskTemplate.type_value = "ingest";
 				}
                 index++;
-                templates.push(strategyTemplate);
+                templates.push(taskTemplate);
             }
 			templates = JSON.stringify(templates);
 			templates = templates.replace(/http:\/\/localhost:3000\/schemas\/common_schema_template\//g, "");
@@ -177,7 +180,33 @@ getTemplateFiles('../../backend/src/tmss/tmssapp/schemas').then(async(backEndFil
             fs.writeFileSync("src/__mocks__/task_templates.json", JSON.stringify({templates: JSON.parse(templates)}, null, 4));
             console.log("... Created task_templates.json");
         });
+
+		getTemplateFiles("build/schemas/scheduling_constraints_template").then(async(strategyFiles) => {
+			let index = 0
+			const constraintDefinitionKeys = [ "distance_on_sky", "elevation", "timedelta", "timestamp", "timewindow"];
+			for (const file of strategyFiles) {
+				const data = fs.readFileSync(file, 'utf8');
+				let constraintTemplate = JSON.parse(data);
+				constraintTemplate.id = index;
+				constraintTemplate.ref_resolved_schema = _.cloneDeep(constraintTemplate.schema);
+				for (const defKey of constraintDefinitionKeys) {
+					if (definitions[defKey]) {
+						constraintTemplate.ref_resolved_schema.definitions[defKey] = definitions[defKey];
+					}
+				}
+				index++;
+				constraintTemplate = JSON.stringify(constraintTemplate);
+				constraintTemplate = constraintTemplate.replace(/http:\/\/localhost:3000\/schemas\/common_schema_template\//g, "");
+				for (const defFile of definitionFiles) {
+					const fileRegex = new RegExp(defFile, 'g');
+					constraintTemplate = constraintTemplate.replace(fileRegex, "");
+				}
+				fs.writeFileSync(file, JSON.stringify(JSON.parse(constraintTemplate), null, 4));
+				console.log("... added ref_resolved_schema to constraints_template");
+			}
+		});
+
 	});
-	
+
 });
 
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/Scheduling.Constraints.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/Scheduling.Constraints.js
index 11685bdba27..06efeadb2f2 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/Scheduling.Constraints.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/Scheduling.Constraints.js
@@ -208,7 +208,7 @@ export default (props) => {
         jeditor = React.createElement(Jeditor, {
                         id: "constraint_editor",
                         title: "Scheduling Constraints specification",
-                        schema: constraintSchema.schema,
+                        schema: constraintSchema.ref_resolved_schema,
                         callback: onEditForm,
                         initValue: initialValue,
                         disabled: props.disable,
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js
index 3ebdc3d0b9c..85405edf529 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/create.js
@@ -523,8 +523,8 @@ export class SchedulingUnitCreate extends Component {
     async constraintStrategy(e){
         let schedulingUnit = { ...this.state.schedulingUnit };
         schedulingUnit.scheduling_constraints_template_id = e?e.id:'';
-        this.constraintTemplates[0].schema.properties.sky.properties.transit_offset.properties.from.default = UnitConversion.getSecsToHHmmssWithSign(this.constraintTemplates[0].schema.properties.sky.properties.transit_offset.properties.from.default);
-        this.constraintTemplates[0].schema.properties.sky.properties.transit_offset.properties.to.default = UnitConversion.getSecsToHHmmssWithSign(this.constraintTemplates[0].schema.properties.sky.properties.transit_offset.properties.to.default);
+        this.constraintTemplates[0].ref_resolved_schema.properties.sky.properties.transit_offset.properties.from.default = UnitConversion.getSecsToHHmmssWithSign(this.constraintTemplates[0].ref_resolved_schema.properties.sky.properties.transit_offset.properties.from.default);
+        this.constraintTemplates[0].ref_resolved_schema.properties.sky.properties.transit_offset.properties.to.default = UnitConversion.getSecsToHHmmssWithSign(this.constraintTemplates[0].ref_resolved_schema.properties.sky.properties.transit_offset.properties.to.default);
         this.setState({ constraintSchema: this.constraintTemplates[0], schedulingUnit});
      }
    
-- 
GitLab