Salome HOME
DCQ : Merge with Ecole_ete_a6.
[modules/yacs.git] / src / SALOMEDS / SALOMEDS_GenericAttribute_i.hxx
1 //  SALOME SALOMEDS : data structure of SALOME and sources of Salome data server 
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
6 //  This library is free software; you can redistribute it and/or 
7 //  modify it under the terms of the GNU Lesser General Public 
8 //  License as published by the Free Software Foundation; either 
9 //  version 2.1 of the License. 
10 // 
11 //  This library is distributed in the hope that it will be useful, 
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
14 //  Lesser General Public License for more details. 
15 // 
16 //  You should have received a copy of the GNU Lesser General Public 
17 //  License along with this library; if not, write to the Free Software 
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : SALOMEDS_GenericAttribute_i.hxx
25 //  Author : Yves FRICAUD
26 //  Module : SALOME
27 //  $Header$
28
29 #ifndef _GENERIC_ATTRIBUTE_I_HXX_
30 #define _GENERIC_ATTRIBUTE_I_HXX_
31
32 // IDL headers
33 #include <SALOMEconfig.h>
34 #include CORBA_SERVER_HEADER(SALOMEDS)
35 #include <TDF_Attribute.hxx>
36 #include "SALOMEDS_SObject_i.hxx"
37
38 class SALOMEDS_GenericAttribute_i: public POA_SALOMEDS::GenericAttribute,
39                                    public PortableServer::RefCountServantBase {
40 protected:
41   Handle(TDF_Attribute) _myAttr;
42   CORBA::ORB_ptr        _myOrb;
43 public:
44   SALOMEDS_GenericAttribute_i() {};
45   
46   void CheckLocked() throw (SALOMEDS::GenericAttribute::LockProtection);
47
48   char* Store() {return "";};
49
50   void Restore(const char*) {};
51   
52   char* Type();
53
54   SALOMEDS::SObject_ptr GetSObject();
55
56   ~SALOMEDS_GenericAttribute_i() {};
57
58   static Standard_GUID GetGUID(const char* theType);
59
60   static SALOMEDS::GenericAttribute_ptr CreateAttribute(CORBA::ORB_ptr theOrb, const Handle(TDF_Attribute)& theAttr);
61 };
62
63 // defines for creation attributes objects
64
65 //cout<<"*** Create new CORBA attribute for "<<#CORBA_Name<<endl;
66 #define __ReturnCORBAAttribute(OCAF_Name, CORBA_Name) if (theAttr->ID() == OCAF_Name::GetID()) { \
67     SALOMEDS_##CORBA_Name##_i* Attr = new SALOMEDS_##CORBA_Name##_i(Handle(OCAF_Name)::DownCast(theAttr), theOrb); \
68     return Attr->CORBA_Name::_this(); \
69   }
70
71 //cout<<"Create New Attribute "<<#CORBA_Name<<endl;
72 #define __FindOrCreateAttribute(OCAF_Name, CORBA_Name) if (strcmp(aTypeOfAttribute, #CORBA_Name) == 0) { \
73     Handle(OCAF_Name) anAttr; \
74     if (!Lab.FindAttribute(OCAF_Name::GetID(), anAttr)) { \
75       anAttr = new OCAF_Name; \
76       Lab.AddAttribute(anAttr); \
77     } \
78     SALOMEDS_##CORBA_Name##_i* Attr = new SALOMEDS_##CORBA_Name##_i(anAttr, _orb); \
79     return Attr->CORBA_Name::_this(); \
80   }
81
82 //cout<<"Create New Attribute "<<#CORBA_Name<<endl;
83 #define __FindOrCreateAttributeLocked(OCAF_Name, CORBA_Name) if (strcmp(aTypeOfAttribute, #CORBA_Name) == 0) { \
84     Handle(OCAF_Name) anAttr; \
85     if (!Lab.FindAttribute(OCAF_Name::GetID(), anAttr)) { \
86       CheckLocked(); \
87       anAttr = new OCAF_Name; \
88       Lab.AddAttribute(anAttr); \
89     } \
90     SALOMEDS_##CORBA_Name##_i* Attr = new SALOMEDS_##CORBA_Name##_i(anAttr, _orb); \
91     return Attr->CORBA_Name::_this(); \
92   }
93
94 #endif