blob: cf5b07e9487043f1eb38d94f5f57d5492c85f767 [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.
*/
var profilesstoredata = {
identifier: 'id',
label: 'name',
items: []
}
var allprofiles = '';
var allgroups = '';
function generalReqCB(data, ioArgs) {
eval(data);
document.body.style.cursor = 'default';
}
function selectProfileChanged() {
if(dijit.byId('profileid').get('value') == 70000)
return;
dojo.addClass('serverprofiledata', 'hidden');
dijit.byId('fetchProfilesBtn').set('disabled', false);
dijit.byId('delProfilesBtn').set('disabled', false);
if(dijit.byId('profileid').getOptions(0) &&
dijit.byId('profileid').getOptions(0).value == 70000)
dijit.byId('profileid').setStore(profilesstore, '', {query: {id:new RegExp("^(?:(?!70000).)*$"),access:'admin'}});
}
function newServerProfile(cont) {
dijit.byId('profileid').setStore(profilesstore, '', {query: {id: '*',access:'admin'}});
dijit.byId('profileid').set('value', '70000');
clearProfileItems();
dijit.byId('fetchProfilesBtn').set('disabled', true);
dijit.byId('delProfilesBtn').set('disabled', true);
dojo.removeClass('serverprofiledata', 'hidden');
}
function clearProfileItems() {
dijit.byId('profilename').set('value', '');
dijit.byId('profiledesc').set('value', '');
dijit.byId('profileimage').reset();
dijit.byId('profilefixedIP').set('value', '');
//dijit.byId('profilefixedMAC').set('value', '');
if(dijit.byId('profileadmingroup'))
dijit.byId('profileadmingroup').reset();
else
dojo.byId('profileadmingroup').value = 0;
if(dijit.byId('profilelogingroup'))
dijit.byId('profilelogingroup').reset();
else
dojo.byId('profilelogingroup').value = 0;
dijit.byId('profilemonitored').reset();
}
function saveServerProfile(cont) {
if((dijit.byId('profileimage') && ! dijit.byId('profileimage').isValid()) ||
(dijit.byId('profileadmingroup') && ! dijit.byId('profileadmingroup').isValid()) ||
(dijit.byId('profilelogingroup') && ! dijit.byId('profilelogingroup').isValid()) ||
! dijit.byId('profilefixedIP').isValid() /*||
! dijit.byId('profilefixedMAC').isValid()*/) {
alert('Please correct the fields with invalid input');
return;
}
dijit.byId('saveProfilesBtn').set('label', 'Working...');
dijit.byId('saveProfilesBtn').set('disabled', true);
if(dijit.byId('profileimage'))
var imageid = dijit.byId('profileimage').get('value');
else
var imageid = dojo.byId('profileimage').value;
if(dijit.byId('profileadmingroup'))
var admingroupid = dijit.byId('profileadmingroup').get('value');
else
var admingroupid = dojo.byId('profileadmingroup').value;
if(dijit.byId('profilelogingroup'))
var logingroupid = dijit.byId('profilelogingroup').get('value');
else
var logingroupid = dojo.byId('profilelogingroup').value;
var data = {continuation: cont,
id: dijit.byId('profileid').get('value'),
name: dijit.byId('profilename').get('value'),
desc: dijit.byId('profiledesc').get('value'),
imageid: imageid,
//fixedMAC: dijit.byId('profilefixedMAC').get('value'),
admingroupid: admingroupid,
logingroupid: logingroupid,
monitored: dijit.byId('profilemonitored').get('value'),
fixedIP: dijit.byId('profilefixedIP').get('value'),
netmask: dijit.byId('profilenetmask').get('value'),
router: dijit.byId('profilerouter').get('value'),
dns: dijit.byId('profiledns').get('value')};
RPCwrapper(data, saveServerProfileCB, 1);
}
function saveServerProfileCB(data, ioArgs) {
dijit.byId('saveProfilesBtn').set('label', 'Save Profile');
dijit.byId('saveProfilesBtn').set('disabled', false);
if(data.items.error) {
alert(data.items.msg);
return;
}
var selobj = dijit.byId('profileid');
selobj.setStore(profilesstore, '', {query: {id:new RegExp("^(?:(?!70000).)*$"),access:'admin'}});
if(data.items.newprofile == 1) {
dojo.removeClass('serverprofiledata', 'hidden');
if(allprofiles.length == 0)
dojo.removeClass('profileslist', 'hidden');
profilesstore.newItem({id: data.items.id,
name: data.items.name,
access: data.items.access,
desc: data.items.desc});
selobj.set('value', data.items.id);
getProfiles();
}
else {
if(dijit.byId('deployprofileid').get('value') == data.items.id) {
var desc = data.items.desc;
if(data.items.desc == '') {
desc = '(No description)';
}
dojo.byId('deploydesc').innerHTML = desc;
}
var items = profilesstore.fetch({
query: {id: data.items.id},
newname: data.items.name,
newdesc: data.items.desc,
onItem: function(item, request) {
profilesstore.setValue(item, 'desc', request.newdesc);
if(profilesstore.getValue(item, 'name') != request.newname) {
profilesstore.setValue(item, 'name', request.newname);
getProfiles();
}
}
});
}
dojo.removeClass('savestatus', 'hidden');
dijit.byId('fetchProfilesBtn').set('disabled', false);
dijit.byId('delProfilesBtn').set('disabled', false);
setTimeout(clearSaveStatus, 10000);
}
function getServerProfileDataManageCB(data, ioArgs) {
document.body.style.cursor = 'default';
dijit.byId('fetchProfilesBtn').set('label', 'Configure Profile');
dijit.byId('fetchProfilesBtn').set('disabled', false);
if(data.items.error) {
alert('You do not have access to modify this server profile.');
return;
}
clearProfileItems();
dijit.byId('profilename').set('value', data.items.name);
dijit.byId('profiledesc').set('value', data.items.description);
dijit.byId('profileimage').set('value', data.items.imageid);
//dijit.byId('profilefixedMAC').set('value', data.items.fixedMAC);
if(dijit.byId('profileadmingroup'))
dijit.byId('profileadmingroup').set('value', data.items.admingroupid);
else
dojo.byId('profileadmingroup').value = data.items.admingroupid;
if(dijit.byId('profilelogingroup'))
dijit.byId('profilelogingroup').set('value', data.items.logingroupid);
else
dojo.byId('profilelogingroup').value = data.items.logingroupid;
dijit.byId('profilemonitored').set('value', parseInt(data.items.monitored));
dijit.byId('profilefixedIP').set('value', data.items.fixedIP);
if(dijit.byId('profilefixedIP').isValid() && dijit.byId('profilefixedIP') != '') {
dijit.byId('profilenetmask').set('value', data.items.netmask);
dijit.byId('profilerouter').set('value', data.items.router);
dijit.byId('profiledns').set('value', data.items.dns);
dijit.byId('profilenetmask').set('disabled', false);
dijit.byId('profilerouter').set('disabled', false);
dijit.byId('profiledns').set('disabled', false);
}
else {
dijit.byId('profilenetmask').set('value', '');
dijit.byId('profilerouter').set('value', '');
dijit.byId('profiledns').set('value', '');
dijit.byId('profilenetmask').set('disabled', true);
dijit.byId('profilerouter').set('disabled', true);
dijit.byId('profiledns').set('disabled', true);
}
dojo.removeClass('serverprofiledata', 'hidden');
}
function confirmDelServerProfile(cont) {
dojo.byId('delcont').value = cont;
dijit.byId('confirmDeleteProfile').show();
}
function delServerProfile() {
if(allprofiles.length == 1)
dojo.addClass('profileslist', 'hidden');
dijit.byId('confirmDeleteProfile').hide();
var data = {continuation: dojo.byId('delcont').value,
id: dijit.byId('profileid').get('value')};
RPCwrapper(data, delServerProfileCB, 1);
}
function delServerProfileCB(data, ioArgs) {
if(data.items.error) {
alert(data.items.msg);
return;
}
clearProfileItems();
dojo.addClass('serverprofiledata', 'hidden');
profilesstore.fetch({
query: {id: data.items.id},
onItem: function(item, request) {
profilesstore.deleteItem(item);
dijit.byId('deployprofileid').removeOption({value: item.id[0]});
dijit.byId('profileid').removeOption({value: item.id[0]});
dijit.byId('profiles').removeOption({value: item.id[0]});
}
});
getProfiles();
}
function clearSaveStatus() {
dojo.addClass('savestatus', 'hidden');
}
function getGroups() {
document.body.style.cursor = 'wait';
var selobj = dojo.byId('ingroups');
for(var i = selobj.options.length - 1; i >= 0; i--) {
selobj.remove(i);
}
selobj = dojo.byId('outgroups');
for(i = selobj.options.length - 1; i >= 0; i--) {
selobj.remove(i);
}
var profileid = dijit.byId('profiles').get('value');
if(profileid == '') {
document.body.style.cursor = 'default';
return;
}
profilesstore.fetch({
query: {id: profileid},
onItem: function(item, request) {
dojo.byId('inprofilename').innerHTML = item.name;
dojo.byId('outprofilename').innerHTML = item.name;
}
});
var data = {continuation: dojo.byId('grpcont').value,
profileid: profileid};
RPCwrapper(data, getGroupsCB, 1);
}
function getGroupsCB(data, ioArgs) {
var obj = dojo.byId('ingroups');
for(var i = 0; i < data.items.ingroups.length; i++) {
obj.options[obj.options.length] = new Option(data.items.ingroups[i].name, data.items.ingroups[i].id);
}
obj = dojo.byId('outgroups');
for(var i = 0; i < data.items.outgroups.length; i++) {
obj.options[obj.options.length] = new Option(data.items.outgroups[i].name, data.items.outgroups[i].id);
}
allgroups = data.items.all;
dojo.removeClass('groupsdiv', 'hidden');
document.body.style.cursor = 'default';
}
function getProfiles() {
var selobj = dojo.byId('inprofiles');
if(! selobj)
return;
document.body.style.cursor = 'wait';
for(var i = selobj.options.length - 1; i >= 0; i--) {
selobj.remove(i);
}
selobj = dojo.byId('outprofiles');
for(i = selobj.options.length - 1; i >= 0; i--) {
selobj.remove(i);
}
var obj = dijit.byId('profileGroups');
if(! obj)
return;
if(obj.options.length) {
var groupname = obj.getOptions(dijit.byId('profileGroups').get('value')).label;
dojo.byId('ingroupname').innerHTML = groupname;
dojo.byId('outgroupname').innerHTML = groupname;
}
var data = {continuation: dojo.byId('profilecont').value,
groupid: dijit.byId('profileGroups').get('value')};
RPCwrapper(data, getProfilesCB, 1);
}
function getProfilesCB(data, ioArgs) {
var obj = document.getElementById('inprofiles');
for(var i = 0; i < data.items.inprofiles.length; i++) {
obj.options[obj.options.length] = new Option(data.items.inprofiles[i].name, data.items.inprofiles[i].id);
}
obj = document.getElementById('outprofiles');
for(var i = 0; i < data.items.outprofiles.length; i++) {
obj.options[obj.options.length] = new Option(data.items.outprofiles[i].name, data.items.outprofiles[i].id);
}
allprofiles = data.items.all;
if(allprofiles.length == 0) {
dojo.addClass('profileslist', 'hidden');
dojo.addClass('groupprofilesspan', 'hidden');
dojo.removeClass('noprofilegroupsspan', 'hidden');
}
else {
dojo.removeClass('profileslist', 'hidden');
if(dijit.byId('profileGroups').options.length) {
dojo.removeClass('groupprofilesspan', 'hidden');
dojo.addClass('noprofilegroupsspan', 'hidden');
}
}
dojo.removeClass('profilesdiv', 'hidden');
document.body.style.cursor = 'default';
}
function addRemItem(cont, objid1, objid2, cb) {
var id = dijit.byId(objid1).get('value');
var obj = dojo.byId(objid2);
var listids = "";
for(var i = obj.options.length - 1; i >= 0; i--) {
if(obj.options[i].selected) {
listids = listids + ',' + obj.options[i].value;
obj.remove(i);
}
}
if(listids == "")
return;
document.body.style.cursor = 'wait';
var data = {continuation: cont,
listids: listids,
id: id};
RPCwrapper(data, cb, 1);
}
function addRemGroupCB(data, ioArgs) {
/*
for each profileid sent back we
search through allprofiles until we find it keeping track of the previous item with inout == 1
we set allprofiles[profileid].inout to 1
we find the previous item in the select.options array
we insert a new option right after that one
*/
var byprofileselid = dijit.byId('profiles').get('value');
var reloadbyprofile = 0;
var profiles = data.items.profiles;
var addrem = data.items.addrem; // 1 for add, 0 for rem
if(addrem == 0 && data.items.removedaccess == 1) {
var searchids = data.items.remprofileids.join('|');
var regex = new RegExp("(" + searchids + ")");
for(var i = profiles.length; i >= 0; i--) {
if(regex.test(allprofiles[i].id)) {
allprofiles.splice(i, 1);
}
}
profilesstore.fetch({
query: {id: regex},
onItem: function(item, request) {
profilesstore.deleteItem(item);
dijit.byId('profileid').removeOption({value: item.id[0]});
dijit.byId('profiles').removeOption({value: item.id[0]});
}
});
}
if(addrem)
var obj = document.getElementById('inprofiles');
else
var obj = document.getElementById('outprofiles');
for(var i = 0; i < profiles.length; i++) {
if(profiles[i] == byprofileselid )
reloadbyprofile = 1;
var lastid = -1;
for(var j = 0; j < allprofiles.length; j++) {
if(allprofiles[j].id == profiles[i]) {
if(addrem == 1)
allprofiles[j].inout = 1;
else
allprofiles[j].inout = 0;
if(lastid < 0) {
var before = obj.options[0];
var newoption = new Option(allprofiles[j].name, allprofiles[j].id);
try {
obj.add(newoption, before);
}
catch(ex) {
obj.add(newoption, 0);
}
break;
}
else {
for(var k = 0; k < obj.options.length; k++) {
if(obj.options[k].value == lastid) {
var before = obj.options[k + 1];
var newoption = new Option(allprofiles[j].name, allprofiles[j].id);
if(before)
try {
obj.add(newoption, before);
}
catch(ex) {
obj.add(newoption, k + 1);
}
else
obj.options[obj.options.length] = newoption;
break;
}
}
}
break;
}
if(allprofiles[j].inout == addrem)
lastid = allprofiles[j].id;
}
}
document.body.style.cursor = 'default';
if(reloadbyprofile)
getGroups();
}
function addRemProfileCB(data, ioArgs) {
var bygroupselid = dijit.byId('profileGroups').get('value');
var reloadbygroup = 0;
var groups = data.items.groups;
var addrem = data.items.addrem; // 1 for add, 0 for rem
if(addrem)
var obj = dojo.byId('ingroups');
else
var obj = dojo.byId('outgroups');
for(var i = 0; i < groups.length; i++) {
if(groups[i] == bygroupselid )
reloadbygroup = 1;
var lastid = -1;
for(var j = 0; j < allgroups.length; j++) {
if(allgroups[j].id == groups[i]) {
if(addrem == 1)
allgroups[j].inout = 1;
else
allgroups[j].inout = 0;
if(lastid < 0) {
var before = obj.options[0];
var newoption = new Option(allgroups[j].name, allgroups[j].id);
try {
obj.add(newoption, before);
}
catch(ex) {
obj.add(newoption, 0);
}
break;
}
else {
for(var k = 0; k < obj.options.length; k++) {
if(obj.options[k].value == lastid) {
var before = obj.options[k + 1];
var newoption = new Option(allgroups[j].name, allgroups[j].id);
if(before)
try {
obj.add(newoption, before);
}
catch(ex) {
obj.add(newoption, k + 1);
}
else
obj.options[obj.options.length] = newoption;
break;
}
}
}
break;
}
if(allgroups[j].inout == addrem) {
lastid = allgroups[j].id;
}
}
}
if(addrem == 0 && data.items.removedaccess == 1) {
profilesstore.fetch({
query: {id: data.items.profileid},
onItem: function(item, request) {
profilesstore.deleteItem(item);
dijit.byId('profileid').removeOption({value: item.id[0]});
dijit.byId('profiles').removeOption({value: item.id[0]});
dojo.addClass('groupsdiv', 'hidden');
getProfiles();
}
});
}
document.body.style.cursor = 'default';
if(reloadbygroup)
getProfiles();
}
function submitDeploy() {
var cont = dojo.byId('deploycont').value;
if((dijit.byId('deployimage') && ! dijit.byId('deployimage').isValid()) ||
(dijit.byId('deployadmingroup') && ! dijit.byId('deployadmingroup').isValid()) ||
(dijit.byId('deploylogingroup') && ! dijit.byId('deploylogingroup').isValid())) {
alert('Please correct the fields with invalid input');
return;
}
if(dojo.byId('startlater').checked &&
(! dijit.byId('deploystarttime').isValid() ||
! dijit.byId('deploystartdate').isValid())) {
dijit.byId('deploystarttime')._hasBeenBlurred = true;
dijit.byId('deploystarttime').validate();
dijit.byId('deploystartdate')._hasBeenBlurred = true;
dijit.byId('deploystartdate').validate();
alert('Please correct the fields with invalid input');
return;
}
if(dojo.byId('endat').checked &&
(! dijit.byId('deployendtime').isValid() ||
! dijit.byId('deployenddate').isValid())) {
dijit.byId('deployendtime')._hasBeenBlurred = true;
dijit.byId('deployendtime').validate();
dijit.byId('deployenddate')._hasBeenBlurred = true;
dijit.byId('deployenddate').validate();
alert('Please correct the fields with invalid input');
return;
}
if(dojo.byId('startlater').checked) {
var today = new Date();
today.setMilliseconds(0);
var testday = dijit.byId('deploystartdate').get('value');
var tmp = dijit.byId('deploystarttime').get('value');
testday.setHours(tmp.getHours());
testday.setMinutes(tmp.getMinutes());
testday.setSeconds(tmp.getSeconds());
testday.setMilliseconds(tmp.getMilliseconds());
if(testday < today) {
alert('The starting time and date must be in the future.');
return;
}
}
if(dojo.byId('endat').checked) {
if(dojo.byId('startlater').checked) {
var teststart = dijit.byId('deploystartdate').get('value');
var tmp = dijit.byId('deploystarttime').get('value');
teststart.setHours(tmp.getHours());
teststart.setMinutes(tmp.getMinutes());
teststart.setSeconds(tmp.getSeconds());
teststart.setMilliseconds(tmp.getMilliseconds());
}
else {
var teststart = new Date();
teststart.setMilliseconds(0);
}
var testend = dijit.byId('deployenddate').get('value');
var tmp = dijit.byId('deployendtime').get('value');
testend.setHours(tmp.getHours());
testend.setMinutes(tmp.getMinutes());
testend.setSeconds(tmp.getSeconds());
testend.setMilliseconds(tmp.getMilliseconds());
if(testend <= teststart) {
alert('The ending time and date must be later than the starting time and date.');
return;
}
}
if(dijit.byId('deploybtn').get('label') == 'View Available Times') {
dijit.byId('suggestDlgBtn').set('disabled', true);
showSuggestedTimes();
return;
}
var data = {continuation: cont,
profileid: dojo.byId('appliedprofileid').value};
data.name = dijit.byId('deployname').get('value');
if(dijit.byId('deployimage'))
data.imageid = dijit.byId('deployimage').get('value');
else
data.imageid = dojo.byId('deployimage').value;
if(dijit.byId('deployadmingroup'))
data.admingroupid = dijit.byId('deployadmingroup').get('value');
else
data.admingroupid = dojo.byId('deployadmingroup').value;
if(dijit.byId('deploylogingroup'))
data.logingroupid = dijit.byId('deploylogingroup').get('value');
else
data.logingroupid = dojo.byId('deploylogingroup').value;
data.ipaddr = dijit.byId('deployfixedIP').get('value');
if(data.ipaddr != '') {
data.netmask = dijit.byId('deploynetmask').get('value');
data.router = dijit.byId('deployrouter').get('value');
data.dns = dijit.byId('deploydns').get('value');
}
else {
data.netmask = '';
data.router = '';
data.dns = '';
}
//data.macaddr = dijit.byId('deployfixedMAC').get('value');
/*if(dijit.byId('deploymonitored').get('value') == 'on')
data.monitored = 1;
else
data.monitored = 0;*/
if(dojo.byId('startnow').checked) {
data.startmode = 0;
}
if(dojo.byId('startlater').checked) {
data.startmode = 1;
var time = dijit.byId('deploystarttime').get('value');
var date = dijit.byId('deploystartdate').get('value');
data.start = dojox.string.sprintf('%d%02d%02d%02d%02d',
date.getFullYear(),
date.getMonth() + 1,
date.getDate(),
time.getHours(),
time.getMinutes());
}
if(dojo.byId('endindef').checked) {
data.endmode = 0;
}
if(dojo.byId('endat').checked) {
data.endmode = 1;
var time = dijit.byId('deployendtime').get('value');
var date = dijit.byId('deployenddate').get('value');
data.end = dojox.string.sprintf('%d%02d%02d%02d%02d',
date.getFullYear(),
date.getMonth() + 1,
date.getDate(),
time.getHours(),
time.getMinutes());
}
dijit.byId('deploybtn').set('label', 'Working...');
dijit.byId('deploybtn').set('disabled', true);
RPCwrapper(data, submitDeployCB, 1);
}
function submitDeployCB(data, ioArgs) {
if(data.items.error) {
dojo.byId('deployerr').innerHTML = data.items.msg;
dojo.removeClass('deployerr', 'hidden');
dojo.byId('deploycont').value = data.items.cont;
dijit.byId('deploybtn').set('disabled', false);
if(data.items.error == 2) {
dijit.byId('deploybtn').set('label', 'View Available Times');
dojo.byId('suggestcont').value = data.items.sugcont;
}
else
dijit.byId('deploybtn').set('label', 'Deploy Server');
return;
}
if(data.items.success) {
window.location.href = data.items.redirecturl;
}
}
function useSuggestedDeploySlot() {
var slot = suggestTimeData[dojo.byId('selectedslot').value];
dojo.byId('startlater').checked = true;
var tmp = parseInt(slot['startts'] + '000');
var s = new Date(tmp);
var e = new Date(tmp + parseInt(slot['duration'] + '000'));
dijit.byId('deploystartdate').set('value', s);
dijit.byId('deploystarttime').set('value', s);
var testend = new Date(2038, 0, 1, 0, 0, 0, 0);
if(e >= testend) {
dojo.byId('endindef').checked = true;
}
else {
dojo.byId('endat').checked = true;
dijit.byId('deployenddate').set('value', e);
dijit.byId('deployendtime').set('value', e);
}
//dojo.byId('waittime').className = 'hidden';
dijit.byId('suggestedTimes').hide();
dijit.byId('deploybtn').set('label', 'Shake &amp; Bake Server');
dojo.addClass('deployerr', 'hidden');
//updateWaitTime(0);
}