9532e2c2550b1b496676fee65a57730675d46e8e
[profile/ivi/layer-management.git] / LayerManagerCommands / src / CommitCommand.cpp
1 /***************************************************************************
2 *
3 * Copyright 2010,2011 BMW Car IT GmbH
4 *
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 *        http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *
18 ****************************************************************************/
19 #include "CommitCommand.h"
20 #include "ICommandExecutor.h"
21 #include "Scene.h"
22 #include "Log.h"
23
24 ExecutionResult CommitCommand::execute(ICommandExecutor* executor)
25 {
26     bool success = true;
27     bool redraw = false;
28
29     Scene* scene = (executor->getScene());
30
31     CommandListIterator iter = scene->m_toBeCommittedList.begin();
32     CommandListIterator iterEnd = scene->m_toBeCommittedList.end();
33
34     for (; iter != iterEnd; ++iter)
35     {
36         ICommand* command = (*iter);
37         if (command)
38         {
39             bool commandExecuteSuccess = true;
40             ExecutionResult result = command->execute(executor);
41
42             if (result == ExecutionFailed || result == ExecutionFailedRedraw)
43             {
44                 success = false;
45                 commandExecuteSuccess = false;
46             }
47
48             if (result == ExecutionFailedRedraw || result == ExecutionSuccessRedraw)
49             {
50                 redraw = true;
51             }
52
53             unsigned int pid = command->getSenderPid();
54             LOG_INFO("CommitCommand", "executed " << command->getString()
55                     << " from " << executor->getSenderName(pid) << "(" << pid << ")"
56                     << (commandExecuteSuccess ? "+" : "-"));
57             delete command;
58         }
59     }
60     scene->m_toBeCommittedList.clear();
61
62     ExecutionResult returnValue = ExecutionFailed;
63
64     if (success)
65     {
66         if (redraw)
67         {
68             returnValue = ExecutionSuccessRedraw;
69         }
70         else
71         {
72             returnValue = ExecutionSuccess;
73         }
74     }
75     else
76     {
77         if (redraw)
78         {
79             returnValue = ExecutionFailedRedraw;
80         }
81         else
82         {
83             returnValue = ExecutionFailed;
84         }
85     }
86     return returnValue;
87 }
88
89 const std::string CommitCommand::getString()
90 {
91     return "CommitCommand()";
92 }