39 # define __attribute__(x)
45 #include <boost/regex.hpp>
49 #include "lsst/daf/base/Persistable.h"
50 #include "lsst/pex/policy/Policy.h"
55 namespace persistence {
60 Persistence::Persistence(lsst::pex::policy::Policy::Ptr policy) :
61 lsst::daf::base::Citizen(
typeid(*
this)), _policy(policy) {
76 Storage::Ptr Persistence::_getStorage(std::string
const& storageType,
79 lsst::pex::policy::Policy::Ptr policyPtr;
80 if (_policy && _policy->exists(storageType)) {
81 policyPtr = _policy->getPolicy(storageType);
93 return _getStorage(storageType, location,
true);
103 return _getStorage(storageType, location,
false);
113 lsst::daf::base::Persistable
const& persistable,
Storage::List const& storageList,
114 lsst::daf::base::PropertySet::Ptr additionalData) {
116 std::string policyName =
"Formatter";
117 lsst::pex::policy::Policy::Ptr policyPtr;
118 if (_policy && _policy->exists(policyName)) {
119 policyPtr = _policy->getPolicy(policyName);
127 for (Storage::List::const_iterator it = storageList.begin();
128 it != storageList.end(); ++it) {
129 (*it)->startTransaction();
130 f->write(&persistable, *it, additionalData);
132 for (Storage::List::const_iterator it = storageList.begin();
133 it != storageList.end(); ++it) {
134 (*it)->endTransaction();
148 std::string
const& persistableType,
Storage::List const& storageList,
149 lsst::daf::base::PropertySet::Ptr additionalData) {
151 std::string policyName =
"Formatter";
152 lsst::pex::policy::Policy::Ptr policyPtr;
153 if (_policy && _policy->exists(policyName)) {
154 policyPtr = _policy->getPolicy(policyName);
160 lsst::daf::base::Persistable* persistable = 0;
161 for (Storage::List::const_iterator it = storageList.begin();
162 it != storageList.end(); ++it) {
163 (*it)->startTransaction();
165 persistable = f->read(*it, additionalData);
167 f->update(persistable, *it, additionalData);
170 for (Storage::List::const_iterator it = storageList.begin();
171 it != storageList.end(); ++it) {
172 (*it)->endTransaction();
186 std::string
const& persistableType,
Storage::List const& storageList,
187 lsst::daf::base::PropertySet::Ptr additionalData) {
188 return lsst::daf::base::Persistable::Ptr(
197 lsst::pex::policy::Policy::Ptr policy) {
static Ptr getPersistence(lsst::pex::policy::Policy::Ptr policy)
Create a Persistence object.
std::shared_ptr< Storage > Ptr
virtual lsst::daf::base::Persistable * unsafeRetrieve(std::string const &persistableType, Storage::List const &storageList, lsst::daf::base::PropertySet::Ptr additionalData)
Retrieve a Persistable instance, returning an unsafe bare pointer.
Class for logical location of a persisted Persistable instance.
virtual Storage::Ptr getRetrieveStorage(std::string const &storageType, LogicalLocation const &location)
Create a Storage subclass configured to retrieve from a location.
virtual lsst::daf::base::Persistable::Ptr retrieve(std::string const &persistableType, Storage::List const &storageList, lsst::daf::base::PropertySet::Ptr additionalData)
Retrieve a Persistable instance.
Interface for Storage abstract base class.
virtual ~Persistence(void)
Destructor.
static Ptr createInstance(std::string const &name, LogicalLocation const &location, bool persist, lsst::pex::policy::Policy::Ptr policy)
Create and configure a Storage subclass instance.
Interface for Persistence class.
virtual Storage::Ptr getPersistStorage(std::string const &storageType, LogicalLocation const &location)
Create a Storage subclass configured to persist to a location.
Class implementing object persistence.
virtual void persist(lsst::daf::base::Persistable const &persistable, Storage::List const &storageList, lsst::daf::base::PropertySet::Ptr additionalData)
Persist a Persistable instance.
std::shared_ptr< Persistence > Ptr
Interface for LogicalLocation class.
lsst::pex::policy::Policy::Ptr getPolicy() const
Return the policy used to configure the Persistence object.