VR-Forces Development_Version 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"
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 
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 
224  static DtString XmlBindingCharToMtl(const DtString& str)
225  {
226  return DtXmlBindingCharToMtl(str);
227  }
228 
229  static DtString MtlBindingCharToXml(const DtString& str)
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);
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 
301  static void WriteXML(DtEnvironmentSP env, DtString filename)
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 };

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)