web/js/resources/config.js (724 lines of code) (raw):

/* * 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. */ function Config() { Resource.apply(this, Array.prototype.slice.call(arguments)); this.restype = 'config'; } Config.prototype = new Resource(); var resource = new Config(); var cfgvartimeout = null; var nocfgvarupdates = 1; var newcfgvarid = 15000001; var newsubimageid = 15000001; function addNewResource(title) { dijit.byId('addeditdlg').set('title', title); dijit.byId('addeditbtn').set('label', title); dojo.removeClass('configvariables', 'hidden'); dojo.addClass('editcfgvardiv', 'hidden'); dojo.byId('editresid').value = 0; configSetType(); dijit.byId('type').set('disabled', false); dijit.byId('name').reset(); dijit.byId('owner').reset(); dijit.byId('optionalchk').reset(); dijit.byId('subimageid').reset(); var newdata = { identifier: 'id', label: 'name', items: [] } var newstore = new dojo.data.ItemFileWriteStore({data: newdata}); newstore.comparatorMap = {'name': caselessSort}; subimagegrid.setStore(newstore); dijit.byId('vlanid').reset(); resetCfgVarFields(); dojo.byId('data').value = ''; dojo.byId('addeditdlgerrmsg').innerHTML = ''; var vardata = {identifier: 'id', label: 'name', items: []}; newstore = new dojo.data.ItemFileWriteStore({data: vardata}); var oldstore = configvariablegrid.store; configvariablegrid.setStore(newstore); delete oldstore; dijit.byId('addeditdlg').show(); } function inlineEditResourceCB(data, ioArgs) { if(data.items.status == 'success') { dojo.byId('saveresourcecont').value = data.items.cont; dijit.byId('addeditdlg').set('title', data.items.title); dijit.byId('addeditbtn').set('label', 'Save Changes'); dojo.byId('editresid').value = data.items.resid; dijit.byId('type').set('value', data.items.data.configtypeid); dijit.byId('type').set('disabled', true); configSetType(); dijit.byId('name').set('value', data.items.data.name); dijit.byId('owner').set('value', data.items.data.owner); var vars = data.items.data.variables; if(data.items.data.optional == 0) dijit.byId('optionalchk').set('checked', false); else dijit.byId('optionalchk').set('checked', true); if(data.items.data.configtype == 'Cluster') { nocfgvarupdates = 1; var vardata = {identifier: 'id', label: 'name', items: vars}; var newstore = new dojo.data.ItemFileWriteStore({data: vardata}); newstore.comparatorMap = {'name': caselessSort}; var oldstore = subimagegrid.store; subimagegrid.setStore(newstore); if(subimagegrid.selection.selectedIndex >= 0) subimagegrid.selection.setSelected(subimagegrid.selection.selectedIndex, false); subimagegrid.selection.lastindex = -1; subimagegrid.setQuery({deleted: '0'}); setTimeout(function() {subimagegrid.update();}, 1); delete oldstore; } else if(data.items.data.configtype == 'VLAN') { nocfgvarupdates = 1; dijit.byId('vlanid').set('value', data.items.data.data); } else { nocfgvarupdates = 0; dojo.byId('data').value = data.items.data.data; resetCfgVarFields(); var vardata = {identifier: 'id', label: 'name', items: vars}; var newstore = new dojo.data.ItemFileWriteStore({data: vardata}); var oldstore = configvariablegrid.store; configvariablegrid.setStore(newstore); if(configvariablegrid.selection.selectedIndex >= 0) configvariablegrid.selection.setSelected(configvariablegrid.selection.selectedIndex, false); configvariablegrid.selection.lastindex = -1; setTimeout(function() {configvariablegrid.update();}, 1); delete oldstore; } dijit.byId('addeditdlg').show(); } else if(data.items.status == 'noaccess') { alert('Access denied to edit this item'); } } function saveResource() { if(! updateConfigVariable()) return; var submitbtn = dijit.byId('addeditbtn'); var errobj = dojo.byId('addeditdlgerrmsg'); if(! checkValidatedObj('name', errobj)) return; /*if(! dijit.byId('owner')._hasBeenBlurred && dijit.byId('owner').get('value') == '') { dijit.byId('owner')._hasBeenBlurred = true; dijit.byId('owner').validate(); submitbtn.set('disabled', true); setTimeout(function() { saveResource(); submitbtn.set('disabled', false); }, 1000); return; }*/ if(ownerchecking) { submitbtn.set('disabled', true); setTimeout(function() { saveResource(); submitbtn.set('disabled', false); }, 1000); return; } if(! checkValidatedObj('owner', errobj)) return; if(dojo.byId('editresid').value == 0) var data = {continuation: dojo.byId('addresourcecont').value}; else var data = {continuation: dojo.byId('saveresourcecont').value}; var type = dijit.byId('type').get('displayedValue'); if(! dojo.hasClass('configdatadiv', 'hidden')) { if(dojo.byId('data').value == '') { var typename = dojo.byId('datalabel').innerHTML; errobj.innerHTML = typename + ' cannot be empty'; return; } data['data'] = dojo.byId('data').value; data['configvariables'] = serializeConfigVars(); } if(type == 'Cluster') { data['subimages'] = serializeConfigSubimages(); if(data['subimages'] == '') { errobj.innerHTML = 'No subimages assigned'; return; } } else if(type == 'VLAN') { if(! checkValidatedObj('vlanid', errobj)) return; data['vlanid'] = dijit.byId('vlanid').get('value'); } data['typeid'] = dijit.byId('type').get('value'); data['name'] = dijit.byId('name').get('value'); data['owner'] = dijit.byId('owner').get('value'); if(dijit.byId('optionalchk').checked) data['optional'] = 1; else data['optional'] = 0; submitbtn.set('disabled', true); RPCwrapper(data, saveResourceCB, 1); } function saveResourceCB(data, ioArgs) { if(data.items.status == 'error') { if(data.items.msg == 'cannot be empty') data.items.msg = dojo.byId('datalabel').innerHTML + ' cannot be empty'; dojo.byId('addeditdlgerrmsg').innerHTML = data.items.msg; dijit.byId('addeditbtn').set('disabled', false); return; } else if(data.items.status == 'success') { if(data.items.action == 'add') { resourcegrid.store.newItem(data.items.item); resourcegrid.sort(); } else { resourcegrid.store.fetch({ query: {id: data.items.data.id}, onItem: function(item) { resourcegrid.store.setValue(item, 'name', data.items.data.name); resourcegrid.store.setValue(item, 'owner', data.items.data.owner); resourcegrid.store.setValue(item, 'data', data.items.data.data); resourcegrid.store.setValue(item, 'optional', data.items.data.optional); }, onComplete: function(items, result) { // when call resourcegrid.sort directly, the table contents disappear; not sure why setTimeout(function() {resourcegrid.sort();}, 10); } }); } dijit.byId('type').reset(); dijit.byId('name').reset(); dijit.byId('owner').reset(); dijit.byId('optionalchk').reset(); dijit.byId('subimageid').reset(); dijit.byId('vlanid').reset(); dojo.byId('data').value = ''; dojo.byId('addeditdlgerrmsg').innerHTML = ''; dijit.byId('addeditdlg').hide(); setTimeout(function() {dijit.byId('addeditbtn').set('disabled', false);}, 250); } } // -------------------------------------- function resetCfgVarFields() { dojo.byId('varid').value = ''; dijit.byId('varname').reset(); dijit.byId('varidentifier').reset(); dijit.byId('cfgvartype').reset(); setCfgVarType(1); resetCfgVarTypeValues(); dijit.byId('varrequired').reset(); dijit.byId('varask').reset(); dojo.addClass('editcfgvardiv', 'hidden'); } function resetCfgVarTypeValues() { var options = dijit.byId('cfgvartype').options; for(var i = 0; i < options.length; i++) dijit.byId('vartype' + options[i].label).reset(); } function setCfgVarType(noupdate) { if(typeof noupdate === 'undefined') noupdate = 0; var type = dijit.byId('cfgvartype').get('displayedValue'); var options = dijit.byId('cfgvartype').options; for(var i = 0; i < options.length; i++) { var t = options[i].label; dojo.addClass('vartype' + t + 'span', 'hidden'); } dojo.removeClass('vartype' + type + 'span', 'hidden'); if(noupdate) return; updateConfigVariable(); } function configVarAllowSelection(row) { if(row == configvariablegrid.selection.lastindex) return true; if(! updateConfigVariable()) { setTimeout(function() { configvariablegrid.selection.setSelected(configvariablegrid.selection.lastindex, true); }, 1); return false; } } function configVarSelected(row) { if(! updateConfigVariable()) return; dojo.removeClass('editcfgvardiv', 'hidden'); var item = configvariablegrid.getItem(row); if(! item) return; nocfgvarupdates = 1; if(item.deleted == 1) { dojo.addClass('editcfgvardiv', 'hidden'); dojo.removeClass('undeletecfgvardiv', 'hidden'); } else { dojo.addClass('undeletecfgvardiv', 'hidden'); dojo.removeClass('editcfgvardiv', 'hidden'); } dijit.byId('deletecfgvarbtn').set('disabled', false); dojo.byId('varid').value = item.id; dijit.byId('varname').set('value', item.name); dijit.byId('varidentifier').set('value', item.identifier); resetCfgVarTypeValues(); dijit.byId('cfgvartype').set('value', parseInt(item.datatypeid)); var type = dijit.byId('cfgvartype').get('displayedValue'); if(type == 'text') dijit.byId('vartypetext').set('value', new String(item.defaultvalue)); else dijit.byId('vartype' + type).set('value', item.defaultvalue); setCfgVarType(); if(item.required == 1) dijit.byId('varrequired').set('checked', true); else dijit.byId('varrequired').set('checked', false); if(item.ask == 1) dijit.byId('varask').set('checked', true); else dijit.byId('varask').set('checked', false); configvariablegrid.selection.lastindex = row; nocfgvarupdates = 0; } function addCfgSubimage() { var min = new dijit.form.NumberSpinner({ value: 1, smallDelta: 1, constraints: {min: 1, max: 5000, places: 0}, style: 'width: 40px' }); var item = {id: newsubimageid, imageid: dijit.byId('subimageid').get('value'), name: dijit.byId('subimageid').get('displayedValue'), min: 1, max: 1, deleted: '0'}; subimagegrid.store.newItem(item); subimagegrid.sort(); setTimeout(function() { if(subimagegrid.selection.selectedIndex >= 0) subimagegrid.selection.setSelected(subimagegrid.selection.selectedIndex, false); // TODO fix problem of another row being highlighted due to being the focused row for(var i = 0, last = subimagegrid.rowCount; i < last; i++) { if((subimagegrid.getItem(i)) && subimagegrid.getItem(i).id == newsubimageid) { subimagegrid.selection.setSelected(i, true); break; } } newsubimageid++; subimagegrid.scrollToRow(subimagegrid.selection.selectedIndex); subimagegrid.update(); }, 1); } function removeSubimages() { var items = subimagegrid.selection.getSelected(); for(var i = 0; i < items.length; i++) { subimagegrid.store.fetch({ query: {id: items[i].id[0]}, onItem: function(item) { subimagegrid.store.setValue(item, 'deleted', '1'); } }); } subimagegrid.selection.clear(); subimagegrid.sort(); } function addNewConfigVar() { if(! updateConfigVariable()) { return; } var item = {id: newcfgvarid, name: 'new variable', identifier: '', datatypeid: '1', defaultvalue: 0, required: 0, ask: 1, deleted: 0, configid: dojo.byId('editresid').value}; configvariablegrid.store.newItem(item); configvariablegrid.sort(); setTimeout(function() { if(configvariablegrid.selection.selectedIndex >= 0) configvariablegrid.selection.setSelected(configvariablegrid.selection.selectedIndex, false); // TODO fix problem of another row being highlighted due to being the focused row for(var i = 0, last = configvariablegrid.rowCount; i < last; i++) { if((configvariablegrid.getItem(i)) && configvariablegrid.getItem(i).id == newcfgvarid) { configvariablegrid.selection.setSelected(i, true); break; } } newcfgvarid++; configvariablegrid.scrollToRow(configvariablegrid.selection.selectedIndex); configvariablegrid.update(); }, 1); } function updateConfigVariable() { if(nocfgvarupdates) return 1; if(dojo.hasClass('editcfgvardiv', 'hidden')) return 1; var varid = dojo.byId('varid').value; if(varid == '') return 1; if(! checkValidatedObj('varname', null)) return 0; if(! checkValidatedObj('varidentifier', null)) return 0; var name = dijit.byId('varname').get('value'); var identifier = dijit.byId('varidentifier').get('value'); var type = dijit.byId('cfgvartype').get('displayedValue'); var typeid = dijit.byId('cfgvartype').get('value'); if(type == 'bool') { var defaultvalue = dijit.byId('vartypebool').get('value'); } else if(type == 'text') { var defaultvalue = dijit.byId('vartypetext').get('value'); } else { if(! checkValidatedObj('vartype' + type, null)) return 0; var defaultvalue = dijit.byId('vartype' + type).get('value'); } if(dijit.byId('varrequired').get('checked')) var required = 1; else var required = 0; if(dijit.byId('varask').get('checked')) var ask = 1; else var ask = 0; configvariablegrid.store.fetch({ query: {id: varid}, onItem: function(item) { var store = configvariablegrid.store; store.setValue(item, 'name', name); store.setValue(item, 'identifier', identifier); store.setValue(item, 'datatypeid', typeid); store.setValue(item, 'defaultvalue', defaultvalue); store.setValue(item, 'required', required); store.setValue(item, 'ask', ask); } }); return 1; } function delayedUpdateConfigVariable() { clearTimeout(cfgvartimeout); cfgvartimeout = setTimeout(updateConfigVariable, 1000); } function deleteConfigVariable() { if(dojo.byId('varid').value == '') return; dojo.addClass('editcfgvardiv', 'hidden'); dojo.removeClass('undeletecfgvardiv', 'hidden'); configvariablegrid.store.fetch({ query: {id: dojo.byId('varid').value}, onItem: function(item) { var store = configvariablegrid.store; store.setValue(item, 'deleted', 1); } }); } function undeleteConfigVariable() { if(dojo.byId('varid').value == '') return; var node = configvariablegrid.views.views[0].getCellNode(configvariablegrid.selection.selectedIndex, 0); dojo.removeClass(node, 'strikethrough'); dojo.addClass('undeletecfgvardiv', 'hidden'); dojo.removeClass('editcfgvardiv', 'hidden'); configvariablegrid.store.fetch({ query: {id: dojo.byId('varid').value}, onItem: function(item) { var store = configvariablegrid.store; store.setValue(item, 'deleted', 0); } }); } function configVarListStyle(row) { var item = configvariablegrid.getItem(row.index); if(item) { var deleted = configvariablegrid.store.getValue(item, 'deleted'); if(deleted == 1) row.customClasses += ' strikethrough'; } configvariablegrid.focus.styleRow(row); configvariablegrid.edit.styleRow(row); } function addStrikethrough() { var node = configvariablegrid.views.views[0].getCellNode(configvariablegrid.selection.selectedIndex, 0); dojo.addClass(node, 'strikethrough'); } function serializeConfigVars() { var cfgvars = []; var tmp = configvariablegrid.store._getItemsArray(); for(var i = 0; i < tmp.length; i++) { if(tmp[i]['deleted'] == 1 && tmp[i]['id'] > 15000000) continue; var myvar = ''; myvar = '"' + tmp[i]['id']; myvar += '":{"id":"' + tmp[i]['id']; myvar += '","name":"' + tmp[i]['name']; myvar += '","identifier":"' + tmp[i]['identifier']; myvar += '","datatypeid":"' + tmp[i]['datatypeid']; var datatype = getCfgVarType(tmp[i]['datatypeid']); if(datatype == 'text') myvar += '","defaultvalue":"' + tmp[i]['defaultvalue'][0].replace(/\n/g, '\\n'); else myvar += '","defaultvalue":"' + tmp[i]['defaultvalue']; myvar += '","required":"' + tmp[i]['required']; myvar += '","ask":"' + tmp[i]['ask']; myvar += '","deleted":"' + tmp[i]['deleted']; myvar += '"}'; cfgvars.push(myvar); } var all = cfgvars.join(','); return '{"items":{' + all + '}}'; } function serializeConfigSubimages() { var subimages = []; var tmp = subimagegrid.store._getItemsArray(); if(tmp.length == 0) return ''; for(var i = 0; i < tmp.length; i++) { if(tmp[i]['deleted'] == 1 && tmp[i]['id'] > 15000000) continue; var myvar = ''; myvar = '"' + tmp[i]['id']; myvar += '":{"id":"' + tmp[i]['id']; myvar += '","imageid":"' + tmp[i]['imageid']; myvar += '","min":"' + tmp[i]['min']; myvar += '","max":"' + tmp[i]['max']; myvar += '","deleted":"' + tmp[i]['deleted']; myvar += '"}'; subimages.push(myvar); } var all = subimages.join(','); return '{"items":{' + all + '}}'; } function getCfgVarType(id) { var options = dijit.byId('cfgvartype').options; for(var i = 0; i < options.length; i++) { if(options[i].value == id) return options[i].label; } } function configSetType() { var type = dijit.byId('type').get('displayedValue'); dojo.removeClass('configdatadiv', 'hidden'); dojo.removeClass('configvariables', 'hidden'); dojo.addClass('subimageextradiv', 'hidden'); dojo.addClass('vlanextradiv', 'hidden'); dojo.byId('datalabel').innerHTML = type; if(type == 'Cluster') { // TODO - might need to be updated dojo.addClass('configdatadiv', 'hidden'); dojo.addClass('configvariables', 'hidden'); dojo.removeClass('subimageextradiv', 'hidden'); dojo.addClass('vlanextradiv', 'hidden'); } else if(type == 'VLAN') { dojo.addClass('configdatadiv', 'hidden'); dojo.addClass('configvariables', 'hidden'); dojo.addClass('subimageextradiv', 'hidden'); dojo.removeClass('vlanextradiv', 'hidden'); } recenterDijitDialog('addeditdlg'); } function fmtConfigMapDeleteBtn(configmapid, rowIndex) { var btn = new dijit.form.Button({ label: 'Delete', onClick: function() { deleteConfigMapping(configmapid); } }); btn._destroyOnRemove = true; return btn; } function fmtConfigMapEditBtn(configmapid, rowIndex) { var btn = new dijit.form.Button({ label: 'Edit', onClick: function() { editConfigMapping(configmapid); } }); btn._destroyOnRemove = true; return btn; } function deleteConfigMapping(configmapid) { var data = {configmapid: configmapid, continuation: dojo.byId('deletecfgmapcont').value}; RPCwrapper(data, deleteConfigMappingCB, 1); } function deleteConfigMappingCB(data, ioArgs) { // TODO handle errors if(data.items.status == 'success') { dojo.byId('delcfgmapdlgcontent').innerHTML = data.items.html; dojo.byId('submitdeletecfgmapcont').value = data.items.cont; dijit.byId('delcfgmapdlg').show(); } else if(data.items.status == 'notfound') { alert("Error occurred: Config mapping not found"); } } function submitDeleteConfigMapping() { var data = {continuation: dojo.byId('submitdeletecfgmapcont').value}; RPCwrapper(data, submitDeleteConfigMappingCB, 1); } function submitDeleteConfigMappingCB(data, ioArgs) { // TODO handle errors if(data.items.status == 'success') { dijit.byId('delcfgmapdlg').hide(); dojo.byId('delcfgmapdlgcontent').innerHTML = ''; dojo.byId('submitdeletecfgmapcont').value = ''; configmapgrid.store.fetch({ query: {id: data.items.configmapid}, onItem: function(item) { configmapgrid.store.deleteItem(item); } }); } } function editConfigMapping(configmapid) { dojo.byId('editcfgmapid').value = configmapid; var data = {configmapid: configmapid, continuation: dojo.byId('editcfgmapcont').value}; RPCwrapper(data, editConfigMappingCB, 1); } function editConfigMappingCB(data, ioArgs) { dojo.byId('savecfgmapcont').value = data.items.cont; dijit.byId('addeditcfgmapdlg').set('title', 'Edit Config Mapping'); dijit.byId('addeditcfgmapbtn').set('label', 'Save Changes'); dijit.byId('config')._lastValueReported = data.items.data.configid; dijit.byId('config').set('value', data.items.data.configid, false); if(data.items.data.configtype == 'Cluster') dijit.byId('maptype').setStore(maptypestore, '', {query: {clusterok: '1'}}); else dijit.byId('maptype').setStore(maptypestore, '', {query: {id: '*'}}); dijit.byId('maptype').set('value', data.items.data.configmaptypeid); dijit.byId('affil').set('value', data.items.data.affiliationid); dijit.byId('stage').set('value', data.items.data.stageid); if(data.items.data.prettyconfigmaptype == 'Image') dijit.byId('image').set('value', data.items.data.subid); else if(data.items.data.prettyconfigmaptype == 'OS Type') dijit.byId('ostype').set('value', data.items.data.subid); else if(data.items.data.prettyconfigmaptype == 'OS') dijit.byId('os').set('value', data.items.data.subid); else if(data.items.data.prettyconfigmaptype == 'Config') dijit.byId('mapconfig').set('value', data.items.data.subid); else if(data.items.data.prettyconfigmaptype == 'Subimage') dijit.byId('configsubimage').set('value', data.items.data.subid); else if(data.items.data.prettyconfigmaptype == 'Management Node') dijit.byId('managementnode').set('value', data.items.data.subid); editConfigMapSetMapType(); dijit.byId('addeditcfgmapdlg').show(); } function configMapSetConfig() { var id = dijit.byId('config').get('value'); mapconfigliststore.fetch({ query: {id: id}, onItem: function(item) { if(item.stage[0] === null) dojo.removeClass('stagediv', 'hidden'); else dojo.addClass('stagediv', 'hidden'); dojo.byId('mapconfigtype').innerHTML = item.configtype; var queryobj = dijit.byId('maptype').params.query; if(item.configtype == 'Cluster') { //if(typeof queryobj.clusterid === 'undefined') dijit.byId('maptype').setStore(maptypestore, '', {query: {clusterok: '1'}}); } else { //if(typeof queryobj.id === 'undefined') dijit.byId('maptype').setStore(maptypestore, '', {query: {id: '*'}}); } } }); } function editConfigMapSetMapType() { var maptype = dijit.byId('maptype').get('displayedValue'); dojo.addClass('imagetypediv', 'hidden'); dojo.addClass('ostypediv', 'hidden'); dojo.addClass('osdiv', 'hidden'); dojo.addClass('configdiv', 'hidden'); dojo.addClass('configsubimagediv', 'hidden'); dojo.addClass('managementnodediv', 'hidden'); if(maptype == 'Image') dojo.removeClass('imagetypediv', 'hidden'); else if(maptype == 'OS Type') dojo.removeClass('ostypediv', 'hidden'); else if(maptype == 'OS') dojo.removeClass('osdiv', 'hidden'); else if(maptype == 'Config') dojo.removeClass('configdiv', 'hidden'); else if(maptype == 'Subimage') dojo.removeClass('configsubimagediv', 'hidden'); else if(maptype == 'Management Node') dojo.removeClass('managementnodediv', 'hidden'); } function addConfigMapping() { dojo.byId('editcfgmapid').value = 0; dijit.byId('addeditcfgmapdlg').set('title', 'Add Config Mapping'); dijit.byId('addeditcfgmapbtn').set('label', 'Add Config Mapping'); resetConfigMappingFields(); editConfigMapSetMapType(); dijit.byId('addeditcfgmapdlg').show(); } function saveConfigMapping() { var errobj = dojo.byId('addeditcfgmapdlgerrmsg'); if(! checkValidatedObj('config', errobj)) return; var maptype = dijit.byId('maptype').get('displayedValue'); if((maptype == 'Image' && ! checkValidatedObj('image', errobj)) || (maptype == 'OS Type' && ! checkValidatedObj('ostype', errobj)) || (maptype == 'OS' && ! checkValidatedObj('os', errobj)) || (maptype == 'Config' && ! checkValidatedObj('mapconfig', errobj)) || (maptype == 'Subimage' && ! checkValidatedObj('configsubimage', errobj)) || (maptype == 'Management Node' && ! checkValidatedObj('managementnode', errobj))) return; if(! checkValidatedObj('affil', errobj) || ! checkValidatedObj('stage', errobj)) return; var data = {configmapid: dojo.byId('editcfgmapid').value, configid: dijit.byId('config').get('value'), maptypeid: dijit.byId('maptype').get('value'), affiliationid: dijit.byId('affil').get('value'), stageid: dijit.byId('stage').get('value')}; if(dijit.byId('addeditcfgmapbtn').get('label') == 'Add Config Mapping') data.continuation = dojo.byId('addcfgmapcont').value; else data.continuation = dojo.byId('savecfgmapcont').value; if(maptype == 'Image') data.subid = dijit.byId('image').get('value'); else if(maptype == 'OS Type') data.subid = dijit.byId('ostype').get('value'); else if(maptype == 'OS') data.subid = dijit.byId('os').get('value'); else if(maptype == 'Config') data.subid = dijit.byId('mapconfig').get('value'); else if(maptype == 'Subimage') data.subid = dijit.byId('configsubimage').get('value'); else if(maptype == 'Management Node') data.subid = dijit.byId('managementnode').get('value'); dijit.byId('addeditcfgmapbtn').set('disabled', true); RPCwrapper(data, saveConfigMappingCB, 1); } function saveConfigMappingCB(data, ioArgs) { if(data.items.status == 'error') { dojo.byId('addeditcfgmapdlgerrmsg').innerHTML = data.items.msg; dijit.byId('addeditcfgmapbtn').set('disabled', false); } else if(data.items.status == 'success') { if(data.items.action == 'add') { configmapgrid.store.newItem(data.items.item); configmapgrid.sort(); } else { configmapgrid.store.fetch({ query: {id: data.items.data.id}, onItem: function(item) { for(var key in data.items.data) { if(key == 'id') continue; configmapgrid.store.setValue(item, key, data.items.data[key]); } }, onComplete: function(items, result) { // when call resourcegrid.sort directly, the table contents disappear; not sure why setTimeout(function() {configmapgrid.sort();}, 10); } }); } dijit.byId('addeditcfgmapdlg').hide(); resetConfigMappingFields(); setTimeout(function() {dijit.byId('addeditcfgmapbtn').set('disabled', false)}, 250); } } function resetConfigMappingFields() { dijit.byId('config').reset(); dijit.byId('maptype').reset(); dijit.byId('image').reset(); dijit.byId('ostype').reset(); dijit.byId('os').reset(); dijit.byId('mapconfig').reset(); dijit.byId('configsubimage').reset(); dijit.byId('managementnode').reset(); dijit.byId('affil').reset(); dijit.byId('stage').reset(); dojo.byId('addeditcfgmapdlgerrmsg').innerHTML = ''; }