OdbDesignLib
OdbDesign ODB++ Parsing Library
MiscInfoFile.h
1 //
2 // Created by nmill on 10/13/2023.
3 //
4 
5 #include "../OdbFile.h"
6 #include <chrono>
7 #include "../../IProtoBuffable.h"
8 #include "../../ProtoBuf/miscinfofile.pb.h"
9 #include "../IStreamSaveable.h"
10 #include <memory>
11 #include "../../odbdesign_export.h"
12 
13 #pragma once
14 
15 namespace Odb::Lib::FileModel::Design
16 {
17 
18  class ODBDESIGN_EXPORT MiscInfoFile : public OdbFile, public IProtoBuffable<Odb::Lib::Protobuf::MiscInfoFile>, public IStreamSaveable
19  {
20  public:
21  MiscInfoFile();
22  ~MiscInfoFile() = default;
23 
24  std::string GetProductModelName() const;
25  std::string GetJobName() const;
26  std::string GetOdbVersionMajor() const;
27  std::string GetOdbVersionMinor() const;
28  std::string GetOdbSource() const;
29  std::chrono::system_clock::time_point GetCreationDate() const;
30  std::chrono::system_clock::time_point GetSaveDate() const;
31  std::string GetSaveApp() const;
32  std::string GetSaveUser() const;
33  std::string GetUnits() const;
34  unsigned int GetMaxUniqueId() const;
35 
36  bool Parse(std::filesystem::path path) override;
37  bool Save(std::ostream& os) override;
38 
39  // Inherited via IProtoBuffable
40  std::unique_ptr<Odb::Lib::Protobuf::MiscInfoFile> to_protobuf() const override;
41  void from_protobuf(const Odb::Lib::Protobuf::MiscInfoFile& message) override;
42 
43  private:
44  std::string m_productModelName;
45  std::string m_jobName;
46  std::string m_odbVersionMajor;
47  std::string m_odbVersionMinor;
48  std::string m_odbSource;
49  std::chrono::system_clock::time_point m_creationDateDate; // "20161024.101454"
50  std::chrono::system_clock::time_point m_saveDate; // "20170810.132829"
51  std::string m_saveApp;
52  std::string m_saveUser;
53  std::string m_units;
54  unsigned int m_maxUniqueId;
55 
56  static inline bool attributeValueIsOptional(const std::string& attribute);
57 
58  constexpr inline static const char* OPTIONAL_ATTRIBUTES[] =
59  {
60  //"ODB_SOURCE", // not optional per spec pg. 80
61  "MAX_UID",
62  };
63 
64  constexpr inline static const char* PRODUCT_MODEL_NAME_KEY = "PRODUCT_MODEL_NAME";
65  constexpr inline static const char* JOB_NAME_KEY = "JOB_NAME";
66  constexpr inline static const char* ODB_VERSION_MAJOR_KEY = "ODB_VERSION_MAJOR";
67  constexpr inline static const char* ODB_VERSION_MINOR_KEY = "ODB_VERSION_MINOR";
68  constexpr inline static const char* ODB_SOURCE_KEY = "ODB_SOURCE";
69  constexpr inline static const char* CREATION_DATE_KEY = "CREATION_DATE";
70  constexpr inline static const char* SAVE_DATE_KEY = "SAVE_DATE";
71  constexpr inline static const char* SAVE_APP_KEY = "SAVE_APP";
72  constexpr inline static const char* SAVE_USER_KEY = "SAVE_USER";
73  constexpr inline static const char* UNITS_KEY = "UNITS";
74  constexpr inline static const char* MAX_UID_KEY = "MAX_UID";
75  };
76 }