VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtElementDefinitionManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2023 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
7 
8 #pragma once
9 #include <vrvCore/vrvCore.h>
10 
14 
16 #include <vrvUtil/DtDebugLog.h>
17 #include <vlutil/vlPrint.h>
18 
19 #include <unordered_map>
20 
21 namespace makArchives
22 {
23  class DtElementDefinitionRecord;
24  class DtElementsRecord;
25 }
26 
27 namespace makVrv
28 {
29  class DtDe;
30  class DtBaseConnection;
31  class DtElementDefinition;
32  class DtDeSettings;
33  class DtBackupInterface;
34  class DtVisualizerDefinitionValidator;
35 
74  {
75  public:
76  enum class DefinitionFileType
77  {
78  FileTypeHierarchy,
79  FileTypeLeaf,
80  FileTypeBoth
81  };
82 
83  public:
85  typedef std::map<DtUnicode, DtElementDefinition*>
87 
89  typedef std::map<std::string, makArchives::DtElementsRecord> StringToElementsRecordMap;
90 
92  typedef std::vector<const DtElementDefinition*> ElementDefinitions;
93 
95  typedef std::vector<std::string>::const_iterator ParentToElementIter;
96 
97  public:
98 
100  static const DtElementDefinitionManager* createConstCopy(const DtElementDefinitionManager& orig);
101 
104  static makArchives::DtElementDefinitionRecord buildElementDefinitionRecord(const DtElementDefinition& elementDef);
105 
108  static void setupVisualizerDefs(makArchives::DtElementDefinitionRecord &elementRec,
109  const DtElementDefinition &elementDef, DtModelSetId modelSet);
110 
112  static bool isHierFileName(const std::string& fileName);
113 
114  public:
115 
117  DtElementDefinitionManager() = delete;
118 
120  DtElementDefinitionManager& operator=(const DtElementDefinitionManager&) = delete;
121 
123  virtual ~DtElementDefinitionManager();
124 
127  virtual const std::string& name() const;
128 
131  virtual const DtUnicode& screenName() const;
132 
135  virtual const std::string& rootsFilesname() const;
136 
138  virtual unsigned int numberOfElementDefinitions() const;
139 
143  virtual const DefinitionMap& elementDefinitions() const;
144 
147  virtual DtElementDefinition* findElementDefinition(const DtUnicode& definitionName);
148 
151  virtual const DtElementDefinition* findElementDefinition(const DtUnicode& definitionName) const;
152 
155  virtual DtElementDefinition* createElementDefinition(const DtUnicode& definitionName);
156 
160  virtual DtElementDefinition* createElementDefinition(const DtUnicode& definitionName, DtElementDefinition* parentDefinition);
161 
164  virtual void destroyElementDefinition(DtElementDefinition*);
165 
167  virtual void destroyElementDefinitionAndChildren(DtElementDefinition*);
168 
173  virtual DtElementDefinition* copyElementDefinition(DtElementDefinition& def, const DtUnicode& newName);
174 
176  virtual DtBackupInterface* backup();
177 
182  virtual bool renameElementDefinition(const DtUnicode& oldName, const DtUnicode& newName);
183 
185  virtual void loadDefaults();
186 
188  virtual void loadDefaults(bool loadOnlyFactory);
189 
191  virtual DefinitionMap& modifiedDefinitions();
192 
196  virtual std::vector<std::string> retrieveHierFilesToMerge(const std::string& type);
197 
201  virtual std::vector<std::string> retrieveLeafFilesToMerge(const std::string& type);
202 
206  virtual bool shouldSkipDefLoading();
207 
209  virtual void revertSettings();
210 
212  virtual void saveAsDefaults();
213 
215  virtual void splitAndWriteToDir(makArchives::DtElementsRecord& elementsRec, const std::string& existingDirName);
216 
218  virtual void exportSettings(const std::string& fileOrDirName);
219 
221  virtual void exportSelectedSettings(const std::vector<std::string>& names, const std::string& fileName);
222 
224  virtual void exportHierSettings(const std::string& fileName);
225 
227  virtual void exportHierSettings(std::vector<std::string>& fileList);
228 
233  virtual void exportLeafSettings(std::vector<std::string>& fileList);
234 
236  virtual void exportSelectedLeafSetting(const std::string& name, const std::string& fileName);
237 
239  virtual void exportSelectedHierSetting(const std::string& name, const std::string& fileName, bool allLevels=true);
240 
244  virtual void createFolderFromPathAndSplit(const std::string &fileOrDirName,
245  std::string& newPath, std::string& dirName);
246 
248  virtual bool importAndReplaceSettings(const std::string& fileName);
249 
250  virtual bool importAndReplaceHierRecords(StringToElementsRecordMap& recordMap, const std::string& importFileName);
251 
253  virtual void mergeHierSettings(const std::string& hierFileOrDirName);
254 
256  virtual void mergeHierSettings(const std::string& hierFileOrDirName, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
257 
260  virtual void mergeLeafSettings(const std::string& leafFileOrDirName);
261 
263  virtual void mergeLeafSettings(const std::string& fileOrDirName, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
264 
266  virtual void mergeSettings(const std::string& fileName, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
267 
272  virtual void markRecordsAsHier(makArchives::DtElementsRecord& rec);
273 
275  virtual DtDeSettings* settings();
276 
281  virtual void setFromRecord(const makArchives::DtElementsRecord& elemRecord);
282 
291  // TDL - This method is called on backup restore, which is currently
292  // disabled. If we come up with way to use this sensibly it needs to be
293  // modified with the changes made to setFromRecords...
294 
295  virtual void setFromRecord(const makArchives::DtElementsRecord& elemRecord, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
296 
303  virtual void setFromRecords(StringToElementsRecordMap& elemRecords, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions, bool& forceSaveAfterLoad);
304 
309  virtual void mergeRecords(StringToElementsRecordMap& recordMap, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
310 
313  virtual void mergeHierRecord(const makArchives::DtElementsRecord& hierRecord, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
314 
317  virtual void mergeLeafRecords( StringToElementsRecordMap& recordMap, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
318 
321  virtual void mergeLeafRecord(const makArchives::DtElementsRecord& leafRecord, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
322 
324  virtual void getRecord(makArchives::DtElementsRecord& rec) const;
325 
327  virtual void getRecord(makArchives::DtElementsRecord& rec, const std::string& fileName) const;
328 
330  virtual void getRecord(const std::vector<std::string>& elementDefinitions, makArchives::DtElementsRecord& rec) const;
331 
333  virtual void getRecordIncludingParent(const std::vector<std::string>& elementDefinitions, makArchives::DtElementsRecord& rec) const;
334 
338  virtual void getSplitRecord(std::vector<makArchives::DtElementsRecord>& rec, std::vector<std::string>& fileNames);
339 
342  virtual void addRecords(makArchives::DtElementsRecord& recs, makArchives::DtElementsRecord& combinedRec);
343 
348  virtual void splitRecordElemMgr(makArchives::DtElementsRecord& rec, makArchives::DtElementsRecord& recHier, makArchives::DtElementsRecord& recLeaves);
349 
351  virtual void setAutoSave(bool enabled);
352 
354  virtual bool validateElementDefinition(const DtElementDefinition& def);
355 
357  virtual bool validateElementAttribute(const DtVisualizerDefinition::SortedAttributeMap::iterator& attr);
358 
360  virtual DtUnicode getElementDefinitionError(const DtElementDefinition& def);
361 
363  virtual bool canUseHierLeaf();
364 
366  virtual bool modifiedSinceStartup();
367 
369  virtual void resetModifiedSinceStartupFlag();
370 
372  virtual void addToModifiedDefinitionsMap(DtElementDefinition* modelDefinition);
373 
375  virtual void addToAddedDefinitionsMap(DtElementDefinition* modelDefinition);
376 
378  virtual DefinitionMap getDeletedDefinitionsMap();
379 
381  virtual void addToDeletedDefinitionsMap(DtElementDefinition* modelDefinition);
382 
384  virtual void resetModifiedFlags();
385 
388  virtual DtUnicode findFirstDefWithAttribPair(const DtUnicode& attributeName, const DtUnicode& attributeValue);
389 
392  virtual DtVisualizerAttributeStringVector::StringVector findAllAttributeValues( const DtUnicode& elementDefName, const DtUnicode& attributeName);
393 
396  virtual std::string getModelSetDisplayName(DtModelSetId modelSet) const;
397 
399  virtual void removeElementFromChangeMaps(const DtUnicode& definitionName);
400 
402  virtual void removeElementsFromChangeMaps(DefinitionFileType fileType);
403 
405  virtual void getChangedFiles(std::vector<std::string>& changedFiles, DefinitionFileType fileType);
406 
407  public:
410  boost::signalslib::signal<void()> signal_managerAboutTobeDeleted;
411 
412  protected:
413 
415 
417  DtElementDefinitionManager(const std::string& name, const DtUnicode& screenName, DtDe& de, bool procedural);
418 
421 
423  virtual void registerDefinitionHierarchy(DtElementDefinition* root);
424 
427  typedef std::pair < std::string, const makArchives::DtElementDefinitionRecord*> ElementPair;
428 
430  typedef std::vector<ElementPair> ElementGroup;
431 
435  typedef std::map<DtUnicode, ElementGroup> ParentToElementsMap;
436 
438  virtual void buildElementVisualizerDefinitions(DtElementDefinition& newDef,
439  const makArchives::DtElementDefinitionRecord& defRecord);
440 
442  virtual void buildElementVisualizerDefinitionsForModelSet(const makArchives::DtElementDefinitionRecord &defRecord, DtElementDefinition &newDef, DtModelSetId modelSet);
443 
446  virtual void buildElementChildren(DtElementDefinition& ed, ParentToElementsMap& parentToElementsMap, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
447 
450  virtual void registerBackup();
451 
453  virtual bool recordMatchesDefinition(const makArchives::DtElementDefinitionRecord* childRec, const DtElementDefinition* existingChildDef) const;
454 
456  virtual bool recordMatchesDefinitionModelSet(const makArchives::DtElementDefinitionRecord* childRec, const DtElementDefinition* existingChildDef, DtModelSetId modelSet) const;
457 
459  virtual void generateParentToElement(ParentToElementsMap& parentToElements, StringToElementsRecordMap& rec);
460 
462  virtual bool checkRecordsAreLeavesInHier(ParentToElementsMap& parentToElements, StringToElementsRecordMap& recordMap, std::vector<std::string>& leafFiles);
463 
465  virtual bool replaceMergeLeaves(StringToElementsRecordMap& firstRecMap, StringToElementsRecordMap& secondRecMap, const std::vector<std::string>& leafFiles);
466 
468  virtual bool loadDefaultsFromHierLeafDir(StringToElementsRecordMap& recordMap);
469 
471  virtual bool isEntityDefinitions() const;
472 
474  virtual bool isTacticalGraphicsDefinitions() const;
475 
477  virtual bool isUnitDefinitions() const;
478 
481  virtual void checkDefinitionName(const DtUnicode& definitionName);
482 
483  virtual void processVisualizerDefinitionAttributes(DtVisualizerDefinition* vd, const makArchives::DtVisualizerDefinitionRecord& vdRecord,
484  const std::string& defName, DtModelSetId modelSet);
485 
487  virtual void logWarning(const std::string& message);
488 
490  virtual void getFilesFromDefinitionMap(const DefinitionMap& defMap, std::set<std::string>& changedFiles);
491 
493  virtual void removeElementsFromDefnitionMap(DefinitionMap& defMap, DefinitionFileType fileType);
494 
496  virtual DtVisualizerDefinition* convertLoadedVisualizerDefinition(const makArchives::DtVisualizerDefinitionRecord& vdRecord,
498  DtVisualizerDefinitionSet& vdSet, int visualizerIndex, DtElementDefinition* ancestor);
499 
500  virtual bool hierarchyNeedsConversion(const makArchives::DtElementDefinitionRecord* elemRec) const;
501 
503  virtual void clearDefinitionMap(DefinitionMap& map);
504 
505  virtual bool validateVisualizerDefinitionSet(const DtElementDefinition& newDef, const DtVisualizerDefinitionSet& vdSet,
507 
509  virtual void convertLeafToUuid(const std::vector<makArchives::DtVisualizerDefinitionRecord>& visualizerDefinitionRecords,
510  const Utf8String& elementName, const Utf8String& parentName, DtVisualizerDefinitionSet& vdSet);
511 
512  typedef std::multimap<const std::string, DtVisualizerDefinition*> ParentSchemaDataMap;
513  typedef std::multimap<const std::string, DtVisualizerDefinition*>::iterator ParentSchemaDataInterator;
514  typedef std::multimap<const std::string, DtVisualizerDefinition*>::const_iterator ConstParentSchemaDataInterator;
515 
516  virtual DtVisualizerDefinition* findAncestorVisualizerDefinition(const std::string& schemaName, ParentSchemaDataMap& schemaDataMap);
518 
519  protected:
520  typedef std::map<std::string, DtVisualizerDefinitionValidator*> VisualizerDefinitionValidatorMap;
523 
525 
526  std::string myName;
527  std::string myRootsFilename;
528  std::string myHierName;
529  std::string myLeafName;
531 
534  boost::unordered_map<std::string, std::string> myDefinitionNameCheck;
537 
543 
544  bool myConvertWarningsToInfo = false;
545  };
546 
547 
552  public DtVirtualBaseClass
553  {
554  public:
555 
557  typedef unsigned int ElementDefinitionType;
558 
563  {
571  };
572 
577  static DtElementDefinitionTypeManager& instance(DtDe& de);
578 
581  static DtElementDefinitionTypeManager& instance(DtBaseConnection& con);
582 
584  virtual DtElementDefinitionTypeManager* clone();
585 
588  static void copyInstance(DtBaseConnection& con, DtDe&);
589 
591  static const DtElementDefinitionTypeManager* createConstCopy(DtDe& de);
592 
595 
606  virtual void registerElementType(ElementDefinitionType type,
607  const std::string& name, const DtUnicode& typeScreenName,
608  bool proceduralOnly);
609 
612  virtual DtElementDefinitionManager* findElementManager(ElementDefinitionType type);
613 
616  virtual DtElementDefinitionManager& elementManager(ElementDefinitionType type);
617 
621  virtual const DtElementDefinitionManager& elementManager(
622  ElementDefinitionType type) const;
623 
625  virtual void loadDefaults();
626 
628  virtual DtElementDefinitionTypeManager::ElementDefinitionType getElementDefinitionType(const DtElementDefinitionManager& element);
629 
630  protected:
631 
633  template <typename ManagerClass>
634  friend ManagerClass& defaultManagerInstanceFunction(DtDe&, bool);
635 
637  template <typename ManagerClass>
638  friend void defaultManagerRegisterInstanceFunction(DtDe&, ManagerClass*);
639 
642 
645 
648 
649  private:
653  operator=(const DtElementDefinitionTypeManager&);
654 
655  protected:
656 
657  typedef std::unordered_map<unsigned int, DtElementDefinitionManager*>
659 
663  };
664 
665 
670  {
671  public:
673  static DtElementDefinitionSignaler& instance(DtDe&);
674 
676  virtual ~DtElementDefinitionSignaler();
677 
678  //Signals.
679  boost::signalslib::signal<void(const DtUnicode& oldName, const DtUnicode& newName)>
681 
682  protected:
685 
686  private:
690 
694  };
695 }
boost::signalslib::signal< void()> signal_managerAboutTobeDeleted
Signals Signal sent when this manager is about to be deleted.
Definition: DtElementDefinitionManager.h:410
std::vector< DtUnicode > StringVector
Definition: DtVisualizerAttribute.h:113
BuiltInElementTypes
These types are all automatically registered when the manager is created. This enum is linked with Dt...
Definition: DtElementDefinitionManager.h:562
ElementDefinitionsBackup * myBackup
Definition: DtElementDefinitionManager.h:538
DtDe * myOptionalDe
Definition: DtElementDefinitionManager.h:532
std::string myHierName
Definition: DtElementDefinitionManager.h:528
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
A unicode string. DtUnicode stores a UTF-16 encoded unicode string. Code Point, a Unicode character...
Definition: DtUnicode.h:33
A signaler class which emits signals when element definitions change.
Definition: DtElementDefinitionManager.h:669
DefinitionFileType
Definition: DtElementDefinitionManager.h:76
Definition: DtElementDefinitionManager.h:569
std::string myName
Definition: DtElementDefinitionManager.h:526
std::vector< std::string >::const_iterator ParentToElementIter
Iterator for parent to element names.
Definition: DtElementDefinitionManager.h:95
std::map< DtUnicode, ElementGroup > ParentToElementsMap
Map from parent element definition name to a group of elements Used to reconstruct the element hierar...
Definition: DtElementDefinitionManager.h:435
bool myConvertingHierarchy
Definition: DtElementDefinitionManager.h:541
std::multimap< const std::string, DtVisualizerDefinition * >::const_iterator ConstParentSchemaDataInterator
Remove all elements from a definition map.
Definition: DtElementDefinitionManager.h:514
The makVrv::DtVisualizerDefinitionSet is a collection of makVrv::DtVisualizerDefinition instances...
Definition: DtVisualizerDefinitionSet.h:28
std::string Utf8String
Typedef&#39;d string used to indicate that a std::string must use utf8.
Definition: UnicodeStringRecord.h:11
std::map< std::string, makArchives::DtElementsRecord > StringToElementsRecordMap
Ordered map from a string (fileName) to a DtElementsRecord.
Definition: DtElementDefinitionManager.h:89
DtSignalConnectionManager myConnections
Definition: DtElementDefinitionManager.h:661
Manager which owns element definitions.for one type of element Use the makVrv::DtElementDefinitionTyp...
Definition: DtElementDefinitionManager.h:73
DefinitionMap myAddedDefinitions
Definition: DtElementDefinitionManager.h:540
The makVrv::DtRecordSettingsBackup is a templaced class that settings records will use in order to ba...
Definition: DtRecordSettingsBackup.h:100
Definition: DtElementDefinitionManager.h:565
The element type manager is responsible for knowing about the types of elements as well as owning the...
Definition: DtElementDefinitionManager.h:551
std::map< DtUnicode, DtElementDefinition * > DefinitionMap
Ordered map from element definition name to definition object.
Definition: DtElementDefinitionManager.h:86
unsigned int ElementDefinitionType
Identifier for a type of element definition.
Definition: DtElementDefinitionManager.h:557
Definition: DtElementDefinitionManager.h:567
Record for a visualization definition.
Definition: DtElementDefinitionRecord.h:23
The DtBaseConnection is an abstract class.
Definition: DtBaseConnection.h:35
std::string myRootsFilename
Definition: DtElementDefinitionManager.h:527
Definition: DtElementDefinitionManager.h:568
std::unordered_map< unsigned int, DtElementDefinitionManager * > ManagerMap
Definition: DtElementDefinitionManager.h:658
Definition: DtElementDefinitionManager.h:564
VisualizerDefinitionValidatorMap myValidators
Definition: DtElementDefinitionManager.h:524
std::string myLeafName
Definition: DtElementDefinitionManager.h:529
std::multimap< const std::string, DtVisualizerDefinition * > ParentSchemaDataMap
Remove all elements from a definition map.
Definition: DtElementDefinitionManager.h:512
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
The element definition class contains the element definition information. The makVrv::DtElementDefini...
Definition: DtElementDefinition.h:26
DtDe * myOptionalDe
Definition: DtElementDefinitionManager.h:660
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
DefinitionMap myModifiedDefinitions
Definition: DtElementDefinitionManager.h:539
void defaultManagerRegisterInstanceFunction(DtDe &de, ManagerClass *mgr)
Default implementation of how to register a manager, especially necessary when overriding the manager...
Definition: DtDe.h:879
Definition: DtElementDefinitionManager.h:566
bool myAutoSave
Definition: DtElementDefinitionManager.h:536
ManagerMap myManagers
Definition: DtElementDefinitionManager.h:662
DefinitionMap myDefinitions
Definition: DtElementDefinitionManager.h:533
boost::signalslib::signal< void(const DtUnicode &oldName, const DtUnicode &newName)> signal_elementRenamed
Definition: DtElementDefinitionManager.h:680
Record containing a collection of element definition records.
Definition: DtElementsRecord.h:17
bool myProceduralFlag
Definition: DtElementDefinitionManager.h:535
Base class to provide boost signal/slot management.
Settings class for reading and writing settings to/from files.
Definition: DtDeSettings.h:29
std::map< std::string, DtVisualizerDefinitionValidator * > VisualizerDefinitionValidatorMap
Definition: DtElementDefinitionManager.h:520
A definition of a visualizer. Visualizer definition are always members of a visualizer definition set...
Definition: DtVisualizerDefinition.h:26
ManagerClass & defaultManagerInstanceFunction(DtDe &de, bool allowedInSlave)
default Manager instance function. Manager requirements: 1) Static instance function 2) Protected DtS...
Definition: DtDe.h:841
std::multimap< const std::string, DtVisualizerDefinition * >::iterator ParentSchemaDataInterator
Remove all elements from a definition map.
Definition: DtElementDefinitionManager.h:513
boost::unordered_map< std::string, std::string > myDefinitionNameCheck
Definition: DtElementDefinitionManager.h:534
std::pair< std::string, const makArchives::DtElementDefinitionRecord * > ElementPair
a pair, holding the definition file name in the key and the element definition record in the value ...
Definition: DtElementDefinitionManager.h:427
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:72
Definition: DtElementDefinitionManager.h:570
Record for a visualizer definition Designed to fit into a visualizer definition set record...
Definition: DtVisualizerDefinitionRecord.h:18
DefinitionMap myDeletedDefinitions
Definition: DtElementDefinitionManager.h:542
DtUnicode myScreenName
Definition: DtElementDefinitionManager.h:530
Record for an element definition (new type)
Definition: DtElementDefinitionRecord.h:90
std::vector< const DtElementDefinition * > ElementDefinitions
List of new element definitions.
Definition: DtElementDefinitionManager.h:92
DtModelSetId
Definition: DtModelSetEnums.h:19
Contains makVrv::DtIGLogger class.
DtRecordSettingsBackup< DtElementDefinitionManager, makArchives::DtElementsRecord > ElementDefinitionsBackup
Definition: DtElementDefinitionManager.h:522
The backup interface, is used by components to control backups of a state.
Definition: DtBackupInterface.h:19
Contains DLL export macros.
std::vector< ElementPair > ElementGroup
A group of element definition records, used for the following map.
Definition: DtElementDefinitionManager.h:430

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)