SerializableJsonFactory.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * Author: Patrick-Christopher Mattulat
  3. * Company: Lynar Studios
  4. * E-Mail: webmaster@lynarstudios.com
  5. * Created: 2021-04-24
  6. * Changed: 2021-07-12
  7. *
  8. * */
  9. #include <ls_std/factory/serialization/json/SerializableJsonFactory.hpp>
  10. #include <ls_std/boxing/Float.hpp>
  11. #include <ls_std/boxing/Integer.hpp>
  12. #include <ls_std/boxing/Long.hpp>
  13. #include <ls_std/boxing/String.hpp>
  14. #include <ls_std/factory/serialization/json/boxing/SerializableJsonFloatFactory.hpp>
  15. #include <ls_std/factory/serialization/json/boxing/SerializableJsonIntegerFactory.hpp>
  16. #include <ls_std/factory/serialization/json/boxing/SerializableJsonLongFactory.hpp>
  17. #include <ls_std/factory/serialization/json/boxing/SerializableJsonStringFactory.hpp>
  18. #include <ls_std/exception/IllegalArgumentException.hpp>
  19. #include <ls_std/exception/NullPointerException.hpp>
  20. ls_std::SerializableJsonFactory::SerializableJsonFactory() : ls_std::Class("SerializableJsonFactory")
  21. {
  22. this->_init();
  23. }
  24. bool ls_std::SerializableJsonFactory::addFactory(const std::pair<std::string, std::shared_ptr<ls_std::IFactory>> &_factoryInsertion)
  25. {
  26. bool factoryAdded{};
  27. if (_factoryInsertion.first.empty())
  28. {
  29. throw ls_std::IllegalArgumentException{};
  30. }
  31. if (_factoryInsertion.second == nullptr)
  32. {
  33. throw ls_std::NullPointerException{};
  34. }
  35. if (!this->_hasFactory(_factoryInsertion.first))
  36. {
  37. factoryAdded = this->factories.insert(_factoryInsertion).second;
  38. }
  39. return factoryAdded;
  40. }
  41. std::shared_ptr<ls_std::Class> ls_std::SerializableJsonFactory::build(const std::string &_relatedObjectName)
  42. {
  43. std::shared_ptr<ls_std::Class> requestedBuiltObject{};
  44. if (this->_hasFactory(_relatedObjectName))
  45. {
  46. requestedBuiltObject = this->factories.at(_relatedObjectName)->build();
  47. }
  48. return requestedBuiltObject;
  49. }
  50. bool ls_std::SerializableJsonFactory::clear()
  51. {
  52. this->factories.clear();
  53. return factories.empty();
  54. }
  55. bool ls_std::SerializableJsonFactory::hasFactory(const std::string &_relatedObjectName)
  56. {
  57. return this->_hasFactory(_relatedObjectName);
  58. }
  59. bool ls_std::SerializableJsonFactory::removeFactory(const std::string &_relatedObjectName)
  60. {
  61. bool wasRemoved{};
  62. if (this->_hasFactory(_relatedObjectName))
  63. {
  64. this->factories.erase(_relatedObjectName);
  65. wasRemoved = !this->_hasFactory(_relatedObjectName);
  66. }
  67. return wasRemoved;
  68. }
  69. bool ls_std::SerializableJsonFactory::_hasFactory(const std::string &_relatedObjectName)
  70. {
  71. return this->factories.find(_relatedObjectName) != this->factories.end();
  72. }
  73. void ls_std::SerializableJsonFactory::_init()
  74. {
  75. this->factories.insert({ls_std::Float{}.getClassName(), std::make_shared<ls_std::SerializableJsonFloatFactory>()});
  76. this->factories.insert({ls_std::Integer{}.getClassName(), std::make_shared<ls_std::SerializableJsonIntegerFactory>()});
  77. this->factories.insert({ls_std::Long{}.getClassName(), std::make_shared<ls_std::SerializableJsonLongFactory>()});
  78. this->factories.insert({ls_std::String{}.getClassName(), std::make_shared<ls_std::SerializableJsonStringFactory>()});
  79. }