VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfXmlUtils.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 2013 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 
6 #pragma once
7 
10 #include "mtl/environment.h"
11 #include "mtl/envXmlWriter.h"
18 #include "extMtl/extDtcRead.h"
26 #include "vrfutil/formationTable.h"
28 #include "vrfutil/soilList.h"
29 #include "vrfutil/soilFactors.h"
30 
31 #include "vlutil/vlStringUtil.h"
32 #include "vlutil/vlFilename.h"
33 
34 #include <boost/function.hpp>
35 #include <boost/lexical_cast.hpp>
36 
37 #include <iostream>
40 
42 {
43 public:
44  typedef std::list<DtEnvValueSP> DtEnvValueSPList;
45 
49 
52  static void getObjectElements(DtEnvironmentSP env, DtEnvValueSPList& objectNodes);
53 
55  static DtEnvValueSP findObjectElementByMatchType(DtEnvironmentSP env, const DtObjectType& objType);
56  static DtEnvValueSP findObjectElementByObjectType(DtEnvironmentSP env, const DtObjectType& objType);
57 
61  static DtString getAttribute(DtEnvironmentSP env, const DtString& name,
62  DtEnvValueSP root);
63 
65  static bool hasAttribute(DtEnvironmentSP env, const DtString& name,
66  DtEnvValueSP root);
67 
68  static bool FindAndRemove(DtEnvironmentSP env, const DtString& nodeType, const DtString& paramName, DtEnvValueSP root);
69 
71  static void remove(DtEnvironmentSP, DtEnvValueSP);
72 
74  static DtString getPlatform(DtEnvironmentSP env, DtEnvValueSP root)
75  {
77  }
78 
79  static DtString GetObjectValue(DtEnvValueSP root)
80  {
81  return XmlBindingCharToMtl(root->value());
82  }
83 
84  static DtEnvValueSP AddElement(DtEnvironmentSP env, const DtString& type,
85  DtEnvValueSP root, const DtString& paramName = DtString::nullString())
86  {
87  FindAndRemove(env, type, paramName, root);
88  DtEnvValueSP newElement = env->addObject(type, type, root);
89  if (paramName != DtString::nullString())
90  {
91  env->addAttribute(vrfXml::ParamName, paramName, newElement);
92  }
93  return newElement;
94  }
95 
97  static DtEnvValueSP addbooleanElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, bool value)
98  {
99  DtEnvValueSP newElement = AddElement(env, DtXMLBooleanType, root, name);
100  newElement->setValue(value ? "True" : "False");
101  return newElement;
102  }
103 
105  static DtEnvValueSP addRealElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, double value)
106  {
107  DtEnvValueSP newElement = AddElement(env, DtXMLRealType, root, name);
108  newElement->setValue(DtString(value));
109  return newElement;
110  }
111 
113  static DtEnvValueSP addIntegerElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, double value)
114  {
115  DtEnvValueSP newElement = AddElement(env, DtXMLIntType, root, name);
116  newElement->setValue(DtString(value));
117  return newElement;
118  }
119 
120  static DtEnvValueSP addBooleanAttribute(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, bool value)
121  {
122  return env->addAttribute(name, value ? "True" : "False", root);
123  }
124 
126 
128  static DtEnvValueSP addStringElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, const DtString& value)
129  {
130  DtEnvValueSP newElement = AddElement(env, DtXMLStringType, root, name);
131  newElement->setValue(MtlBindingCharToXml(value));
132  return newElement;
133  }
134 
135  static DtEnvValueSP addStringAttribute(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, const DtString& value)
136  {
137  DtEnvValueSP attr = env->getAttribute(name, root);
138  if (attr.get())
139  {
140  attr->setValue(DtMtlBindingCharToXml(value));
141  return attr;
142  }
143 
144  return attr = env->addAttribute(name, DtMtlBindingCharToXml(value), root);
145  }
146 
147  static void setObjectType(DtEnvironmentSP env, DtEnvValueSP root, const DtObjectType& t)
148  {
149  addStringAttribute(env, root, DtXMLObjectTypeType, t.string());
150  }
151 
152  static void setMatchType(DtEnvironmentSP env, DtEnvValueSP root, const DtObjectType& t)
153  {
154  addStringAttribute(env, root, vrfXml::MatchType, t.string());
155  }
156 
157  static std::list<DtObjectType> additionalMatchTypes(DtEnvironmentSP env, DtEnvValueSP root);
158  static void setAdditionalMatchTypes(DtEnvironmentSP env, DtEnvValueSP root, const std::list<DtObjectType>& types);
159 
160  static void setPlatform(DtEnvironmentSP env, DtEnvValueSP root, const DtString& t)
161  {
162  addStringAttribute(env, root, vrfXml::Platform, t);
163  }
164 
165  static double getDoubleAttribute(DtEnvironmentSP env, DtString attributeName, DtEnvValueSP root)
166  {
167  return DtRwReal::getDouble(env, attributeName, root);
168  }
169 
172  static void ExtractBindings(DtVariableBindingsList& list,
173  const DtReaderWriter::SearchPaths& searchPaths, DtEnvironmentSP env, DtEnvValueSP node);
174 
176  static DtReaderWriter* CreateRwObject(const DtString& rwType)
177  {
178  return DtReaderWriter::factory()->createItem(rwType, DtString::nullString(), NULL);
179  }
180 
181  static void getOrientation(DtEnvironmentSP env,
182  const DtEnvValueSP parentNode, DtTaitBryan& orientation)
183  {
184  orientation.setPsi(getDoubleAttribute(env, DtXMLYaw, parentNode));
185  orientation.setTheta(getDoubleAttribute(env, DtXMLPitch, parentNode));
186  orientation.setPhi(getDoubleAttribute(env, DtXMLRoll, parentNode));
187  }
188 
189 
192  static void CreateVariableBinding(const DtString& bindingType,
193  const DtReaderWriter::SearchPaths& searchPaths, const DtVariableBindingsList& systemBindings,
194  DtRwVariableBindings& newBindings,
195  DtEnvironmentSP env, DtEnvValueSP binding);
196 
198  static void AddSystems(DtComponentSystemDescriptorList& list,
199  const DtVariableBindingsList& variableBindings, DtEnvironmentSP env,
200  DtEnvValueSP* root, const DtReaderWriter::SearchPaths& searchPaths);
201 
203  static void AddSystem(DtComponentSystemDescriptorList& list,
204  DtEnvironmentSP env, const DtVariableBindingsList& variableBindings,
205  DtEnvValueSP root, const DtReaderWriter::SearchPaths& searchPaths,
206  DtEnvironmentSP parentEnt = DtEnvironmentSP(), DtString systemName = "");
207 
208  static DtEnvironmentSP CreateVrfXmlEnvironment();
209 
211  static DtEnvironmentSP CreateDtXMLEnvironment(
212  const DtString& dataSourceFilename, bool showConsoleOutput = true);
213 
214  static DtEnvValueSP GetElementByType(DtEnvironmentSP env,
215  const DtString& type, DtEnvValueSP root);
216 
217  static DtEnvValueSPList GetElementsByType(DtEnvironmentSP env, const DtString& type,
218  DtEnvValueSP root);
219 
223 
225  {
226  return DtXmlBindingCharToMtl(str);
227  }
228 
230  {
231  return DtMtlBindingCharToXml(str);
232  }
233 
235 
236  static DtEnvValueSP FindElementByParamName(DtEnvironmentSP env,
237  const DtString& nodeType, const DtString& attributeValue,
238  DtEnvValueSP envValue, bool traverseElements = true)
239  {
240  return FindElementByAttrValue(env, nodeType, DtXMLParamName,
241  attributeValue, envValue, traverseElements);
242  }
243 
244  static DtEnvValueSP FindElementByAttrValue(DtEnvironmentSP env,
245  const DtString& nodeType, const DtString& attributeName,
246  const DtString& attributeValue, DtEnvValueSP envValue,
247  bool traverseElements = true);
248 
249  typedef std::list<DtString> StringVector;
250  typedef std::vector<DtReaderWriterRegistryData*> RegDataVector;
251 
252  typedef std::map<DtString, DtString> GroupMappings;
253 
254  static DtReaderWriterRegistryData* DeepFindRw(const DtString& keyword,
255  DtReaderWriterRegistry& registry, StringVector& path);
256 
257  static bool IsGroupedElement(const DtString& rwName,
258  const DtVrfXmlUtils::GroupMappings& groupedElements, DtString& groupName);
259 
260  static DtEnvValueSP FindGroupElement(DtEnvironmentSP env,
261  DtEnvValueSP parentNode, const DtString& groupName,
262  bool createIfMissing = true);
263 
264  static void FindAndRemoveGroupElement(DtEnvironmentSP env,
265  DtEnvValueSP parentNode, const DtString& groupName);
266 
267  static void IterateOverChildren(DtReaderWriterRegistry& oldRegistry,
268  DtReaderWriterRegistry& newRegistry, DtEnvironmentSP env,
269  DtEnvValueSP root, const GroupMappings& groupedElements, StringVector& path);
270 
273  static DtEnvironmentSP sortEnvironment(DtEnvironmentSP);
274 
275  static DtEnvValueSP CreateEnvNode(DtEnvironmentSP env, const DtString& name,
276  DtEnvValueSP parent, DtString bindingName = "")
277  {
278  //pass in name twice to prevent a "name" attribute from being added
279  DtEnvValueSP newObject = env->addObject(name, name, parent);
280  if (bindingName != "")
281  {
282  env->addAttribute(DtXMLParamName, bindingName, newObject);
283  }
284  return newObject;
285  }
286 
287  static void ExtractVariableBindings(DtRwVariableBindings* variableBindings,
288  DtEnvironmentSP env, DtEnvValueSP parentNode);
289 
290  static void ExtractSystem(DtReaderWriter* systemObject, DtEnvironmentSP env,
291  DtEnvValueSP simObjectNode);
292 
293  static void ExtractSystems(DtReaderWriterRegistry& oldRegistry,
294  DtEnvironmentSP env, DtEnvValueSP simObjectNode);
295 
297  static DtEnvironmentSP CreateVrfXmlEnvironment(
298  const DtString& dataSourceFilename, bool showConsoleOutput = true);
300 
302  {
303  DtEnvXMLWriter writer(vrfXml::SimObject);
304 
305  writer.setIndentation(" ");
306  writer.writeFile(*env, filename);
307  }
308 
309  static DtString removeQuotes(const DtString& str)
310  {
311  return DtRemoveQuotes(str);
312  }
313 
315  static DtObjectType getObjectTypeAttr(DtEnvironmentSP env, const DtString& attributeName, DtEnvValueSP root)
316  {
317  DtString objType = getAttribute(env, attributeName, root);
318  DtObjectType ot;
319 
320  ot = objType.c_str();
321 
322  return ot;
323  }
324 
325  static DtObjectType getMatchType(DtEnvironmentSP env, DtEnvValueSP root,
326  bool fallbackOnObjectType = true)
327  {
328  DtObjectType matchType = getObjectTypeAttr(env, vrfXml::MatchType, root);
329  if (matchType == DtObjectType::nullType() && fallbackOnObjectType)
330  {
331  return DtRwObjectType::getObjectType(env, root);
332  }
333 
334  return matchType;
335  }
336 
337  static std::list<DtObjectType> getMatchTypes(DtEnvironmentSP env, DtEnvValueSP root,
338  bool fallbackOnObjectType = true);
339 
340  static DtObjectType getObjectType(DtEnvironmentSP env, DtEnvValueSP root,
341  bool fallbackOnMatchType = true)
342  {
343  DtObjectType objectType = getObjectTypeAttr(env, DtXMLObjectType, root);
344  if (objectType == DtObjectType::nullType() && fallbackOnMatchType)
345  {
346  return getMatchType(env, root, false);
347  }
348 
349  return objectType;
350  }
351 
352  static void getXYZAttrs(DtEnvironmentSP env, const DtEnvValueSP root,
353  double& x, double& y, double& z)
354  {
355  //attributes will either be named "x", "y", "z" or "right", "forward", "up"
356  if (hasAttribute(env, DtXMLBodyForward, root))
357  {
358  x = getDoubleAttribute(env, DtXMLBodyForward, root);
359  y = getDoubleAttribute(env, DtXMLBodyRight, root);
360  z = getDoubleAttribute(env, DtXMLBodyDown, root);
361  }
362  else
363  {
364  x = getDoubleAttribute(env, DtXMLVectorX, root);
365  y = getDoubleAttribute(env, DtXMLVectorY, root);
366  z = getDoubleAttribute(env, DtXMLVectorZ, root);
367  }
368  }
369 
370  typedef std::list<DtString> NameList;
371 
372  static void WriteVector(DtEnvironmentSP env, DtEnvValueSP root,
373  const DtRwVector* vec, bool writeAsBodyPosition)
374  {
375  if (writeAsBodyPosition)
376  {
377  env->addAttribute(DtXMLBodyForward, (*vec)[1], root);
378  env->addAttribute(DtXMLBodyRight, (*vec)[0], root);
379  env->addAttribute(DtXMLBodyDown, (*vec)[2], root);
380  }
381  else
382  {
383  env->addAttribute(DtXMLVectorX, (*vec)[0], root);
384  env->addAttribute(DtXMLVectorY, (*vec)[1], root);
385  env->addAttribute(DtXMLVectorZ, (*vec)[2], root);
386  }
387  }
388 
389  static DtString IntToHexString(const int& number)
390  {
391  char buff[8];
392  sprintf(buff, "%X", number);
393  DtString app("0X");
394  app += buff;
395  return app;
396  }
397 };
static DtObjectType getObjectTypeAttr(DtEnvironmentSP env, const DtString &attributeName, DtEnvValueSP root)
Gets objecttype attribute from current Node.
Definition: vrfXmlUtils.h:315
static DtEnvValueSP CreateEnvNode(DtEnvironmentSP env, const DtString &name, DtEnvValueSP parent, DtString bindingName="")
Definition: vrfXmlUtils.h:275
DT_DLL_readerWriter DtString DtXmlBindingCharToMtl(const DtString &str)
Can&#39;t use &#39;$&#39; for variables.
const char DtXMLVectorZ[]
Definition: rwTypes.h:80
static void WriteXML(DtEnvironmentSP env, DtString filename)
Definition: vrfXmlUtils.h:301
Definition: vrfXmlUtils.h:41
static const char * Platform
Definition: vrfXmlTypes.h:46
const char DtXMLStringType[]
Definition: rwTypes.h:50
static DtString getPlatform(DtEnvironmentSP env, DtEnvValueSP root)
Gets platform attribute from current Node.
Definition: vrfXmlUtils.h:74
static double getDoubleAttribute(DtEnvironmentSP env, DtString attributeName, DtEnvValueSP root)
Definition: vrfXmlUtils.h:165
Definition: readerWriterRegistryData.h:25
#define DT_DLL_vrfobjparam
This file is used to determine how to build.
Definition: vrfobjparamDefines.h:28
const char DtXMLRoll[]
Definition: vrfRwTypes.h:285
static void getOrientation(DtEnvironmentSP env, const DtEnvValueSP parentNode, DtTaitBryan &orientation)
Definition: vrfXmlUtils.h:181
DT_DLL_readerWriter DtBoost::shared_ptr< DtEnvironment > DtEnvironmentSP
Definition: readerWriter.h:30
const char DtXMLIntType[]
Definition: rwTypes.h:23
DT_DLL_readerWriter DtString DtRemoveQuotes(const DtString &str)
static const DtObjectType & nullType()
List of DtComponentSystemDescriptor instances.
Definition: componentSystemDescriptorList.h:20
std::list< DtString > NameList
Definition: vrfXmlUtils.h:370
std::list< DtString > StringVector
Definition: vrfXmlUtils.h:249
static const char * SimObject
Definition: vrfXmlTypes.h:53
Definition: readerWriter.h:85
static DtEnvValueSP addRealElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, double value)
Adds a new real type to the given root and returns the new value.
Definition: vrfXmlUtils.h:105
const char DtXMLRealType[]
Definition: rwTypes.h:36
*virtual const DtObjectType & objectType() const
Definition: readerWriterRegistry.h:39
virtual const char * string(char sep= ':') const
static void getXYZAttrs(DtEnvironmentSP env, const DtEnvValueSP root, double &x, double &y, double &z)
Definition: vrfXmlUtils.h:352
static const char * MatchType
Definition: vrfXmlTypes.h:69
static DtEnvValueSP addBooleanAttribute(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, bool value)
Definition: vrfXmlUtils.h:120
static DtReaderWriter * CreateRwObject(const DtString &rwType)
Creates an RW object given the type.
Definition: vrfXmlUtils.h:176
const char DtXMLBodyForward[]
Definition: rwTypes.h:81
static DtEnvValueSP addStringElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, const DtString &value)
Convenience function.
Definition: vrfXmlUtils.h:128
static DtString GetObjectValue(DtEnvValueSP root)
Definition: vrfXmlUtils.h:79
static DtString IntToHexString(const int &number)
Definition: vrfXmlUtils.h:389
const char DtXMLObjectTypeType[]
Definition: rwTypes.h:59
static DtString MtlBindingCharToXml(const DtString &str)
Definition: vrfXmlUtils.h:229
Definition: objectType.h:27
ReaderWriter object that maintains a list of reader-writer variable bindings.
Definition: rwVariableBindings.h:27
Definition: rwVector.h:23
static DtReaderWriterFactory * factory()
static void setObjectType(DtEnvironmentSP env, DtEnvValueSP root, const DtObjectType &t)
Definition: vrfXmlUtils.h:147
const char DtXMLBooleanType[]
Definition: rwTypes.h:18
std::list< const DtRwVariableBindings * > DtVariableBindingsList
Definition: readerWriterRegistry.h:29
const char DtXMLPitch[]
Definition: vrfRwTypes.h:284
static DtObjectType getObjectType(DtEnvironmentSP env, DtEnvValueSP root)
std::vector< DtFilename > SearchPaths
Definition: readerWriter.h:92
static DtEnvValueSP addIntegerElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, double value)
Adds a new integer type to the given root and returns the new value.
Definition: vrfXmlUtils.h:113
static DtEnvValueSP addbooleanElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, bool value)
Adds a new boolean type to the given root and returns the new value.
Definition: vrfXmlUtils.h:97
static DtObjectType getObjectType(DtEnvironmentSP env, DtEnvValueSP root, bool fallbackOnMatchType=true)
Definition: vrfXmlUtils.h:340
static const char * ParamName
Definition: vrfXmlTypes.h:47
const char DtXMLParamName[]
XML types.
Definition: rwTypes.h:71
static DtObjectType getMatchType(DtEnvironmentSP env, DtEnvValueSP root, bool fallbackOnObjectType=true)
Definition: vrfXmlUtils.h:325
const char DtXMLVectorX[]
Definition: rwTypes.h:78
std::list< DtEnvValueSP > DtEnvValueSPList
Definition: vrfXmlUtils.h:44
DT_DLL_readerWriter DtString DtMtlBindingCharToXml(const DtString &str)
std::vector< DtReaderWriterRegistryData * > RegDataVector
Definition: vrfXmlUtils.h:250
static DtEnvValueSP AddElement(DtEnvironmentSP env, const DtString &type, DtEnvValueSP root, const DtString &paramName=DtString::nullString())
Definition: vrfXmlUtils.h:84
static void WriteVector(DtEnvironmentSP env, DtEnvValueSP root, const DtRwVector *vec, bool writeAsBodyPosition)
Definition: vrfXmlUtils.h:372
static DtString removeQuotes(const DtString &str)
Definition: vrfXmlUtils.h:309
const char DtXMLObjectType[]
Definition: vrfRwTypes.h:311
virtual DtReaderWriter * createItem(const DtString &type, const DtString &name, DtReaderWriterRegistry *parentRegistry) const
Creates a new RW type based on the type string provided, with the specified name and parent registry...
const char DtXMLBodyDown[]
Definition: rwTypes.h:83
static void setMatchType(DtEnvironmentSP env, DtEnvValueSP root, const DtObjectType &t)
Definition: vrfXmlUtils.h:152
const char DtXMLYaw[]
Definition: vrfRwTypes.h:283
static DtEnvValueSP FindElementByParamName(DtEnvironmentSP env, const DtString &nodeType, const DtString &attributeValue, DtEnvValueSP envValue, bool traverseElements=true)
Definition: vrfXmlUtils.h:236
static double getDouble(DtEnvironmentSP env, DtString attributeName, DtEnvValueSP root)
const char DtXMLBodyRight[]
Definition: rwTypes.h:82
static DtEnvValueSP addStringAttribute(DtEnvironmentSP env, DtEnvValueSP root, const DtString &name, const DtString &value)
Definition: vrfXmlUtils.h:135
std::map< DtString, DtString > GroupMappings
Definition: vrfXmlUtils.h:252
static DtString getAttribute(DtEnvironmentSP env, const DtString &name, DtEnvValueSP root)
Gets the named attribute from a DtEnvValueSP.
static void setPlatform(DtEnvironmentSP env, DtEnvValueSP root, const DtString &t)
Definition: vrfXmlUtils.h:160
static DtString XmlBindingCharToMtl(const DtString &str)
Can&#39;t use &#39;$&#39; for variables.
Definition: vrfXmlUtils.h:224
const char DtXMLVectorY[]
Definition: rwTypes.h:79

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)