VR-Forces 4.3 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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"
19 #include "vrfExtProtocol/objectType.h"
20 #include "vrfExtProtocol/rangedObjectType.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>
38 #include "vrfutil/readerWriter.h"
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 
112  static DtEnvValueSP addBooleanAttribute(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, bool value)
113  {
114  return env->addAttribute(name, value ? "True" : "False", root);
115  }
116 
118 
120  static DtEnvValueSP addStringElement(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, const DtString& value)
121  {
122  DtEnvValueSP newElement = AddElement(env, DtXMLStringType, root, name);
123  newElement->setValue(MtlBindingCharToXml(value));
124  return newElement;
125  }
126 
127  static DtEnvValueSP addStringAttribute(DtEnvironmentSP env, DtEnvValueSP root, const DtString& name, const DtString& value)
128  {
129  DtEnvValueSP attr = env->getAttribute(name, root);
130  if (attr.get())
131  {
132  attr->setValue(DtMtlBindingCharToXml(value));
133  return attr;
134  }
135 
136  return attr = env->addAttribute(name, DtMtlBindingCharToXml(value), root);
137  }
138 
139  static void setObjectType(DtEnvironmentSP env, DtEnvValueSP root, const DtObjectType& t)
140  {
141  addStringAttribute(env, root, DtXMLObjectTypeType, t.string());
142  }
143 
144  static void setMatchType(DtEnvironmentSP env, DtEnvValueSP root, const DtObjectType& t)
145  {
146  addStringAttribute(env, root, vrfXml::MatchType, t.string());
147  }
148 
149  static void setPlatform(DtEnvironmentSP env, DtEnvValueSP root, const DtString& t)
150  {
151  addStringAttribute(env, root, vrfXml::Platform, t);
152  }
153 
154  static double getDoubleAttribute(DtEnvironmentSP env, DtString attributeName, DtEnvValueSP root)
155  {
156  return DtRwReal::getDouble(env, attributeName, root);
157  }
158 
161  static void ExtractBindings(DtVariableBindingsList& list,
162  const DtReaderWriter::SearchPaths& searchPaths, DtEnvironmentSP env, DtEnvValueSP node);
163 
165  static DtReaderWriter* CreateRwObject(const DtString& rwType)
166  {
167  return DtReaderWriter::factory()->createItem(rwType, DtString::nullString(), NULL);
168  }
169 
170  static void getOrientation(DtEnvironmentSP env,
171  const DtEnvValueSP parentNode, DtTaitBryan& orientation)
172  {
173  orientation.setPsi(getDoubleAttribute(env, DtXMLYaw, parentNode));
174  orientation.setTheta(getDoubleAttribute(env, DtXMLPitch, parentNode));
175  orientation.setPhi(getDoubleAttribute(env, DtXMLRoll, parentNode));
176  }
177 
178 
181  static void CreateVariableBinding(const DtString& bindingType,
182  const DtReaderWriter::SearchPaths& searchPaths, const DtVariableBindingsList& systemBindings,
183  DtRwVariableBindings& newBindings,
184  DtEnvironmentSP env, DtEnvValueSP binding);
185 
187  static void AddSystems(DtComponentSystemDescriptorList& list,
188  const DtVariableBindingsList& variableBindings, DtEnvironmentSP env,
189  DtEnvValueSP* root, const DtReaderWriter::SearchPaths& searchPaths);
190 
192  static void AddSystem(DtComponentSystemDescriptorList& list,
193  DtEnvironmentSP env, const DtVariableBindingsList& variableBindings,
194  DtEnvValueSP root, const DtReaderWriter::SearchPaths& searchPaths,
195  DtEnvironmentSP parentEnt = DtEnvironmentSP(), DtString systemName = "");
196 
197  static DtEnvironmentSP CreateVrfXmlEnvironment();
198 
200  static DtEnvironmentSP CreateDtXMLEnvironment(
201  const DtString& dataSourceFilename, bool showConsoleOutput = true);
202 
203  static DtEnvValueSP GetElementByType(DtEnvironmentSP env,
204  const DtString& type, DtEnvValueSP root);
205 
206  static DtEnvValueSPList GetElementsByType(DtEnvironmentSP env, const DtString& type,
207  DtEnvValueSP root);
208 
212 
213  static DtString XmlBindingCharToMtl(const DtString& str)
214  {
215  return DtXmlBindingCharToMtl(str);
216  }
217 
218  static DtString MtlBindingCharToXml(const DtString& str)
219  {
220  return DtMtlBindingCharToXml(str);
221  }
222 
224 
225  static DtEnvValueSP FindElementByParamName(DtEnvironmentSP env,
226  const DtString& nodeType, const DtString& attributeValue,
227  DtEnvValueSP envValue, bool traverseElements = true)
228  {
229  return FindElementByAttrValue(env, nodeType, DtXMLParamName,
230  attributeValue, envValue);
231  }
232 
233  static DtEnvValueSP FindElementByAttrValue(DtEnvironmentSP env,
234  const DtString& nodeType, const DtString& attributeName,
235  const DtString& attributeValue, DtEnvValueSP envValue,
236  bool traverseElements = true);
237 
238  typedef std::list<DtString> StringVector;
239  typedef std::vector<DtReaderWriterRegistryData*> RegDataVector;
240 
241  typedef std::map<DtString, DtString> GroupMappings;
242 
243  static DtReaderWriterRegistryData* DeepFindRw(const DtString& keyword,
244  DtReaderWriterRegistry& registry, StringVector& path);
245 
246  static bool IsGroupedElement(const DtString& rwName,
247  const DtVrfXmlUtils::GroupMappings& groupedElements, DtString& groupName);
248 
249  static DtEnvValueSP FindGroupElement(DtEnvironmentSP env,
250  DtEnvValueSP parentNode, const DtString& groupName,
251  bool createIfMissing = true);
252 
253  static void FindAndRemoveGroupElement(DtEnvironmentSP env,
254  DtEnvValueSP parentNode, const DtString& groupName);
255 
256  static void IterateOverChildren(DtReaderWriterRegistry& oldRegistry,
257  DtReaderWriterRegistry& newRegistry, DtEnvironmentSP env,
258  DtEnvValueSP root, const GroupMappings& groupedElements, StringVector& path);
259 
260  static DtEnvValueSP CreateEnvNode(DtEnvironmentSP env, const DtString& name,
261  DtEnvValueSP parent, DtString bindingName = "")
262  {
263  //pass in name twice to prevent a "name" attribute from being added
264  DtEnvValueSP newObject = env->addObject(name, name, parent);
265  if (bindingName != "")
266  {
267  env->addAttribute(DtXMLParamName, bindingName, newObject);
268  }
269  return newObject;
270  }
271 
272  static void ExtractVariableBindings(DtRwVariableBindings* variableBindings,
273  DtEnvironmentSP env, DtEnvValueSP parentNode);
274 
275  static void ExtractSystem(DtReaderWriter* systemObject, DtEnvironmentSP env,
276  DtEnvValueSP simObjectNode);
277 
278  static void ExtractSystems(DtReaderWriterRegistry& oldRegistry,
279  DtEnvironmentSP env, DtEnvValueSP simObjectNode);
280 
282  static DtEnvironmentSP CreateVrfXmlEnvironment(
283  const DtString& dataSourceFilename, bool showConsoleOutput = true);
285 
286  static void WriteXML(DtEnvironmentSP env, DtString filename)
287  {
288  DtEnvXMLWriter writer(vrfXml::SimObject);
289 
290  writer.setIndentation(" ");
291  writer.writeFile(*env, filename);
292  }
293 
294  static DtString removeQuotes(const DtString& str)
295  {
296  return DtRemoveQuotes(str);
297  }
298 
300  static DtObjectType getObjectTypeAttr(DtEnvironmentSP env, const DtString& attributeName, DtEnvValueSP root)
301  {
302  DtString objType = getAttribute(env, attributeName, root);
303  DtObjectType ot;
304 
305  ot = objType.c_str();
306 
307  return ot;
308  }
309 
310  static DtObjectType getMatchType(DtEnvironmentSP env, DtEnvValueSP root,
311  bool fallbackOnObjectType = true)
312  {
313  DtObjectType matchType = getObjectTypeAttr(env, vrfXml::MatchType, root);
314  if (matchType == DtObjectType::nullType() && fallbackOnObjectType)
315  {
316  return DtRwObjectType::getObjectType(env, root);
317  }
318 
319  return matchType;
320  }
321 
322  static DtObjectType getObjectType(DtEnvironmentSP env, DtEnvValueSP root,
323  bool fallbackOnMatchType = true)
324  {
325  DtObjectType objectType = getObjectTypeAttr(env, DtXMLObjectType, root);
326  if (objectType == DtObjectType::nullType() && fallbackOnMatchType)
327  {
328  return getMatchType(env, root, false);
329  }
330 
331  return objectType;
332  }
333 
334  static void getXYZAttrs(DtEnvironmentSP env, const DtEnvValueSP root,
335  double& x, double& y, double& z)
336  {
337  //attributes will either be named "x", "y", "z" or "right", "forward", "up"
338  if (hasAttribute(env, DtXMLBodyForward, root))
339  {
340  x = getDoubleAttribute(env, DtXMLBodyForward, root);
341  y = getDoubleAttribute(env, DtXMLBodyRight, root);
342  z = getDoubleAttribute(env, DtXMLBodyDown, root);
343  }
344  else
345  {
346  x = getDoubleAttribute(env, DtXMLVectorX, root);
347  y = getDoubleAttribute(env, DtXMLVectorY, root);
348  z = getDoubleAttribute(env, DtXMLVectorZ, root);
349  }
350  }
351 
352  typedef std::list<DtString> NameList;
353 
354  static void WriteVector(DtEnvironmentSP env, DtEnvValueSP root,
355  const DtRwVector* vec, bool writeAsBodyPosition)
356  {
357  if (writeAsBodyPosition)
358  {
359  env->addAttribute(DtXMLBodyForward, (*vec)[1], root);
360  env->addAttribute(DtXMLBodyRight, (*vec)[0], root);
361  env->addAttribute(DtXMLBodyDown, (*vec)[2], root);
362  }
363  else
364  {
365  env->addAttribute(DtXMLVectorX, (*vec)[0], root);
366  env->addAttribute(DtXMLVectorY, (*vec)[1], root);
367  env->addAttribute(DtXMLVectorZ, (*vec)[2], root);
368  }
369  }
370 
371  static DtString IntToHexString(const int& number)
372  {
373  char buff[8];
374  sprintf(buff, "%X", number);
375  DtString app("0X");
376  app += buff;
377  return app;
378  }
379 };

Document ID: Generated on Wed Mar 11 21:20:57 EDT 2015 from SVN revision 150940
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)