94 lines
2.9 KiB
JavaScript
94 lines
2.9 KiB
JavaScript
/*
|
|
* Copyright 2015, Intel Corp.
|
|
* (c) Copyright 2015 Hewlett-Packard Development Company, L.P.
|
|
*
|
|
* Licensed 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 () {
|
|
'use strict';
|
|
|
|
angular
|
|
.module('horizon.app.core.metadata.modal')
|
|
.controller('MetadataModalController', MetadataModalController);
|
|
|
|
MetadataModalController.$inject = [
|
|
'$uibModalInstance',
|
|
'horizon.app.core.metadata.service',
|
|
'horizon.framework.widgets.metadata.tree.service',
|
|
'horizon.framework.widgets.toast.service',
|
|
// Dependencies injected with resolve by $uibModal.open
|
|
'available',
|
|
'existing',
|
|
'params'
|
|
];
|
|
|
|
/**
|
|
* @ngdoc controller
|
|
* @name MetadataModalController
|
|
* @description
|
|
* Controller used by `ModalService`
|
|
*/
|
|
function MetadataModalController(
|
|
$uibModalInstance, metadataService, metadataTreeService,
|
|
toastService, available, existing, params
|
|
) {
|
|
var ctrl = this;
|
|
|
|
ctrl.cancel = cancel;
|
|
ctrl.resourceType = params.resource;
|
|
ctrl.save = save;
|
|
ctrl.saving = false;
|
|
ctrl.tree = new metadataTreeService.Tree(available.data.items, existing.data);
|
|
|
|
function save() {
|
|
ctrl.saving = true;
|
|
var updated = ctrl.tree.getExisting();
|
|
var removed = angular.copy(existing.data);
|
|
|
|
// Glance v1 changes metadata property casing in the get request
|
|
// but to remove you still need to send back in using the proper original case.
|
|
// See https://bugs.launchpad.net/horizon/+bug/1606988
|
|
angular.forEach(removed, function bug1606988(value, removedKey) {
|
|
angular.forEach(ctrl.tree.flatTree, function compareToDefinitions(item) {
|
|
if (item.leaf && removedKey.toLocaleLowerCase() === item.leaf.name.toLocaleLowerCase()) {
|
|
delete removed[removedKey];
|
|
removed[item.leaf.name] = value;
|
|
}
|
|
});
|
|
});
|
|
|
|
angular.forEach(updated, function(value, key) {
|
|
delete removed[key];
|
|
});
|
|
|
|
metadataService
|
|
.editMetadata(params.resource, params.id, updated, Object.keys(removed))
|
|
.then(onEditSuccess, onEditFailure);
|
|
}
|
|
|
|
function cancel() {
|
|
$uibModalInstance.dismiss('cancel');
|
|
}
|
|
|
|
function onEditSuccess() {
|
|
toastService.add('success', gettext('Metadata was successfully updated.'));
|
|
$uibModalInstance.close();
|
|
}
|
|
|
|
function onEditFailure() {
|
|
toastService.add('error', gettext('Unable to update metadata.'));
|
|
ctrl.saving = false;
|
|
}
|
|
}
|
|
})();
|