LSSTApplications
20.0.0
LSSTDataManagementBasePackage
stack
1a1d771
Linux64
daf_persistence
20.0.0
src
LogicalLocation.cc
Go to the documentation of this file.
1
// -*- lsst-c++ -*-
2
3
/*
4
* LSST Data Management System
5
* Copyright 2008, 2009, 2010 LSST Corporation.
6
*
7
* This product includes software developed by the
8
* LSST Project (http://www.lsst.org/).
9
*
10
* This program is free software: you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation, either version 3 of the License, or
13
* (at your option) any later version.
14
*
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
19
*
20
* You should have received a copy of the LSST License Statement and
21
* the GNU General Public License along with this program. If not,
22
* see <http://www.lsstcorp.org/LegalNotices/>.
23
*/
24
37
#ifndef __GNUC__
38
#define __attribute__(x)
/*NOTHING*/
39
#endif
40
static
char
const
* SVNid
__attribute__
((unused)) =
"$Id$"
;
41
42
#include "
lsst/daf/persistence/LogicalLocation.h
"
43
44
#include "boost/regex.hpp"
45
#include "
lsst/pex/exceptions.h
"
46
#include "
lsst/log/Log.h
"
47
48
namespace
dafBase
=
lsst::daf::base
;
49
namespace
dafPersist
=
lsst::daf::persistence
;
50
namespace
pexExcept
=
lsst::pex::exceptions
;
51
52
namespace
{
53
LOG_LOGGER
_log =
LOG_GET
(
"daf.persistence.LogicalLocation"
);
54
}
55
56
dafBase::PropertySet::Ptr
dafPersist::LogicalLocation::_map;
57
60
dafPersist::LogicalLocation::LogicalLocation
(
std::string
const
& locString,
61
CONST_PTR
(
dafBase::PropertySet
) additionalData)
62
: _locString() {
63
boost::regex expr(
"(%.*?)\\((\\w+?)\\)"
);
64
boost::sregex_iterator i = make_regex_iterator(
locString
, expr);
65
boost::sregex_iterator last;
66
LOGLS_DEBUG
(_log,
"Input string: "
<<
locString
);
67
while
(i != boost::sregex_iterator()) {
68
last = i;
69
if
((*i).prefix().matched) {
70
_locString += (*i).prefix().str();
71
}
72
std::string
fmt = (*i).str(1);
73
std::string
key
= (*i).str(2);
74
LOGLS_DEBUG
(_log,
"Key: "
<<
key
);
75
if
(_map && _map->exists(
key
)) {
76
if
(_map->typeOf(
key
) ==
typeid
(
int
)) {
77
int
value = _map->getAsInt(
key
);
78
LOGLS_DEBUG
(_log,
"Map Val: "
<< value);
79
if
(fmt ==
"%"
) {
80
_locString += (
boost::format
(
"%1%"
) % value).str();
81
}
else
{
82
_locString += (
boost::format
(fmt) % value).str();
83
}
84
}
else
{
85
std::string
value = _map->getAsString(
key
);
86
LOGLS_DEBUG
(_log,
"Map Val: "
<< value);
87
_locString += value;
88
}
89
}
else
if
(additionalData && additionalData->
exists
(
key
)) {
90
if
(additionalData->
typeOf
(
key
) ==
typeid
(
int
)) {
91
int
value = additionalData->
getAsInt
(
key
);
92
LOGLS_DEBUG
(_log,
"Map Val: "
<< value);
93
if
(fmt ==
"%"
) {
94
_locString += (
boost::format
(
"%1%"
) % value).str();
95
}
else
{
96
_locString += (
boost::format
(fmt) % value).str();
97
}
98
}
else
{
99
std::string
value = additionalData->
getAsString
(
key
);
100
LOGLS_DEBUG
(_log,
"Map Val: "
<< value);
101
_locString += value;
102
}
103
}
else
{
104
throw
LSST_EXCEPT
(
pexExcept::RuntimeError
,
"Unknown substitution: "
+
key
);
105
}
106
++i;
107
}
108
if
(last == boost::sregex_iterator()) {
109
_locString =
locString
;
110
LOGLS_DEBUG
(_log,
"Copy to: "
<< _locString);
111
}
else
{
112
_locString += (*last).suffix().str();
113
LOGLS_DEBUG
(_log,
"Result: "
<< _locString);
114
}
115
}
116
119
std::string
const
&
dafPersist::LogicalLocation::locString
(
void
)
const
{
return
_locString; }
120
123
void
dafPersist::LogicalLocation::setLocationMap
(
PTR
(
dafBase::PropertySet
) map) {
124
if
(map) {
125
_map = map->
deepCopy
();
126
}
else
{
127
_map.
reset
();
128
}
129
}
LOG_LOGGER
#define LOG_LOGGER
Definition:
Log.h:703
CONST_PTR
#define CONST_PTR(...)
A shared pointer to a const object.
Definition:
base.h:47
lsst::daf::base::PropertySet::getAsInt
int getAsInt(std::string const &name) const
Get the last value for a bool/char/short/int property name (possibly hierarchical).
std::string
STL class.
pex.config.history.format
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition:
history.py:174
LOG_GET
#define LOG_GET(logger)
Definition:
Log.h:75
lsst::daf::base::PropertySet::exists
bool exists(std::string const &name) const
Determine if a name (possibly hierarchical) exists.
lsst::daf::persistence::LogicalLocation::locString
std::string const & locString(void) const
Accessor.
Definition:
LogicalLocation.cc:119
lsst::daf::base::PropertySet::Ptr
std::shared_ptr< PropertySet > Ptr
Definition:
PropertySet.h:70
__attribute__
#define __attribute__(x)
Definition:
LogicalLocation.cc:38
std::shared_ptr::reset
T reset(T... args)
lsst::daf::base::PropertySet::getAsString
std::string getAsString(std::string const &name) const
Get the last value for a string property name (possibly hierarchical).
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition:
Exception.h:48
LOGLS_DEBUG
#define LOGLS_DEBUG(logger, message)
Definition:
Log.h:608
lsst::daf::base
Definition:
Utils.h:47
LogicalLocation.h
Interface for LogicalLocation class.
lsst::daf::persistence::LogicalLocation::setLocationMap
static void setLocationMap(boost::shared_ptr< dafBase::PropertySet > map)
Set the logical-to-less-logical map.
Definition:
LogicalLocation.cc:123
lsst::daf::persistence::LogicalLocation::LogicalLocation
LogicalLocation(std::string const &locString, boost::shared_ptr< dafBase::PropertySet const > additionalData=boost::shared_ptr< dafBase::PropertySet const >())
Constructor from string and additional data.
Definition:
LogicalLocation.cc:60
PTR
#define PTR(...)
Definition:
base.h:41
key
Key< U > key
Definition:
Schema.cc:281
lsst::daf::base::PropertySet
Class for storing generic metadata.
Definition:
PropertySet.h:67
lsst::daf::base::PropertySet::typeOf
std::type_info const & typeOf(std::string const &name) const
Get the type of values for a property name (possibly hierarchical).
lsst::pex::exceptions
Definition:
Exception.h:37
lsst::daf::persistence
Definition:
Utils.h:50
Log.h
LSST DM logging module built on log4cxx.
exceptions.h
lsst::pex::exceptions::RuntimeError
Reports errors that are due to events beyond the control of the program.
Definition:
Runtime.h:104
lsst::daf::base::PropertySet::deepCopy
virtual Ptr deepCopy() const
Make a deep copy of the PropertySet and all of its contents.
Generated on Wed Jun 24 2020 18:10:06 for LSSTApplications by
1.8.18