osaf/services/saf/immsv/immloadd/imm_loader.cc | 32 +++++++++++++---
osaf/services/saf/immsv/immloadd/imm_loader.hh | 1 +
osaf/services/saf/immsv/immloadd/imm_pbe_load.cc | 5 ++
3 files changed, 32 insertions(+), 6 deletions(-)
When the loading is done from imm.xml or imm.db which has implementer name for
config objects.
The implementer name is Nullified while loading from imm.xml or imm.db with
this patch for config objects.
diff --git a/osaf/services/saf/immsv/immloadd/imm_loader.cc
b/osaf/services/saf/immsv/immloadd/imm_loader.cc
--- a/osaf/services/saf/immsv/immloadd/imm_loader.cc
+++ b/osaf/services/saf/immsv/immloadd/imm_loader.cc
@@ -121,6 +121,7 @@ bool isXsdLoaded;
std::string xsddir;
std::string xsd;
typedef std::set<std::string> AttrFlagSet;
+std::set<std::string> runtimeClass;
AttrFlagSet attrFlagSet;
/* Helper functions */
@@ -1056,6 +1057,9 @@ static void endElementHandler(void* user
LOG_ER("Failed to create class %s - exiting",state->className);
exit(1);
}
+ if(state->classCategory == SA_IMM_CLASS_RUNTIME) {
+ runtimeClass.insert(state->className);
+ }
state->attrFlags = 0;
state->attrValueTypeSet = 0;
@@ -1089,12 +1093,28 @@ static void endElementHandler(void* user
else
{
//addObjectAttributeDefinition(state);
- addObjectAttributeDefinition(state->objectClass,
- state->attrName,
- &(state->attrValueBuffers),
- getClassAttrValueType(&(state->classAttrTypeMap),
- state->objectClass, state->attrName),
- &(state->attrValuesList));
+ std::set<std::string>::iterator clit =
runtimeClass.find(state->objectClass);
+ if((strcmp (state->attrName,"SaImmAttrImplementerName")==0)){
+ std::set<std::string>::iterator clit =
runtimeClass.find(state->objectClass);
+ if(clit != runtimeClass.end()){
+ addObjectAttributeDefinition(state->objectClass,
+ state->attrName,
+ &(state->attrValueBuffers),
+
getClassAttrValueType(&(state->classAttrTypeMap),
+ state->objectClass, state->attrName),
+ &(state->attrValuesList));
+ }
+ }
+ else
+ {
+ addObjectAttributeDefinition(state->objectClass,
+ state->attrName,
+ &(state->attrValueBuffers),
+ getClassAttrValueType(&(state->classAttrTypeMap),
+ state->objectClass, state->attrName),
+ &(state->attrValuesList));
+ }
+
}
/* </object> */
}
diff --git a/osaf/services/saf/immsv/immloadd/imm_loader.hh
b/osaf/services/saf/immsv/immloadd/imm_loader.hh
--- a/osaf/services/saf/immsv/immloadd/imm_loader.hh
+++ b/osaf/services/saf/immsv/immloadd/imm_loader.hh
@@ -36,6 +36,7 @@ struct ClassInfo
{
std::string className;
AttrInfoVector attrInfoVector;
+ SaImmClassCategoryT class_category;
};
typedef std::map<std::string, ClassInfo*> ClassInfoMap;
diff --git a/osaf/services/saf/immsv/immloadd/imm_pbe_load.cc
b/osaf/services/saf/immsv/immloadd/imm_pbe_load.cc
--- a/osaf/services/saf/immsv/immloadd/imm_pbe_load.cc
+++ b/osaf/services/saf/immsv/immloadd/imm_pbe_load.cc
@@ -409,6 +409,7 @@ bool loadClassesFromPbe(void* pbeHandle,
class_name = result[r*ncols+2];
class_info = new ClassInfo;
class_info->className = std::string(class_name);
+ class_info->class_category = class_category;
if(!loadClassFromPbe(pbeHandle, immHandle, class_name,
class_id, class_category, class_info))
{
@@ -519,6 +520,10 @@ bool loadObjectFromPbe(void* pbeHandle,
++it;
}
assert(it != class_info->attrInfoVector.end());
+ if((strcmp(resultF[c], "SaImmAttrImplementerName") ==
0) &&
+ (class_info->class_category ==
SA_IMM_CLASS_CONFIG))
+ continue;
+
addObjectAttributeDefinition((char *)
class_info->className.c_str(),
resultF[c], &attrValueBuffers,
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel