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