std::list<field_definition> instantiator::instantiate_global_template(const field_definition& fd) const { std::list<field_definition> r; for (const auto pair : facet_names_by_model_name_) { const auto model_name(pair.first); if (!fd.ownership_hierarchy().model_name().empty() && fd.ownership_hierarchy().model_name() != model_name) continue; auto instance_fd(fd); instance_fd.definition_type(field_definition_types::instance); instance_fd.name().qualified(model_name + "." + fd.name().simple()); instance_fd.ownership_hierarchy().model_name(model_name); instance_fd.ownership_hierarchy().facet_name(empty); instance_fd.ownership_hierarchy().formatter_name(empty); instance_fd.ownership_hierarchy().formatter_group_name(empty); r.push_back(instance_fd); const auto& facet_names(pair.second); for (const auto facet_name : facet_names) { auto instance_fd(fd); instance_fd.definition_type(field_definition_types::instance); instance_fd.name().qualified(facet_name + "." + fd.name().simple()); instance_fd.ownership_hierarchy().model_name(model_name); instance_fd.ownership_hierarchy().facet_name(facet_name); instance_fd.ownership_hierarchy().formatter_name(empty); instance_fd.ownership_hierarchy().formatter_group_name(empty); r.push_back(instance_fd); } } for (const auto oh : ownership_hierarchy_) { if (!fd.ownership_hierarchy().model_name().empty() && fd.ownership_hierarchy().model_name() != oh.model_name()) continue; auto instance_fd(fd); instance_fd.definition_type(field_definition_types::instance); const auto fn(oh.formatter_name()); instance_fd.name().qualified(fn + "." + fd.name().simple()); instance_fd.ownership_hierarchy(oh); r.push_back(instance_fd); } return r; }
std::size_t field_definition_hasher::hash(const field_definition& v) { std::size_t seed(0); combine(seed, v.name()); combine(seed, v.value_type()); combine(seed, v.scope()); combine(seed, v.ownership_hierarchy()); combine(seed, hash_boost_shared_ptr_dogen_dynamic_value(v.default_value())); combine(seed, v.definition_type()); return seed; }
void mock_repository_factory::add_field_definition( const field_definition& fd, repository& rp) const { const auto n(fd.name().qualified()); const auto pair(std::make_pair(n, fd)); const auto result(rp.field_definitions_by_name().insert(pair)); if (!result.second) { BOOST_LOG_SEV(lg, error) << duplicate_qualified_name << n; BOOST_THROW_EXCEPTION(workflow_error(duplicate_qualified_name + n)); } const auto& oh(fd.ownership_hierarchy()); rp.field_definitions_by_facet_name()[oh.facet_name()].push_back(fd); rp.field_definitions_by_formatter_name()[oh.formatter_name()] .push_back(fd); }
std::list<field_definition> instantiator::instantiate_formatter_template(const field_definition& fd) const { std::list<field_definition> r; for (const auto oh : ownership_hierarchy_) { if (!fd.ownership_hierarchy().model_name().empty() && fd.ownership_hierarchy().model_name() != oh.model_name()) continue; if (!fd.ownership_hierarchy().facet_name().empty() && fd.ownership_hierarchy().facet_name() != oh.facet_name()) continue; auto instance_fd(fd); instance_fd.definition_type(field_definition_types::instance); const auto fn(oh.formatter_name()); instance_fd.name().qualified(fn + "." + fd.name().simple()); instance_fd.ownership_hierarchy(oh); r.push_back(instance_fd); } return r; }
void instantiator::validate(const field_definition& fd) const { const auto sn(fd.name().simple()); if (fd.name().simple().empty()) { BOOST_LOG_SEV(lg, error) << empty_simple_name; BOOST_THROW_EXCEPTION(instantiation_error(empty_simple_name)); } if (!is_instantiable(fd)) { BOOST_LOG_SEV(lg, error) << field_not_instantiable << sn; BOOST_THROW_EXCEPTION(instantiation_error(field_not_instantiable + sn)); } if (!fd.name().qualified().empty()) { BOOST_LOG_SEV(lg, error) << qualified_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(qualified_name_not_empty + sn)); } if (fd.definition_type() == field_definition_types::global_template) { if (!fd.ownership_hierarchy().facet_name().empty()) { BOOST_LOG_SEV(lg, error) << facet_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(facet_name_not_empty + sn)); } if (!fd.ownership_hierarchy().formatter_name().empty()) { BOOST_LOG_SEV(lg, error) << formatter_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(formatter_name_not_empty + sn)); } if (!fd.ownership_hierarchy().formatter_group_name().empty()) { BOOST_LOG_SEV(lg, error) << formatter_group_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(formatter_group_not_empty + sn)); } } if (fd.definition_type() == field_definition_types::facet_template) { if (!fd.ownership_hierarchy().facet_name().empty()) { BOOST_LOG_SEV(lg, error) << facet_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(facet_name_not_empty + sn)); } if (!fd.ownership_hierarchy().formatter_group_name().empty()) { BOOST_LOG_SEV(lg, error) << formatter_group_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(formatter_group_not_empty + sn)); } if (!fd.ownership_hierarchy().formatter_name().empty()) { BOOST_LOG_SEV(lg, error) << formatter_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(formatter_name_not_empty + sn)); } } if (fd.definition_type() == field_definition_types::formatter_template) { if (!fd.ownership_hierarchy().formatter_name().empty()) { BOOST_LOG_SEV(lg, error) << formatter_name_not_empty << sn; BOOST_THROW_EXCEPTION( instantiation_error(formatter_name_not_empty + sn)); } } }