1 mike 1.10 //%/////////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 mike 1.11 // of this software and associated documentation files (the "Software"), to
7 // deal in the Software without restriction, including without limitation the
8 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
9 mike 1.10 // sell copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
|
11 mike 1.11 //
12 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
|
13 mike 1.10 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
14 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
15 mike 1.11 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
16 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
17 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
18 mike 1.10 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
19 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 //
21 //==============================================================================
22 //
23 // Author: Mike Brasher (mbrasher@bmc.com)
24 //
25 // Modified By:
26 //
27 //%/////////////////////////////////////////////////////////////////////////////
28
29 #include <cstdio>
30 #include "CIMQualifierDecl.h"
31 #include "Indentor.h"
32 #include "DeclContext.h"
33 #include "CIMName.h"
34 #include "Exception.h"
35 #include "XmlWriter.h"
36
37 PEGASUS_NAMESPACE_BEGIN
|
38 karl 1.15 PEGASUS_USING_STD;
|
39 mike 1.10 ////////////////////////////////////////////////////////////////////////////////
40 //
41 // CIMQualifierDeclRep
42 //
43 ////////////////////////////////////////////////////////////////////////////////
44
45 CIMQualifierDeclRep::CIMQualifierDeclRep(
|
46 mike 1.11 const String& name,
47 const CIMValue& value,
|
48 mike 1.10 Uint32 scope,
49 Uint32 flavor,
50 Uint32 arraySize)
|
51 mike 1.11 :
52 _name(name),
53 _value(value),
|
54 mike 1.10 _scope(scope),
55 _flavor(flavor),
56 _arraySize(arraySize)
57 {
|
58 karl 1.15 //cout << "KSTEST Qualifier Declflavor " << flavor << endl;
|
59 mike 1.10 if (!CIMName::legal(name))
60 throw IllegalName();
61
62 if (_value.getType() == CIMType::NONE)
63 throw NullType();
64 }
65
66 CIMQualifierDeclRep::~CIMQualifierDeclRep()
67 {
68
69 }
70
|
71 mike 1.11 void CIMQualifierDeclRep::setName(const String& name)
|
72 mike 1.10 {
73 if (!CIMName::legal(name))
74 throw IllegalName();
75
|
76 mike 1.11 _name = name;
|
77 mike 1.10 }
78
79 static const char* _toString(Boolean x)
80 {
81 return x ? "true" : "false";
82 }
83
84 void CIMQualifierDeclRep::toXml(Array<Sint8>& out) const
85 {
86 out << "<QUALIFIER.DECLARATION";
87 out << " NAME=\"" << _name << "\"";
88 out << " TYPE=\"" << TypeToString(_value.getType()) << "\"";
89
90 if (_value.isArray())
91 {
92 out << " ISARRAY=\"true\"";
93
94 if (_arraySize)
95 {
96 char buffer[64];
97 sprintf(buffer, " ARRAYSIZE=\"%d\"", _arraySize);
98 mike 1.10 out << buffer;
99 }
100 }
101
102 FlavorToXml(out, _flavor);
103
104 out << ">\n";
105
106 ScopeToXml(out, _scope);
|
107 karl 1.14 /*KSTESTNULL - Put the XML out with no VALUE tags if Null*/
108 _value.toXml(out, false);
|
109 mike 1.10
110 out << "</QUALIFIER.DECLARATION>\n";
111 }
112
|
113 mike 1.11 /** toMof - Generate the MOF output for the Qualifier Declaration object.
|
114 karl 1.12
|
115 mike 1.11 The BNF for this output is:
|
116 karl 1.12 <pre>
|
117 mike 1.11 qualifierDeclaration = QUALIFIER qualifierName qualifierType scope
118 [ defaultFlavor ] ";"
119
120 qualifierName = IDENTIFIER
121
122 qualifierType = ":" dataType [ array ] [ defaultValue ]
123
124 scope = "," SCOPE "(" metaElement *( "," metaElement )
125 ")"
|
126 karl 1.12 </pre>
|
127 mike 1.11 */
128 void CIMQualifierDeclRep::toMof(Array<Sint8>& out) const
129 {
130 out << "\n";
131
132 // output the "Qualifier" keyword and name
133 out << "Qualfier " << _name;
134
135 // output the qualifiertype
136 out << " : " << TypeToString(_value.getType());
137
138 // If array put the Array indicator "[]" and possible size after name.
139 if (_value.isArray())
140 {
141 if (_arraySize)
142 {
143 char buffer[32];
144 sprintf(buffer, "[%d]", _arraySize);
145 out << buffer;
146 }
147 else
148 mike 1.11 out << "[]";
149 }
150
151 Boolean hasValueField = false;
|
152 karl 1.12 // KS think through the following test
153 //if (!_value.isNull() || !(_value.getType() == CIMType::BOOLEAN) )
154 //{
155 // KS With CIM Qualifier, this should be =
|
156 karl 1.13 out << " = ";
|
157 mike 1.11 hasValueField = true;
158 _value.toMof(out);
|
159 karl 1.12 //}
|
160 mike 1.11
|
161 karl 1.12 // Output Scope Information
|
162 mike 1.11 String scopeString;
|
163 karl 1.13 scopeString = ScopeToMofString(_scope);
|
164 karl 1.12 //if (scopeString.size())
165 //{
166 out << ", Scope(" << scopeString << ")";
167 //}
168 // Output Flavor Information
|
169 mike 1.11 String flavorString;
170 flavorString = FlavorToMof(_flavor);
171 if (flavorString.size())
172 {
|
173 karl 1.12 out << ", Flavor(" << flavorString << ")";
|
174 mike 1.11 }
|
175 karl 1.12 // End each qualifier declaration with newline
|
176 mike 1.11 out << ";\n";
177 }
178
179
|
180 mike 1.10 void CIMQualifierDeclRep::print(PEGASUS_STD(ostream) &os) const
181 {
182 Array<Sint8> tmp;
183 toXml(tmp);
184 tmp.append('\0');
|
185 mike 1.11 // ATTN:KS 7 Aug 2001 I think the endl should be removed here.
|
186 mike 1.10 os << tmp.getData() << PEGASUS_STD(endl);
187 }
188
189 CIMQualifierDeclRep::CIMQualifierDeclRep()
190 {
191
192 }
193
|
194 mike 1.11 CIMQualifierDeclRep::CIMQualifierDeclRep(const CIMQualifierDeclRep& x) :
|
195 mike 1.10 Sharable(),
196 _name(x._name),
197 _value(x._value),
198 _scope(x._scope),
199 _flavor(x._flavor),
200 _arraySize(x._arraySize)
201 {
202
203 }
204
|
205 mike 1.11 CIMQualifierDeclRep& CIMQualifierDeclRep::operator=(const CIMQualifierDeclRep&
206 x)
207 {
208 return *this;
|
209 mike 1.10 }
210
211 Boolean CIMQualifierDeclRep::identical(const CIMQualifierDeclRep* x) const
212 {
213 return
214 this == x ||
|
215 mike 1.11 CIMName::equal(_name, x->_name) &&
216 _value == x->_value &&
|
217 mike 1.10 _scope == x->_scope &&
218 _flavor == x->_flavor &&
219 _arraySize == x->_arraySize;
220 }
221
|
222 mike 1.11 void CIMQualifierDeclRep::setValue(const CIMValue& value)
|
223 mike 1.10 {
|
224 mike 1.11 _value = value;
|
225 mike 1.10
226 if (_value.getType() == CIMType::NONE)
227 throw NullType();
228 }
229
230 PEGASUS_NAMESPACE_END
|
231 mike 1.11
|