1 // Author: Derek Barnett
2 
3 #ifndef DATASETBASETYPES_H
4 #define DATASETBASETYPES_H
5 
6 #include <string>
7 #include "pbbam/Config.h"
8 #include "pbbam/internal/DataSetElement.h"
9 #include "pbbam/internal/DataSetListElement.h"
10 
11 namespace PacBio {
12 namespace BAM {
13 
14 class DataSetMetadata;
15 class Extensions;
16 class ExternalResources;
17 class FileIndices;
18 class Filters;
19 class Properties;
20 class Provenance;
21 
22 namespace internal {
23 
24 class BaseEntityType : public DataSetElement
25 {
26 protected:
27     BaseEntityType(const std::string& label, const XsdType& xsd = XsdType::BASE_DATA_MODEL);
28 
29 public:
30     const std::string& CreatedAt() const;
31     const std::string& Description() const;
32     const PacBio::BAM::Extensions& Extensions() const;
33     const std::string& Format() const;
34     const std::string& ModifiedAt() const;
35     const std::string& Name() const;
36     const std::string& ResourceId() const;
37     const std::string& Tags() const;
38     const std::string& Version() const;
39 
40     std::string& CreatedAt();
41     std::string& Description();
42     PacBio::BAM::Extensions& Extensions();
43     std::string& Format();
44     std::string& ModifiedAt();
45     std::string& Name();
46     std::string& ResourceId();
47     std::string& Tags();
48     std::string& Version();
49 
50     BaseEntityType& CreatedAt(const std::string& createdAt);
51     BaseEntityType& Description(const std::string& description);
52     BaseEntityType& Extensions(const PacBio::BAM::Extensions& extensions);
53     BaseEntityType& Format(const std::string& format);
54     BaseEntityType& ModifiedAt(const std::string& modifiedAt);
55     BaseEntityType& Name(const std::string& name);
56     BaseEntityType& ResourceId(const std::string& resourceId);
57     BaseEntityType& Tags(const std::string& tags);
58     BaseEntityType& Version(const std::string& version);
59 };
60 
61 class DataEntityType : public BaseEntityType
62 {
63 protected:
64     DataEntityType(const std::string& label, const XsdType& xsd = XsdType::BASE_DATA_MODEL);
65 
66 public:
67     const std::string& Checksum() const;
68     const std::string& EncodedValue() const;
69     const std::string& MetaType() const;
70     const std::string& SimpleValue() const;
71     const std::string& TimeStampedName() const;
72     const std::string& UniqueId() const;
73     const std::string& ValueDataType() const;
74 
75     std::string& Checksum();
76     std::string& EncodedValue();
77     std::string& MetaType();
78     std::string& SimpleValue();
79     std::string& TimeStampedName();
80     std::string& UniqueId();
81     std::string& ValueDataType();
82 
83     DataEntityType& Checksum(const std::string& checksum);
84     DataEntityType& EncodedValue(const std::string& encodedValue);
85     DataEntityType& MetaType(const std::string& metatype);
86     DataEntityType& SimpleValue(const std::string& simpleValue);
87     DataEntityType& TimeStampedName(const std::string& timeStampedName);
88     DataEntityType& UniqueId(const std::string& uuid);
89     DataEntityType& ValueDataType(const std::string& valueDataType);
90 };
91 
92 class StrictEntityType : public BaseEntityType
93 {
94 protected:
95     StrictEntityType(const std::string& metatype, const std::string& label,
96                      const XsdType& xsd = XsdType::BASE_DATA_MODEL);
97 
98 public:
99     const std::string& MetaType() const;
100     const std::string& TimeStampedName() const;
101     const std::string& UniqueId() const;
102 
103     std::string& MetaType();
104     std::string& TimeStampedName();
105     std::string& UniqueId();
106 
107     StrictEntityType& MetaType(const std::string& metatype);
108     StrictEntityType& TimeStampedName(const std::string& timeStampedName);
109     StrictEntityType& UniqueId(const std::string& uuid);
110 };
111 
112 class InputOutputDataType : public StrictEntityType
113 {
114 protected:
115     InputOutputDataType(const std::string& metatype, const std::string& filename,
116                         const std::string& label, const XsdType& xsd = XsdType::BASE_DATA_MODEL);
117 };
118 
119 class IndexedDataType : public InputOutputDataType
120 {
121 protected:
122     IndexedDataType(const std::string& metatype, const std::string& filename,
123                     const std::string& label, const XsdType& xsd = XsdType::BASE_DATA_MODEL);
124 
125 public:
126     const PacBio::BAM::FileIndices& FileIndices() const;
127     PacBio::BAM::FileIndices& FileIndices();
128     IndexedDataType& FileIndices(const PacBio::BAM::FileIndices& indices);
129 };
130 
131 }  // namespace internal
132 }  // namespace BAM
133 }  // namespace PacBio
134 
135 #include "pbbam/internal/DataSetBaseTypes.inl"
136 
137 #endif  // DATASETBASETYPES_H
138