+
+SALOMEDS::SObject_ptr SALOMEDS_GenericAttribute_i::GetSObject()
+{
+ SALOMEDS::Locker lock;
+ if (_impl.IsNull() || _impl->Label().IsNull()) return SALOMEDS::SObject::_nil();
+ Handle(SALOMEDSImpl_SObject) so_impl = SALOMEDSImpl_Study::SObject(_impl->Label());
+ SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (so_impl, _orb);
+ return so._retn();
+}
+
+
+char* SALOMEDS_GenericAttribute_i::Type()
+{
+ SALOMEDS::Locker lock;
+ if (!_impl.IsNull()) {
+ return CORBA::string_dup(SALOMEDSImpl_GenericAttribute::Impl_GetType(_impl));
+ }
+
+ return "";
+}
+
+char* SALOMEDS_GenericAttribute_i::GetClassType()
+{
+ SALOMEDS::Locker lock;
+ if (!_impl.IsNull()) {
+ return CORBA::string_dup(SALOMEDSImpl_GenericAttribute::Impl_GetClassType(_impl));
+ }
+
+ return "";
+}
+
+
+SALOMEDS::GenericAttribute_ptr SALOMEDS_GenericAttribute_i::CreateAttribute
+ (const Handle(TDF_Attribute)& theAttr,
+ CORBA::ORB_ptr theOrb)
+{
+ SALOMEDS::Locker lock;
+
+/*
+ static std::map<TDF_Attribute*, SALOMEDS_GenericAttribute_i*> _mapOfAttrib;
+ SALOMEDS::GenericAttribute_var anAttribute;
+ SALOMEDS_GenericAttribute_i* attr_servant = NULL;
+
+ if(_mapOfAttrib.find(theAttr.operator->()) != _mapOfAttrib.end()) {
+ attr_servant = _mapOfAttrib[theAttr.operator->()];
+ anAttribute = SALOMEDS::GenericAttribute::_narrow(attr_servant->_this());
+ }
+ else {
+ char* aTypeOfAttribute = Handle(SALOMEDSImpl_GenericAttribute)::DownCast(theAttr)->GetClassType().ToCString();
+ __CreateGenericCORBAAttribute
+ _mapOfAttrib[theAttr.operator->()] = attr_servant;
+ }
+*/
+ // mpv: now servants Destroyed by common algos of CORBA
+ char* aTypeOfAttribute = Handle(SALOMEDSImpl_GenericAttribute)::
+ DownCast(theAttr)->GetClassType().ToCString();
+ SALOMEDS::GenericAttribute_var anAttribute;
+ SALOMEDS_GenericAttribute_i* attr_servant = NULL;
+ __CreateGenericCORBAAttribute
+
+ return anAttribute._retn();
+}
+
+//===========================================================================
+// PRIVATE FUNCTIONS
+//===========================================================================
+long SALOMEDS_GenericAttribute_i::GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal)
+{
+#ifdef WIN32
+ long pid = (long)_getpid();
+#else
+ long pid = (long)getpid();
+#endif
+ isLocal = (strcmp(theHostname, GetHostname().c_str()) == 0 && pid == thePID)?1:0;
+ TDF_Attribute* local_impl = _impl.operator->();
+ return ((long)local_impl);
+}