00001 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00002 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/advert.cpp")
00003 #endif
00004
00005
00006
00007
00008
00009 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00010 #pragma wave option(output: null)
00011 #endif
00012
00013
00014
00015 #define SAGA_NO_IMPORT_ATTRIBUTE
00016 #define SAGA_EXPORT_ATTRIBUTE SAGA_ADVERT_PACKAGE_EXPORT
00017
00018
00019
00020 #define SAGA_NO_IMPORT_MONITORABLE
00021
00022 #include <saga/saga/util.hpp>
00023 #include <saga/saga/task.hpp>
00024
00025
00026 #include <saga/saga/advert.hpp>
00027 #include <saga/impl/advert.hpp>
00028 #include <saga/impl/engine/metric.hpp>
00029 #include <saga/saga/detail/call.hpp>
00030
00031 #include <saga/saga/detail/attribute_impl.hpp>
00032 #include <saga/saga/detail/monitorable_impl.hpp>
00033
00034 #ifdef SAGA_DEBUG
00035 #include <saga/saga/packages/filesystem/preprocessed/advert.cpp>
00036 #else
00037
00038 #if defined(__WAVE__) && defined(SAGA_CREATE_PREPROCESSED_FILES)
00039 #pragma wave option(preserve: 2, line: 1, output: "preprocessed/advert.cpp")
00040 #endif
00041
00043 namespace saga
00044 {
00045 namespace advert
00046 {
00047 namespace metrics
00048 {
00050 saga::metrics::init_data const advert_metric_data[] =
00051 {
00052
00053 {
00054 advert_modified,
00055 "Metric fires on advert entry changes, it carries the key of"
00056 "the modified entry.",
00057 attributes::metric_mode_readonly,
00058 "1",
00059 attributes::metric_type_string,
00060 ""
00061 },
00062 {
00063 advert_deleted,
00064 "Metric fires on advert entry deletes, it carries the key of"
00065 "the deleted entry.",
00066 attributes::metric_mode_readonly,
00067 "1",
00068 attributes::metric_type_string,
00069 ""
00070 },
00071 };
00073
00075 }
00076
00077
00078 entry::entry (session const& s, saga::url url, int mode)
00079 : name_space::entry (new saga::impl::advert (s, url, mode))
00080 {
00081
00082 this->attribute_base::init (true);
00083
00084
00085 this->saga::object::get_impl()->init();
00086
00087
00088 std::vector<saga::metric> metrics;
00089 for (unsigned int i = 0;
00090 i < sizeof(saga::advert::metrics::advert_metric_data)/sizeof(saga::metrics::init_data);
00091 ++i)
00092 {
00093 saga::metrics::init_data const* p = &saga::advert::metrics::advert_metric_data[i];
00094 saga::metric m(*this, p->name, p->description, p->mode, p->unit,
00095 p->type, p->value);
00096 metrics.push_back(m);
00097 }
00098 this->monitorable_base::init (metrics);
00099 }
00100
00101 entry::entry (saga::url url, int mode)
00102 : name_space::entry (new saga::impl::advert (detail::get_the_session (), url, mode))
00103 {
00104
00105 this->attribute_base::init (true);
00106
00107
00108 this->saga::object::get_impl()->init();
00109
00110
00111 std::vector<saga::metric> metrics;
00112 for (unsigned int i = 0;
00113 i < sizeof(saga::advert::metrics::advert_metric_data)/sizeof(saga::metrics::init_data);
00114 ++i)
00115 {
00116 saga::metrics::init_data const* p = &saga::advert::metrics::advert_metric_data[i];
00117 saga::metric m(*this, p->name, p->description, p->mode, p->unit,
00118 p->type, p->value);
00119 metrics.push_back(m);
00120 }
00121 this->monitorable_base::init (metrics);
00122 }
00123
00124 entry::entry (void)
00125 {
00126 }
00127
00128 entry::entry(saga::impl::advert *impl)
00129 : name_space::entry (impl)
00130 {
00131 }
00132
00133 entry::entry (saga::object const& o)
00134 : name_space::entry(o)
00135 {
00136 if (this->get_type() != saga::object::Advert)
00137 {
00138 SAGA_THROW("Bad type conversion.", saga::BadParameter);
00139 }
00140 }
00141
00142 entry::~entry (void)
00143 {
00144 }
00145
00146 entry &entry::operator= (saga::object const& o)
00147 {
00148 return this->saga::name_space::entry::operator=(o), *this;
00149 }
00150
00151 saga::impl::advert* entry::get_impl() const
00152 {
00153 typedef saga::object base_type;
00154 return static_cast<saga::impl::advert*>(this->base_type::get_impl());
00155 }
00156
00157 TR1::shared_ptr <saga::impl::advert> entry::get_impl_sp(void) const
00158 {
00159
00160 typedef saga::object base_type;
00161 return TR1::static_pointer_cast <saga::impl::advert> (
00162 this->base_type::get_impl_sp());
00163 }
00164
00165
00166 SAGA_CALL_CREATE_IMP_3(entry, impl::advert, session const&, saga::url const&, int)
00167
00168
00169 SAGA_CALL_IMP_1 (entry, store_object, saga::object)
00170 SAGA_CALL_IMP_1 (entry, retrieve_object, saga::session)
00171
00172 saga::task entry::retrieve_objectpriv (saga::task_base::Sync)
00173 {
00174 return get_impl()->retrieve_object(saga::detail::get_the_session(), true);
00175 }
00176 saga::task entry::retrieve_objectpriv (saga::task_base::Async)
00177 {
00178 return saga::detail::run(get_impl()->retrieve_object(saga::detail::get_the_session()));
00179 }
00180 saga::task entry::retrieve_objectpriv (saga::task_base::Task)
00181 {
00182 return get_impl()->retrieve_object(saga::detail::get_the_session());
00183 }
00184
00185 SAGA_CALL_IMP_1 (entry, store_string, std::string)
00186 SAGA_CALL_IMP_0 (entry, retrieve_string)
00187
00188 }
00189
00190 namespace detail
00191 {
00193
00194
00195 template struct SAGA_ADVERT_PACKAGE_EXPORT_REPEAT attribute<advert::entry>;
00196
00197 template struct SAGA_ADVERT_PACKAGE_EXPORT attribute_priv<advert::entry, task_base::Sync>;
00198 template struct SAGA_ADVERT_PACKAGE_EXPORT attribute_priv<advert::entry, task_base::Async>;
00199 template struct SAGA_ADVERT_PACKAGE_EXPORT attribute_priv<advert::entry, task_base::Task>;
00200
00201 template struct SAGA_ADVERT_PACKAGE_EXPORT attribute_sync<advert::entry>;
00202 }
00203
00205 }
00206
00207 #endif
00208