ref: refs/heads/master
commit 1e5e0bdadb5e7b1fb84ca156c23abccbc06289fe
Author: Michael Calmer
Date: Fri Jan 30 17:08:46 2009 +0100
Implement SUSE_SoftwareInstallationServiceCapabilities
---
mof/CMakeLists.txt | 2 +
...USE_SoftwareInstallationServiceCapabilities.mof | 23 ++++
...oftwareInstallationServiceCapabilities.sfcb.reg | 5 +
mof/deploy.mof | 1 +
src/CMakeLists.txt | 2 +
...twareInstallationServiceCapabilitiesProvider.cc | 137 ++++++++++++++++++++
...ftwareInstallationServiceCapabilitiesProvider.h | 25 ++++
7 files changed, 195 insertions(+), 0 deletions(-)
diff --git a/mof/CMakeLists.txt b/mof/CMakeLists.txt
index 29d62a8..2343679 100644
--- a/mof/CMakeLists.txt
+++ b/mof/CMakeLists.txt
@@ -14,6 +14,8 @@ INSTALL( FILES
SUSE_SoftwareInstallationService.sfcb.reg
SUSE_InstallationServiceAffectsSoftwareIdentity.mof
SUSE_InstallationServiceAffectsSoftwareIdentity.sfcb.reg
+ SUSE_SoftwareInstallationServiceCapabilities.mof
+ SUSE_SoftwareInstallationServiceCapabilities.sfcb.reg
deploy.mof
DESTINATION ${CMPIZYPP_DATA_DIR}/
)
diff --git a/mof/SUSE_SoftwareInstallationServiceCapabilities.mof b/mof/SUSE_SoftwareInstallationServiceCapabilities.mof
new file mode 100644
index 0000000..2054df3
--- /dev/null
+++ b/mof/SUSE_SoftwareInstallationServiceCapabilities.mof
@@ -0,0 +1,23 @@
+//#pragma namespace ("root/cimv2")
+
+
+// -------------------------------------------------------------------
+// *******************************************************************
+// Classes
+// *******************************************************************
+// -------------------------------------------------------------------
+
+
+
+// ===================================================================
+// SUSE_SoftwareInstallationServiceCapabilities
+// ===================================================================
+
+[ Provider("cmpi:cmpi-zypp"),
+ Description ("A Class which provide SoftwareInstallationServiceCapabilities.")
+]
+class SUSE_SoftwareInstallationServiceCapabilities : CIM_SoftwareInstallationServiceCapabilities
+{
+};
+
+
diff --git a/mof/SUSE_SoftwareInstallationServiceCapabilities.sfcb.reg b/mof/SUSE_SoftwareInstallationServiceCapabilities.sfcb.reg
new file mode 100644
index 0000000..3860ee8
--- /dev/null
+++ b/mof/SUSE_SoftwareInstallationServiceCapabilities.sfcb.reg
@@ -0,0 +1,5 @@
+[SUSE_SoftwareInstallationServiceCapabilities]
+ provider: SUSE_SoftwareInstallationServiceCapabilitiesProvider
+ location: cmpi-zypp
+ type: instance
+ namespace: root/cimv2
diff --git a/mof/deploy.mof b/mof/deploy.mof
index f30958b..0773b35 100644
--- a/mof/deploy.mof
+++ b/mof/deploy.mof
@@ -6,4 +6,5 @@
#pragma include ("SUSE_HostedCollection.mof")
#pragma include ("SUSE_SoftwareInstallationService.mof")
#pragma include ("SUSE_InstallationServiceAffectsSoftwareIdentity.mof")
+#pragma include ("SUSE_SoftwareInstallationServiceCapabilities.mof")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 876a072..7f99497 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -16,6 +16,7 @@ SET( CMPIZYPP_SRCS
SUSE_HostedCollectionProvider.cc
SUSE_SoftwareInstallationServiceProvider.cc
SUSE_InstallationServiceAffectsSoftwareIdentityProvider.cc
+ SUSE_SoftwareInstallationServiceCapabilitiesProvider.cc
)
SET( CMPIZYPP_HEADERS
SUSE_Common.h
@@ -28,6 +29,7 @@ SET( CMPIZYPP_HEADERS
SUSE_AssocFilter.h
SUSE_SoftwareInstallationServiceProvider.h
SUSE_InstallationServiceAffectsSoftwareIdentityProvider.h
+ SUSE_SoftwareInstallationServiceCapabilitiesProvider.h
)
ADD_LIBRARY(cmpi-zypp SHARED ${CMPIZYPP_SRCS})
diff --git a/src/SUSE_SoftwareInstallationServiceCapabilitiesProvider.cc b/src/SUSE_SoftwareInstallationServiceCapabilitiesProvider.cc
new file mode 100644
index 0000000..b44b576
--- /dev/null
+++ b/src/SUSE_SoftwareInstallationServiceCapabilitiesProvider.cc
@@ -0,0 +1,137 @@
+
+#include <iostream>
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include "SUSE_zypp.h"
+#include "SUSE_Common.h"
+#include "SUSE_SoftwareInstallationServiceCapabilitiesProvider.h"
+
+using namespace zypp;
+using std::endl;
+
+namespace cmpizypp
+{
+ namespace
+ {
+ const char * _ClassName = "SUSE_SoftwareInstallationServiceCapabilities";
+ const char * _InstanceID = "SUSE:ZYPP_CAPS";
+ } // namespace
+
+
+SUSE_SoftwareInstallationServiceCapabilitiesProviderClass::SUSE_SoftwareInstallationServiceCapabilitiesProviderClass( const CmpiBroker & mbp, const CmpiContext & ctx )
+ : CmpiBaseMI( mbp, ctx )
+ , CmpiInstanceMI( mbp, ctx )
+{
+}
+
+CmpiStatus SUSE_SoftwareInstallationServiceCapabilitiesProviderClass::enumInstanceNames( const CmpiContext& ctx, CmpiResult& rslt, const CmpiObjectPath & cop )
+{
+ _CMPIZYPP_TRACE(1,("--- %s CMPI EnumInstanceNames() called",_ClassName));
+
+ CmpiObjectPath op( cop.getNameSpace(), _ClassName );
+ op.setKey( "InstanceID", _InstanceID );
+ rslt.returnData( op );
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI EnumInstanceNames() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+}
+
+CmpiStatus SUSE_SoftwareInstallationServiceCapabilitiesProviderClass::enumInstances( const CmpiContext & ctx, CmpiResult & rslt, const CmpiObjectPath & cop, const char** properties )
+{
+ _CMPIZYPP_TRACE(1,("--- %s CMPI EnumInstances() called",_ClassName));
+
+ rslt.returnData( makeInstance( cop, properties ) );
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI EnumInstances() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+}
+
+
+CmpiStatus SUSE_SoftwareInstallationServiceCapabilitiesProviderClass::getInstance( const CmpiContext &ctx, CmpiResult &rslt, const CmpiObjectPath &cop, const char **properties )
+{
+ _CMPIZYPP_TRACE(1,("--- %s CMPI GetInstance() called",_ClassName));
+
+ const char *id = cop.getKey("InstanceID");
+
+ if( id == NULL || ::strcmp( id, _InstanceID ) != 0 )
+ {
+ CmpiStatus rc( CMPI_RC_ERR_FAILED, "Could not find this instance." );
+ _CMPIZYPP_TRACE(1,("--- %s CMPI GetInstance() failed : %s", _ClassName, rc.msg()));
+ return rc;
+ }
+
+ rslt.returnData( makeInstance( cop, properties ) );
+
+ rslt.returnDone();
+ _CMPIZYPP_TRACE(1,("--- %s CMPI GetInstance() exited",_ClassName));
+ return CmpiStatus(CMPI_RC_OK);
+}
+
+CmpiInstance SUSE_SoftwareInstallationServiceCapabilitiesProviderClass::makeInstance( const CmpiObjectPath & cop, const char ** properties )
+{
+ CmpiObjectPath op( cop.getNameSpace(), _ClassName );
+ CmpiInstance ci( op );
+
+ const char * keys[] = { "InstanceID" };
+ ci.setPropertyFilter( properties, keys );
+
+ ci.setProperty( "InstanceID", _InstanceID );
+
+ unsigned size = 3;
+ CmpiArray opts( size, CMPI_uint16 );
+ opts[0] = CMPIUint16(3); // Force installation
+ opts[1] = CMPIUint16(4); // Install
+ opts[2] = CMPIUint16(5); // Update
+ //opts[3] = CMPIUint16();
+ ci.setProperty( "SupportedInstallOptions", opts );
+ ci.setProperty( "CanAddToCollection", CmpiFalse );
+
+ size = 1;
+ CmpiArray types( size, CMPI_uint16 );
+ types[0] = CMPIUint16(3); // Linux RPM
+ ci.setProperty( "SupportedExtendedResourceTypes", types );
+
+ CmpiArray typesmajv( size, CMPI_uint16 );
+ typesmajv[0] = CMPIUint16(4); // RPM Major version
+ ci.setProperty( "SupportedExtendedResourceTypesMajorVersions", typesmajv );
+
+ CmpiArray typesminv( size, CMPI_uint16 );
+ typesminv[0] = CMPIUint16(4); // RPM Major version
+ ci.setProperty( "SupportedExtendedResourceTypesMinorVersions", typesminv );
+
+ CmpiArray typesrevn( size, CMPI_uint16 );
+ typesrevn[0] = CMPIUint16(2); // RPM Revision Number
+ ci.setProperty( "SupportedExtendedResourceTypesRevisionNumbers", typesrevn );
+
+ CmpiArray typesbn( size, CMPI_uint16 );
+ typesbn[0] = CMPIUint16(0); // RPM Major version
+ ci.setProperty( "SupportedExtendedResourceTypesBuildNumbers", typesbn );
+
+ CmpiArray instsync( size, CMPI_uint16 );
+ instsync[0] = CMPIUint16(3); // Install From Software Identity
+ ci.setProperty( "SupportedSynchronousActions", instsync );
+
+ CmpiArray instasync( size, CMPI_uint16 );
+ instasync[0] = CMPIUint16(2); // None supported
+ ci.setProperty( "SupportedAsynchronousActions", instasync );
+
+
+ return ci;
+}
+
+} // namespace cmpizypp
+
+CMProviderBase( SUSE_SoftwareInstallationServiceCapabilitiesProvider );
+
+CMInstanceMIFactory( cmpizypp::SUSE_SoftwareInstallationServiceCapabilitiesProviderClass, SUSE_SoftwareInstallationServiceCapabilitiesProvider );
diff --git a/src/SUSE_SoftwareInstallationServiceCapabilitiesProvider.h b/src/SUSE_SoftwareInstallationServiceCapabilitiesProvider.h
new file mode 100644
index 0000000..c9a884e
--- /dev/null
+++ b/src/SUSE_SoftwareInstallationServiceCapabilitiesProvider.h
@@ -0,0 +1,25 @@
+#ifndef SUSE_SOFTWAREINSTALLATIONSERVICECAPABILITIESPROVIDER_H
+#define SUSE_SOFTWAREINSTALLATIONSERVICECAPABILITIESPROVIDER_H
+
+#include
+
+namespace cmpizypp
+{
+ /**
+ */
+ class SUSE_SoftwareInstallationServiceCapabilitiesProviderClass : public CmpiInstanceMI
+ {
+ public:
+ SUSE_SoftwareInstallationServiceCapabilitiesProviderClass( 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 );
+
+ private:
+ CmpiInstance makeInstance( const CmpiObjectPath & cop, const char ** properties );
+ };
+
+} // namespace cmpizypp
+
+#endif // SUSE_SOFTWAREINSTALLATIONSERVICECAPABILITIESPROVIDER_H
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org