1 // SALOME SALOMEDS : data structure of SALOME and sources of Salome data server
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : SALOMEDS_AttributeTreeNode_i.cxx
25 // Author : Yves FRICAUD
30 #include "SALOMEDS_AttributeTreeNode_i.hxx"
31 #include "SALOMEDS_SObject_i.hxx"
32 #include "utilities.h"
33 #include <TDocStd_Document.hxx>
34 #include <TDF_Tool.hxx>
36 static Handle(TDataStd_TreeNode) GetNode(SALOMEDS::AttributeTreeNode_ptr value,
37 const Handle(TDataStd_TreeNode)& aNode) {
38 Handle(TDataStd_TreeNode) aResult = new TDataStd_TreeNode;
39 CORBA::String_var aString = CORBA::string_dup(value->Label());
41 TDF_Tool::Label(aNode->Label().Data(), TCollection_AsciiString(aString), aLabel, 0);
42 if (aLabel.IsNull()) {
43 MESSAGE("SALOMEDS_AttributeTreeNode_i class: no such label")
44 MESSAGE("SALOMEDS_AttributeTreeNode_i class: no such label")
47 if (!aLabel.FindAttribute(aNode->ID(), aResult)) {
48 MESSAGE("SALOMEDS_AttributeTreeNode_i class: no such attribute")
49 MESSAGE("SALOMEDS_AttributeTreeNode_i class: no such attribute")
54 void SALOMEDS_AttributeTreeNode_i::SetFather(SALOMEDS::AttributeTreeNode_ptr value) {
56 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
57 aNode->SetFather(GetNode(value, aNode));
60 CORBA::Boolean SALOMEDS_AttributeTreeNode_i::HasFather() {
61 return Handle(TDataStd_TreeNode)::DownCast(_myAttr)->HasFather();
64 SALOMEDS::AttributeTreeNode_ptr SALOMEDS_AttributeTreeNode_i::GetFather() {
65 SALOMEDS_AttributeTreeNode_i* aFather = new SALOMEDS_AttributeTreeNode_i(Handle(TDataStd_TreeNode)::DownCast(_myAttr)->Father(), _myOrb);
66 return aFather->POA_SALOMEDS::AttributeTreeNode::_this();
69 void SALOMEDS_AttributeTreeNode_i::SetPrevious(SALOMEDS::AttributeTreeNode_ptr value) {
71 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
72 aNode->SetPrevious(GetNode(value, aNode));
75 CORBA::Boolean SALOMEDS_AttributeTreeNode_i::HasPrevious() {
76 return Handle(TDataStd_TreeNode)::DownCast(_myAttr)->HasPrevious();
79 SALOMEDS::AttributeTreeNode_ptr SALOMEDS_AttributeTreeNode_i::GetPrevious() {
80 SALOMEDS_AttributeTreeNode_i* aPrevious = new SALOMEDS_AttributeTreeNode_i(Handle(TDataStd_TreeNode)::DownCast(_myAttr)->Previous(), _myOrb);
81 return aPrevious->POA_SALOMEDS::AttributeTreeNode::_this();
84 void SALOMEDS_AttributeTreeNode_i::SetNext(SALOMEDS::AttributeTreeNode_ptr value) {
86 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
87 aNode->SetNext(GetNode(value, aNode));
90 CORBA::Boolean SALOMEDS_AttributeTreeNode_i::HasNext() {
91 return Handle(TDataStd_TreeNode)::DownCast(_myAttr)->HasNext();
94 SALOMEDS::AttributeTreeNode_ptr SALOMEDS_AttributeTreeNode_i::GetNext() {
95 SALOMEDS_AttributeTreeNode_i* aNext = new SALOMEDS_AttributeTreeNode_i(Handle(TDataStd_TreeNode)::DownCast(_myAttr)->Next(), _myOrb);
96 return aNext->POA_SALOMEDS::AttributeTreeNode::_this();
99 void SALOMEDS_AttributeTreeNode_i::SetFirst(SALOMEDS::AttributeTreeNode_ptr value) {
101 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
102 aNode->SetFirst(GetNode(value, aNode));
105 CORBA::Boolean SALOMEDS_AttributeTreeNode_i::HasFirst() {
106 return Handle(TDataStd_TreeNode)::DownCast(_myAttr)->HasFirst();
109 SALOMEDS::AttributeTreeNode_ptr SALOMEDS_AttributeTreeNode_i::GetFirst() {
110 SALOMEDS_AttributeTreeNode_i* aFirst = new SALOMEDS_AttributeTreeNode_i(Handle(TDataStd_TreeNode)::DownCast(_myAttr)->First(), _myOrb);
111 return aFirst->POA_SALOMEDS::AttributeTreeNode::_this();
114 void SALOMEDS_AttributeTreeNode_i::SetTreeID(const char* value) {
116 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
117 aNode->SetTreeID(Standard_GUID(aNode->ID()));
120 char* SALOMEDS_AttributeTreeNode_i::GetTreeID() {
121 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
123 aNode->ID().ToCString(aGUID);
124 return CORBA::String_var(CORBA::string_dup(aGUID))._retn();
127 void SALOMEDS_AttributeTreeNode_i::Append(SALOMEDS::AttributeTreeNode_ptr value) {
129 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
130 aNode->Append(GetNode(value, aNode));
133 void SALOMEDS_AttributeTreeNode_i::Prepend(SALOMEDS::AttributeTreeNode_ptr value) {
135 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
136 aNode->Prepend(GetNode(value, aNode));
139 void SALOMEDS_AttributeTreeNode_i::InsertBefore(SALOMEDS::AttributeTreeNode_ptr value) {
141 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
142 aNode->InsertBefore(GetNode(value, aNode));
145 void SALOMEDS_AttributeTreeNode_i::InsertAfter(SALOMEDS::AttributeTreeNode_ptr value) {
147 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
148 aNode->InsertAfter(GetNode(value, aNode));
151 void SALOMEDS_AttributeTreeNode_i::Remove() {
153 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
157 CORBA::Long SALOMEDS_AttributeTreeNode_i::Depth() {
158 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
159 return aNode->Depth();
162 CORBA::Boolean SALOMEDS_AttributeTreeNode_i::IsRoot() {
163 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
164 return aNode->IsRoot();
167 CORBA::Boolean SALOMEDS_AttributeTreeNode_i::IsDescendant(SALOMEDS::AttributeTreeNode_ptr value) {
168 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
169 return aNode->IsDescendant(GetNode(value, aNode));
172 CORBA::Boolean SALOMEDS_AttributeTreeNode_i::IsFather(SALOMEDS::AttributeTreeNode_ptr value) {
173 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
174 return aNode->IsFather(GetNode(value, aNode));
177 CORBA::Boolean SALOMEDS_AttributeTreeNode_i::IsChild(SALOMEDS::AttributeTreeNode_ptr value) {
178 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
179 return aNode->IsChild(GetNode(value, aNode));
182 char* SALOMEDS_AttributeTreeNode_i::Label() {
183 TCollection_AsciiString aLabelName;
184 TDF_Tool::Entry(_myAttr->Label(),aLabelName);
185 return CORBA::String_var(CORBA::string_dup(aLabelName.ToCString()))._retn();
188 char* SALOMEDS_AttributeTreeNode_i::Store() {
191 if (HasFather()) aStr[0] = GetFather()->Label(); else aStr[0] = "!";
192 if (HasPrevious()) aStr[1] = GetPrevious()->Label(); else aStr[1] = "!";
193 if (HasNext()) aStr[2] = GetNext()->Label(); else aStr[2] = "!";
194 if (HasFirst()) aStr[3] = GetFirst()->Label(); else aStr[3] = "!";
197 aLength += strlen(aStr[0]) + strlen(aStr[1]) + strlen(aStr[2]) + strlen(aStr[3]);
198 CORBA::String_var aResult = new char[aLength];
199 sprintf(aResult, "%s %s %s %s", aStr[0], aStr[1], aStr[2], aStr[3]);
200 return aResult._retn();
203 void SALOMEDS_AttributeTreeNode_i::Restore(const char* value) {
204 Handle(TDataStd_TreeNode) aNode = Handle(TDataStd_TreeNode)::DownCast(_myAttr);
205 Handle(TDF_Data) DF = TDocStd_Document::Get(_myAttr->Label())->GetData();
207 char* aCopy = strdup(value);
208 char* adr = strtok(aCopy, " ");
211 Handle(TDataStd_TreeNode) aDepNode;
213 if (adr && adr[0] != '!') {
214 TDF_Tool::Label(DF, adr, aLabel, 1);
215 if (!aLabel.FindAttribute(aNode->ID(), aDepNode)) aDepNode = TDataStd_TreeNode::Set(aLabel, aNode->ID());
216 aNode->SetFather(aDepNode);
219 adr = strtok(NULL, " ");
220 if (adr && adr[0] != '!') {
221 TDF_Tool::Label(DF, adr, aLabel, 1);
222 if (!aLabel.FindAttribute(aNode->ID(), aDepNode)) aDepNode = TDataStd_TreeNode::Set(aLabel, aNode->ID());
223 aNode->SetPrevious(aDepNode);
226 adr = strtok(NULL, " ");
227 if (adr && adr[0] != '!') {
228 TDF_Tool::Label(DF, adr, aLabel, 1);
229 if (!aLabel.FindAttribute(aNode->ID(), aDepNode)) aDepNode = TDataStd_TreeNode::Set(aLabel, aNode->ID());
230 aNode->SetNext(aDepNode);
233 adr = strtok(NULL, " ");
234 if (adr && adr[0] != '!') {
235 TDF_Tool::Label(DF, adr, aLabel, 1);
236 if (!aLabel.FindAttribute(aNode->ID(), aDepNode)) aDepNode = TDataStd_TreeNode::Set(aLabel, aNode->ID());
237 aNode->SetFirst(aDepNode);