13 chuck 1.1 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
20 //
21 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 //==============================================================================
31 //
32 // Authors: David Rosckes (rosckes@us.ibm.com)
33 // Bert Rivero (hurivero@us.ibm.com)
34 chuck 1.1 // Chuck Carmack (carmack@us.ibm.com)
35 // Brian Lucier (lucier@us.ibm.com)
36 //
37 // Modified By:
38 //
39 //%/////////////////////////////////////////////////////////////////////////////
40
41 #include "RepositoryQueryContext.h"
42
43 PEGASUS_NAMESPACE_BEGIN
44
45 RepositoryQueryContext::RepositoryQueryContext(const CIMNamespaceName& inNS, CIMRepository* inCIMRep)
46 :QueryContext(inNS),
47 _CIMRep(inCIMRep)
48 {
49 }
50
51 RepositoryQueryContext::RepositoryQueryContext(const RepositoryQueryContext& ctx)
52 :QueryContext(ctx),
53 _CIMRep(ctx._CIMRep)
54 {
55 chuck 1.1
56 }
57
58 RepositoryQueryContext::~RepositoryQueryContext()
59 {
60 }
61
62 RepositoryQueryContext& RepositoryQueryContext::operator=(const RepositoryQueryContext& rhs)
63 {
64 if (this == &rhs)
65 return *this;
66
67 QueryContext::operator=(rhs);
68
69 _CIMRep = rhs._CIMRep;
70
71 return *this;
72 }
73
74 CIMClass RepositoryQueryContext::getClass(const CIMName& inClassName)const
75 {
76 chuck 1.1 /* Hardcoded defaults */
77 Boolean localOnly = false;
78 Boolean includeQualifiers = true;
79 Boolean includeClassOrigin = false;
80 CIMPropertyList _emptyCIMPropertyList;
81
82 CIMClass _class = _CIMRep->getClass(
83 getNamespace(),
84 inClassName,
85 localOnly,
86 includeQualifiers,
87 includeClassOrigin,
88 _emptyCIMPropertyList);
89 return _class;
90 }
91
92 Array<CIMName> RepositoryQueryContext::enumerateClassNames(const CIMName& inClassName)const
93 {
94 return _CIMRep->enumerateClassNames(getNamespace(),
95 inClassName,
96 true); // deepInheritance
97 chuck 1.1 }
98
99 Boolean RepositoryQueryContext::isSubClass(const CIMName& baseClass,
100 const CIMName& derivedClass)const
101 {
102 if (baseClass == derivedClass)
103 {
104 return false;
105 }
106
107 Array<CIMName> subClasses = enumerateClassNames(baseClass);
108 for (Uint32 i = 0; i < subClasses.size(); i++)
109 {
110 if (subClasses[i] == derivedClass)
111 {
112 return true;
113 }
114 }
115
116 return false;
117 }
118 chuck 1.1
119 QueryContext::ClassRelation RepositoryQueryContext::getClassRelation(const CIMName& anchorClass,
120 const CIMName& relatedClass)const
121 {
122 if (anchorClass == relatedClass)
123 {
124 return SAMECLASS;
125 }
126
127 if (isSubClass(anchorClass, relatedClass))
128 {
129 return SUBCLASS;
130 }
131
132 if (isSubClass(relatedClass, anchorClass))
133 {
134 return SUPERCLASS;
135 }
136
137 return NOTRELATED;
138 }
139 chuck 1.1
140 QueryContext* RepositoryQueryContext::clone()
141 {
142 return new RepositoryQueryContext(*this);
143 }
144
145 PEGASUS_NAMESPACE_END
146
|