Imported Upstream version 0.8~alpha1
[platform/upstream/syncevolution.git] / src / client-api / src / c++ / common / syncml / core / Atomic.cpp
1 /*
2  * Funambol is a mobile platform developed by Funambol, Inc. 
3  * Copyright (C) 2003 - 2007 Funambol, Inc.
4  * 
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU Affero General Public License version 3 as published by
7  * the Free Software Foundation with the addition of the following permission 
8  * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
9  * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE 
10  * WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS.
11  * 
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
15  * details.
16  * 
17  * You should have received a copy of the GNU Affero General Public License 
18  * along with this program; if not, see http://www.gnu.org/licenses or write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20  * MA 02110-1301 USA.
21  * 
22  * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite 
23  * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com.
24  * 
25  * The interactive user interfaces in modified source and object code versions
26  * of this program must display Appropriate Legal Notices, as required under
27  * Section 5 of the GNU Affero General Public License version 3.
28  * 
29  * In accordance with Section 7(b) of the GNU Affero General Public License
30  * version 3, these Appropriate Legal Notices must retain the display of the
31  * "Powered by Funambol" logo. If the display of the logo is not reasonably 
32  * feasible for technical reasons, the Appropriate Legal Notices must display
33  * the words "Powered by Funambol".
34  */
35
36
37 #include "syncml/core/Atomic.h"
38 #include "base/globalsdef.h"
39
40 USE_NAMESPACE
41
42 Atomic::Atomic() {
43     COMMAND_NAME = new char[strlen(ATOMIC_COMMAND_NAME) + 1];
44     sprintf(COMMAND_NAME, ATOMIC_COMMAND_NAME);
45     commands = new ArrayList();
46 }
47
48 Atomic::~Atomic() {
49     if (COMMAND_NAME) {
50         delete [] COMMAND_NAME; COMMAND_NAME = NULL;
51     }
52     if (commands) {
53         commands->clear(); //delete commands; commands = NULL;
54     }
55 }
56
57 /**
58 * Creates a new Atomic object with the given command identifier, noResponse,
59 * meta and an array of abstract command
60 *
61 * @param cmdID the command identifier - NOT NULL
62 * @param noResp is true if no response is required
63 * @param meta the meta data
64 * @param commands an array of abstract command - NOT NULL
65 */
66 Atomic::Atomic( CmdID*     cmdID,
67                 bool       noResp,
68                 Meta*      meta,
69                 ArrayList* commands) : AbstractCommand(cmdID) {
70
71     this->commands = new ArrayList();
72     COMMAND_NAME = new char[strlen(ATOMIC_COMMAND_NAME) + 1];
73     sprintf(COMMAND_NAME, ATOMIC_COMMAND_NAME);
74
75     setNoResp(noResp);
76     setMeta(meta);
77     setCommands(commands);
78
79 }
80
81 /**
82 * Gets an array of AbstractCommand
83 *
84 * @return an array of command objects
85 */
86 ArrayList* Atomic::getCommands() {
87     return commands;
88 }
89
90 /**
91 * Sets an array of AbstractCommand
92 *
93 * @param commands the array of AbstractCommand
94 *
95 */
96 void Atomic::setCommands(ArrayList* commands) {
97      bool err = false;
98     if (commands == NULL) {
99         // TBD
100         err = true;
101     }
102     for (int i = 0; i < commands->size(); i++) {
103         if (commands->get(i) == NULL) {
104             // TBD
105             err = true;
106         }
107     }
108     if (err == false) {
109         this->commands->clear();
110         this->commands = commands->clone();
111     }
112 }
113 /**
114 * Gets the command name property
115 *
116 * @return the command name property
117 */
118 const char* Atomic::getName() {
119     return COMMAND_NAME;
120 }
121
122 ArrayElement* Atomic::clone() {
123     Atomic* ret = new Atomic(getCmdID(), getNoResp(), getMeta(), commands);
124     return ret;
125
126 }