1 /**
2  * Copyright © 2021 IBM Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #include "default_floor.hpp"
17 
18 #include "../manager.hpp"
19 #include "../zone.hpp"
20 #include "group.hpp"
21 
22 #include <nlohmann/json.hpp>
23 
24 #include <algorithm>
25 
26 namespace phosphor::fan::control::json
27 {
28 
29 using json = nlohmann::json;
30 
31 DefaultFloor::DefaultFloor(const json& jsonObj,
32                            const std::vector<Group>& groups) :
33     ActionBase(jsonObj, groups)
34 {
35     // There are no JSON configuration parameters for this action
36 }
37 
38 void DefaultFloor::run(Zone& zone)
39 {
40     for (const auto& group : _groups)
41     {
42         const auto& members = group.getMembers();
43         auto isMissingOwner =
44             std::any_of(members.begin(), members.end(),
45                         [&intf = group.getInterface()](const auto& member) {
46                             return !Manager::hasOwner(member, intf);
47                         });
48         if (isMissingOwner)
49         {
50             zone.setFloor(zone.getDefaultFloor());
51         }
52         // Update fan control floor change allowed
53         zone.setFloorChangeAllow(group.getName(), !isMissingOwner);
54     }
55 }
56 
57 } // namespace phosphor::fan::control::json
58