1 martin 1.2 //%LICENSE////////////////////////////////////////////////////////////////
|
2 martin 1.3 //
|
3 martin 1.2 // Licensed to The Open Group (TOG) under one or more contributor license
4 // agreements. Refer to the OpenPegasusNOTICE.txt file distributed with
5 // this work for additional information regarding copyright ownership.
6 // Each contributor licenses this file to you under the OpenPegasus Open
7 // Source License; you may not use this file except in compliance with the
8 // License.
|
9 martin 1.3 //
|
10 martin 1.2 // Permission is hereby granted, free of charge, to any person obtaining a
11 // copy of this software and associated documentation files (the "Software"),
12 // to deal in the Software without restriction, including without limitation
13 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
14 // and/or sell copies of the Software, and to permit persons to whom the
15 // Software is furnished to do so, subject to the following conditions:
|
16 martin 1.3 //
|
17 martin 1.2 // The above copyright notice and this permission notice shall be included
18 // in all copies or substantial portions of the Software.
|
19 martin 1.3 //
|
20 martin 1.2 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
21 martin 1.3 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
22 martin 1.2 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
24 // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25 // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
27 martin 1.3 //
|
28 martin 1.2 //////////////////////////////////////////////////////////////////////////
|
29 venkat.puvvada 1.1 //
30 //%/////////////////////////////////////////////////////////////////////////////
31
32 #include <Pegasus/Common/Tracer.h>
|
33 venkat.puvvada 1.9.2.1 #include <Pegasus/Common/StringConversion.h>
|
34 venkat.puvvada 1.1
|
35 venkat.puvvada 1.6 #include "IndicationService.h"
|
36 venkat.puvvada 1.1 #include "IndicationConstants.h"
37 #include "IndicationServiceConfiguration.h"
38
39 PEGASUS_NAMESPACE_BEGIN
40
|
41 venkat.puvvada 1.9.2.1 static Uint32 _getConfigValue(const String &name)
42 {
43 Uint64 v;
44 ConfigManager* configManager = ConfigManager::getInstance();
45 String strValue = configManager->getCurrentValue(name);
46 StringConversion::decimalStringToUint64(strValue.getCString(), v);
47
48 return (Uint32)v;
49 }
50
|
51 venkat.puvvada 1.1 IndicationServiceConfiguration::IndicationServiceConfiguration(
52 CIMRepository * repository)
53 : _cimRepository (repository)
54 {
|
55 ajay.rao 1.8 _enabledState = _ENABLEDSTATE_DISABLED;
56 _healthState = _HEALTHSTATE_OK;
|
57 venkat.puvvada 1.1 }
58
59 IndicationServiceConfiguration::~IndicationServiceConfiguration()
60 {
61 }
62
63 CIMInstance IndicationServiceConfiguration::getInstance(
64 const CIMNamespaceName & nameSpace,
65 const CIMObjectPath & instanceName,
66 Boolean includeQualifiers,
67 Boolean includeClassOrigin,
68 const CIMPropertyList & propertyList)
69 {
70 CIMInstance instance;
71
72 if (instanceName.getClassName().equal(
73 PEGASUS_CLASSNAME_CIM_INDICATIONSERVICE))
74 {
75 instance = _getIndicationServiceInstance(
76 includeQualifiers,
77 includeClassOrigin,
78 venkat.puvvada 1.1 propertyList);
79 }
80 else
81 {
82 PEGASUS_ASSERT(instanceName.getClassName().equal(
83 PEGASUS_CLASSNAME_CIM_INDICATIONSERVICECAPABILITIES));
84 instance = _getIndicationServiceCapabilitiesInstance(
85 includeQualifiers,
86 includeClassOrigin,
87 propertyList);
88 }
89 CIMObjectPath path = instanceName;
90 path.setNameSpace(nameSpace);
91
92 if (!path.identical(instance.getPath()))
93 {
94 throw PEGASUS_CIM_EXCEPTION(
95 CIM_ERR_NOT_FOUND,
96 instanceName.toString());
97 }
98
99 venkat.puvvada 1.1 return instance;
100 }
101
102 Array<CIMInstance> IndicationServiceConfiguration::
103 enumerateInstancesForClass(
104 const CIMNamespaceName & nameSpace,
105 const CIMName & className,
106 Boolean includeQualifiers,
107 Boolean includeClassOrigin,
108 const CIMPropertyList & propertyList)
109 {
110 Array<CIMInstance> instances;
111 if (className.equal(PEGASUS_CLASSNAME_CIM_INDICATIONSERVICE))
112 {
113 instances.append(_getIndicationServiceInstance(
114 includeQualifiers,
115 includeClassOrigin,
116 propertyList));
117 }
118 else
119 {
120 venkat.puvvada 1.1 PEGASUS_ASSERT(className.equal(
121 PEGASUS_CLASSNAME_CIM_INDICATIONSERVICECAPABILITIES));
122 instances.append(_getIndicationServiceCapabilitiesInstance(
123 includeQualifiers,
124 includeClassOrigin,
125 propertyList));
126 }
127
128 return instances;
129 }
130
131 Array <CIMObjectPath> IndicationServiceConfiguration::
132 enumerateInstanceNamesForClass(
133 const CIMNamespaceName & nameSpace,
134 const CIMName & className)
135 {
136 Array<CIMObjectPath> instanceNames;
137 if (className.equal(PEGASUS_CLASSNAME_CIM_INDICATIONSERVICE))
138 {
139 instanceNames.append(_getIndicationServiceInstance(
140 false,
141 venkat.puvvada 1.1 false,
142 CIMPropertyList()).getPath());
143 }
144 else
145 {
146 PEGASUS_ASSERT(className.equal(
147 PEGASUS_CLASSNAME_CIM_INDICATIONSERVICECAPABILITIES));
148 instanceNames.append(_getIndicationServiceCapabilitiesInstance(
149 false,
150 false,
151 CIMPropertyList()).getPath());
152 }
153
154 return instanceNames;
155 }
156
157 CIMInstance IndicationServiceConfiguration::_buildInstanceSkeleton(
158 const CIMNamespaceName & nameSpace,
159 const CIMName& className,
160 CIMClass &returnedClass)
161 {
162 venkat.puvvada 1.1 returnedClass = _cimRepository->getClass(
163 nameSpace,
164 className,
165 false,
166 true,
167 true);
168
169 CIMInstance skeleton = returnedClass.buildInstance(
170 true,
171 true,
172 CIMPropertyList());
173
174 return skeleton;
175 }
176
177 void IndicationServiceConfiguration::_setPropertyValue(
178 CIMInstance& instance,
179 const CIMName& propertyName,
180 const CIMValue & value)
181 {
182 Uint32 pos;
183 venkat.puvvada 1.1
184 if((pos = instance.findProperty(propertyName)) != PEG_NOT_FOUND)
185 {
186 instance.getProperty(pos).setValue(value);
187 }
188 }
189
|
190 marek 1.7
191
192 void IndicationServiceConfiguration::_setIntervalPropertyValues(
193 CIMInstance& instance)
194 {
195 Uint32 pos1 = instance.findProperty(
196 _PROPERTY_SUBSCRIPTIONREMOVALTIMEINTERVAL);
197
198 Uint32 pos2 = instance.findProperty(_PROPERTY_DELIVERYRETRYINTERVAL);
199
200 if (pos1 != PEG_NOT_FOUND && pos2 != PEG_NOT_FOUND)
201 {
202 CIMProperty p1 = instance.getProperty(pos1);
203 if (CIMTYPE_UINT64 == p1.getType())
204 {
205 // Old CIM Schema 2.17 with experimental classes
206 p1.setValue(
207 Uint64(_PROPERTY_SUBSCRIPTIONREMOVALTIMEINTERVAL_VALUE));
208 }
209 else
210 {
211 marek 1.7 // New CIM Schema 2.22 and up with final classes
212 p1.setValue(_PROPERTY_SUBSCRIPTIONREMOVALTIMEINTERVAL_VALUE);
213 }
214 CIMProperty p2 = instance.getProperty(pos2);
215 if (CIMTYPE_UINT64 == p2.getType())
216 {
217 // Old CIM Schema 2.17 with experimental classes
218 p2.setValue(
|
219 venkat.puvvada 1.9.2.1 Uint64(_getConfigValue("minIndicationDeliveryRetryInterval")));
|
220 marek 1.7 }
221 else
222 {
223 // New CIM Schema 2.22 and up with final classes
|
224 venkat.puvvada 1.9.2.1 p2.setValue(_getConfigValue("minIndicationDeliveryRetryInterval"));
|
225 ajay.rao 1.8 }
|
226 marek 1.7 }
227 }
228
|
229 venkat.puvvada 1.1 CIMInstance IndicationServiceConfiguration::_getIndicationServiceInstance(
230 Boolean includeQualifiers,
231 Boolean includeClassOrigin,
232 const CIMPropertyList &propertyList)
233 {
234 PEG_METHOD_ENTER(TRC_INDICATION_SERVICE,
235 "IndicationServiceConfiguration::"
236 "_getIndicationServiceInstance");
237 CIMInstance instance;
238 CIMClass returnedClass;
239
240 instance = _buildInstanceSkeleton(
241 PEGASUS_NAMESPACENAME_INTEROP,
242 PEGASUS_CLASSNAME_CIM_INDICATIONSERVICE,
243 returnedClass);
244
245 _setPropertyValue(
246 instance,
247 _PROPERTY_SYSTEMCREATIONCLASSNAME,
248 PEGASUS_CLASSNAME_PG_COMPUTERSYSTEM.getString());
249
250 venkat.puvvada 1.1 _setPropertyValue(
251 instance,
252 _PROPERTY_SYSTEMNAME,
253 System::getFullyQualifiedHostName());
254
255 _setPropertyValue(
256 instance,
257 _PROPERTY_CREATIONCLASSNAME,
258 PEGASUS_CLASSNAME_CIM_INDICATIONSERVICE.getString());
259
260 _setPropertyValue(
261 instance,
262 _PROPERTY_NAME,
263 String(PEGASUS_INSTANCEID_GLOBAL_PREFIX) + ":" + "IndicationService");
264
265 _setPropertyValue(
266 instance,
267 _PROPERTY_ELEMENTNAME,
268 String("IndicationService"));
269
270 Array<Uint16> operationalStatus;
271 venkat.puvvada 1.1 operationalStatus.append(2);
272 _setPropertyValue(
273 instance,
274 _PROPERTY_OPERATIONALSTATUS,
275 operationalStatus);
276
277 _setPropertyValue(
278 instance,
279 _PROPERTY_STARTED,
280 CIMValue(Boolean(true)));
281
282 _setPropertyValue(
283 instance,
284 _PROPERTY_DESCRIPTION,
285 String("Pegasus Indication Service"));
286
287 _setPropertyValue(
288 instance,
289 _PROPERTY_FILTERCREATIONENABLED,
290 CIMValue(_PROPERTY_FILTERCREATIONENABLED_VALUE));
291
292 venkat.puvvada 1.1 _setPropertyValue(
293 instance,
294 _PROPERTY_SUBSCRIPTIONREMOVALACTION,
295 CIMValue(_PROPERTY_SUBSCRIPTIONREMOVALACTION_VALUE));
|
296 venkat.puvvada 1.9.2.1
|
297 venkat.puvvada 1.1 _setPropertyValue(
298 instance,
299 _PROPERTY_DELIVERYRETRYATTEMPTS,
|
300 venkat.puvvada 1.9.2.1 CIMValue(
301 Uint16(_getConfigValue("maxIndicationDeliveryRetryAttempts"))));
|
302 venkat.puvvada 1.1
|
303 marek 1.7 _setIntervalPropertyValues(instance);
|
304 venkat.puvvada 1.1
|
305 venkat.puvvada 1.6 _setPropertyValue(
306 instance,
307 _PROPERTY_ENABLEDSTATE,
|
308 ajay.rao 1.8 CIMValue(_enabledState));
|
309 venkat.puvvada 1.6
310 _setPropertyValue(
311 instance,
312 _PROPERTY_HEALTHSTATE,
|
313 ajay.rao 1.8 CIMValue(_healthState));
|
314 venkat.puvvada 1.6
|
315 venkat.puvvada 1.1 CIMObjectPath path = instance.buildPath(returnedClass);
316 path.setNameSpace(PEGASUS_NAMESPACENAME_INTEROP);
317 instance.setPath(path);
318 PEG_METHOD_EXIT();
319
320 return instance;
321 }
322
323 CIMInstance IndicationServiceConfiguration::
324 _getIndicationServiceCapabilitiesInstance(
325 Boolean includeQualifiers,
326 Boolean includeClassOrigin,
327 const CIMPropertyList &propertyList)
328 {
329 PEG_METHOD_ENTER(TRC_INDICATION_SERVICE,
330 "IndicationServiceConfiguration::"
331 "_getIndicationServiceCapabilitiesInstance");
332
333 CIMInstance instance;
334 CIMClass returnedClass;
335
336 venkat.puvvada 1.1 instance = _buildInstanceSkeleton(
337 PEGASUS_NAMESPACENAME_INTEROP,
338 PEGASUS_CLASSNAME_CIM_INDICATIONSERVICECAPABILITIES,
339 returnedClass);
340
341 _setPropertyValue(
342 instance,
343 _PROPERTY_INSTANCEID,
344 String("CIM:PegasusIndicationServiceCapabilities"));
345
346 _setPropertyValue(
347 instance,
348 _PROPERTY_CAPTION,
349 String("IndicationService Capabilities"));
350
351 _setPropertyValue(
352 instance,
353 _PROPERTY_DESCRIPTION,
354 String("Pegasus Indication Service Capabilities"));
355
356 _setPropertyValue(
357 venkat.puvvada 1.1 instance,
358 _PROPERTY_ELEMENTNAME,
359 String("Capabilities for IndicationService"));
360
361 _setPropertyValue(
362 instance,
363 _PROPERTY_FILTERCREATIONENABLEDISSETTABLE,
364 CIMValue(Boolean(false)));
365
366 _setPropertyValue(
367 instance,
368 _PROPERTY_DELIVERYRETRYATTEMPTSISSETTABLE,
369 CIMValue(Boolean(false)));
370
371 _setPropertyValue(
372 instance,
373 _PROPERTY_DELIVERYRETRYINTERVALISSETTABLE,
374 CIMValue(Boolean(false)));
375
376 _setPropertyValue(
377 instance,
378 venkat.puvvada 1.1 _PROPERTY_SUBSCRIPTIONREMOVALACTIONISSETTABLE,
379 CIMValue(Boolean(false)));
380
381 _setPropertyValue(
382 instance,
383 _PROPERTY_SUBSCRIPTIONREMOVALTIMEINTERVALISSETTABLE,
384 CIMValue(Boolean(false)));
385
386 CIMValue value(CIMTYPE_UINT32, false);
387
388 _setPropertyValue(
389 instance,
390 _PROPERTY_MAXLISTENERDESTINATIONS,
|
391 kumpf 1.4 value);
|
392 venkat.puvvada 1.1
393 _setPropertyValue(
394 instance,
395 _PROPERTY_MAXACTIVESUBSCRIPTIONS,
396 value);
397
398 _setPropertyValue(
399 instance,
400 _PROPERTY_SUBSCRIPTIONSPERSISTED,
401 CIMValue(Boolean(true)));
402
403 CIMObjectPath path = instance.buildPath(returnedClass);
404 path.setNameSpace(PEGASUS_NAMESPACENAME_INTEROP);
405 instance.setPath(path);
406 PEG_METHOD_EXIT();
407 return instance;
408 }
409
410 PEGASUS_NAMESPACE_END
|