0025536: XmlMDataXtd_GeometryDriver doesn't support TDataXtd_SPLINE, TDataXtd_PLANE...
[occt.git] / src / XmlMDataXtd / XmlMDataXtd_GeometryDriver.cxx
1 // Created on: 2001-08-24
2 // Created by: Alexnder GRIGORIEV
3 // Copyright (c) 2001-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16
17 #include <CDM_MessageDriver.hxx>
18 #include <Standard_Type.hxx>
19 #include <TDataXtd_Geometry.hxx>
20 #include <TDF_Attribute.hxx>
21 #include <XmlMDataXtd_GeometryDriver.hxx>
22 #include <XmlObjMgt_Persistent.hxx>
23
24 IMPLEMENT_STANDARD_RTTIEXT(XmlMDataXtd_GeometryDriver,XmlMDF_ADriver)
25
26 static const XmlObjMgt_DOMString& GeometryTypeString
27                                         (const TDataXtd_GeometryEnum);
28 static Standard_Boolean           GeometryTypeEnum
29                                         (const XmlObjMgt_DOMString& theString,
30                                          TDataXtd_GeometryEnum&     theResult);
31
32 IMPLEMENT_DOMSTRING (TypeString,        "geomtype")
33
34 IMPLEMENT_DOMSTRING (GeomAnyString,      "any")
35 IMPLEMENT_DOMSTRING (GeomPointString,    "point")
36 IMPLEMENT_DOMSTRING (GeomLineString,     "line")
37 IMPLEMENT_DOMSTRING (GeomCircleString,   "circle")
38 IMPLEMENT_DOMSTRING (GeomEllipseString,  "ellipse")
39 IMPLEMENT_DOMSTRING (GeomSplineString,   "slpine")
40 IMPLEMENT_DOMSTRING (GeomPlaneString,    "plane")
41 IMPLEMENT_DOMSTRING (GeomCylinderString, "cylinder")
42
43 //=======================================================================
44 //function : XmlMDataXtd_GeometryDriver
45 //purpose  : Constructor
46 //=======================================================================
47 XmlMDataXtd_GeometryDriver::XmlMDataXtd_GeometryDriver
48                         (const Handle(CDM_MessageDriver)& theMsgDriver)
49       : XmlMDF_ADriver (theMsgDriver, NULL)
50 {}
51
52 //=======================================================================
53 //function : NewEmpty
54 //purpose  : 
55 //=======================================================================
56 Handle(TDF_Attribute) XmlMDataXtd_GeometryDriver::NewEmpty() const
57 {
58   return (new TDataXtd_Geometry());
59 }
60
61 //=======================================================================
62 //function : Paste
63 //purpose  : 
64 //=======================================================================
65 Standard_Boolean XmlMDataXtd_GeometryDriver::Paste
66                                         (const XmlObjMgt_Persistent&  theSource,
67                                          const Handle(TDF_Attribute)& theTarget,
68                                          XmlObjMgt_RRelocationTable&  ) const
69 {
70   Handle(TDataXtd_Geometry) aT = 
71     Handle(TDataXtd_Geometry)::DownCast (theTarget);
72
73   XmlObjMgt_DOMString aType = theSource.Element().getAttribute(::TypeString());
74   TDataXtd_GeometryEnum aTypeEnum;
75   if (GeometryTypeEnum (aType, aTypeEnum) == Standard_False) {
76     WriteMessage ("TDataXtd_GeometryEnum; "
77                   "string value without enum term equivalence");
78     return Standard_False;
79   }
80
81   aT->SetType (aTypeEnum);
82   return Standard_True;
83 }
84
85 //=======================================================================
86 //function : Paste
87 //purpose  : 
88 //=======================================================================
89 void XmlMDataXtd_GeometryDriver::Paste (const Handle(TDF_Attribute)& theSource,
90                                         XmlObjMgt_Persistent&        theTarget,
91                                         XmlObjMgt_SRelocationTable&  ) const
92 {
93   Handle(TDataXtd_Geometry) aG = Handle(TDataXtd_Geometry)::DownCast(theSource);
94   theTarget.Element().setAttribute (::TypeString(),
95                                     GeometryTypeString (aG->GetType()));
96 }
97
98 //=======================================================================
99 //function : GeometryTypeEnum
100 //purpose  : 
101 //=======================================================================
102 static Standard_Boolean GeometryTypeEnum (const XmlObjMgt_DOMString& theString,
103                                           TDataXtd_GeometryEnum&     theResult) 
104 {
105   TDataXtd_GeometryEnum aResult = TDataXtd_ANY_GEOM;
106   if (!theString.equals (::GeomAnyString()))
107   {
108     if (theString.equals (::GeomPointString()))
109       aResult = TDataXtd_POINT;
110     else if (theString.equals (::GeomLineString()))
111       aResult = TDataXtd_LINE;
112     else if (theString.equals (::GeomCircleString()))
113       aResult = TDataXtd_CIRCLE;
114     else if (theString.equals (::GeomEllipseString()))
115       aResult = TDataXtd_ELLIPSE;
116     else if (theString.equals(::GeomSplineString()))
117       aResult = TDataXtd_SPLINE;
118     else if (theString.equals(::GeomPlaneString()))
119       aResult = TDataXtd_PLANE;
120     else if (theString.equals(::GeomCylinderString()))
121       aResult = TDataXtd_CYLINDER;
122     else
123       return Standard_False;
124   }
125   theResult = aResult;
126   return Standard_True;
127 }
128
129 //=======================================================================
130 //function : GeometryTypeString
131 //purpose  : 
132 //=======================================================================
133 static const XmlObjMgt_DOMString& GeometryTypeString
134                                         (const TDataXtd_GeometryEnum theE) 
135 {
136   switch (theE)
137   {
138   case TDataXtd_ANY_GEOM : return ::GeomAnyString();
139   case TDataXtd_POINT    : return ::GeomPointString();
140   case TDataXtd_LINE     : return ::GeomLineString();
141   case TDataXtd_CIRCLE   : return ::GeomCircleString();
142   case TDataXtd_ELLIPSE  : return ::GeomEllipseString();
143   case TDataXtd_SPLINE   : return ::GeomSplineString();
144   case TDataXtd_PLANE    : return ::GeomPlaneString();
145   case TDataXtd_CYLINDER : return ::GeomCylinderString();
146
147   default:
148     throw Standard_DomainError("TDataXtd_GeometryEnum; enum term unknown");
149   }
150 }