Merge "divide resources into handlers and models"
[releng.git] / utils / test / testapi / opnfv_testapi / ui / pods / podsController.js
1 /*
2  * Licensed under the Apache License, Version 2.0 (the "License");
3  * you may not use this file except in compliance with the License.
4  * You may obtain a copy of the License at
5  *
6  * http://www.apache.org/licenses/LICENSE-2.0
7  *
8  * Unless required by applicable law or agreed to in writing, software
9  * distributed under the License is distributed on an "AS IS" BASIS,
10  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  * See the License for the specific language governing permissions and
12  * limitations under the License.
13  */
14
15 (function () {
16     'use strict';
17
18     angular
19         .module('testapiApp')
20         .controller('PodsController', PodsController);
21
22     PodsController.$inject = [
23         '$scope', '$http', '$filter', '$state', 'testapiApiUrl','raiseAlert'
24     ];
25
26     /**
27      * TestAPI Pods Controller
28      * This controller is for the '/pods' page where a user can browse
29      * through pods declared in TestAPI.
30      */
31     function PodsController($scope, $http, $filter, $state, testapiApiUrl,
32         raiseAlert) {
33         var ctrl = this;
34         ctrl.url = testapiApiUrl + '/pods';
35
36         ctrl.create = create;
37         ctrl.update = update;
38         ctrl.open = open;
39         ctrl.clearFilters = clearFilters;
40
41         ctrl.roles = ['community-ci', 'production-ci'];
42         ctrl.modes = ['metal', 'virtual'];
43         ctrl.createRequirements = [
44             {label: 'name', type: 'text', required: true},
45             {label: 'mode', type: 'select', selects: ctrl.modes},
46             {label: 'role', type: 'select', selects: ctrl.roles},
47             {label: 'details', type: 'textarea', required: false}
48         ];
49
50         ctrl.name = '';
51         ctrl.role = 'community-ci';
52         ctrl.mode = 'metal';
53         ctrl.details = '';
54
55         /**
56          * This is called when the date filter calendar is opened. It
57          * does some event handling, and sets a scope variable so the UI
58          * knows which calendar was opened.
59          * @param {Object} $event - The Event object
60          * @param {String} openVar - Tells which calendar was opened
61          */
62         function open($event, openVar) {
63             $event.preventDefault();
64             $event.stopPropagation();
65             ctrl[openVar] = true;
66         }
67
68         /**
69          * This function will clear all filters and update the results
70          * listing.
71          */
72         function clearFilters() {
73             ctrl.update();
74         }
75
76         /**
77          * This will contact the TestAPI to create a new pod.
78          */
79         function create() {
80             ctrl.showError = false;
81
82             if(ctrl.name != ""){
83                 var pods_url = ctrl.url;
84                 var body = {
85                     name: ctrl.name,
86                     mode: ctrl.mode,
87                     role: ctrl.role,
88                     details: ctrl.details
89                 };
90                 ctrl.podsRequest =
91                     $http.post(pods_url, body).error(function (data, status) {
92                         ctrl.showError = true;
93                         if(status == 403){
94                             ctrl.error =
95                                 'Error creating the new pod from server: Pod\'s name already exists'
96                         }
97                     });
98             }
99             else{
100                 ctrl.showError = true;
101                 ctrl.error = 'Name is missing.'
102             }
103         }
104
105         /**
106          * This will contact the TestAPI to get a listing of declared pods.
107          */
108         function update() {
109             ctrl.showError = false;
110             ctrl.podsRequest =
111                 $http.get(ctrl.url).success(function (data) {
112                     ctrl.data = data;
113                 }).error(function (error) {
114                     ctrl.data = null;
115                     ctrl.showError = true;
116                     ctrl.error =
117                         'Error retrieving pods from server: ' +
118                         angular.toJson(error);
119                 });
120         }
121     }
122 })();