commit 4b679ed438a0f4ff26207198d39e637bdb56fe2a
Author: Michael Calmer
Date: Wed Jan 21 11:10:49 2009 +0100
Implement SUSE_HostedCollection
---
mof/CMakeLists.txt | 2 +
mof/SUSE_HostedCollection.mof | 22 ++++
mof/SUSE_HostedCollection.sfcb.reg | 5 +
mof/deploy.mof | 1 +
src/CMakeLists.txt | 2 +
src/SUSE_Common.cc | 12 ++-
src/SUSE_HostedCollectionProvider.cc | 201 ++++++++++++++++++++++++++++++++++
src/SUSE_HostedCollectionProvider.h | 42 +++++++
8 files changed, 283 insertions(+), 4 deletions(-)
diff --git a/mof/CMakeLists.txt b/mof/CMakeLists.txt
index 32db98c..beb2bc3 100644
--- a/mof/CMakeLists.txt
+++ b/mof/CMakeLists.txt
@@ -8,6 +8,8 @@ INSTALL( FILES
SUSE_SystemSpecificCollection.sfcb.reg
SUSE_MemberOfCollection.sfcb.reg
SUSE_MemberOfCollection.mof
+ SUSE_HostedCollection.sfcb.reg
+ SUSE_HostedCollection.mof
deploy.mof
DESTINATION ${CMPIZYPP_DATA_DIR}/
)
diff --git a/mof/SUSE_HostedCollection.mof b/mof/SUSE_HostedCollection.mof
new file mode 100644
index 0000000..391837f
--- /dev/null
+++ b/mof/SUSE_HostedCollection.mof
@@ -0,0 +1,22 @@
+//#pragma namespace ("root/cimv2")
+
+
+// -------------------------------------------------------------------
+// *******************************************************************
+// Classes
+// *******************************************************************
+// -------------------------------------------------------------------
+
+
+
+// ===================================================================
+// SUSE_HostedCollection
+// ===================================================================
+
+[ Provider("cmpi:cmpi-zypp"),
+ Description ("Association between System and SystemSpecificCollection")
+]
+class SUSE_HostedCollection : CIM_HostedCollection
+{ };
+
+
diff --git a/mof/SUSE_HostedCollection.sfcb.reg b/mof/SUSE_HostedCollection.sfcb.reg
new file mode 100644
index 0000000..691ee18
--- /dev/null
+++ b/mof/SUSE_HostedCollection.sfcb.reg
@@ -0,0 +1,5 @@
+[SUSE_HostedCollection]
+ provider: SUSE_HostedCollectionProvider
+ location: cmpi-zypp
+ type: instance association
+ namespace: root/cimv2
diff --git a/mof/deploy.mof b/mof/deploy.mof
index 9538a66..bdda0bc 100644
--- a/mof/deploy.mof
+++ b/mof/deploy.mof
@@ -3,4 +3,5 @@
#pragma include ("SUSE_InstalledSoftwareIdentity.mof")
#pragma include ("SUSE_SystemSpecificCollection.mof")
#pragma include ("SUSE_MemberOfCollection.mof")
+#pragma include ("SUSE_HostedCollection.mof")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0f6e553..468f667 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -13,6 +13,7 @@ SET( CMPIZYPP_SRCS
SUSE_InstalledSoftwareIdentityProvider.cc
SUSE_SystemSpecificCollectionProvider.cc
SUSE_MemberOfCollectionProvider.cc
+ SUSE_HostedCollectionProvider.cc
)
SET( CMPIZYPP_HEADERS
SUSE_Common.h
@@ -21,6 +22,7 @@ SET( CMPIZYPP_HEADERS
SUSE_InstalledSoftwareIdentityProvider.h
SUSE_SystemSpecificCollectionProvider.h
SUSE_MemberOfCollectionProvider.h
+ SUSE_HostedCollectionProvider.h
)
ADD_LIBRARY(cmpi-zypp SHARED ${CMPIZYPP_SRCS})
diff --git a/src/SUSE_Common.cc b/src/SUSE_Common.cc
index 8774c45..9408423 100644
--- a/src/SUSE_Common.cc
+++ b/src/SUSE_Common.cc
@@ -90,9 +90,6 @@ namespace cmpizypp
return CmpiObjectPath( cop.getNameSpace(), targetName );
}
-
-
-
bool _assoc_create_refs_1toN_ST( CmpiBroker & broker,
const CmpiContext & ctx,
CmpiResult & rslt,
@@ -436,11 +433,15 @@ namespace cmpizypp
const char * _RefLeft,
const char * _RefRight)
{
- _CMPIZYPP_TRACE(1,("--- assoc_get_inst called"));
+ CmpiObjectPath tcop( cop );
+ _CMPIZYPP_TRACE(1,("--- assoc_get_inst called: %s", tcop.toString().charPtr()));
CmpiData dtl = cop.getKey( _RefLeft );
CmpiObjectPath opl(dtl);
opl.setNameSpace( cop.getNameSpace() );
+
+ _CMPIZYPP_TRACE(1,("call getInstance on : LEFT"));
+
CmpiInstance ci = broker.getInstance( ctx, opl, NULL );
if( ci.isNull() )
{
@@ -452,6 +453,9 @@ namespace cmpizypp
CmpiData dtr = cop.getKey( _RefRight );
CmpiObjectPath opr(dtr);
opr.setNameSpace( cop.getNameSpace() );
+
+ _CMPIZYPP_TRACE(1,("call getInstance on : RIGHT"));
+
ci = broker.getInstance( ctx, opr, NULL );
if( ci.isNull() )
{
diff --git a/src/SUSE_HostedCollectionProvider.cc b/src/SUSE_HostedCollectionProvider.cc
new file mode 100644
index 0000000..6f92cfa
--- /dev/null
+++ b/src/SUSE_HostedCollectionProvider.cc
@@ -0,0 +1,201 @@
+
+#include <iostream>
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include "SUSE_zypp.h"
+#include "SUSE_Common.h"
+#include "SUSE_HostedCollectionProvider.h"
+
+using namespace zypp;
+using std::endl;
+
+namespace cmpizypp
+{
+ namespace
+ {
+ const char * _ClassName = "SUSE_HostedCollection";
+ const char * _RefLeft = "Antecedent";
+ const char * _RefRight = "Dependent";
+ const char * _RefLeftClass = "CIM_System";
+ const char * _RefRightClass = "CIM_SystemSpecificCollection";
+
+ } // namespace
+
+ SUSE_HostedCollectionProviderClass::SUSE_HostedCollectionProviderClass( const CmpiBroker & mbp, const CmpiContext & ctx )
+ : CmpiBaseMI( mbp, ctx )
+ , CmpiInstanceMI( mbp, ctx )
+ , CmpiAssociationMI( mbp, ctx )
+ {
+ }
+
+ CmpiStatus SUSE_HostedCollectionProviderClass::enumInstanceNames( const CmpiContext& ctx, CmpiResult& rslt, const CmpiObjectPath & cop )
+ {
+ _CMPIZYPP_TRACE(1,("--- %s CMPI EnumInstanceNames() called",_ClassName));
+
+ if(!assoc_create_inst_1toN( *broker, ctx, rslt, cop, _ClassName, _RefLeft, _RefRight, _RefLeftClass, _RefRightClass, 1, 0) )
+ {
+ CmpiStatus st( CMPI_RC_ERR_FAILED, "EnumInstanceNames failed." );
+ return st;
+ }
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI EnumInstanceNames() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+ }
+
+ CmpiStatus SUSE_HostedCollectionProviderClass::enumInstances( const CmpiContext & ctx, CmpiResult & rslt, const CmpiObjectPath & cop, const char** properties )
+ {
+ _CMPIZYPP_TRACE(1,("--- %s CMPI EnumInstances() called",_ClassName));
+
+ if(!assoc_create_inst_1toN( *broker, ctx, rslt, cop, _ClassName, _RefLeft, _RefRight, _RefLeftClass, _RefRightClass, 1, 1) )
+ {
+ CmpiStatus st( CMPI_RC_ERR_FAILED, "EnumInstances failed." );
+ return st;
+ }
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI EnumInstances() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+ }
+
+
+ CmpiStatus SUSE_HostedCollectionProviderClass::getInstance( const CmpiContext &ctx, CmpiResult &rslt, const CmpiObjectPath &cop, const char **properties )
+ {
+ _CMPIZYPP_TRACE(1,("--- %s CMPI GetInstance() called",_ClassName));
+
+ CmpiInstance ci = assoc_get_inst( *broker, ctx, cop, _ClassName, _RefLeft, _RefRight);
+
+ rslt.returnData( ci );
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI GetInstance() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+ }
+
+
+
+ CmpiStatus SUSE_HostedCollectionProviderClass::associators( const CmpiContext& ctx, CmpiResult& rslt,
+ const CmpiObjectPath& cop, const char* assocClass, const char* resultClass,
+ const char* role, const char* resultRole, const char** properties )
+ {
+ _CMPIZYPP_TRACE(1,("--- %s CMPI associators() called",_ClassName));
+
+ CmpiObjectPath op( cop.getNameSpace(), _ClassName );
+
+ if ( !assocClass || op.classPathIsA( assocClass ) )
+ {
+ if ( assoc_check_parameter_const( cop, _RefLeft, _RefRight, _RefLeftClass, _RefRightClass,
+ resultClass, role, resultRole ) )
+ {
+ if(! assoc_create_refs_1toN( *broker, ctx, rslt, cop, _ClassName,
+ _RefLeft, _RefRight, _RefLeftClass, _RefRightClass, 1, 1) )
+ {
+ CmpiStatus st(CMPI_RC_ERR_FAILED, "Create references failed.");
+ _CMPIZYPP_TRACE(1,("--- CMPI referenceNames() failed."));
+ return st;
+ }
+ }
+ }
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI associators() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+ }
+
+ CmpiStatus SUSE_HostedCollectionProviderClass::associatorNames( const CmpiContext& ctx, CmpiResult& rslt,
+ const CmpiObjectPath& cop, const char* assocClass, const char* resultClass,
+ const char* role, const char* resultRole )
+ {
+ _CMPIZYPP_TRACE(1,("--- %s CMPI associatorNames() called",_ClassName));
+
+ CmpiObjectPath op( cop.getNameSpace(), _ClassName );
+
+ if ( !assocClass || op.classPathIsA( assocClass ) )
+ {
+ if ( assoc_check_parameter_const( cop, _RefLeft, _RefRight, _RefLeftClass, _RefRightClass,
+ resultClass, role, resultRole ) )
+ {
+ if(! assoc_create_refs_1toN( *broker, ctx, rslt, cop, _ClassName,
+ _RefLeft, _RefRight, _RefLeftClass, _RefRightClass, 0, 1) )
+ {
+ CmpiStatus st(CMPI_RC_ERR_FAILED, "Create references failed.");
+ _CMPIZYPP_TRACE(1,("--- CMPI referenceNames() failed."));
+ return st;
+ }
+ }
+ }
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI associatorNames() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+ }
+
+ CmpiStatus SUSE_HostedCollectionProviderClass::references( const CmpiContext& ctx, CmpiResult& rslt,
+ const CmpiObjectPath& cop, const char* resultClass, const char* role,
+ const char** properties )
+ {
+ _CMPIZYPP_TRACE(1,("--- %s CMPI references() called",_ClassName));
+
+ CmpiObjectPath op( cop.getNameSpace(), _ClassName );
+
+ if ( !resultClass || op.classPathIsA( resultClass ) )
+ {
+ if ( assoc_check_parameter_const( cop, _RefLeft, _RefRight, _RefLeftClass, _RefRightClass,
+ NULL/*resultClass*/, role, NULL /*resultRole*/ ) )
+ {
+ if(! assoc_create_refs_1toN( *broker, ctx, rslt, cop, _ClassName,
+ _RefLeft, _RefRight, _RefLeftClass, _RefRightClass, 1, 0) )
+ {
+ CmpiStatus st(CMPI_RC_ERR_FAILED, "Create references failed.");
+ _CMPIZYPP_TRACE(1,("--- CMPI referenceNames() failed."));
+ return st;
+ }
+ }
+ }
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI references() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+ }
+
+ CmpiStatus SUSE_HostedCollectionProviderClass::referenceNames( const CmpiContext& ctx, CmpiResult& rslt,
+ const CmpiObjectPath& cop, const char* resultClass, const char* role )
+ {
+ _CMPIZYPP_TRACE(1,("--- %s CMPI referenceNames() called",_ClassName));
+
+ CmpiObjectPath op( cop.getNameSpace(), _ClassName );
+
+ if ( !resultClass || op.classPathIsA( resultClass ) )
+ {
+ if ( assoc_check_parameter_const( cop, _RefLeft, _RefRight, _RefLeftClass, _RefRightClass,
+ NULL/*resultClass*/, role, NULL /*resultRole*/ ) )
+ {
+ if(! assoc_create_refs_1toN( *broker, ctx, rslt, cop, _ClassName,
+ _RefLeft, _RefRight, _RefLeftClass, _RefRightClass, 0, 0) )
+ {
+ CmpiStatus st(CMPI_RC_ERR_FAILED, "Create references failed.");
+ _CMPIZYPP_TRACE(1,("--- CMPI referenceNames() failed."));
+ return st;
+ }
+ }
+ }
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI referenceNames() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+ }
+
+} // namespace cmpizypp
+
+CMProviderBase( SUSE_HostedCollectionProvider );
+
+CMInstanceMIFactory( cmpizypp::SUSE_HostedCollectionProviderClass, SUSE_HostedCollectionProvider );
+CMAssociationMIFactory( cmpizypp::SUSE_HostedCollectionProviderClass, SUSE_HostedCollectionProvider );
diff --git a/src/SUSE_HostedCollectionProvider.h b/src/SUSE_HostedCollectionProvider.h
new file mode 100644
index 0000000..6d9892f
--- /dev/null
+++ b/src/SUSE_HostedCollectionProvider.h
@@ -0,0 +1,42 @@
+#ifndef SUSE_HOSTEDCOLLECTIONPROVIDERCLASS_H
+#define SUSE_HOSTEDCOLLECTIONPROVIDERCLASS_H
+
+#include
+#include
+
+namespace cmpizypp
+{
+ /**
+ */
+ class SUSE_HostedCollectionProviderClass : public CmpiInstanceMI, public CmpiAssociationMI
+ {
+ public:
+ SUSE_HostedCollectionProviderClass( const CmpiBroker & mbp, const CmpiContext & ctx );
+
+ virtual CmpiStatus enumInstanceNames( const CmpiContext& ctx, CmpiResult& rslt, const CmpiObjectPath & cop );
+ virtual CmpiStatus enumInstances( const CmpiContext & ctx, CmpiResult & rslt, const CmpiObjectPath & cop, const char** properties );
+ virtual CmpiStatus getInstance( const CmpiContext &ctx, CmpiResult &rslt, const CmpiObjectPath &cop, const char **properties );
+
+ virtual CmpiStatus associators
+ (const CmpiContext& ctx, CmpiResult& rslt,
+ const CmpiObjectPath& cop, const char* assocClass, const char* resultClass,
+ const char* role, const char* resultRole, const char** properties);
+
+ virtual CmpiStatus associatorNames
+ (const CmpiContext& ctx, CmpiResult& rslt,
+ const CmpiObjectPath& cop, const char* assocClass, const char* resultClass,
+ const char* role, const char* resultRole);
+
+ virtual CmpiStatus references
+ (const CmpiContext& ctx, CmpiResult& rslt,
+ const CmpiObjectPath& cop, const char* resultClass, const char* role,
+ const char** properties);
+
+ virtual CmpiStatus referenceNames
+ (const CmpiContext& ctx, CmpiResult& rslt,
+ const CmpiObjectPath& cop, const char* resultClass, const char* role);
+ };
+
+} // namespace cmpizypp
+
+#endif // SUSE_HOSTEDCOLLECTIONPROVIDERCLASS_H
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org