0022922: Clean up warnings on uninitialized / unused variables
[occt.git] / src / XmlMDataStd / XmlMDataStd_ExtStringArrayDriver.cxx
CommitLineData
7fd59977 1// File: XmlMDataStd_ExtStringArrayDriver.cxx
2// Created: 27.09.04 08:50:28
3// Author: Pavel TELKOV
4// Copyright: Open CASCADE 2004
5
6#include <XmlMDataStd_ExtStringArrayDriver.ixx>
7
8#include <TDataStd_ExtStringArray.hxx>
9
10#include <LDOM_MemManager.hxx>
11#include <XmlObjMgt.hxx>
12#include <XmlObjMgt_Document.hxx>
13#include <XmlMDataStd.hxx>
14
15IMPLEMENT_DOMSTRING (FirstIndexString, "first")
16IMPLEMENT_DOMSTRING (LastIndexString, "last")
17IMPLEMENT_DOMSTRING (ExtString, "string")
18IMPLEMENT_DOMSTRING (IsDeltaOn, "delta")
19//=======================================================================
20//function : XmlMDataStd_ExtStringArrayDriver
21//purpose : Constructor
22//=======================================================================
23
24XmlMDataStd_ExtStringArrayDriver::XmlMDataStd_ExtStringArrayDriver
25 ( const Handle(CDM_MessageDriver)& theMsgDriver )
26: XmlMDF_ADriver( theMsgDriver, NULL )
27{}
28
29//=======================================================================
30//function : NewEmpty
31//purpose :
32//=======================================================================
33Handle(TDF_Attribute) XmlMDataStd_ExtStringArrayDriver::NewEmpty() const
34{
35 return ( new TDataStd_ExtStringArray() );
36}
37
38//=======================================================================
39//function : Paste
40//purpose : persistent -> transient (retrieve)
41//=======================================================================
42Standard_Boolean XmlMDataStd_ExtStringArrayDriver::Paste
43 ( const XmlObjMgt_Persistent& theSource,
44 const Handle(TDF_Attribute)& theTarget,
45 XmlObjMgt_RRelocationTable& ) const
46{
47 Standard_Integer aFirstInd, aLastInd, ind;
48 TCollection_ExtendedString aValue;
49 const XmlObjMgt_Element& anElement = theSource;
50
51 // Read the FirstIndex; if the attribute is absent initialize to 1
52 XmlObjMgt_DOMString aFirstIndex= anElement.getAttribute(::FirstIndexString());
53 if (aFirstIndex == NULL)
54 aFirstInd = 1;
55 else if (!aFirstIndex.GetInteger(aFirstInd)) {
56 TCollection_ExtendedString aMessageString =
57 TCollection_ExtendedString("Cannot retrieve the first index"
58 " for ExtStringArray attribute as \"")
59 + aFirstIndex + "\"";
60 WriteMessage (aMessageString);
61 return Standard_False;
62 }
63
64 // Read LastIndex; the attribute should be present
65 if (!anElement.getAttribute(::LastIndexString()).GetInteger(aLastInd)) {
66 TCollection_ExtendedString aMessageString =
67 TCollection_ExtendedString("Cannot retrieve the last index"
68 " for ExtStringArray attribute as \"")
69 + aFirstIndex + "\"";
70 WriteMessage (aMessageString);
71 return Standard_False;
72 }
73
74 Handle(TDataStd_ExtStringArray) aExtStringArray =
75 Handle(TDataStd_ExtStringArray)::DownCast(theTarget);
76 aExtStringArray->Init(aFirstInd, aLastInd);
77
78 if ( !anElement.hasChildNodes() )
79 {
80 TCollection_ExtendedString aMessageString =
81 TCollection_ExtendedString("Cannot retrieve array of extended string");
82 WriteMessage (aMessageString);
83 return Standard_False;
84 }
85
86 LDOM_Node aCurNode = anElement.getFirstChild();
87 LDOM_Element* aCurElement = (LDOM_Element*)&aCurNode;
88 TCollection_ExtendedString aValueStr;
89 for (ind = aFirstInd; ind <= aLastInd && *aCurElement != anElement.getLastChild(); ind++)
90 {
91 XmlObjMgt::GetExtendedString( *aCurElement, aValueStr );
92 aExtStringArray->SetValue(ind, aValueStr);
93 aCurNode = aCurElement->getNextSibling();
94 aCurElement = (LDOM_Element*)&aCurNode;
95 }
96
97 XmlObjMgt::GetExtendedString( *aCurElement, aValueStr );
98 aExtStringArray->SetValue( aLastInd, aValueStr );
99
100#ifdef DEB
101 //cout << "CurDocVersion = " << XmlMDataStd::DocumentVersion() <<endl;
102#endif
103 Standard_Boolean aDelta(Standard_False);
104
105 if(XmlMDataStd::DocumentVersion() > 2) {
106 Standard_Integer aDeltaValue;
107 if (!anElement.getAttribute(::IsDeltaOn()).GetInteger(aDeltaValue))
108 {
109 TCollection_ExtendedString aMessageString =
110 TCollection_ExtendedString("Cannot retrieve the isDelta value"
111 " for IntegerArray attribute as \"")
112 + aDeltaValue + "\"";
113 WriteMessage (aMessageString);
114 return Standard_False;
115 }
116 else
117 aDelta = (Standard_Boolean)aDeltaValue;
118 }
119#ifdef DEB
120 else if(XmlMDataStd::DocumentVersion() == -1)
121 cout << "Current DocVersion field is not initialized. " <<endl;
122#endif
123 aExtStringArray->SetDelta(aDelta);
124
125 return Standard_True;
126}
127
128//=======================================================================
129//function : Paste
130//purpose : transient -> persistent (store)
131//=======================================================================
132void XmlMDataStd_ExtStringArrayDriver::Paste (const Handle(TDF_Attribute)& theSource,
133 XmlObjMgt_Persistent& theTarget,
134 XmlObjMgt_SRelocationTable& ) const
135{
136 Handle(TDataStd_ExtStringArray) aExtStringArray =
137 Handle(TDataStd_ExtStringArray)::DownCast(theSource);
138
139 Standard_Integer aL = aExtStringArray->Lower(), anU = aExtStringArray->Upper();
140
141 XmlObjMgt_Element& anElement = theTarget;
142
143 if (aL != 1) anElement.setAttribute(::FirstIndexString(), aL);
144 anElement.setAttribute(::LastIndexString(), anU);
145 anElement.setAttribute(::IsDeltaOn(), aExtStringArray->GetDelta());
146
147 // store a set of elements with string in each of them
148 XmlObjMgt_Document aDoc = anElement.getOwnerDocument().Doc();
149
150 for ( Standard_Integer i = aL; i <= anU; i++ )
151 {
152 TCollection_ExtendedString aValueStr = aExtStringArray->Value( i );
153 XmlObjMgt_Element aCurTarget = aDoc.createElement( ::ExtString() );
154 XmlObjMgt::SetExtendedString( aCurTarget, aValueStr );
155 anElement.appendChild( aCurTarget );
156 }
157}