PageRenderTime 53ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/sblim-cmpi-samba-1.0/provider/Linux_SambaShareOptions/CmpiLinux_SambaShareOptionsProvider.cpp

#
C++ | 446 lines | 222 code | 89 blank | 135 comment | 7 complexity | d8ba9ddebc8a44c0d19b778ffe5182e8 MD5 | raw file
Possible License(s): EPL-1.0
  1. // =======================================================================
  2. // CmpiLinux_SambaShareOptionsProvider.cpp
  3. // created on Fri, 23 Jun 2006 using ECUTE 2.2.1
  4. //
  5. // Copyright (c) 2006, 2009, International Business Machines
  6. //
  7. // THIS FILE IS PROVIDED UNDER THE TERMS OF THE ECLIPSE PUBLIC LICENSE
  8. // ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE
  9. // CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT.
  10. //
  11. // You can obtain a current copy of the Eclipse Public License from
  12. // http://www.opensource.org/licenses/eclipse-1.0.php
  13. //
  14. // Author: generated
  15. //
  16. // Contributors:
  17. // Wolfgang Taphorn <taphorn@de.ibm.com>
  18. // Mukunda Chowdaiah <cmukunda@in.ibm.com>
  19. // Ashoka S Rao <ashoka.rao@in.ibm.com>
  20. // Rodrigo Ceron <rceron@br.ibm.com>
  21. // Riyashmon Haneefa <riyashh1@in.ibm.com>
  22. //
  23. // =======================================================================
  24. #include "CmpiLinux_SambaShareOptionsProvider.h"
  25. #include "ArrayConverter.h"
  26. #include "Linux_SambaShareOptionsManualInstance.h"
  27. #include "Linux_SambaShareOptionsRepositoryInstance.h"
  28. #include <iostream>
  29. #include <strings.h>
  30. namespace genProvider {
  31. //----------------------------------------------------------------------------
  32. CmpiLinux_SambaShareOptionsProvider::CmpiLinux_SambaShareOptionsProvider(
  33. const CmpiBroker& aBroker,
  34. const CmpiContext& aContext)
  35. : CmpiBaseMI(aBroker,aContext),
  36. CmpiInstanceMI(aBroker,aContext),
  37. CmpiMethodMI(aBroker,aContext),
  38. m_cmpiBroker(aBroker) {
  39. m_interfaceP = Linux_SambaShareOptionsFactory::getImplementation();
  40. #ifdef DEBUG
  41. std::cout << "Provider was constructed" << std::endl;
  42. #endif
  43. }
  44. //----------------------------------------------------------------------------
  45. CmpiLinux_SambaShareOptionsProvider::~CmpiLinux_SambaShareOptionsProvider() {
  46. delete m_interfaceP;
  47. }
  48. //----------------------------------------------------------------------------
  49. int
  50. CmpiLinux_SambaShareOptionsProvider::isUnloadable() const {
  51. return 0;
  52. }
  53. //----------------------------------------------------------------------------
  54. void
  55. CmpiLinux_SambaShareOptionsProvider::completeInstance(
  56. const Linux_SambaShareOptionsInstanceName& anInstanceName,
  57. CmpiInstance& anInstance,
  58. const CmpiContext& aContext) {
  59. Linux_SambaShareOptionsInstanceName shadowInstanceName(anInstanceName);
  60. shadowInstanceName.setNamespace("IBMShadow/cimv2");
  61. CmpiObjectPath cmpiObjectPath = shadowInstanceName.getObjectPath();
  62. try {
  63. const char* propertiesP = 0;
  64. CmpiInstance shadowInstance = m_cmpiBroker.getInstance(
  65. aContext,
  66. cmpiObjectPath,
  67. &propertiesP);
  68. copyShadowData(&shadowInstance,&anInstance);
  69. } catch (const CmpiStatus& rc) {}
  70. }
  71. //----------------------------------------------------------------------------
  72. void
  73. CmpiLinux_SambaShareOptionsProvider::copyShadowData(
  74. const CmpiInstance* aSourceInstanceP,
  75. CmpiInstance* aTargetInstanceP) {
  76. if (aSourceInstanceP && aTargetInstanceP) {
  77. }
  78. }
  79. //----------------------------------------------------------------------------
  80. CmpiInstance*
  81. CmpiLinux_SambaShareOptionsProvider::getShadowInstance(
  82. const CmpiInstance& anInstance,
  83. const Linux_SambaShareOptionsInstanceName& anInstanceName) {
  84. Linux_SambaShareOptionsInstanceName shadowInstanceName(anInstanceName);
  85. shadowInstanceName.setNamespace("IBMShadow/cimv2");
  86. CmpiObjectPath cmpiObjectPath = shadowInstanceName.getObjectPath();
  87. CmpiInstance* targetP = new CmpiInstance(cmpiObjectPath);
  88. if (targetP) {
  89. copyShadowData(&anInstance,targetP);
  90. if (0 == targetP->getPropertyCount()) {
  91. delete targetP;
  92. targetP = 0;
  93. }
  94. }
  95. return targetP;
  96. }
  97. //----------------------------------------------------------------------------
  98. void
  99. CmpiLinux_SambaShareOptionsProvider::removeDanglingShadowInstances (
  100. const Linux_SambaShareOptionsInstanceNameEnumeration& anInstanceNameEnumerations) {
  101. // TODO: enumerate shadow instance names and remove those not included
  102. // in anInstanceNameEnumeration
  103. }
  104. //----------------------------------------------------------------------------
  105. // Provider Factory
  106. //----------------------------------------------------------------------------
  107. CMProviderBase(CmpiLinux_SambaShareOptionsProvider);
  108. CMInstanceMIFactory(
  109. CmpiLinux_SambaShareOptionsProvider,
  110. CmpiLinux_SambaShareOptionsProvider);
  111. CMMethodMIFactory(
  112. CmpiLinux_SambaShareOptionsProvider,
  113. CmpiLinux_SambaShareOptionsProvider);
  114. //----------------------------------------------------------------------------
  115. // Instance Provider Interface
  116. //----------------------------------------------------------------------------
  117. //----------------------------------------------------------------------------
  118. CmpiStatus
  119. CmpiLinux_SambaShareOptionsProvider::enumInstanceNames(
  120. const CmpiContext& aContext,
  121. CmpiResult& aResult,
  122. const CmpiObjectPath& aCop) {
  123. #ifdef DEBUG
  124. std::cout << "enumerating instanceNames" << std::endl;
  125. #endif
  126. CmpiString nameSpace = aCop.getNameSpace();
  127. const char* nameSpaceP = nameSpace.charPtr();
  128. Linux_SambaShareOptionsInstanceNameEnumeration enumeration;
  129. m_interfaceP->enumInstanceNames(
  130. aContext,
  131. m_cmpiBroker,
  132. nameSpaceP,
  133. enumeration);
  134. while (enumeration.hasNext() ){
  135. const Linux_SambaShareOptionsInstanceName& instanceName = enumeration.getNext();
  136. CmpiObjectPath objectPath = instanceName.getObjectPath();
  137. aResult.returnData(objectPath);
  138. }
  139. // we make housekeeping
  140. removeDanglingShadowInstances(enumeration);
  141. aResult.returnDone();
  142. return CmpiStatus(CMPI_RC_OK);
  143. }
  144. //----------------------------------------------------------------------------
  145. CmpiStatus
  146. CmpiLinux_SambaShareOptionsProvider::enumInstances(
  147. const CmpiContext& aContext,
  148. CmpiResult& aResult,
  149. const CmpiObjectPath& aCop,
  150. const char** aPropertiesPP) {
  151. #ifdef DEBUG
  152. std::cout << "enumerating instances" << std::endl;
  153. #endif
  154. CmpiString nameSpace = aCop.getNameSpace();
  155. const char* nameSpaceP = nameSpace.charPtr();
  156. Linux_SambaShareOptionsManualInstanceEnumeration enumeration;
  157. m_interfaceP->enumInstances(
  158. aContext,
  159. m_cmpiBroker,
  160. nameSpaceP,
  161. aPropertiesPP,
  162. enumeration);
  163. #ifdef DEBUG
  164. std::cout << "enumerated" << std::endl;
  165. #endif
  166. while (enumeration.hasNext()) {
  167. const Linux_SambaShareOptionsManualInstance& instance = enumeration.getNext();
  168. #ifdef DEBUG
  169. std::cout << "enumerating getNext" << std::endl;
  170. #endif
  171. CmpiInstance cmpiInstance = instance.getCmpiInstance(aPropertiesPP);
  172. #ifdef DEBUG
  173. std::cout << "transformed" << std::endl;
  174. #endif
  175. //add the static data
  176. // MJ: No, this is done in the implementation (or DefaultImplementation)
  177. // completeInstance(instance.getInstanceName(),cmpiInstance,aContext);
  178. aResult.returnData(cmpiInstance);
  179. }
  180. aResult.returnDone();
  181. return CmpiStatus(CMPI_RC_OK);
  182. }
  183. //----------------------------------------------------------------------------
  184. CmpiStatus
  185. CmpiLinux_SambaShareOptionsProvider::getInstance (
  186. const CmpiContext& aContext,
  187. CmpiResult& aResult,
  188. const CmpiObjectPath& aCop,
  189. const char** aPropertiesPP) {
  190. // convert to instanceName
  191. Linux_SambaShareOptionsInstanceName instanceName(aCop);
  192. /*
  193. CmpiInstance* repositoryCmpiInstanceP = 0;
  194. // try to fetch repository instance
  195. try {
  196. Linux_SambaShareOptionsInstanceName repositoryInstanceName(instanceName);
  197. repositoryInstanceName.setNamespace("IBMShadow/cimv2");
  198. CmpiObjectPath repositoryCmpiObjectPath = repositoryInstanceName.getObjectPath();
  199. repositoryCmpiInstanceP = new CmpiInstance(
  200. m_cmpiBroker.getInstance(
  201. aContext,
  202. repositoryCmpiObjectPath,
  203. aPropertiesPP));
  204. } catch (const CmpiStatus& rc) { }
  205. */
  206. // get instance for instanceName
  207. Linux_SambaShareOptionsManualInstance instance;
  208. instance = m_interfaceP->getInstance(
  209. aContext,
  210. m_cmpiBroker,
  211. aPropertiesPP,
  212. instanceName);
  213. // convert the instance in a cmpiInstance
  214. CmpiInstance cmpiInstance = instance.getCmpiInstance(aPropertiesPP);
  215. /*
  216. // add the static data
  217. copyShadowData(repositoryCmpiInstanceP,&cmpiInstance);
  218. if (repositoryCmpiInstanceP) {
  219. delete repositoryCmpiInstanceP;
  220. }
  221. */
  222. aResult.returnData(cmpiInstance);
  223. aResult.returnDone();
  224. return CmpiStatus(CMPI_RC_OK);
  225. }
  226. //----------------------------------------------------------------------------
  227. CmpiStatus
  228. CmpiLinux_SambaShareOptionsProvider::createInstance (
  229. const CmpiContext& aContext,
  230. CmpiResult& aResult,
  231. const CmpiObjectPath& aCop,
  232. const CmpiInstance& aCmpiInstance) {
  233. Linux_SambaShareOptionsManualInstance manualInstance(
  234. aCmpiInstance,
  235. aCop.getNameSpace().charPtr());
  236. //REPOSITORY DATA
  237. // CmpiInstance* backupShadowInstanceP = 0;
  238. // CmpiInstance shadowInstance =
  239. // Linux_SambaShareOptionsRepositoryInstance(aCmpiInstance,"IBMShadow/cimv2").getCmpiInstance(0);
  240. //
  241. // //We keep a backup of the existing data for recovering previous
  242. // //state if the resource access raise an exception
  243. // CmpiObjectPath shadowOp = shadowInstance.getObjectPath();
  244. // try {
  245. // backupShadowInstanceP = new CmpiInstance(
  246. // m_cmpiBroker.getInstance(aContext,shadowOp,0));
  247. // //if the shadow instance exist we delete it
  248. // m_cmpiBroker.deleteInstance(aContext,shadowOp);
  249. // } catch (CmpiStatus& rc) {}
  250. // m_cmpiBroker.createInstance(aContext,shadowOp,shadowInstance);
  251. //
  252. // resource access data (manual instance)
  253. try {
  254. aResult.returnData(m_interfaceP->createInstance(aContext, m_cmpiBroker, manualInstance).
  255. getObjectPath());
  256. } catch (CmpiStatus& rc) {
  257. // //If something went wrong we recover the previous state
  258. // m_cmpiBroker.deleteInstance(aContext,shadowOp);
  259. // if (backupShadowInstanceP) {
  260. // m_cmpiBroker.createInstance(aContext,shadowOp,*backupShadowInstanceP);
  261. // }
  262. throw rc;
  263. }
  264. // if (backupShadowInstanceP) {
  265. // delete(backupShadowInstanceP);
  266. // }
  267. aResult.returnDone();
  268. return CmpiStatus(CMPI_RC_OK);
  269. }
  270. //----------------------------------------------------------------------------
  271. CmpiStatus
  272. CmpiLinux_SambaShareOptionsProvider::setInstance (
  273. const CmpiContext& aContext,
  274. CmpiResult& aResult,
  275. const CmpiObjectPath& aCop,
  276. const CmpiInstance& aCmpiInstance,
  277. const char** aPropertiesPP) {
  278. Linux_SambaShareOptionsManualInstance manualInstance(
  279. aCmpiInstance,
  280. aCop.getNameSpace().charPtr());
  281. //REPOSITORY DATA
  282. // CmpiInstance* backupShadowInstanceP = 0;
  283. // CmpiInstance shadowInstance =
  284. // Linux_SambaShareOptionsRepositoryInstance(aCmpiInstance,"IBMShadow/cimv2").getCmpiInstance(0);
  285. //
  286. // //We keep a backup of the existing data for recovering previous
  287. // //state if the resource access raise an exception
  288. // CmpiObjectPath shadowOp = shadowInstance.getObjectPath();
  289. // try {
  290. // backupShadowInstanceP = new CmpiInstance(
  291. // m_cmpiBroker.getInstance(aContext,shadowOp,0));
  292. // } catch (CmpiStatus& rc) {}
  293. //
  294. // //if the instance existed before we delete it
  295. // //(setInstance is buggy in Pegasus)
  296. // if (backupShadowInstanceP) {
  297. // m_cmpiBroker.setInstance(aContext,shadowOp,shadowInstance,aPropertiesPP);
  298. // } else {
  299. // m_cmpiBroker.createInstance(aContext,shadowOp,shadowInstance);
  300. // }
  301. // resource access data (manual instance)
  302. try {
  303. m_interfaceP->setInstance(aContext,m_cmpiBroker,aPropertiesPP,manualInstance);
  304. } catch (CmpiStatus& rc) {
  305. //If something went wrong we recover the previous state
  306. // m_cmpiBroker.deleteInstance(aContext,shadowOp);
  307. // if (backupShadowInstanceP) {
  308. // m_cmpiBroker.createInstance(aContext,shadowOp,*backupShadowInstanceP);
  309. // }
  310. throw rc;
  311. }
  312. // if (backupShadowInstanceP) {
  313. // delete backupShadowInstanceP;
  314. // }
  315. aResult.returnDone();
  316. return CmpiStatus(CMPI_RC_OK);
  317. }
  318. //----------------------------------------------------------------------------
  319. CmpiStatus
  320. CmpiLinux_SambaShareOptionsProvider::deleteInstance(
  321. const CmpiContext& aContext,
  322. CmpiResult& aResult,
  323. const CmpiObjectPath& aCop) {
  324. Linux_SambaShareOptionsInstanceName instanceName = Linux_SambaShareOptionsInstanceName(aCop);
  325. m_interfaceP->deleteInstance(aContext,m_cmpiBroker,instanceName);
  326. // instanceName.setNamespace("IBMShadow/cimv2");
  327. // CmpiObjectPath op = instanceName.getObjectPath();
  328. //
  329. // try { // The instance could not have static data
  330. // m_cmpiBroker.deleteInstance(aContext,op);
  331. // } catch (CmpiStatus& rc) {}
  332. aResult.returnDone();
  333. return CmpiStatus(CMPI_RC_OK);
  334. }
  335. //----------------------------------------------------------------------------
  336. CmpiStatus
  337. CmpiLinux_SambaShareOptionsProvider::invokeMethod(
  338. const CmpiContext& aContext,
  339. CmpiResult& aResult,
  340. const CmpiObjectPath& aCop,
  341. const char* aMethodNameP,
  342. const CmpiArgs& in,
  343. CmpiArgs& out) {
  344. Linux_SambaShareOptionsInstanceName instanceName = Linux_SambaShareOptionsInstanceName(aCop);
  345. {
  346. aResult.returnDone();
  347. return CmpiErrorFormater::getErrorException(
  348. CmpiErrorFormater::METHOD_NOT_FOUND,
  349. aMethodNameP,
  350. "Linux_SambaShareOptions");
  351. }
  352. aResult.returnDone();
  353. return CmpiStatus(CMPI_RC_OK);
  354. }
  355. }