blob: 70581bf3792a93652e83196cd706b9691a3a2e7c [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 * as nodeHandler from '../domain/node-handler';
import {SLAMapper} from "../domain/mapping-utils";
import {ActionTypeResolver} from "../domain/action-type-resolver";
import {MappingMixin,ConfigurationMapper} from "../domain/mapping-utils";
var WorkflowXmlMapper= Ember.Object.extend({
nodeHandlerMap:null,
globalConfigHandler:null,
actionTypeResolver:null,
slaMapper: SLAMapper.create({}),
schemaVersions:null,
init: function() {
this.actionTypeResolver=ActionTypeResolver.create({schemaVersions:this.schemaVersions});
this.set("globalConfigHandler",GlobalConfigHandler.create({}));
this.set("slaMapper",SLAMapper.create({}));
this.nodeHandlerMap=new Map();
this.nodeHandlerMap.set("start",nodeHandler.StartNodeHandler.create({}));
this.nodeHandlerMap.set("end",nodeHandler.EndNodeHandler.create({}));
this.nodeHandlerMap.set("action",nodeHandler.ActionNodeHandler.create({actionTypeResolver:this.actionTypeResolver}));
this.nodeHandlerMap.set("decision",nodeHandler.DecisionNodeHandler.create({}));
this.nodeHandlerMap.set("fork",nodeHandler.ForkNodeHandler.create({}));
this.nodeHandlerMap.set("join",nodeHandler.JoinNodeHandler.create({}));
this.nodeHandlerMap.set("kill",nodeHandler.KillNodeHandler.create({}));
},
getNodeHandler(type){
return this.nodeHandlerMap.get(type);
},
getGlobalConfigHandler(){
return this.globalConfigHandler;
},
getActionJobHandler(jobType){
return this.actionTypeResolver.getActionJobHandler(jobType);
},
handleSLAMapping(sla,workflowObj){
this.get("slaMapper").hanldeGeneration(sla,workflowObj);
},
handleSLAImport(workflow,infoJson){
this.slaMapper.handleImport(workflow,infoJson,"sla");
},
handleCredentialsGeneration(credentials,workflowObj){
if (credentials && credentials.length>0){
workflowObj["credentials"]={"credential":[]};
credentials.forEach(function(credential){
var credJson={_name:credential.name,_type:credential.type,property:[]};
if (credential.property){
credential.property.forEach(function(prop){
credJson.property.push({"name":prop.name,"value":prop.value});
});
}
workflowObj.credentials.credential.push(credJson);
});
}
},
handleCredentialImport(workflow,credJson){
if (!credJson || !credJson.credential){
return;
}
workflow.credentials.clear();
var credntialsJson=Ember.isArray(credJson.credential)?credJson.credential:[credJson.credential];
credntialsJson.forEach(function(cred){
var credential={
name:cred._name,
type:cred._type,
property:Ember.A([])
};
if (cred.property){
if (!Ember.isArray(cred.property)){
cred.property=[cred.property];
}
cred.property.forEach(function(property){
credential.property.push({"name":property.name,"value":property.value});
});
}
workflow.credentials.push(credential);
});
},
hanldeParametersGeneration(parameters,workflowObj){
if (!parameters || !parameters.configuration){
return;
}
if (parameters.configuration.property.length>0){
workflowObj.parameters={property:[]};
}
parameters.configuration.property.forEach(function(prop){
workflowObj.parameters.property.push({"name":prop.name,"value":prop.value});
});
},
handleParametersImport(workflow,parameters){
if (!parameters|| !parameters.property){
return;
}
workflow.parameters={"configuration":{property:[]}};
parameters.property.forEach(function(prop){
workflow.parameters.configuration.property.push({"name":prop.name,"value":prop.value});
});
}
});
var GlobalConfigHandler=Ember.Object.extend(MappingMixin,{
mapping:null,
configurationMapper:ConfigurationMapper.create({}),
init(){
this.mapping=[
{xml:"job-tracker",domain:"jobTracker"},
{xml:"name-node",domain:"nameNode"},
{xml:"configuration",customHandler:this.configurationMapper}
];
},
handle(domainObject,nodeObj){
if (!domainObject){
return;
}
var globalObj={};
nodeObj["global"]=globalObj;
this.handleMapping(domainObject,globalObj,this.mapping);
}
});
export {WorkflowXmlMapper};