00001 /* 00002 * Funambol is a mobile platform developed by Funambol, Inc. 00003 * Copyright (C) 2003 - 2007 Funambol, Inc. 00004 * 00005 * This program is free software; you can redistribute it and/or modify it under 00006 * the terms of the GNU Affero General Public License version 3 as published by 00007 * the Free Software Foundation with the addition of the following permission 00008 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED 00009 * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE 00010 * WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. 00011 * 00012 * This program is distributed in the hope that it will be useful, but WITHOUT 00013 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00014 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 00015 * details. 00016 * 00017 * You should have received a copy of the GNU Affero General Public License 00018 * along with this program; if not, see http://www.gnu.org/licenses or write to 00019 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 00020 * MA 02110-1301 USA. 00021 * 00022 * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite 00023 * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com. 00024 * 00025 * The interactive user interfaces in modified source and object code versions 00026 * of this program must display Appropriate Legal Notices, as required under 00027 * Section 5 of the GNU Affero General Public License version 3. 00028 * 00029 * In accordance with Section 7(b) of the GNU Affero General Public License 00030 * version 3, these Appropriate Legal Notices must retain the display of the 00031 * "Powered by Funambol" logo. If the display of the logo is not reasonably 00032 * feasible for technical reasons, the Appropriate Legal Notices must display 00033 * the words "Powered by Funambol". 00034 */ 00035 #ifndef INCL_DM_CONFIG 00036 #define INCL_DM_CONFIG 00037 /** @cond API */ 00038 /** @addtogroup Client */ 00039 /** @{ */ 00040 00041 #include "base/fscapi.h" 00042 #include "http/constants.h" 00043 #include "spdm/constants.h" 00044 #include "spds/SyncManagerConfig.h" 00045 #include "spds/AccessConfig.h" 00046 #include "spds/DeviceConfig.h" 00047 #include "spds/SyncSourceConfig.h" 00048 #include "spdm/ManagementNode.h" 00049 #include "base/globalsdef.h" 00050 00051 BEGIN_NAMESPACE 00052 00053 class DMTree; 00054 00055 /** 00056 * This class is an extension of SyncManagerConfig that is DM tree aware; this 00057 * means that configuration properties are read/stored from/to the DM tree. 00058 * 00059 * @todo describe the properties of the DM tree and how they are grouped into device info, 00060 * additional device info, extended device info, etc. 00061 */ 00062 class DMTClientConfig : public SyncManagerConfig { 00063 00064 protected: 00065 00066 char* rootContext; 00067 00068 DMTree* dmt; 00069 ManagementNode* syncMLNode; 00070 ManagementNode* sourcesNode; 00071 00072 void initialize(); 00073 DMTClientConfig(); 00074 00075 /* top level functions */ 00076 virtual bool readAccessConfig(ManagementNode& n); 00077 virtual void saveAccessConfig(ManagementNode& n); 00078 virtual bool readDeviceConfig(ManagementNode& n); 00079 virtual void saveDeviceConfig(ManagementNode& n); 00080 virtual bool readSourceConfig(int i, ManagementNode& n); 00081 virtual void saveSourceConfig(int i, ManagementNode& n); 00082 00083 /** 00084 * Called by readAccessConfig() to save authentication 00085 * settings. The purpose of making this function virtual is 00086 * that a derived class can override it and then to read the 00087 * settings from a different than the default 00088 * "spds/syncml/auth" node by calling the base function with a 00089 * different \a authNode parameter or generate the settings in 00090 * some other way. 00091 * 00092 * @param syncMLNode the "spds/syncml" node 00093 * @param authNode the "spds/syncml/auth" node 00094 */ 00095 virtual bool readAuthConfig(ManagementNode& syncMLNode, 00096 ManagementNode& authNode); 00097 /** 00098 * Same as readAccessConfig() for saving the settings. 00099 * 00100 * @param syncMLNode the "spds/syncml" node 00101 * @param authNode the "spds/syncml/auth" node 00102 */ 00103 virtual void saveAuthConfig(ManagementNode& syncMLNode, 00104 ManagementNode& authNode); 00105 00106 /** 00107 * Same as readAccessConfig() for reading connection 00108 * information. 00109 * 00110 * @param syncMLNode the "spds/syncml" node 00111 * @param connNode the "spds/syncml/conn" node 00112 */ 00113 virtual bool readConnConfig(ManagementNode& syncMLNode, 00114 ManagementNode& connNode); 00115 /** 00116 * Same as readAccessConfig() for saving connection 00117 * information. 00118 * 00119 * @param syncMLNode the "spds/syncml" node 00120 * @param connNode the "spds/syncml/conn" node 00121 */ 00122 virtual void saveConnConfig(ManagementNode& syncMLNode, 00123 ManagementNode& connNode); 00124 00125 /** 00126 * Same as readAccessConfig() for reading additional access 00127 * information. 00128 * 00129 * @param syncMLNode the "spds/syncml" node 00130 * @param extNode the "spds/syncml/ext" node 00131 */ 00132 virtual bool readExtAccessConfig(ManagementNode& syncMLNode, 00133 ManagementNode& extNode); 00134 /** 00135 * Same as readAccessConfig() for saving additional access 00136 * information. 00137 * 00138 * @param syncMLNode the "spds/syncml" node 00139 * @param extNode the "spds/syncml/ext" node 00140 */ 00141 virtual void saveExtAccessConfig(ManagementNode& syncMLNode, 00142 ManagementNode& extNode); 00143 00144 /** 00145 * Same as readAccessConfig() for reading device information. 00146 * 00147 * @param syncMLNode the "spds/syncml" node 00148 * @param devInfoNode the "spds/syncml/devinfo" node 00149 */ 00150 virtual bool readDevInfoConfig(ManagementNode& syncMLNode, 00151 ManagementNode& devInfoNode); 00152 /** 00153 * Same as readAccessConfig() for saving device information. 00154 * 00155 * @param syncMLNode the "spds/syncml" node 00156 * @param devInfoNode the "spds/syncml/devinfo" node 00157 */ 00158 virtual void saveDevInfoConfig(ManagementNode& syncMLNode, 00159 ManagementNode& devInfoNode); 00160 00161 /** 00162 * Same as readAccessConfig() for reading additional device 00163 * information. 00164 * 00165 * @param syncMLNode the "spds/syncml" node 00166 * @param devDetailNode the "spds/syncml/devdetail" node 00167 */ 00168 virtual bool readDevDetailConfig(ManagementNode& syncMLNode, 00169 ManagementNode& devDetailNode); 00170 /** 00171 * Same as readAccessConfig() for saving additional device 00172 * information. 00173 * 00174 * @param syncMLNode the "spds/syncml" node 00175 * @param devDetailNode the "spds/syncml/devdetail" node 00176 */ 00177 virtual void saveDevDetailConfig(ManagementNode& syncMLNode, 00178 ManagementNode& devDetailNode); 00179 00180 /** 00181 * Same as readAccessConfig() for reading some more additional 00182 * device information. 00183 * 00184 * @param syncMLNode the "spds/syncml" node 00185 * @param extNode the "spds/syncml/ext" node 00186 */ 00187 virtual bool readExtDevConfig(ManagementNode& syncMLNode, 00188 ManagementNode& extNode); 00189 /** 00190 * Same as readAccessConfig() for saving some more additional 00191 * device information. 00192 * 00193 * @param syncMLNode the "spds/syncml" node 00194 * @param extNode the "spds/syncml/ext" node 00195 */ 00196 virtual void saveExtDevConfig(ManagementNode& syncMLNode, 00197 ManagementNode& extNode); 00198 00199 /** 00200 * Same as readAccessConfig() for reading variables that the 00201 * library uses internally, like anchors. 00202 * 00203 * @param i index of the source 00204 * @param sourcesNode the "spds/sources" node 00205 * @param sourceNode the "spds/sources/<source name>" node 00206 */ 00207 virtual bool readSourceVars(int i, 00208 ManagementNode& sourcesNode, 00209 ManagementNode& sourceNode); 00210 00211 /** 00212 * Same as readAccessConfig() for saveing variables that the 00213 * library uses internally, like anchors. 00214 * 00215 * @param i index of the source 00216 * @param sourcesNode the "spds/sources" node 00217 * @param sourceNode the "spds/sources/<source name>" node 00218 */ 00219 virtual void saveSourceVars(int i, 00220 ManagementNode& sourcesNode, 00221 ManagementNode& sourceNode); 00222 00223 /** 00224 * Same as readAccessConfig() for reading the normal 00225 * properties of a sync source, i.e. excluding variables like 00226 * anchors. 00227 * 00228 * @param i index of the source 00229 * @param sourcesNode the "spds/sources" node 00230 * @param sourceNode the "spds/sources/<source name>" node 00231 */ 00232 virtual bool readSourceConfig(int i, 00233 ManagementNode& sourcesNode, 00234 ManagementNode& sourceNode); 00235 00236 /** 00237 * Same as readAccessConfig() for reading the normal 00238 * properties of a sync source, i.e. excluding variables like 00239 * anchors. 00240 * 00241 * @param i index of the source 00242 * @param sourcesNode the "spds/sources" node 00243 * @param sourceNode the "spds/sources/<source name>" node 00244 */ 00245 virtual void saveSourceConfig(int i, 00246 ManagementNode& sourcesNode, 00247 ManagementNode& sourceNode); 00248 00249 public: 00250 00251 DMTClientConfig(const char* root); 00252 00253 ~DMTClientConfig(); 00254 00255 SyncSourceConfig* getSyncSourceConfig(const char* name, bool refresh = false); 00256 SyncSourceConfig* getSyncSourceConfig(unsigned int i, bool refresh = false); 00257 00258 virtual bool read(); 00259 virtual bool save(); 00260 00261 /** 00262 * Opens the configuration backend associated with the root context. 00263 * Calling on an open config does nothing. 00264 * 00265 * @return true for success 00266 */ 00267 virtual bool open(); 00268 00269 /** 00270 * Provides access to the "syncml" configuration node, 00271 * can be used to read/write custom configuration options. 00272 * Config must have been opened before. 00273 * 00274 * @return node pointer owned by config and valid while the config is open 00275 */ 00276 virtual ManagementNode* getSyncMLNode(); 00277 00278 /** 00279 * Gets number of sync source configurations, -1 if not open. 00280 */ 00281 virtual int getNumSources(); 00282 00283 /** 00284 * Get the specified sync source configuration. 00285 * 00286 * @param index number of the requested sync source configuration 00287 * @return node pointer owned by config and valid while the config is open 00288 */ 00289 virtual ManagementNode* getSyncSourceNode(int index); 00290 00291 /** 00292 * Get the specified sync source configuration by name. 00293 */ 00294 virtual ManagementNode* getSyncSourceNode(const char* name); 00295 00296 /** 00297 * Closes the configuration backend. Frees all resources associated 00298 * with and invalidates all ManagementNode pointers returned by this 00299 * config. 00300 */ 00301 virtual void close(); 00302 }; 00303 00304 00305 END_NAMESPACE 00306 00307 /** @} */ 00308 /** @endcond */ 00309 #endif