LSSTApplications  16.0-1-gce273f5+20,16.0-10-gc1446dd+20,16.0-12-g569485f+3,16.0-13-g5e87145+4,16.0-13-g5f20d24,16.0-13-g80874fd+2,16.0-13-gb122224+11,16.0-13-gd9b1b71+20,16.0-14-g08f9460+3,16.0-15-g77ef378+6,16.0-17-g6a7bfb3b+20,16.0-17-ged3ab9d,16.0-18-gdf247dd+1,16.0-2-g0febb12+16,16.0-2-g839ba83+58,16.0-2-g9d5294e+45,16.0-2-gc6e0ed0+4,16.0-23-ge8a9b866+2,16.0-3-g404ea43+12,16.0-3-gbc759ec+18,16.0-3-gcfd6c53+43,16.0-4-g03cf288+34,16.0-4-g13a27c5+20,16.0-4-g5f3a788+15,16.0-4-g8a0f11a+42,16.0-4-ga3eb747+5,16.0-5-g1991253+20,16.0-5-g1e9226d+3,16.0-5-g865efd9+22,16.0-5-gb3f8a4b+52,16.0-5-gd0f1235+9,16.0-51-gb4b4a8566+2,16.0-7-g6043bfc+8,16.0-7-gd2eeba5+2,16.0-7-gde5bd64+2,16.0-8-g0e813a6,16.0-8-g4dec96c+33,16.0-8-gfd407c0+5,16.0-9-g2f60796+2,master-g5768c874b9+4,w.2018.41
LSSTDataManagementBasePackage
PropertySetFormatter.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 
25 
26 
38 #ifndef __GNUC__
39 # define __attribute__(x) /*NOTHING*/
40 #endif
41 static char const* SVNid __attribute__((unused)) = "$Id$";
42 
44 
45 #include <sstream>
46 #include <stdexcept>
47 #include <string>
48 #include <vector>
49 
50 #include <boost/serialization/nvp.hpp>
51 #include <boost/serialization/shared_ptr.hpp>
52 #include <boost/serialization/vector.hpp>
53 
55 #include "lsst/daf/base/DateTime.h"
60 #include <lsst/pex/exceptions.h>
61 #include <lsst/log/Log.h>
62 #include <lsst/pex/policy/Policy.h>
63 
64 namespace {
65 auto _log = LOG_GET("daf.persistence.PropertySetFormatter");
66 }
67 
68 namespace dafBase = lsst::daf::base;
70 namespace pexPolicy = lsst::pex::policy;
71 
72 using boost::serialization::make_nvp;
73 
78 dafPersist::PropertySetFormatter::registration("PropertySet",
79  typeid(dafBase::PropertySet),
80  createInstance);
81 
85 dafPersist::PropertySetFormatter::PropertySetFormatter(
86  pexPolicy::Policy::Ptr policy) :
87  dafPersist::Formatter(typeid(*this)), _policy(policy) {
88 }
89 
93 }
94 
98  dafBase::PropertySet::Ptr additionalData) {
99  LOGLS_TRACE(_log, "PropertySetFormatter write start");
100  dafBase::PropertySet const* ps =
101  dynamic_cast<dafBase::PropertySet const*>(persistable);
102  if (ps == 0) {
103  throw LSST_EXCEPT(lsst::pex::exceptions::RuntimeError, "Persisting non-PropertySet");
104  }
105  if (typeid(*storage) == typeid(dafPersist::BoostStorage)) {
106  LOGLS_TRACE(_log, "PropertySetFormatter write BoostStorage");
108  dynamic_cast<dafPersist::BoostStorage*>(storage.get());
109  boost->getOArchive() & *ps;
110  LOGLS_TRACE(_log, "PropertySetFormatter write end");
111  return;
112  }
113  else if (typeid(*storage) == typeid(dafPersist::XmlStorage)) {
114  LOGLS_TRACE(_log, "PropertySetFormatter write XmlStorage");
116  dynamic_cast<dafPersist::XmlStorage*>(storage.get());
117  xml->getOArchive() & make_nvp("propertySet", *ps);
118  LOGLS_TRACE(_log, "PropertySetFormatter write end");
119  return;
120  }
121 
122  throw LSST_EXCEPT(lsst::pex::exceptions::RuntimeError, "Unrecognized FormatterStorage for PropertySet");
123 }
124 
127  LOGLS_TRACE(_log, "PropertySetFormatter read start");
129  if (typeid(*storage) == typeid(dafPersist::BoostStorage)) {
130  LOGLS_TRACE(_log, "PropertySetFormatter read BoostStorage");
132  dynamic_cast<dafPersist::BoostStorage*>(storage.get());
133  boost->getIArchive() & *ps;
134  LOGLS_TRACE(_log, "PropertySetFormatter read end");
135  return ps;
136  }
137  else if (typeid(*storage) == typeid(dafPersist::XmlStorage)) {
138  LOGLS_TRACE(_log, "PropertySetFormatter read XmlStorage");
140  dynamic_cast<dafPersist::XmlStorage*>(storage.get());
141  xml->getIArchive() & make_nvp("propertySet", *ps);
142  LOGLS_TRACE(_log, "PropertySetFormatter read end");
143  return ps;
144  }
145  throw LSST_EXCEPT(lsst::pex::exceptions::RuntimeError, "Unrecognized FormatterStorage for PropertySet");
146 }
147 
150  dafBase::PropertySet::Ptr additionalData) {
151  throw LSST_EXCEPT(lsst::pex::exceptions::RuntimeError, "Unexpected call to update for PropertySet");
152 }
153 
158 dafPersist::Formatter::Ptr dafPersist::PropertySetFormatter::createInstance(
159  pexPolicy::Policy::Ptr policy) {
161 }
std::shared_ptr< Policy > Ptr
Definition: Policy.h:172
virtual void update(dafBase::Persistable *persistable, dafPersist::FormatterStorage::Ptr storage, dafBase::PropertySet::Ptr additionalData)
std::shared_ptr< PropertySet > Ptr
Definition: PropertySet.h:76
Class for XML file storage.
Definition: XmlStorage.h:58
Definition: Polygon.cc:24
virtual ~PropertySetFormatter(void)
Minimal destructor.
std::shared_ptr< Formatter > Ptr
Definition: Formatter.h:81
virtual boost::archive::text_iarchive & getIArchive(void)
Get a boost::serialization archive suitable for input.
virtual dafBase::Persistable * read(dafPersist::FormatterStorage::Ptr storage, dafBase::PropertySet::Ptr additionalData)
Construct a static instance of this helper class to register a Formatter subclass in the FormatterReg...
Definition: Formatter.h:138
virtual boost::archive::xml_iarchive & getIArchive(void)
Get a boost::serialization XML archive suitable for input.
Definition: XmlStorage.cc:114
LSST DM logging module built on log4cxx.
Interface for XmlStorage class.
#define LOGLS_TRACE(logger, message)
Log a trace-level message using an iostream-based interface.
Definition: Log.h:597
virtual void write(dafBase::Persistable const *persistable, dafPersist::FormatterStorage::Ptr storage, dafBase::PropertySet::Ptr additionalData)
Interface for PropertySetFormatter class.
Abstract base class for all formatters.
Definition: Formatter.h:79
Formatter for persistence of PropertySet instances.
Interface for DateTime class.
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
virtual boost::archive::text_oarchive & getOArchive(void)
Get a boost::serialization archive suitable for output.
Auxiliary global template function for Formatter subclasses.
virtual boost::archive::xml_oarchive & getOArchive(void)
Get a boost::serialization XML archive suitable for output.
Definition: XmlStorage.cc:107
Class for storing generic metadata.
Definition: PropertySet.h:73
Class for boost::serialization storage.
Definition: BoostStorage.h:59
Base class for all persistable classes.
Definition: Persistable.h:75
#define __attribute__(x)
#define LOG_GET(logger)
Returns a Log object associated with logger.
Definition: Log.h:83
Interface for LogicalLocation class.
std::shared_ptr< FormatterStorage > Ptr
Reports errors that are due to events beyond the control of the program.
Definition: Runtime.h:104
Interface for BoostStorage class.