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 | |
15 | IMPLEMENT_DOMSTRING (FirstIndexString, "first") |
16 | IMPLEMENT_DOMSTRING (LastIndexString, "last") |
17 | IMPLEMENT_DOMSTRING (ExtString, "string") |
18 | IMPLEMENT_DOMSTRING (IsDeltaOn, "delta") |
19 | //======================================================================= |
20 | //function : XmlMDataStd_ExtStringArrayDriver |
21 | //purpose : Constructor |
22 | //======================================================================= |
23 | |
24 | XmlMDataStd_ExtStringArrayDriver::XmlMDataStd_ExtStringArrayDriver |
25 | ( const Handle(CDM_MessageDriver)& theMsgDriver ) |
26 | : XmlMDF_ADriver( theMsgDriver, NULL ) |
27 | {} |
28 | |
29 | //======================================================================= |
30 | //function : NewEmpty |
31 | //purpose : |
32 | //======================================================================= |
33 | Handle(TDF_Attribute) XmlMDataStd_ExtStringArrayDriver::NewEmpty() const |
34 | { |
35 | return ( new TDataStd_ExtStringArray() ); |
36 | } |
37 | |
38 | //======================================================================= |
39 | //function : Paste |
40 | //purpose : persistent -> transient (retrieve) |
41 | //======================================================================= |
42 | Standard_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 | //======================================================================= |
132 | void 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 | } |