blob: 2b45c9e7590243fa29069508df4e62d33c2c578b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Ember from 'ember';
import CommonUtils from "../utils/common-utils";
import {SlaInfo} from '../domain/sla-info';
var MappingMixin= Ember.Mixin.create({
handleMapping(nodeDomain,nodeObj,mappings,nodeName){
var self=this;
mappings.forEach(function(mapping){
if (mapping.mandatory){
if (!(nodeDomain[mapping.domain] || mapping.customHandler)){
var msgForVal=mapping.domain;
if (mapping.displayName){
msgForVal=mapping.displayName;
}
self.getContext().addError({node:{name:nodeName}, message:"Mandatory element missing for "+msgForVal});
}
}
if (nodeDomain && mapping.domain && nodeDomain[mapping.domain]){
if (!mapping.occurs){
mapping.occurs="once";
}
var objs=[];
if (mapping.occurs==="once"){
objs.push(mapping.ignoreValue?"":nodeDomain[mapping.domain]);
}else{
if (mapping.domainProperty){
var tempObjs=[];
nodeDomain[mapping.domain].forEach(function(value){
tempObjs.push(value[mapping.domainProperty]);
});
objs=tempObjs;
}else{
objs=mapping.ignoreValue?"":nodeDomain[mapping.domain];
}
}
if (!Ember.isArray(objs) || Ember.isArray(objs)&& objs.length>0){
nodeObj[mapping.xml]=objs;
}
}else if (mapping.customHandler){
var result=mapping.customHandler.hanldeGeneration(nodeDomain,nodeObj);
if (result){
nodeObj[mapping.xml]=result;
}
}
});
},
handleImportMapping(actionNode,json,mappings){
var domain={
unsupportedProperties : {}
};
if (json._xmlns){
var version=CommonUtils.extractSchemaVersion(json._xmlns);
//this.schemaVersions.setActionVersion(actionNode.actionType,version);
}
actionNode.set("domain",domain);
Object.keys(json).forEach((propKey)=>{
if(!mappings.findBy('xml', propKey) && propKey !=='_xmlns' && propKey !=='@id' && propKey !== '__jsogObjectId'){
domain.unsupportedProperties[propKey] = json[propKey];
domain[propKey] = json[propKey];
}
});
mappings.forEach(function(mapping){
if (!mapping.occurs) {
mapping.occurs = "once";
}
if (mapping.domain && (json[mapping.xml] || json[mapping.xml]==="")){
if (mapping.occurs==="once"){
if (mapping.ignoreValue){
domain[mapping.domain]=json[mapping.xml]!==null || json[mapping.xml]!==undefined;
}else{
domain[mapping.domain]=json[mapping.xml];
}
}else{
if (!domain[mapping.domain]){
domain[mapping.domain]=Ember.A([]);
}
if (Ember.isArray(json[mapping.xml])){
if (mapping.domainProperty){
json[mapping.xml].forEach(function(mappingVal){
var obj={};
obj[mapping.domainProperty]= mappingVal;
domain[mapping.domain].pushObject(obj);
});
}else{
domain[mapping.domain].pushObjects(json[mapping.xml]);
}
}else{
if(mapping.domainProperty){
var obj = {};
obj[mapping.domainProperty]= json[mapping.xml];
domain[mapping.domain].pushObject(obj);
}else{
domain[mapping.domain].pushObject(json[mapping.xml]);
}
}
}
}else if (mapping.customHandler){
if (json[mapping.xml]){
mapping.customHandler.handleImport(domain,json[mapping.xml]);
}
}
});
}
});
var ConfigurationMapper= Ember.Object.extend({
/* jshint unused:vars */
hanldeGeneration(node,nodeObj){
if (!node || !node.configuration || !node.configuration.property){
return;
}
var props=[];
node.configuration.property.forEach(function(config){
props.push({name:config.name,value:config.value});
});
if (props.length>0){
var configuration={"property":props};
return configuration;
}
},
handleImport(domain,nodeObj){
if (!nodeObj.property){
return;
}
var configs=Ember.A([]);
domain.configuration={property:configs};
if (Ember.isArray(nodeObj.property)){
nodeObj.property.forEach(function(prop){
var propObj=Ember.Object.create({
name: prop.name,
value: prop.value
});
configs.pushObject(propObj);
});
}else{
var propObj=Ember.Object.create({
name: nodeObj.property.name,
value: nodeObj.property.value
});
configs.pushObject(propObj);
}
}
});
var PrepareMapper= Ember.Object.extend({
hanldeGeneration(node,nodeObj){
if (!node){
return;
}
if (node.prepare && node.prepare.length>0){
node.prepare.sort(function(a,b){
if (a.type==="delete"){
return -1;
}else{
return 1;
}
});
var prepareObjs={};
nodeObj["prepare"]=prepareObjs;
node.prepare.forEach(function(prep){
if (!prepareObjs[prep.type]){
prepareObjs[prep.type]=[];
}
prepareObjs[prep.type].push({"_path":prep.path});
});
}
},
handleImport(domain,nodeObj){
domain.prepare=[];
if (nodeObj.delete){
this.handlePrepActionInternal(domain.prepare,nodeObj.delete,"delete");
}
if (nodeObj.mkdir){
this.handlePrepActionInternal(domain.prepare,nodeObj.mkdir,"mkdir");
}
},
handlePrepActionInternal(prepareDomain,actionObjs,type){
if (Ember.isArray(actionObjs)){
actionObjs.forEach(function(actionObj){
var obj=Ember.Object.create({
path: actionObj._path,
type: type
});
prepareDomain.push(obj);
});
}else{
var obj=Ember.Object.create({
path: actionObjs._path,
type: type
});
prepareDomain.push(obj);
}
}
});
var SLAMapper= Ember.Object.extend({
hanldeGeneration(sla,nodeObj){
if (sla){
var slaInfo=nodeObj["info"]={};
var slaPrefix="sla";
slaInfo["__prefix"]=slaPrefix;
if (sla.nominalTime){
slaInfo[slaPrefix+":"+"nominal-time"]=sla.nominalTime.value;
}
if (sla.shouldStart && sla.shouldStart.time){
slaInfo[slaPrefix+":"+"should-start"]="${"+sla.shouldStart.time+ "*"+sla.shouldStart.unit+"}";
}
if (sla.shouldEnd && sla.shouldEnd.time){
slaInfo[slaPrefix+":"+"should-end"]="${"+sla.shouldEnd.time+ "*"+sla.shouldEnd.unit+"}";
}
if (sla.maxDuration && sla.maxDuration.time){
slaInfo[slaPrefix+":"+"max-duration"]="${"+sla.maxDuration.time+ "*"+sla.maxDuration.unit+"}";
}
if (sla.alertEvents){
slaInfo[slaPrefix+":"+"alert-events"]=sla.alertEvents;
}
if (sla.alertContact){
slaInfo[slaPrefix+":"+"alert-contact"]=sla.alertContact;
}
if(sla.notificationMessage){
slaInfo[slaPrefix+":"+"notification-msg"]=sla.notificationMessage;
}
if(sla.upstreamApps){
slaInfo[slaPrefix+":"+"upstream-apps"]=sla.upstreamApps;
}
}
return nodeObj;
},
handleImport(domain,infoJson,key){
var sla=domain[key]=SlaInfo.create({});
if (infoJson["nominal-time"] && infoJson["nominal-time"].__text){
sla.nominalTime= this.extractDateField(infoJson["nominal-time"].__text);
}
if (infoJson["alert-contact"]&& infoJson["alert-contact"].__text){
sla.alertContact=infoJson["alert-contact"].__text;
}
if (infoJson["alert-events"] && infoJson["alert-events"].__text){
sla.alertEvents=infoJson["alert-events"].__text;
}
if (infoJson["notification-msg"] && infoJson["notification-msg"].__text){
sla.notificationMessage=infoJson["notification-msg"].__text;
}
if (infoJson["upstream-apps"] && infoJson["upstream-apps"].__text){
sla.upstreamApps=infoJson["upstream-apps"].__text;
}
this.processTimePeriods(sla,infoJson,"should-start","shouldStart");
this.processTimePeriods(sla,infoJson,"should-end","shouldEnd");
this.processTimePeriods(sla,infoJson,"max-duration","maxDuration");
},
processTimePeriods(sla,infoJson,key,domainKey){
if (infoJson[key]){
var timeParts=this.parseSlaTime(infoJson[key].__text,key);
sla[domainKey].time=timeParts[0];
sla[domainKey].unit=timeParts[1];
}
},
parseSlaTime(str,key){
var timePeriod= str.substring(str.indexOf("{")+1,str.indexOf("}"));
return timePeriod.split("*");
},
extractDateField(value){
var dateField = {};
var date = new Date(value);
dateField.value = value;
if(isNaN(date.getTime())){
dateField.displayValue = value;
dateField.type = 'expr';
}else{
dateField.type = 'date';
var utcDate = new Date(date.getTime() + date.getTimezoneOffset()*60*1000);
dateField.displayValue = moment(utcDate).format("MM/DD/YYYY hh:mm A");
}
return dateField;
},
});
export {MappingMixin,ConfigurationMapper,PrepareMapper,SLAMapper};