Salome HOME
Update version to 3.2.0a1
[modules/kernel.git] / src / SALOMEDS / SALOMEDS_SComponent_i.cxx
index ee89975662afd00cd7372111b4d40724f009ec58..3fee72eea737db5bbf321d11d47944a77917f62b 100644 (file)
@@ -1,45 +1,65 @@
-//  SALOME SALOMEDS : data structure of SALOME and sources of Salome data server 
-//
-//  Copyright (C) 2003  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. 
+// Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 // 
-//  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. 
+// 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.
 // 
-//  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+// 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/
 //
 //  File   : SALOMEDS_SComponent_i.cxx
-//  Author : Yves FRICAUD
+//  Author : Sergey RUIN
 //  Module : SALOME
-//  $Header$
+
 
 #include "SALOMEDS_SComponent_i.hxx"
+#include "SALOMEDS.hxx"
 #include "utilities.h"
+#include <map>
+
 using namespace std;
 
+SALOMEDS::SComponent_ptr SALOMEDS_SComponent_i::New(const Handle(SALOMEDSImpl_SComponent)& theImpl, CORBA::ORB_ptr theORB)
+{
+/*
+  static std::map<SALOMEDSImpl_SComponent*, SALOMEDS_SComponent_i*> _mapOfSCO;
+  SALOMEDS::SComponent_var sco;
+  SALOMEDS_SComponent_i* sco_servant = NULL;
+
+  if(_mapOfSCO.find(theImpl.operator->()) != _mapOfSCO.end()) {
+    sco_servant = _mapOfSCO[theImpl.operator->()];
+  }
+  else {
+    sco_servant = new SALOMEDS_SComponent_i(theImpl, theORB);
+    _mapOfSCO[theImpl.operator->()] = sco_servant;
+  }
+
+  sco  = SALOMEDS::SComponent::_narrow(sco_servant->SComponent::_this()); 
+*/
+  SALOMEDS_SComponent_i* sco_servant = new SALOMEDS_SComponent_i(theImpl, theORB);
+  SALOMEDS::SComponent_var sco  = SALOMEDS::SComponent::_narrow(sco_servant->SComponent::_this()); 
+
+  return sco._retn();
+}    
 
 //============================================================================
 /*! Function : constructor
  *  Purpose  : 
  */
 //============================================================================
-SALOMEDS_SComponent_i::SALOMEDS_SComponent_i(const TDF_Label lab, CORBA::ORB_ptr orb)
-  :SALOMEDS_SObject_i(lab,orb)
-{
-}
+SALOMEDS_SComponent_i::SALOMEDS_SComponent_i(const Handle(SALOMEDSImpl_SComponent)& theImpl, CORBA::ORB_ptr orb)
+  :SALOMEDS_SObject_i(theImpl, orb)
+{}
   
 //============================================================================
 /*! Function : destructor
@@ -47,10 +67,8 @@ SALOMEDS_SComponent_i::SALOMEDS_SComponent_i(const TDF_Label lab, CORBA::ORB_ptr
  */
 //============================================================================
 SALOMEDS_SComponent_i::~SALOMEDS_SComponent_i()
-{
-}
-  
-  
+{}
+   
 //============================================================================
 /*! Function : ComponentDataType
  *  Purpose  : 
@@ -58,21 +76,9 @@ SALOMEDS_SComponent_i::~SALOMEDS_SComponent_i()
 //============================================================================
 char* SALOMEDS_SComponent_i::ComponentDataType()
 {
-  //DEB
-  //    MESSAGE("In SALOMEDS_SComponent_i::ComponentDataType");
-  //    TCollection_AsciiString anEntry;
-  //    TDF_Tool::Entry (_lab,anEntry);
-  //    MESSAGE("in SALOMEDS_SComponent_i, Entry :"<<anEntry);
-  // END DEB
-
-  Standard_CString res = "";
-  Handle(TDataStd_Comment) type;
-  if ( _lab.FindAttribute(TDataStd_Comment::GetID(),type) ) {
-    TCollection_AsciiString ch(type->Get());
-    res = ch.ToCString();
-  }
-
-  return CORBA::string_dup(res);
+  SALOMEDS::Locker lock;
+  TCollection_AsciiString aType = Handle(SALOMEDSImpl_SComponent)::DownCast(_impl)->ComponentDataType();
+  return CORBA::string_dup(aType.ToCString());
 }
   
 
@@ -83,28 +89,12 @@ char* SALOMEDS_SComponent_i::ComponentDataType()
 //============================================================================
 CORBA::Boolean SALOMEDS_SComponent_i::ComponentIOR(CORBA::String_out IOR)
 {
-  Handle(SALOMEDS_IORAttribute) ior;
-  if (!_lab.FindAttribute(SALOMEDS_IORAttribute::GetID(),ior) )
-      return false;
-  TCollection_AsciiString ch(ior->Get());
-  IOR = CORBA::string_dup(ch.ToCString());
-  return true;
-}
-  
-
-//============================================================================
-/*! Function : IsA
- *  Purpose  : 
- */
-//============================================================================
-Standard_Boolean SALOMEDS_SComponent_i::IsA(const TDF_Label Lab)
-{
-  Handle(TDF_Attribute) Att;
-  // scomponent must contain comment and belong to the 2th depth label
-  if ( Lab.FindAttribute(TDataStd_Comment::GetID(), Att) && Lab.Depth() == 2) {
-    return Standard_True;
+  SALOMEDS::Locker lock;
+  TCollection_AsciiString ior;
+  if(!Handle(SALOMEDSImpl_SComponent)::DownCast(_impl)->ComponentIOR(ior)) {
+    IOR = CORBA::string_dup("");
+    return false;
   }
-  return Standard_False;
+  IOR = CORBA::string_dup(ior.ToCString());
+  return true;
 }
-  
-