-// SALOME SALOMEDS : data structure of SALOME and sources of Salome data server
+// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
//
-// Copyright (C) 2003 CEA/DEN, EDF R&D
+// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
// File : SALOMEDS_GenericAttribute_i.cxx
-// Author : Mikhail PONIKAROV
+// Author : Sergey RUIN
// Module : SALOME
-// $Header$
-
-
-#include <TDataStd_TreeNode.hxx>
-#include <TDataStd_UAttribute.hxx>
-
-#include "SALOMEDS_AttributeDrawable_i.hxx"
-#include "SALOMEDS_AttributeSelectable_i.hxx"
-#include "SALOMEDS_AttributeOpened_i.hxx"
-#include "SALOMEDS_AttributeTextColor_i.hxx"
-#include "SALOMEDS_AttributeTextHighlightColor_i.hxx"
-#include "SALOMEDS_AttributePixMap_i.hxx"
-#include "SALOMEDS_AttributeExpandable_i.hxx"
-#include "SALOMEDS_AttributeLocalID_i.hxx"
-#include "SALOMEDS_AttributeTarget_i.hxx"
-#include "SALOMEDS_AttributeTableOfInteger_i.hxx"
-#include "SALOMEDS_AttributeTableOfReal_i.hxx"
-#include "SALOMEDS_AttributeTableOfString_i.hxx"
-#include "SALOMEDS_AttributeStudyProperties_i.hxx"
-#include "SALOMEDS_AttributePythonObject_i.hxx"
-#include "SALOMEDS_AttributeTreeNode_i.hxx"
-#include "SALOMEDS_AttributeUserID_i.hxx"
-#include "SALOMEDS_AttributeExternalFileDef_i.hxx"
-#include "SALOMEDS_AttributeFileType_i.hxx"
-#include "SALOMEDS_StudyBuilder_i.hxx"
-
-#include "SALOMEDS_SequenceOfRealAttribute.hxx"
-#include "SALOMEDS_SequenceOfIntegerAttribute.hxx"
-#include "SALOMEDS_IORAttribute.hxx"
-#include "SALOMEDS_PersRefAttribute.hxx"
-#include "SALOMEDS_DrawableAttribute.hxx"
-#include "SALOMEDS_SelectableAttribute.hxx"
-#include "SALOMEDS_ExpandableAttribute.hxx"
-#include "SALOMEDS_OpenedAttribute.hxx"
-#include "SALOMEDS_TextColorAttribute.hxx"
-#include "SALOMEDS_TextHighlightColorAttribute.hxx"
-#include "SALOMEDS_PixMapAttribute.hxx"
-#include "SALOMEDS_LocalIDAttribute.hxx"
-#include "SALOMEDS_PythonObjectAttribute.hxx"
-#include "SALOMEDS_TargetAttribute.hxx"
-#include "SALOMEDS_StudyPropertiesAttribute.hxx"
-#include "SALOMEDS_TableOfIntegerAttribute.hxx"
-#include "SALOMEDS_TableOfRealAttribute.hxx"
-#include "SALOMEDS_TableOfStringAttribute.hxx"
-#include "SALOMEDS_ExternalFileDef.hxx"
-#include "SALOMEDS_FileType.hxx"
+//
+#include "utilities.h"
+#include "SALOMEDS_GenericAttribute_i.hxx"
+#include "SALOMEDS_StudyManager_i.hxx"
+#include "SALOMEDS_Attributes.hxx"
+#include "SALOMEDS.hxx"
+#include "SALOMEDSImpl_SObject.hxx"
+#include "SALOMEDSImpl_Study.hxx"
#include "Utils_ExceptHandlers.hxx"
-using namespace std;
-#define RegisteredAttributes 26
+#include "Basics_Utils.hxx"
+#include <map>
+
+#ifdef WIN32
+#include <process.h>
+#else
+#include <sys/types.h>
+#include <unistd.h>
+#endif
UNEXPECT_CATCH(GALockProtection, SALOMEDS::GenericAttribute::LockProtection);
-const char AttributesTypeNames[RegisteredAttributes][30] = {
- "AttributeReal", "AttributeInteger",
- "AttributeSequenceOfReal", "AttributeSequenceOfInteger",
- "AttributeName", "AttributeComment",
- "AttributeIOR", "AttributePersistentRef",
- "AttributeDrawable", "AttributeSelectable",
- "AttributeExpandable", "AttributeOpened",
- "AttributeTextColor", "AttributeTextHighlightColor", "AttributePixMap",
- "AttributeTreeNode", "AttributeLocalID",
- "AttributeTarget",
- "AttributeTableOfInteger", "AttributeTableOfReal", "AttributeTableOfString",
- "AttributeStudyProperties",
- "AttributePythonObject",
- "AttributeUserID",
- "AttributeExternalFileDef", "AttributeFileType"
-};
-
-const Standard_GUID AttributesGUIDs[RegisteredAttributes] = {
- TDataStd_Real::GetID(), TDataStd_Integer::GetID(),
- SALOMEDS_SequenceOfRealAttribute::GetID(), SALOMEDS_SequenceOfIntegerAttribute::GetID(),
- TDataStd_Name::GetID(), TDataStd_Comment::GetID(),
- SALOMEDS_IORAttribute::GetID(), SALOMEDS_PersRefAttribute::GetID(),
- SALOMEDS_DrawableAttribute::GetID(), SALOMEDS_SelectableAttribute::GetID(),
- SALOMEDS_ExpandableAttribute::GetID(), SALOMEDS_OpenedAttribute::GetID(),
- SALOMEDS_TextColorAttribute::GetID(), SALOMEDS_TextHighlightColorAttribute::GetID(), SALOMEDS_PixMapAttribute::GetID(),
- TDataStd_TreeNode::GetDefaultTreeID(), SALOMEDS_LocalIDAttribute::GetID(),
- SALOMEDS_TargetAttribute::GetID(),
- SALOMEDS_TableOfIntegerAttribute::GetID(), SALOMEDS_TableOfRealAttribute::GetID(), SALOMEDS_TableOfStringAttribute::GetID(),
- SALOMEDS_StudyPropertiesAttribute::GetID(),
- SALOMEDS_PythonObjectAttribute::GetID(),
- Standard_GUID("FFFFFFFF-D9CD-11d6-945D-1050DA506788"),
- SALOMEDS_ExternalFileDef::GetID(), SALOMEDS_FileType::GetID()
-};
-
-void SALOMEDS_GenericAttribute_i::CheckLocked() throw (SALOMEDS::GenericAttribute::LockProtection) {
+SALOMEDS_GenericAttribute_i::SALOMEDS_GenericAttribute_i(DF_Attribute* theImpl, CORBA::ORB_ptr theOrb) :
+ GenericObj_i(SALOMEDS_StudyManager_i::GetThePOA())
+{
+ _orb = CORBA::ORB::_duplicate(theOrb);
+ _impl = theImpl;
+}
+
+SALOMEDS_GenericAttribute_i::~SALOMEDS_GenericAttribute_i()
+{
+}
+
+//============================================================================
+/*!
+ \brief Get default POA for the servant object.
+
+ This function is implicitly called from "_this()" function.
+ Default POA can be set via the constructor.
+
+ \return reference to the default POA for the servant
+*/
+//============================================================================
+PortableServer::POA_ptr SALOMEDS_GenericAttribute_i::_default_POA()
+{
+ myPOA = PortableServer::POA::_duplicate(SALOMEDS_StudyManager_i::GetThePOA());
+ //MESSAGE("SALOMEDS_GenericAttribute_i::_default_POA: " << myPOA);
+ return PortableServer::POA::_duplicate(myPOA);
+}
+
+void SALOMEDS_GenericAttribute_i::CheckLocked() throw (SALOMEDS::GenericAttribute::LockProtection)
+{
+ SALOMEDS::Locker lock;
Unexpect aCatch(GALockProtection);
- if (!_myAttr.IsNull() && _myAttr->IsValid() && !CORBA::is_nil(_myOrb)) {
- Handle(SALOMEDS_IORAttribute) Att;
- if (_myAttr->Label().Root().FindAttribute(SALOMEDS_IORAttribute::GetID(),Att)){
- TCollection_AsciiString ch(Att->Get());
- char* IOR = CORBA::string_dup(ch.ToCString());
- CORBA::Object_var obj = _myOrb->string_to_object(IOR);
- SALOMEDS::Study_ptr aStudy = SALOMEDS::Study::_narrow(obj);
-// ASSERT(!CORBA::is_nil(aStudy));
- if (aStudy->NewBuilder()->HasOpenCommand()) return;
- if (aStudy->GetProperties()->IsLocked()) {
-// MESSAGE("Locked document modification !!!");
- throw SALOMEDS::GenericAttribute::LockProtection();
- }
+
+ if (_impl && !CORBA::is_nil(_orb)) {
+ try {
+ SALOMEDSImpl_GenericAttribute::Impl_CheckLocked(_impl);
+ }
+ catch (...) {
+ throw SALOMEDS::GenericAttribute::LockProtection();
}
}
}
-SALOMEDS::SObject_ptr SALOMEDS_GenericAttribute_i::GetSObject() {
- if (_myAttr.IsNull() || _myAttr->Label().IsNull()) return SALOMEDS::SObject::_nil();
- SALOMEDS_SObject_i * so_servant = new SALOMEDS_SObject_i (_myAttr->Label(),_myOrb);
- SALOMEDS::SObject_var so = SALOMEDS::SObject::_narrow(so_servant->_this());
+SALOMEDS::SObject_ptr SALOMEDS_GenericAttribute_i::GetSObject()
+{
+ SALOMEDS::Locker lock;
+ if (!_impl || _impl->Label().IsNull()) return SALOMEDS::SObject::_nil();
+ SALOMEDSImpl_SObject so_impl = SALOMEDSImpl_Study::SObject(_impl->Label());
+ SALOMEDS::SObject_var so = SALOMEDS_SObject_i::New (so_impl, _orb);
return so._retn();
}
-Standard_GUID SALOMEDS_GenericAttribute_i::GetGUID(const char* theType) {
- Standard_Integer i;
- for(i = 0; i < RegisteredAttributes; i++) {
- if (strcmp(AttributesTypeNames[i], theType) == 0) return AttributesGUIDs[i];
- }
- if (strncmp(theType, "AttributeTreeNodeGUID",21) == 0) {
- char* aGUIDString = new char[40];
- sprintf(aGUIDString, &(theType[21]));
- Standard_GUID aGUID = Standard_GUID(aGUIDString); // create tree node GUID by name
- delete(aGUIDString);
- return aGUID;
- }
- return Standard_GUID();
-}
+char* SALOMEDS_GenericAttribute_i::Type()
+{
+ SALOMEDS::Locker lock;
+ if (_impl) {
+ std::string type = SALOMEDSImpl_GenericAttribute::Impl_GetType(_impl);
+ return CORBA::string_dup(type.c_str());
+ }
-char* SALOMEDS_GenericAttribute_i::Type() {
- if (_myAttr.IsNull()) return "";
- int i;
- for(i = 0; i < RegisteredAttributes; i++) {
- if (_myAttr->ID() == AttributesGUIDs[i]) {
- CORBA::String_var aString(AttributesTypeNames[i]);
- return aString._retn();
- }
- }
- Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
- if (!aNode.IsNull()) {
- char* aNodeName = new char[60];
- char aGUID[40];
- aNode->ID().ToCString(aGUID);
- sprintf(aNodeName, "AttributeTreeNodeGUID%s",aGUID);
- return aNodeName;
- }
+ return CORBA::string_dup("");
+}
- Handle(TDataStd_UAttribute) aUAttr = Handle(TDataStd_UAttribute)::DownCast(_myAttr);
- if (!aUAttr.IsNull()) {
- char* aUAttrName = new char[60];
- char aGUID[40];
- aUAttr->ID().ToCString(aGUID);
- sprintf(aUAttrName, "AttributeUserID_%s",aGUID);
- return aUAttrName;
+char* SALOMEDS_GenericAttribute_i::GetClassType()
+{
+ SALOMEDS::Locker lock;
+ if (_impl) {
+ std::string class_type = SALOMEDSImpl_GenericAttribute::Impl_GetClassType(_impl);
+ return CORBA::string_dup(class_type.c_str());
}
- return "";
+ return CORBA::string_dup("");
}
-SALOMEDS::GenericAttribute_ptr SALOMEDS_GenericAttribute_i::CreateAttribute(CORBA::ORB_ptr theOrb,
- const Handle(TDF_Attribute)& theAttr) {
-
- __ReturnCORBAAttribute(TDataStd_Real, AttributeReal);
- __ReturnCORBAAttribute(TDataStd_Integer, AttributeInteger);
- __ReturnCORBAAttribute(SALOMEDS_SequenceOfRealAttribute, AttributeSequenceOfReal);
- __ReturnCORBAAttribute(SALOMEDS_SequenceOfIntegerAttribute, AttributeSequenceOfInteger);
- __ReturnCORBAAttribute(TDataStd_Name, AttributeName);
- __ReturnCORBAAttribute(TDataStd_Comment, AttributeComment);
- __ReturnCORBAAttribute(SALOMEDS_IORAttribute, AttributeIOR);
- __ReturnCORBAAttribute(SALOMEDS_PersRefAttribute, AttributePersistentRef);
- __ReturnCORBAAttribute(SALOMEDS_DrawableAttribute, AttributeDrawable);
- __ReturnCORBAAttribute(SALOMEDS_SelectableAttribute, AttributeSelectable);
- __ReturnCORBAAttribute(SALOMEDS_ExpandableAttribute, AttributeExpandable);
- __ReturnCORBAAttribute(SALOMEDS_OpenedAttribute, AttributeOpened);
- __ReturnCORBAAttribute(SALOMEDS_TextColorAttribute, AttributeTextColor);
- __ReturnCORBAAttribute(SALOMEDS_TextHighlightColorAttribute, AttributeTextHighlightColor);
- __ReturnCORBAAttribute(SALOMEDS_PixMapAttribute, AttributePixMap);
- __ReturnCORBAAttribute(SALOMEDS_LocalIDAttribute, AttributeLocalID);
- __ReturnCORBAAttribute(SALOMEDS_TargetAttribute, AttributeTarget);
- __ReturnCORBAAttribute(SALOMEDS_TableOfIntegerAttribute, AttributeTableOfInteger);
- __ReturnCORBAAttribute(SALOMEDS_TableOfRealAttribute, AttributeTableOfReal);
- __ReturnCORBAAttribute(SALOMEDS_TableOfStringAttribute, AttributeTableOfString);
- __ReturnCORBAAttribute(SALOMEDS_StudyPropertiesAttribute, AttributeStudyProperties);
- __ReturnCORBAAttribute(SALOMEDS_PythonObjectAttribute, AttributePythonObject);
- __ReturnCORBAAttribute(SALOMEDS_ExternalFileDef, AttributeExternalFileDef);
- __ReturnCORBAAttribute(SALOMEDS_FileType, AttributeFileType);
-
- Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(theAttr);
- if (!aNode.IsNull()) {
- SALOMEDS_AttributeTreeNode_i* Attr = new SALOMEDS_AttributeTreeNode_i(aNode, theOrb); \
- return Attr->AttributeTreeNode::_this(); \
- }
- Handle(TDataStd_UAttribute) aUAttr = Handle(TDataStd_UAttribute)::DownCast(theAttr);
- if (!aUAttr.IsNull()) {
- SALOMEDS_AttributeUserID_i* Attr = new SALOMEDS_AttributeUserID_i(aUAttr, theOrb); \
- return Attr->AttributeUserID::_this(); \
- }
- return SALOMEDS::GenericAttribute::_nil();
+SALOMEDS::GenericAttribute_ptr SALOMEDS_GenericAttribute_i::CreateAttribute
+ (DF_Attribute* theAttr,
+ CORBA::ORB_ptr theOrb)
+{
+ SALOMEDS::Locker lock;
+
+ std::string aClassType = dynamic_cast<SALOMEDSImpl_GenericAttribute*>(theAttr)->GetClassType();
+ char* aTypeOfAttribute = (char*)aClassType.c_str();
+ SALOMEDS::GenericAttribute_var anAttribute;
+ SALOMEDS_GenericAttribute_i* attr_servant = NULL;
+ __CreateGenericCORBAAttribute
+
+ return anAttribute._retn();
+}
+
+//===========================================================================
+// PRIVATE FUNCTIONS
+//===========================================================================
+CORBA::LongLong 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, Kernel_Utils::GetHostname().c_str()) == 0 && pid == thePID)?1:0;
+ return reinterpret_cast<CORBA::LongLong>(_impl);
}