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
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>
14 IMPLEMENT_DOMSTRING (FirstIndexString, "first")
15 IMPLEMENT_DOMSTRING (LastIndexString, "last")
16 IMPLEMENT_DOMSTRING (ExtString, "string")
18 //=======================================================================
19 //function : XmlMDataStd_ExtStringListDriver
20 //purpose : Constructor
21 //=======================================================================
22 XmlMDataStd_ExtStringListDriver::XmlMDataStd_ExtStringListDriver(const Handle(CDM_MessageDriver)& theMsgDriver)
23 : XmlMDF_ADriver (theMsgDriver, NULL)
28 //=======================================================================
31 //=======================================================================
32 Handle(TDF_Attribute) XmlMDataStd_ExtStringListDriver::NewEmpty() const
34 return new TDataStd_ExtStringList();
37 //=======================================================================
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
45 Standard_Integer aFirstInd, aLastInd;
46 const XmlObjMgt_Element& anElement = theSource;
48 // Read the FirstIndex; if the attribute is absent initialize to 1
49 XmlObjMgt_DOMString aFirstIndex= anElement.getAttribute(::FirstIndexString());
50 if (aFirstIndex == NULL)
52 else if (!aFirstIndex.GetInteger(aFirstInd))
54 TCollection_ExtendedString aMessageString =
55 TCollection_ExtendedString("Cannot retrieve the first index"
56 " for ExtStringList attribute as \"")
58 WriteMessage (aMessageString);
59 return Standard_False;
62 // Read the LastIndex; the attribute should present
63 if (!anElement.getAttribute(::LastIndexString()).GetInteger(aLastInd))
65 TCollection_ExtendedString aMessageString =
66 TCollection_ExtendedString("Cannot retrieve the last index"
67 " for ExtStringList attribute as \"")
69 WriteMessage (aMessageString);
70 return Standard_False;
73 Handle(TDataStd_ExtStringList) anExtStringList = Handle(TDataStd_ExtStringList)::DownCast(theTarget);
75 if (!anElement.hasChildNodes())
77 TCollection_ExtendedString aMessageString =
78 TCollection_ExtendedString("Cannot retrieve a list of extended strings");
79 WriteMessage (aMessageString);
80 return Standard_False;
83 LDOM_Node aCurNode = anElement.getFirstChild();
84 LDOM_Element* aCurElement = (LDOM_Element*)&aCurNode;
85 TCollection_ExtendedString aValueStr;
86 while (*aCurElement != anElement.getLastChild())
88 XmlObjMgt::GetExtendedString( *aCurElement, aValueStr );
89 anExtStringList->Append(aValueStr);
90 aCurNode = aCurElement->getNextSibling();
91 aCurElement = (LDOM_Element*)&aCurNode;
94 XmlObjMgt::GetExtendedString( *aCurElement, aValueStr );
95 anExtStringList->Append(aValueStr);
100 //=======================================================================
102 //purpose : transient -> persistent (store)
103 //=======================================================================
104 void XmlMDataStd_ExtStringListDriver::Paste(const Handle(TDF_Attribute)& theSource,
105 XmlObjMgt_Persistent& theTarget,
106 XmlObjMgt_SRelocationTable& ) const
108 Handle(TDataStd_ExtStringList) anExtStringList = Handle(TDataStd_ExtStringList)::DownCast(theSource);
110 Standard_Integer anU = anExtStringList->Extent();
111 XmlObjMgt_Element& anElement = theTarget;
112 anElement.setAttribute(::LastIndexString(), anU);
114 XmlObjMgt_Document aDoc = anElement.getOwnerDocument().Doc();
116 TDataStd_ListIteratorOfListOfExtendedString itr(anExtStringList->List());
117 for (; itr.More(); itr.Next())
119 const TCollection_ExtendedString& aValueStr = itr.Value();
120 XmlObjMgt_Element aCurTarget = aDoc.createElement( ::ExtString() );
121 XmlObjMgt::SetExtendedString( aCurTarget, aValueStr );
122 anElement.appendChild( aCurTarget );