/src/topology/physicalHostFactory.cpp

https://github.com/deltaforge/nebu-common-cpp · C++ · 55 lines · 42 code · 11 blank · 2 comment · 2 complexity · bfff1c01d19cf1134500f8f66892d58a MD5 · raw file

  1. #include "nebu/topology/physicalHostFactory.h"
  2. #include "nebu/topology/physicalLocalStoreFactory.h"
  3. #include "nebu/util/xmlUtil.h"
  4. // Using declarations - tinyxml2
  5. using tinyxml2::XMLAttribute;
  6. using tinyxml2::XMLElement;
  7. // Using declarations - standard library
  8. using std::make_shared;
  9. using std::shared_ptr;
  10. using std::string;
  11. namespace nebu
  12. {
  13. namespace common
  14. {
  15. shared_ptr<PhysicalHostFactory> PhysicalHostFactory::instance;
  16. const string PhysicalHostFactory::ROOT_NAME = "host";
  17. const string PhysicalHostFactory::ATTR_ID = "id";
  18. shared_ptr<PhysicalHostFactory> PhysicalHostFactory::getInstance()
  19. {
  20. if (!PhysicalHostFactory::instance) {
  21. PhysicalHostFactory::setInstance(make_shared<PhysicalHostFactory>());
  22. }
  23. return PhysicalHostFactory::instance;
  24. }
  25. void PhysicalHostFactory::setInstance(std::shared_ptr<PhysicalHostFactory> instance)
  26. {
  27. PhysicalHostFactory::instance = instance;
  28. }
  29. Traits<PhysicalHost>::Ptr PhysicalHostFactory::parseXML(const tinyxml2::XMLElement *elem) const
  30. {
  31. XMLUtil::verifyElementName(elem, PhysicalHostFactory::ROOT_NAME);
  32. const XMLAttribute *idAttr = XMLUtil::findAttribute(elem, PhysicalHostFactory::ATTR_ID, XMLUtil::MANDATORY);
  33. Traits<PhysicalHost>::Ptr host = Traits<PhysicalHost>::MakePtr(idAttr->Value());
  34. const XMLElement *localStoreElem = XMLUtil::findChildElement(elem, PhysicalLocalStoreFactory::ROOT_NAME);
  35. while (localStoreElem) {
  36. Traits<PhysicalLocalStore>::Ptr localStore = PhysicalLocalStoreFactory::getInstance()->parseXML(localStoreElem);
  37. host->addLocalStore(localStore);
  38. localStore->setParent(host.get());
  39. localStoreElem = XMLUtil::findNextSibling(localStoreElem, PhysicalLocalStoreFactory::ROOT_NAME);
  40. }
  41. return host;
  42. }
  43. }
  44. }