Back to index

salome-kernel  6.5.0
SALOMEDSImpl_SObject.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 //  SALOME SALOMEDS : data structure of SALOME and sources of Salome data server 
00024 //  File   : SALOMEDSImpl_SObject.cxx
00025 //  Author : Sergey RUIN
00026 //  Module : SALOME
00027 //
00028 #include "SALOMEDSImpl_SObject.hxx"
00029 #include "SALOMEDSImpl_Attributes.hxx"
00030 #include "SALOMEDSImpl_SComponent.hxx"
00031 #include "SALOMEDSImpl_Study.hxx"
00032 
00033 #include <map>
00034 #include <string.h>
00035 
00036 //============================================================================
00040 //============================================================================
00041 SALOMEDSImpl_SObject::SALOMEDSImpl_SObject()
00042 {
00043 }
00044 
00045 //============================================================================
00049 //============================================================================
00050 SALOMEDSImpl_SObject::SALOMEDSImpl_SObject(const SALOMEDSImpl_SObject& theSObject)
00051 {
00052   _lab   = theSObject._lab;
00053   _value = theSObject._value;
00054   _type  = theSObject._type;
00055   _name  = theSObject._name;
00056  
00057 }
00058 
00059 
00060 //============================================================================
00064 //============================================================================
00065 SALOMEDSImpl_SObject::SALOMEDSImpl_SObject(const DF_Label& theLabel)
00066   :_lab(theLabel)
00067 {
00068   _value = "";
00069   _type = "";
00070   _name = "";
00071 }
00072 
00073 //============================================================================
00077 //============================================================================    
00078 SALOMEDSImpl_SObject::~SALOMEDSImpl_SObject() 
00079 {
00080 }
00081 
00082 //============================================================================
00086 //============================================================================
00087 std::string SALOMEDSImpl_SObject::GetID() const
00088 {
00089   return _lab.Entry();
00090 }
00091   
00092 //============================================================================
00096 //============================================================================
00097 SALOMEDSImpl_SComponent SALOMEDSImpl_SObject::GetFatherComponent() const
00098 {
00099   SALOMEDSImpl_SComponent sco;    
00100   DF_Label LF = _lab;
00101   while (!SALOMEDSImpl_SComponent::IsA(LF) && !LF.IsRoot()) {
00102     LF = LF.Father();
00103   }
00104   
00105   if(LF.IsRoot()) return sco;
00106   
00107   return GetStudy()->GetSComponent(LF);
00108 }
00109   
00110 //============================================================================
00114 //============================================================================
00115 SALOMEDSImpl_SObject SALOMEDSImpl_SObject::GetFather() const
00116 {
00117   return GetStudy()->GetSObject(_lab.Father());    
00118 }
00119 
00120 
00121 //============================================================================
00125 //============================================================================
00126 SALOMEDSImpl_Study* SALOMEDSImpl_SObject::GetStudy() const
00127 {
00128   return SALOMEDSImpl_Study::GetStudy(_lab);
00129 }
00130 
00131 //============================================================================
00135 //============================================================================
00136 bool SALOMEDSImpl_SObject::FindAttribute(DF_Attribute*& theAttribute, 
00137                                          const std::string& theTypeOfAttribute) const
00138 {
00139   if(_lab.IsNull()) return false;
00140   std::string aGUID = GetGUID(theTypeOfAttribute);
00141   if ((theAttribute = _lab.FindAttribute(aGUID))) return true;
00142   return false;
00143 }
00144 
00145 
00146 
00147 //============================================================================
00151 //============================================================================
00152 std::vector<DF_Attribute*> SALOMEDSImpl_SObject::GetAllAttributes() const
00153 {
00154   std::vector<DF_Attribute*> va1, va = _lab.GetAttributes();
00155   for(int i = 0, len = va.size(); i<len; i++) {
00156     SALOMEDSImpl_GenericAttribute* ga = dynamic_cast<SALOMEDSImpl_GenericAttribute*>(va[i]); 
00157     if(ga && ga->Type() != std::string("AttributeReference"))
00158         va1.push_back(va[i]);
00159   }
00160 
00161   return va1;
00162 }
00163 
00164 
00165 //============================================================================
00169 //============================================================================
00170 bool SALOMEDSImpl_SObject::ReferencedObject(SALOMEDSImpl_SObject& theObject) const
00171 {
00172   SALOMEDSImpl_AttributeReference* Ref;
00173   if (!(Ref=(SALOMEDSImpl_AttributeReference*)_lab.FindAttribute(SALOMEDSImpl_AttributeReference::GetID())))
00174     return false;
00175   
00176   theObject =  GetStudy()->GetSObject(Ref->Get());
00177   return true;
00178 }
00179 
00180 //============================================================================
00184 //============================================================================
00185 bool SALOMEDSImpl_SObject::FindSubObject(int theTag, SALOMEDSImpl_SObject& theObject)
00186 {
00187   DF_Label L = _lab.FindChild(theTag, false);
00188   if (L.IsNull()) return false;
00189   
00190   theObject = GetStudy()->GetSObject(L);
00191   return true;
00192     
00193 }  
00194 
00195   
00196 //============================================================================
00200 //============================================================================
00201 std::string SALOMEDSImpl_SObject::GetName() const
00202 {
00203   std::string aStr = "";
00204   SALOMEDSImpl_AttributeName* aName;
00205   if ((aName=(SALOMEDSImpl_AttributeName*)_lab.FindAttribute(SALOMEDSImpl_AttributeName::GetID()))) {
00206     aStr =aName->Value();
00207   }
00208   return aStr;
00209 }
00210 
00211 //============================================================================
00215 //============================================================================
00216 std::string SALOMEDSImpl_SObject::GetComment() const
00217 {
00218   std::string aStr = "";
00219   SALOMEDSImpl_AttributeComment* aComment;
00220   if ((aComment=(SALOMEDSImpl_AttributeComment*)_lab.FindAttribute(SALOMEDSImpl_AttributeComment::GetID()))) {
00221     aStr = aComment->Value();
00222   }
00223   return aStr;
00224 }
00225 
00226 //============================================================================
00230 //============================================================================
00231 std::string SALOMEDSImpl_SObject::GetIOR() const 
00232 {
00233   std::string aStr = "";
00234   SALOMEDSImpl_AttributeIOR* anIOR;
00235   if ((anIOR=(SALOMEDSImpl_AttributeIOR*)_lab.FindAttribute(SALOMEDSImpl_AttributeIOR::GetID()))) {
00236     aStr = dynamic_cast<SALOMEDSImpl_AttributeIOR*>(anIOR)->Value();
00237   }
00238   return aStr;
00239 }
00240 
00241 
00242 std::string SALOMEDSImpl_SObject::GetGUID(const std::string& theType) 
00243 {
00244   __AttributeTypeToGUIDForSObject
00245 
00246   if (strncmp(theType.c_str(), "AttributeTreeNodeGUID",21) == 0) {
00247     return theType.substr(21, theType.size()); 
00248   }
00249   if (strncmp(theType.c_str(), "AttributeUserID",15) == 0) {
00250     return theType.substr(15, theType.size()); 
00251   }
00252   return "";
00253 }
00254 
00255 //============================================================================
00259 //============================================================================
00260 SALOMEDSImpl_SObject::operator SALOMEDSImpl_SComponent() const
00261 {
00262   SALOMEDSImpl_SComponent sco;
00263   sco._lab = _lab;
00264   sco._name = _name;
00265   sco._type = _type;
00266   sco._value = _value;
00267   return sco;
00268 }
00269 
00270 //============================================================================
00274 //============================================================================
00275 SALOMEDSImpl_SObject* SALOMEDSImpl_SObject::GetPersistentCopy() const
00276 {
00277   SALOMEDSImpl_SObject* so = new SALOMEDSImpl_SObject;
00278   so->_lab = _lab;
00279   so->_name = _name;
00280   so->_type = _type;
00281   so->_value = _value; 
00282   return so;
00283 }
00284 
00285 //============================================================================
00289 //============================================================================
00290 bool SALOMEDSImpl_SObject::IsComponent() const
00291 {
00292     return SALOMEDSImpl_SComponent::IsA(_lab);
00293 }
00294 
00295 void SALOMEDSImpl_SObject::SetAttrString(const std::string& name, const std::string& value)
00296 {
00297   if(name=="AttributeName")SALOMEDSImpl_AttributeName::Set(GetLabel(), value);
00298   else if(name=="AttributeIOR")SALOMEDSImpl_AttributeIOR::Set(GetLabel(), value);
00299   else if(name=="AttributeString")SALOMEDSImpl_AttributeString::Set(GetLabel(), value);
00300   else if(name=="AttributePixMap")SALOMEDSImpl_AttributePixMap::Set(GetLabel(), value);
00301 }