(file) Return to FileBasedStore.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Repository

  1 karl  1.1.2.2 //%2006////////////////////////////////////////////////////////////////////////
  2               //
  3               // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
  4               // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
  5               // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
  6               // IBM Corp.; EMC Corporation, The Open Group.
  7               // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
  8               // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
  9               // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 10               // EMC Corporation; VERITAS Software Corporation; The Open Group.
 11               // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 12               // EMC Corporation; Symantec Corporation; The Open Group.
 13               //
 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 karl  1.1.2.2 // 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               //%/////////////////////////////////////////////////////////////////////////////
 33               
 34               #ifndef Pegasus_FileBasedStore_h
 35               #define Pegasus_FileBasedStore_h
 36               
 37               #include <Pegasus/Common/Config.h>
 38               #include <Pegasus/Common/String.h>
 39               #include <Pegasus/Common/CIMClass.h>
 40               #include <Pegasus/Common/CIMQualifierDecl.h>
 41               #include <Pegasus/Common/CIMObjectPath.h>
 42               #include <Pegasus/Common/CIMInstance.h>
 43 karl  1.1.2.2 #include <Pegasus/Common/AutoStreamer.h>
 44               #include <Pegasus/Common/Pair.h>
 45               #include <Pegasus/Common/HashTable.h>
 46               
 47               PEGASUS_NAMESPACE_BEGIN
 48               
 49               class ClassAssociation
 50               {
 51               public:
 52               
 53                   ClassAssociation(
 54                       const CIMName& assocClassName_,
 55                       const CIMName& fromClassName_,
 56                       const CIMName& fromPropertyName_,
 57                       const CIMName& toClassName_,
 58                       const CIMName& toPropertyName_)
 59                       : assocClassName(assocClassName_),
 60                         fromClassName(fromClassName_),
 61                         fromPropertyName(fromPropertyName_),
 62                         toClassName(toClassName_),
 63                         toPropertyName(toPropertyName_)
 64 karl  1.1.2.2     {
 65                   }
 66               
 67                   CIMName assocClassName;
 68                   CIMName fromClassName;
 69                   CIMName fromPropertyName;
 70                   CIMName toClassName;
 71                   CIMName toPropertyName;
 72               };
 73               
 74               class InstanceAssociation
 75               {
 76               public:
 77               
 78                   InstanceAssociation(
 79                       const String& assocInstanceName_,
 80                       const CIMName& assocClassName_,
 81                       const String& fromInstanceName_,
 82                       const CIMName& fromClassName_,
 83                       const CIMName& fromPropertyName_,
 84                       const String& toInstanceName_,
 85 karl  1.1.2.2         const CIMName& toClassName_,
 86                       const CIMName& toPropertyName_)
 87                       : assocInstanceName(assocInstanceName_),
 88                         assocClassName(assocClassName_),
 89                         fromInstanceName(fromInstanceName_),
 90                         fromClassName(fromClassName_),
 91                         fromPropertyName(fromPropertyName_),
 92                         toInstanceName(toInstanceName_),
 93                         toClassName(toClassName_),
 94                         toPropertyName(toPropertyName_)
 95                   {
 96                   }
 97               
 98                   String assocInstanceName;
 99                   CIMName assocClassName;
100                   String fromInstanceName;
101                   CIMName fromClassName;
102                   CIMName fromPropertyName;
103                   String toInstanceName;
104                   CIMName toClassName;
105                   CIMName toPropertyName;
106 karl  1.1.2.2 };
107               
108               class NamespaceDefinition
109               {
110               public:
111               
112                   NamespaceDefinition(const CIMNamespaceName& name_)
113                       : name(name_),
114                         shareable(false),
115                         updatesAllowed(true),
116                         parentNameSpace()
117               #ifdef PEGASUS_ENABLE_REMOTE_CMPI
118                         ,shared(false),
119                         remote(false),
120                         remoteId(),
121                         remoteHost(),
122                         remotePort(),
123                         remoteInfo()
124               #endif
125                   {
126                   }
127 karl  1.1.2.2 
128                   CIMNamespaceName name;
129                   Boolean shareable;
130                   Boolean updatesAllowed;
131                   CIMNamespaceName parentNameSpace;
132               
133               #ifdef PEGASUS_ENABLE_REMOTE_CMPI
134                   Boolean shared;
135                   Boolean remote;
136                   String remoteId;
137                   String remoteHost;
138                   String remotePort;
139                   String remoteInfo;
140               #endif
141               };
142               
143               class PEGASUS_REPOSITORY_LINKAGE FileBasedStore
144               {
145               public:
146                   FileBasedStore(
147                       const String& repositoryPath,
148 karl  1.1.2.2         ObjectStreamer* streamer,
149                       Boolean compressMode);
150               
151                   ~FileBasedStore();
152               
153                   Array<NamespaceDefinition> enumerateNameSpaces();
154                   void createNameSpace(
155                       const CIMNamespaceName& nameSpace,
156                       Boolean shareable,
157                       Boolean updatesAllowed,
158                       const String& parent);
159                   void modifyNameSpace(
160                       const CIMNamespaceName& nameSpace,
161                       Boolean shareable,
162                       Boolean updatesAllowed);
163                   void deleteNameSpace(const CIMNamespaceName& nameSpace);
164                   Boolean isNameSpaceEmpty(const CIMNamespaceName& nameSpace);
165               
166                   Array<CIMQualifierDecl> enumerateQualifiers(
167                       const CIMNamespaceName& nameSpace);
168                   /**
169 karl  1.1.2.2         Gets a qualifier declaration for a specified qualifier name in a
170                       specified namespace.  Returns an uninitialized object if the qualifier
171                       is not found.
172                   */
173                   CIMQualifierDecl getQualifier(
174                       const CIMNamespaceName& nameSpace,
175                       const CIMName& qualifierName);
176                   void setQualifier(
177                       const CIMNamespaceName& nameSpace,
178                       const CIMQualifierDecl& qualifierDecl);
179                   void deleteQualifier(
180                       const CIMNamespaceName& nameSpace,
181                       const CIMName& qualifierName);
182               
183                   Array<Pair<String, String> > enumerateClassNames(
184                       const CIMNamespaceName& nameSpace);
185                   CIMClass getClass(
186                       const CIMNamespaceName& nameSpace,
187                       const CIMName& className,
188                       const CIMName& superClassName);
189                   void createClass(
190 karl  1.1.2.2         const CIMNamespaceName& nameSpace,
191                       const CIMClass& newClass);
192                   void modifyClass(
193                       const CIMNamespaceName& nameSpace,
194                       const CIMClass& modifiedClass);
195                   void deleteClass(
196                       const CIMNamespaceName& nameSpace,
197                       const CIMName& className,
198                       const CIMName& superClassName);
199               
200                   Array<CIMObjectPath> enumerateInstanceNamesForClass(
201                       const CIMNamespaceName& nameSpace,
202                       const CIMName& className);
203                   Array<CIMInstance> enumerateInstancesForClass(
204                       const CIMNamespaceName& nameSpace,
205                       const CIMName& className);
206                   CIMInstance getInstance(
207                       const CIMNamespaceName& nameSpace,
208                       const CIMObjectPath& instanceName);
209                   void createInstance(
210                       const CIMNamespaceName& nameSpace,
211 karl  1.1.2.2         const CIMObjectPath& instanceName,
212                       const CIMInstance& cimInstance);
213                   void modifyInstance(
214                       const CIMNamespaceName& nameSpace,
215                       const CIMObjectPath& instanceName,
216                       const CIMInstance& cimInstance);
217                   void deleteInstance(
218                       const CIMNamespaceName& nameSpace,
219                       const CIMObjectPath& instanceName);
220                   void deleteAllInstances(
221                       const CIMNamespaceName& nameSpace,
222                       const CIMName& className);
223                   Boolean instanceExists(
224                       const CIMNamespaceName& nameSpace,
225                       const CIMObjectPath& instanceName);
226               
227                   void addClassAssociations(
228                       const CIMNamespaceName& nameSpace,
229                       const Array<ClassAssociation>& classAssocEntries);
230                   Boolean removeClassAssociation(
231                       const CIMNamespaceName& nameSpace,
232 karl  1.1.2.2         const CIMName& assocClassName);
233                   void getClassAssociatorNames(
234                       const CIMNamespaceName& nameSpace,
235                       const Array<CIMName>& classList,
236                       const Array<CIMName>& assocClassList,
237                       const Array<CIMName>& resultClassList,
238                       const String& role,
239                       const String& resultRole,
240                       Array<String>& associatorNames);
241                   void getClassReferenceNames(
242                       const CIMNamespaceName& nameSpace,
243                       const Array<CIMName>& classList,
244                       const Array<CIMName>& resultClassList,
245                       const String& role,
246                       Array<String>& referenceNames);
247               
248                   void addInstanceAssociations(
249                       const CIMNamespaceName& nameSpace,
250                       const Array<InstanceAssociation>& instanceAssocEntries);
251                   void removeInstanceAssociation(
252                       const CIMNamespaceName& nameSpace,
253 karl  1.1.2.2         const CIMObjectPath& assocInstanceName);
254                   void getInstanceAssociatorNames(
255                       const CIMNamespaceName& nameSpace,
256                       const CIMObjectPath& instanceName,
257                       const Array<CIMName>& assocClassList,
258                       const Array<CIMName>& resultClassList,
259                       const String& role,
260                       const String& resultRole,
261                       Array<String>& associatorNames);
262                   void getInstanceReferenceNames(
263                       const CIMNamespaceName& nameSpace,
264                       const CIMObjectPath& instanceName,
265                       const Array<CIMName>& resultClassList,
266                       const String& role,
267                       Array<String>& referenceNames);
268               
269               private:
270               
271                   void _rollbackIncompleteTransactions();
272               
273                   /**
274 karl  1.1.2.2         Converts a namespace name into a directory path.  The specified
275                       namespace name is not required to match the case of the namespace
276                       name that was originally created.
277               
278                       @param nameSpace The namespace for which to determine the directory
279                           path.
280                       @return A string containing the directory path for the namespace.
281                    */
282                   String _getNameSpaceDirPath(const CIMNamespaceName& nameSpace) const;
283               
284                   /** Returns the path of the qualifier file.
285               
286                       @param   nameSpace      the namespace of the qualifier
287                       @param   qualifierName  the name of the qualifier
288               
289                       @return  a string containing the qualifier file path
290                    */
291                   String _getQualifierFilePath(
292                       const CIMNamespaceName& nameSpace,
293                       const CIMName& qualifierName) const;
294               
295 karl  1.1.2.2     /** Returns the path of the class file.
296               
297                       @param   nameSpace  the namespace of the class
298                       @param   className  the name of the class
299               
300                       @return  a string containing the class file path
301                    */
302                   String _getClassFilePath(
303                       const CIMNamespaceName& nameSpace,
304                       const CIMName& className,
305                       const CIMName& superClassName) const;
306               
307                   /** Returns the path of the instance index file.
308               
309                       @param   nameSpace      the namespace of the instance
310                       @param   className      the name of the class
311               
312                       @return  a string containing the index file path
313                    */
314                   String _getInstanceIndexFilePath(
315                       const CIMNamespaceName& nameSpace,
316 karl  1.1.2.2         const CIMName& className) const;
317               
318                   /** Returns the path of the instance file.
319               
320                       @param   nameSpace      the namespace of the instance
321                       @param   className      the name of the class
322               
323                       @return  a string containing the instance file path
324                    */
325                   String _getInstanceDataFilePath(
326                       const CIMNamespaceName& nameSpace,
327                       const CIMName& className) const;
328               
329                   /** Returns the path of the class association file.
330               
331                       @param   nameSpace      the namespace of the associations
332               
333                       @return  a string containing the class association file path
334                    */
335                   String _getAssocClassPath(const CIMNamespaceName& nameSpace) const;
336               
337 karl  1.1.2.2     /** Returns the path of the instance association file.
338               
339                       @param   nameSpace      the namespace of the associations
340               
341                       @return  a string containing the instance association file path
342                    */
343                   String _getAssocInstPath(const CIMNamespaceName& nameSpace) const;
344               
345                   Boolean _loadInstance(
346                       const String& path,
347                       CIMInstance& object,
348                       Uint32 index,
349                       Uint32 size);
350               
351                   /** loads all the instance objects from disk to memeory.  Returns true
352                       on success.
353               
354                       @param   nameSpace      the namespace of the instances to be loaded
355                       @param   className      the class of the instances to be loaded
356                       @param   namedInstances an array of CIMInstance objects to which
357                                               the loaded instances are appended
358 karl  1.1.2.2 
359                       @return  true      if successful
360                                false     if an error occurs in loading the instances
361                    */
362                   Boolean _loadAllInstances(
363                       const CIMNamespaceName& nameSpace,
364                       const CIMName& className,
365                       Array<CIMInstance>& namedInstances);
366               
367                   String _repositoryPath;
368                   ObjectStreamer* _streamer;
369                   Boolean _compressMode;
370               
371                   /**
372                       Maps namespace names to directory paths
373                   */
374                   HashTable<String, String, EqualNoCaseFunc, HashLowerCaseFunc>
375                       _nameSpacePathTable;
376               };
377               
378               PEGASUS_NAMESPACE_END
379 karl  1.1.2.2 
380               #endif /* Pegasus_FileBasedStore_h */

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2