0022922: Clean up warnings on uninitialized / unused variables
[occt.git] / src / XmlMDataStd / XmlMDataStd_ExtStringListDriver.cxx
1 // File:        XmlMDataStd_ExtStringListDriver.cxx
2 // Created:     May 29 11:40:00 2007
3 // Author:      Vlad Romashko
4 //              <vladislav.romashko@opencascade.com>
5 // Copyright:   Open CASCADE
6
7 #include <XmlMDataStd_ExtStringListDriver.ixx>
8 #include <TDataStd_ExtStringList.hxx>
9 #include <TDataStd_ListIteratorOfListOfExtendedString.hxx>
10 #include <XmlObjMgt.hxx>
11 #include <XmlObjMgt_Document.hxx>
12 #include <LDOM_MemManager.hxx>
13
14 IMPLEMENT_DOMSTRING (FirstIndexString, "first")
15 IMPLEMENT_DOMSTRING (LastIndexString,  "last")
16 IMPLEMENT_DOMSTRING (ExtString,        "string")
17
18 //=======================================================================
19 //function : XmlMDataStd_ExtStringListDriver
20 //purpose  : Constructor
21 //=======================================================================
22 XmlMDataStd_ExtStringListDriver::XmlMDataStd_ExtStringListDriver(const Handle(CDM_MessageDriver)& theMsgDriver)
23      : XmlMDF_ADriver (theMsgDriver, NULL)
24 {
25
26 }
27
28 //=======================================================================
29 //function : NewEmpty
30 //purpose  : 
31 //=======================================================================
32 Handle(TDF_Attribute) XmlMDataStd_ExtStringListDriver::NewEmpty() const
33 {
34   return new TDataStd_ExtStringList();
35 }
36
37 //=======================================================================
38 //function : Paste
39 //purpose  : persistent -> transient (retrieve)
40 //=======================================================================
41 Standard_Boolean XmlMDataStd_ExtStringListDriver::Paste(const XmlObjMgt_Persistent&  theSource,
42                                                         const Handle(TDF_Attribute)& theTarget,
43                                                         XmlObjMgt_RRelocationTable&  ) const
44 {
45   Standard_Integer aFirstInd, aLastInd;
46   const XmlObjMgt_Element& anElement = theSource;
47
48   // Read the FirstIndex; if the attribute is absent initialize to 1
49   XmlObjMgt_DOMString aFirstIndex= anElement.getAttribute(::FirstIndexString());
50   if (aFirstIndex == NULL)
51     aFirstInd = 1;
52   else if (!aFirstIndex.GetInteger(aFirstInd)) 
53   {
54     TCollection_ExtendedString aMessageString =
55       TCollection_ExtendedString("Cannot retrieve the first index"
56                                  " for ExtStringList attribute as \"")
57         + aFirstIndex + "\"";
58     WriteMessage (aMessageString);
59     return Standard_False;
60   }
61
62   // Read the LastIndex; the attribute should present
63   if (!anElement.getAttribute(::LastIndexString()).GetInteger(aLastInd)) 
64   {
65     TCollection_ExtendedString aMessageString =
66       TCollection_ExtendedString("Cannot retrieve the last index"
67                                  " for ExtStringList attribute as \"")
68         + aFirstIndex + "\"";
69     WriteMessage (aMessageString);
70     return Standard_False;
71   }
72
73   Handle(TDataStd_ExtStringList) anExtStringList = Handle(TDataStd_ExtStringList)::DownCast(theTarget);
74   
75   if (!anElement.hasChildNodes())
76   {
77     TCollection_ExtendedString aMessageString = 
78       TCollection_ExtendedString("Cannot retrieve a list of extended strings");
79     WriteMessage (aMessageString);
80     return Standard_False;
81   }
82
83   LDOM_Node aCurNode = anElement.getFirstChild();
84   LDOM_Element* aCurElement = (LDOM_Element*)&aCurNode;
85   TCollection_ExtendedString aValueStr;
86   while (*aCurElement != anElement.getLastChild())
87   {
88     XmlObjMgt::GetExtendedString( *aCurElement, aValueStr );
89     anExtStringList->Append(aValueStr);
90     aCurNode = aCurElement->getNextSibling();
91     aCurElement = (LDOM_Element*)&aCurNode;
92   }
93
94   XmlObjMgt::GetExtendedString( *aCurElement, aValueStr );
95   anExtStringList->Append(aValueStr);
96
97   return Standard_True;
98 }
99
100 //=======================================================================
101 //function : Paste
102 //purpose  : transient -> persistent (store)
103 //=======================================================================
104 void XmlMDataStd_ExtStringListDriver::Paste(const Handle(TDF_Attribute)& theSource,
105                                        XmlObjMgt_Persistent&        theTarget,
106                                        XmlObjMgt_SRelocationTable&  ) const
107 {
108   Handle(TDataStd_ExtStringList) anExtStringList = Handle(TDataStd_ExtStringList)::DownCast(theSource);
109
110   Standard_Integer anU = anExtStringList->Extent();
111   XmlObjMgt_Element& anElement = theTarget;
112   anElement.setAttribute(::LastIndexString(), anU);
113   
114   XmlObjMgt_Document aDoc = anElement.getOwnerDocument().Doc();
115   
116   TDataStd_ListIteratorOfListOfExtendedString itr(anExtStringList->List());
117   for (; itr.More(); itr.Next())
118   {
119     const TCollection_ExtendedString& aValueStr = itr.Value();
120     XmlObjMgt_Element aCurTarget = aDoc.createElement( ::ExtString() );
121     XmlObjMgt::SetExtendedString( aCurTarget, aValueStr );
122     anElement.appendChild( aCurTarget );
123   }
124 }