blob: a0b449c000494bb4bf512a039d75a6d7a3e1893c [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';
export default Ember.Object.extend({
supportedVersions : new Map(),
defaultVersions : new Map(),
actionVersions: new Map(),
currentActionVersion:new Map(),
workflowVersions: ["0.5","0.4.5","0.4","0.3","0.2.5","0.2","0.1"],
bundleVersions: ["0.2","0.1"],
coordinatorVersions: ["0.5", "0.4","0.3", "0.2","0.1"],
actionSchemas:{
"hive":["0.6","0.5","0.4","0.3","0.2","0.1"],
"hive2":["0.2","0.1"],
"sqoop":["0.4","0.3","0.2","0.1"],
"shell":["0.3","0.2","0.1"],
"spark":["0.2","0.1"],
"distcp":["0.2","0.1"],
"email":["0.2","0.1"]
},
init(){
if(this.supportedVersions.size === 0 && !this.useDefaultSettings){
this.parseWorkflowSchemaConfig();
this.parseCoordSchemaConfig();
this.parseBundleSchemaConfig();
this.initializeDefaultVersions();
}else if(this.supportedVersions.size === 0 && this.useDefaultSettings){
this.loadDefaultSettings()
this.initializeDefaultVersions();
}
},
loadDefaultSettings(){
this.supportedVersions.set('workflow', []);
this.supportedVersions.set('coordinator', []);
this.supportedVersions.set('bundle', []);
this.workflowVersions.forEach((value)=>{
this.supportedVersions.get('workflow').pushObject(value);
}, this);
this.coordinatorVersions.forEach((value)=>{
this.supportedVersions.get('coordinator').pushObject(value);
}, this);
this.bundleVersions.forEach((value)=>{
this.supportedVersions.get('bundle').pushObject(value);
}, this);
Object.keys(this.actionSchemas).forEach((key)=>{
this.supportedVersions.set(key , this.actionSchemas[key]);
}, this);
},
getSupportedVersions(type){
return this.supportedVersions.get(type);
},
getDefaultVersion(type){
return this.defaultVersions.get(type);
},
setDefaultVersion(type, version){
this.defaultVersions.set(type, version);
},
restoreDefaultVersionSettings(){
this.initializeDefaultVersions();
},
initializeDefaultVersions(){
this.supportedVersions.forEach((value, key) =>{
var max = Math.max.apply(null,value);
if(isNaN(max)){
max = value.reduce((a, b) => a > b?a:b);
}
this.defaultVersions.set(key, String(max));
}, this);
},
parseWorkflowSchemaConfig() {
this.workflowVersions = [];
var wfSchemaVersions = this.adminConfig["oozie.service.SchemaService.wf.schemas"].trim().split(",");
wfSchemaVersions = wfSchemaVersions.map(Function.prototype.call, String.prototype.trim).sort();
wfSchemaVersions.forEach(function(wfSchemaVersion) {
var wfSchema = wfSchemaVersion.split("-");
var wfSchemaName = wfSchema[0];
var wfSchemaType = wfSchema[1];
var wfSchemaVersionNumber = wfSchema[2].replace(".xsd", "");
if (wfSchemaType === "action") {
if(this.supportedVersions.get(wfSchemaName)){
this.supportedVersions.get(wfSchemaName).pushObject(wfSchemaVersionNumber);
}else{
this.supportedVersions.set(wfSchemaName, [wfSchemaVersionNumber]);
}
} else if (wfSchemaType === "workflow") {
if(this.supportedVersions.get(wfSchemaType)){
this.supportedVersions.get(wfSchemaType).pushObject(wfSchemaVersionNumber);
}else{
this.supportedVersions.set(wfSchemaType, [wfSchemaVersionNumber]);
}
}
}.bind(this));
},
parseCoordSchemaConfig() {
var coordSchemaVersions = this.adminConfig["oozie.service.SchemaService.coord.schemas"].trim().split(",");
coordSchemaVersions = coordSchemaVersions.map(Function.prototype.call, String.prototype.trim).sort();
coordSchemaVersions.forEach(function(coordSchemaVersion) {
var coordSchema = coordSchemaVersion.split("-");
var coordSchemaType = coordSchema[1];
var coordSchemaVersionNumber = coordSchema[2].replace(".xsd", "");
if (coordSchemaType === "coordinator") {
if(this.supportedVersions.get('coordinator')){
this.supportedVersions.get('coordinator').pushObject(coordSchemaVersionNumber);
}else{
this.supportedVersions.set('coordinator', [coordSchemaVersionNumber]);
}
}
}.bind(this));
},
parseBundleSchemaConfig() {
this.bundleVersions = [];
var bundleSchemaVersions = this.adminConfig["oozie.service.SchemaService.bundle.schemas"].trim().split(",");
bundleSchemaVersions = bundleSchemaVersions.map(Function.prototype.call, String.prototype.trim).sort();
bundleSchemaVersions.forEach(function(bundleSchemaVersion) {
var bundleSchema = bundleSchemaVersion.split("-");
var bundleSchemaType = bundleSchema[1];
var bundleSchemaVersionNumber = bundleSchema[2].replace(".xsd", "");
if (bundleSchemaType === "bundle") {
if(this.supportedVersions.get('bundle')){
this.supportedVersions.get('bundle').pushObject(bundleSchemaVersionNumber);
}else{
this.supportedVersions.set('bundle', [bundleSchemaVersionNumber]);
}
}
}.bind(this));
},
setDefaultActionVersions(){
var self=this;
Object.keys(this.actionSchemaMap).forEach(function(key) {
if (!self.actionVersions.get(key)){
self.actionVersions.set(key,self.actionSchemaMap[key]);
self.currentActionVersion.set(key,self.actionSchemaMap[key][0]);
}
});
}
});