ref: refs/heads/master
commit a069b1ef197ed70f9d62b8b37e6edf2af477b141
Author: Michael Calmer
Date: Fri Feb 6 17:02:47 2009 +0100
Implement SUSE_HostedRepository
---
mof/CMakeLists.txt | 2 +
mof/SUSE_HostedRepository.mof | 33 ++++
mof/SUSE_HostedRepository.sfcb.reg | 5 +
mof/deploy.mof | 1 +
src/CMakeLists.txt | 2 +
src/SUSE_HostedRepositoryProvider.cc | 269 ++++++++++++++++++++++++++++++++++
src/SUSE_HostedRepositoryProvider.h | 58 ++++++++
7 files changed, 370 insertions(+), 0 deletions(-)
diff --git a/mof/CMakeLists.txt b/mof/CMakeLists.txt
index 4af9285..c1382ed 100644
--- a/mof/CMakeLists.txt
+++ b/mof/CMakeLists.txt
@@ -22,6 +22,8 @@ INSTALL( FILES
SUSE_HostedInstallationService.sfcb.reg
SUSE_SoftwareRepository.mof
SUSE_SoftwareRepository.sfcb.reg
+ SUSE_HostedRepository.mof
+ SUSE_HostedRepository.sfcb.reg
deploy.mof
DESTINATION ${CMPIZYPP_DATA_DIR}/
)
diff --git a/mof/SUSE_HostedRepository.mof b/mof/SUSE_HostedRepository.mof
new file mode 100644
index 0000000..50837ac
--- /dev/null
+++ b/mof/SUSE_HostedRepository.mof
@@ -0,0 +1,33 @@
+//#pragma namespace ("root/cimv2")
+
+
+// -------------------------------------------------------------------
+// *******************************************************************
+// Classes
+// *******************************************************************
+// -------------------------------------------------------------------
+
+
+
+// ===================================================================
+// SUSE_HostedRepository
+// ===================================================================
+
+[ Provider("cmpi:cmpi-zypp"),
+ Description ("Association between System and SoftwareRepository")
+]
+class SUSE_HostedRepository : CIM_HostedAccessPoint
+{
+ [Override ( "Antecedent" ),
+ Min ( 1 ),
+ Max ( 1 ),
+ Description ( "The scoping system." )]
+ CIM_ComputerSystem REF Antecedent;
+
+ [Override ( "Dependent" ),
+ Description (
+ "The repository defined in the context of a system." )]
+ SUSE_SoftwareRepository REF Dependent;
+};
+
+
diff --git a/mof/SUSE_HostedRepository.sfcb.reg b/mof/SUSE_HostedRepository.sfcb.reg
new file mode 100644
index 0000000..fa48910
--- /dev/null
+++ b/mof/SUSE_HostedRepository.sfcb.reg
@@ -0,0 +1,5 @@
+[SUSE_HostedRepository]
+ provider: SUSE_HostedRepositoryProvider
+ location: cmpi-zypp
+ type: instance association
+ namespace: root/cimv2
diff --git a/mof/deploy.mof b/mof/deploy.mof
index 216fd85..fbd1f19 100644
--- a/mof/deploy.mof
+++ b/mof/deploy.mof
@@ -10,4 +10,5 @@
#pragma include ("SUSE_ElementCapabilities.mof")
#pragma include ("SUSE_HostedInstallationService.mof")
#pragma include ("SUSE_SoftwareRepository.mof")
+#pragma include ("SUSE_HostedRepository.mof")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 6956fe7..269a2c4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -20,6 +20,7 @@ SET( CMPIZYPP_SRCS
SUSE_ElementCapabilitiesProvider.cc
SUSE_HostedInstallationServiceProvider.cc
SUSE_SoftwareRepositoryProvider.cc
+ SUSE_HostedRepositoryProvider.cc
)
SET( CMPIZYPP_HEADERS
SUSE_Common.h
@@ -36,6 +37,7 @@ SET( CMPIZYPP_HEADERS
SUSE_ElementCapabilitiesProvider.h
SUSE_HostedInstallationServiceProvider.h
SUSE_SoftwareRepositoryProvider.h
+ SUSE_HostedRepositoryProvider.h
)
ADD_LIBRARY(cmpi-zypp SHARED ${CMPIZYPP_SRCS})
diff --git a/src/SUSE_HostedRepositoryProvider.cc b/src/SUSE_HostedRepositoryProvider.cc
new file mode 100644
index 0000000..1243d0f
--- /dev/null
+++ b/src/SUSE_HostedRepositoryProvider.cc
@@ -0,0 +1,269 @@
+
+#include <iostream>
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include "SUSE_zypp.h"
+#include "SUSE_Common.h"
+#include "SUSE_HostedRepositoryProvider.h"
+
+using namespace zypp;
+using std::endl;
+
+namespace cmpizypp
+{
+ namespace
+ {
+ const char * _ClassName = "SUSE_HostedRepository";
+ const char * _RefLeft = "Antecedent";
+ const char * _RefRight = "Dependent";
+ const char * _RefLeftClass = "CIM_ComputerSystem";
+ const char * _RefRightClass = "SUSE_SoftwareRepository";
+
+ } // namespace
+
+ SUSE_HostedRepositoryProviderClass::SUSE_HostedRepositoryProviderClass( const CmpiBroker & mbp, const CmpiContext & ctx )
+ : CmpiBaseMI( mbp, ctx )
+ , CmpiInstanceMI( mbp, ctx )
+ , CmpiAssociationMI( mbp, ctx )
+ {
+ }
+
+ CmpiStatus SUSE_HostedRepositoryProviderClass::enumInstanceNames( const CmpiContext& ctx, CmpiResult& rslt, const CmpiObjectPath & cop )
+ {
+ _CMPIZYPP_TRACE(1,("--- %s CMPI EnumInstanceNames() called",_ClassName));
+
+ CmpiObjectPath csop = get_this_computersystem(*broker, ctx, cop);
+ bool ret = assoc_create_refs_1toN( *broker, ctx, rslt, csop,
+ _ClassName,_RefLeft,_RefRight,
+ _RefLeftClass,_RefRightClass,0,0);
+ if(!ret)
+ {
+ 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_HostedRepositoryProviderClass::enumInstances( const CmpiContext & ctx, CmpiResult & rslt, const CmpiObjectPath & cop, const char** properties )
+ {
+ _CMPIZYPP_TRACE(1,("--- %s CMPI EnumInstances() called",_ClassName));
+
+ CmpiObjectPath csop = get_this_computersystem(*broker, ctx, cop);
+ bool ret = assoc_create_refs_1toN( *broker, ctx, rslt, csop,
+ _ClassName,_RefLeft,_RefRight,
+ _RefLeftClass,_RefRightClass,1,0);
+ if(!ret)
+ {
+ 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_HostedRepositoryProviderClass::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_HostedRepositoryProviderClass::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 ) )
+ {
+ SUSE_HostedRepositoryFilter filter(get_this_computersystem(*broker, ctx, cop));
+ if(! assoc_create_refs_1toN( *broker, ctx, rslt, cop, _ClassName,
+ _RefLeft, _RefRight, _RefLeftClass, _RefRightClass, 1, 1, filter ) )
+ {
+ CmpiStatus st(CMPI_RC_ERR_FAILED, "Create references failed.");
+ _CMPIZYPP_TRACE(1,("--- CMPI associators() failed."));
+ return st;
+ }
+ }
+ }
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI associators() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+ }
+
+ CmpiStatus SUSE_HostedRepositoryProviderClass::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 ) )
+ {
+ SUSE_HostedRepositoryFilter filter(get_this_computersystem(*broker, ctx, cop));
+ if(! assoc_create_refs_1toN( *broker, ctx, rslt, cop, _ClassName,
+ _RefLeft, _RefRight, _RefLeftClass, _RefRightClass, 0, 1, filter ) )
+ {
+ CmpiStatus st(CMPI_RC_ERR_FAILED, "Create references failed.");
+ _CMPIZYPP_TRACE(1,("--- CMPI associatorNames() failed."));
+ return st;
+ }
+ }
+ }
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI associatorNames() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+ }
+
+ CmpiStatus SUSE_HostedRepositoryProviderClass::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*/ ) )
+ {
+ SUSE_HostedRepositoryFilter filter(get_this_computersystem(*broker, ctx, cop));
+ if(! assoc_create_refs_1toN( *broker, ctx, rslt, cop, _ClassName,
+ _RefLeft, _RefRight, _RefLeftClass, _RefRightClass, 1, 0, filter ) )
+ {
+ CmpiStatus st(CMPI_RC_ERR_FAILED, "Create references failed.");
+ _CMPIZYPP_TRACE(1,("--- CMPI references() failed."));
+ return st;
+ }
+ }
+ }
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI references() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+ }
+
+ CmpiStatus SUSE_HostedRepositoryProviderClass::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*/ ) )
+ {
+ SUSE_HostedRepositoryFilter filter(get_this_computersystem(*broker, ctx, cop));
+ if(! assoc_create_refs_1toN( *broker, ctx, rslt, cop, _ClassName,
+ _RefLeft, _RefRight, _RefLeftClass, _RefRightClass, 0, 0, filter ) )
+ {
+ 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);
+ }
+
+/* -------------------------------------------------------------------------- */
+
+ SUSE_HostedRepositoryFilter::SUSE_HostedRepositoryFilter(const CmpiObjectPath &op)
+ : SUSE_AssocFilter()
+ , csop(op)
+ { }
+
+ bool SUSE_HostedRepositoryFilter::filterInstance(const CmpiObjectPath &scop, const char * _RefSource, const CmpiInstance &ci, bool associators) const
+ {
+ _CMPIZYPP_TRACE(1,("--- SUSE_HostedRepositoryFilter::filterInstance called"));
+ return filterObjectPath( scop, _RefSource, ci.getObjectPath(), associators );
+
+ }
+
+ bool SUSE_HostedRepositoryFilter::filterObjectPath(const CmpiObjectPath &scop, const char * _RefSource, const CmpiObjectPath &op, bool associators) const
+ {
+ _CMPIZYPP_TRACE(1,("--- SUSE_HostedRepositoryFilter::filterObjectPath called"));
+ USR << scop << " " <<_RefSource << ": " << op << endl;
+
+ CmpiString CSName = csop.getKey("CreationClassName");
+ CmpiString Name = csop.getKey("Name");
+
+ const char *filterCSName = "";
+ const char *filterName = "";
+ if( ! associators )
+ {
+ CmpiObjectPath filterop = op.getKey( _RefLeft );
+ filterCSName = filterop.getKey("CreationClassName");
+ filterName = filterop.getKey("Name");
+ }
+ else
+ {
+ if ( ::strcmp(_RefSource, _RefLeft ) != 0 )
+ {
+ filterCSName = op.getKey("CreationClassName");
+ filterName = op.getKey("Name");
+ }
+ else
+ {
+ filterCSName = scop.getKey("CreationClassName");
+ filterName = scop.getKey("Name");
+ }
+ }
+
+ if(CSName.equals(filterCSName) && Name.equals(filterName) )
+ {
+ _CMPIZYPP_TRACE(1,("--- SUSE_HostedRepositoryFilter::filterInstance exited: true"));
+ return true;
+ }
+ else
+ {
+ _CMPIZYPP_TRACE(1,("--- SUSE_HostedRepositoryFilter::filterInstance exited: false"));
+ return false;
+ }
+}
+
+} // namespace cmpizypp
+
+CMProviderBase( SUSE_HostedRepositoryProvider );
+
+CMInstanceMIFactory( cmpizypp::SUSE_HostedRepositoryProviderClass, SUSE_HostedRepositoryProvider );
+CMAssociationMIFactory( cmpizypp::SUSE_HostedRepositoryProviderClass, SUSE_HostedRepositoryProvider );
diff --git a/src/SUSE_HostedRepositoryProvider.h b/src/SUSE_HostedRepositoryProvider.h
new file mode 100644
index 0000000..1e16e17
--- /dev/null
+++ b/src/SUSE_HostedRepositoryProvider.h
@@ -0,0 +1,58 @@
+#ifndef SUSE_HOSTEDREPOSITORYPROVIDERCLASS_H
+#define SUSE_HOSTEDREPOSITORYPROVIDERCLASS_H
+
+#include
+#include
+
+#include "SUSE_AssocFilter.h"
+
+namespace cmpizypp
+{
+ /**
+ */
+ class SUSE_HostedRepositoryProviderClass : public CmpiInstanceMI, public CmpiAssociationMI
+ {
+ public:
+ SUSE_HostedRepositoryProviderClass( 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);
+ };
+
+
+ class SUSE_HostedRepositoryFilter: public SUSE_AssocFilter
+ {
+ private:
+ CmpiObjectPath csop;
+
+ public:
+ SUSE_HostedRepositoryFilter(const CmpiObjectPath &op);
+ virtual ~SUSE_HostedRepositoryFilter() {};
+
+ virtual bool filterInstance(const CmpiObjectPath &scop, const char * _RefSource, const CmpiInstance &ci, bool associators) const;
+ virtual bool filterObjectPath(const CmpiObjectPath &scop, const char * _RefSource, const CmpiObjectPath &op, bool associators) const;
+ };
+
+} // namespace cmpizypp
+
+#endif // SUSE_HOSTEDREPOSITORYPROVIDERCLASS_H
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org