Back to index

salome-kernel  6.5.0
SALOMEDSImpl_AttributeIOR.cxx
Go to the documentation of this file.
00001 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
00002 //
00003 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
00004 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
00005 //
00006 // This library is free software; you can redistribute it and/or
00007 // modify it under the terms of the GNU Lesser General Public
00008 // License as published by the Free Software Foundation; either
00009 // version 2.1 of the License.
00010 //
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014 // Lesser General Public License for more details.
00015 //
00016 // You should have received a copy of the GNU Lesser General Public
00017 // License along with this library; if not, write to the Free Software
00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00019 //
00020 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00021 //
00022 
00023 //  File   : SALOMEDSImpl_AttributeIOR.cxx
00024 //  Author : Sergey RUIN
00025 //  Module : SALOME
00026 //
00027 #include "SALOMEDSImpl_AttributeIOR.hxx"
00028 #include "SALOMEDSImpl_Study.hxx"
00029 
00030 //to disable automatic genericobj management comment the following line
00031 #define WITHGENERICOBJ
00032 
00033 #ifdef WITHGENERICOBJ
00034 #include "SALOME_GenericObj_i.hh"
00035 
00036 static CORBA::ORB_var getORB()
00037 {
00038   int argc=0;
00039   return CORBA::ORB_init(argc,0);
00040 }
00041 
00042 void IORGenericObjDecref(const std::string& anIOR)
00043 {
00044   if(anIOR=="")return;
00045   CORBA::Object_var obj;
00046   SALOME::GenericObj_var gobj;
00047   try
00048     {
00049       obj = getORB()->string_to_object(anIOR.c_str());
00050       if(obj->_non_existent())return;
00051       gobj = SALOME::GenericObj::_narrow(obj);
00052       if(! CORBA::is_nil(gobj) )
00053         {
00054           gobj->UnRegister();
00055         }
00056     }
00057   catch(const CORBA::Exception& e)
00058     {
00059     }
00060 }
00061 
00062 void IORGenericObjIncref(const std::string& anIOR)
00063 {
00064   CORBA::Object_var obj;
00065   SALOME::GenericObj_var gobj;
00066   try
00067     {
00068       obj = getORB()->string_to_object(anIOR.c_str());
00069       if(obj->_non_existent())return;
00070       gobj = SALOME::GenericObj::_narrow(obj);
00071       if(! CORBA::is_nil(gobj) )
00072         {
00073           gobj->Register();
00074         }
00075     }
00076   catch(const CORBA::Exception& e)
00077     {
00078     }
00079 }
00080 #else
00081 void IORGenericObjDecref(const std::string& anIOR)
00082 {}
00083 void IORGenericObjIncref(const std::string& anIOR)
00084 {}
00085 #endif
00086 
00087 //=======================================================================
00088 //function : GetID
00089 //purpose  : 
00090 //=======================================================================
00091 
00092 const std::string& SALOMEDSImpl_AttributeIOR::GetID () 
00093 {
00094   static std::string SALOMEDSImpl_AttributeIORID ("92888E01-7074-11d5-A690-0800369C8A03");
00095   return SALOMEDSImpl_AttributeIORID;
00096 }
00097 
00098 
00099 
00100 //=======================================================================
00101 //function : Set
00102 //purpose  : 
00103 //=======================================================================
00104 
00105 SALOMEDSImpl_AttributeIOR* SALOMEDSImpl_AttributeIOR::Set (const DF_Label& L,
00106                                                            const std::string& S) 
00107 {
00108   SALOMEDSImpl_AttributeIOR* A = NULL;
00109   if (!(A=(SALOMEDSImpl_AttributeIOR*)L.FindAttribute(SALOMEDSImpl_AttributeIOR::GetID()))) {
00110     A = new  SALOMEDSImpl_AttributeIOR(); 
00111     L.AddAttribute(A);
00112   }
00113 
00114   A->SetValue(S); 
00115   return A;
00116 }
00117 
00118 //=======================================================================
00119 //function : SetValue
00120 //purpose  : 
00121 //=======================================================================
00122 void SALOMEDSImpl_AttributeIOR::SetValue(const std::string& theValue)
00123 {
00124   CheckLocked();
00125 
00126   SALOMEDSImpl_Study* study=SALOMEDSImpl_Study::GetStudy(Label());
00127 
00128   Backup();
00129   //remove IOR entry in study
00130   if(theValue != myString)
00131     {
00132       IORGenericObjIncref(theValue);
00133       IORGenericObjDecref(myString);
00134       study->DeleteIORLabelMapItem(myString);
00135     }
00136 
00137   myString = theValue;
00138 
00139   //add IOR entry in study
00140   SALOMEDSImpl_Study::IORUpdated(this);
00141   
00142   //Reason = 5 means that IOR attribute updated
00143   //Used in the gui module to detect that IOR attribure was assigned to the object
00144   SetModifyFlag(5);
00145 }
00146 
00147 //=======================================================================
00148 //function : Value
00149 //purpose  : 
00150 //=======================================================================
00151 std::string SALOMEDSImpl_AttributeIOR::Value() const
00152 {
00153   return myString;
00154 }
00155 
00156 //=======================================================================
00157 //function : constructor
00158 //purpose  : 
00159 //=======================================================================
00160 SALOMEDSImpl_AttributeIOR::SALOMEDSImpl_AttributeIOR()
00161 :SALOMEDSImpl_GenericAttribute("AttributeIOR")
00162 {
00163 }
00164 
00165 SALOMEDSImpl_AttributeIOR::~SALOMEDSImpl_AttributeIOR()
00166 {
00167   IORGenericObjDecref(myString);
00168 }
00169 
00170 //=======================================================================
00171 //function : ID
00172 //purpose  : 
00173 //=======================================================================
00174 
00175 const std::string& SALOMEDSImpl_AttributeIOR::ID () const { return GetID(); }
00176 
00177 
00178 //=======================================================================
00179 //function : NewEmpty
00180 //purpose  : 
00181 //=======================================================================
00182 
00183 DF_Attribute* SALOMEDSImpl_AttributeIOR::NewEmpty () const
00184 {  
00185   return new SALOMEDSImpl_AttributeIOR(); 
00186 }
00187 
00188 //=======================================================================
00189 //function : Restore
00190 //purpose  : 
00191 //=======================================================================
00192 
00193 void SALOMEDSImpl_AttributeIOR::Restore( DF_Attribute* with) 
00194 {
00195   myString = dynamic_cast<SALOMEDSImpl_AttributeIOR*>(with)->Value();
00196   return;
00197 }
00198 
00199 //=======================================================================
00200 //function : Paste
00201 //purpose  : 
00202 //=======================================================================
00203 
00204 void SALOMEDSImpl_AttributeIOR::Paste (DF_Attribute* into)
00205 {
00206   dynamic_cast<SALOMEDSImpl_AttributeIOR*>(into)->SetValue(myString);
00207 }
00208