1 // Author: Derek Barnett
2
3 #include "PbbamInternalConfig.h"
4
5 #include "pbbam/internal/DataSetBaseTypes.h"
6
7 #include <cstddef>
8
9 #include <boost/algorithm/string.hpp>
10
11 #include "DataSetUtils.h"
12 #include "TimeUtils.h"
13 #include "pbbam/DataSetTypes.h"
14
15 namespace PacBio {
16 namespace BAM {
17 namespace internal {
18
19 // ----------------
20 // BaseEntityType
21 // ----------------
22
BaseEntityType(const std::string & label,const XsdType & xsd)23 BaseEntityType::BaseEntityType(const std::string& label, const XsdType& xsd)
24 : DataSetElement(label, xsd)
25 {
26 if (Version().empty()) Version(internal::XML_VERSION);
27 }
28
DEFINE_ACCESSORS(BaseEntityType,Extensions,Extensions)29 DEFINE_ACCESSORS(BaseEntityType, Extensions, Extensions)
30
31 BaseEntityType& BaseEntityType::Extensions(const PacBio::BAM::Extensions& extensions)
32 {
33 Extensions() = extensions;
34 return *this;
35 }
36
37 // ----------------
38 // DataEntityType
39 // ----------------
40
DataEntityType(const std::string & label,const XsdType & xsd)41 DataEntityType::DataEntityType(const std::string& label, const XsdType& xsd)
42 : BaseEntityType(label, xsd)
43 {
44 }
45
46 // -----------------
47 // IndexedDataType
48 // -----------------
49
IndexedDataType(const std::string & metatype,const std::string & filename,const std::string & label,const XsdType & xsd)50 IndexedDataType::IndexedDataType(const std::string& metatype, const std::string& filename,
51 const std::string& label, const XsdType& xsd)
52 : InputOutputDataType(metatype, filename, label, xsd)
53 {
54 }
55
DEFINE_ACCESSORS(IndexedDataType,FileIndices,FileIndices)56 DEFINE_ACCESSORS(IndexedDataType, FileIndices, FileIndices)
57
58 IndexedDataType& IndexedDataType::FileIndices(const PacBio::BAM::FileIndices& indices)
59 {
60 FileIndices() = indices;
61 return *this;
62 }
63
64 // ---------------------
65 // InputOutputDataType
66 // ---------------------
67
InputOutputDataType(const std::string & metatype,const std::string & filename,const std::string & label,const XsdType & xsd)68 InputOutputDataType::InputOutputDataType(const std::string& metatype, const std::string& filename,
69 const std::string& label, const XsdType& xsd)
70 : StrictEntityType(metatype, label, xsd)
71 {
72 ResourceId(filename);
73 }
74
75 // ----------------
76 // StrictEntityType
77 // ----------------
78
StrictEntityType(const std::string & metatype,const std::string & label,const XsdType & xsd)79 StrictEntityType::StrictEntityType(const std::string& metatype, const std::string& label,
80 const XsdType& xsd)
81 : BaseEntityType(label, xsd)
82 {
83 // MetaType
84 MetaType(metatype);
85
86 // TimeStampedName
87 const size_t numChars = metatype.size();
88 std::string transformedMetatype;
89 transformedMetatype.resize(numChars);
90 for (size_t i = 0; i < numChars; ++i) {
91 const char c = metatype.at(i);
92 transformedMetatype[i] = ((c == '.') ? '_' : tolower(c));
93 }
94 const std::string tsn =
95 transformedMetatype + "-" + internal::ToDataSetFormat(internal::CurrentTime());
96 TimeStampedName(tsn);
97
98 // UniqueId
99 UniqueId(internal::GenerateUuid());
100 }
101
102 } // namespace internal
103 } // namespace BAM
104 } // namespace PacBio
105