ItemFilter.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #pragma once
  2. #include <Array.h>
  3. #include <functional>
  4. #include <ReferenceCounter.h>
  5. #include <TypeRegistry.h>
  6. class Item;
  7. class ItemType;
  8. class ItemSlot;
  9. class UIMLItemFilterBuilder;
  10. class ItemFilter : public virtual Framework::ReferenceCounter
  11. {
  12. public:
  13. ItemFilter();
  14. virtual bool matchItem(const Item* zItem) const;
  15. virtual bool matchSourceSlot(ItemSlot* zSlot) const;
  16. virtual bool matchTargetSlot(ItemSlot* zSlot) const;
  17. virtual UIMLItemFilterBuilder* getUIML() const = 0;
  18. };
  19. class CombinedItemFilter : public ItemFilter
  20. {
  21. private:
  22. Framework::RCArray<ItemFilter> filters;
  23. std::function<bool(bool, bool)> op;
  24. public:
  25. CombinedItemFilter();
  26. CombinedItemFilter(Framework::RCArray<ItemFilter> filters,
  27. std::function<bool(bool, bool)> op);
  28. bool matchItem(const Item* zItem) const override;
  29. bool matchSourceSlot(ItemSlot* zSlot) const override;
  30. bool matchTargetSlot(ItemSlot* zSlot) const override;
  31. UIMLItemFilterBuilder* getUIML() const override;
  32. void addFilter(ItemFilter* filter);
  33. const Framework::RCArray<ItemFilter>& getFilters() const;
  34. void setOp(std::function<bool(bool, bool)> op);
  35. std::function<bool(bool, bool)> getOp() const;
  36. };
  37. class CombinedItemFilterFactory
  38. : public SubTypeFactory<ItemFilter, CombinedItemFilter>
  39. {
  40. public:
  41. CombinedItemFilterFactory();
  42. CombinedItemFilter* fromJson(
  43. Framework::JSON::JSONObject* zJson) const override;
  44. Framework::JSON::JSONObject* toJsonObject(
  45. CombinedItemFilter* zObject) const override;
  46. JSONObjectValidationBuilder* addToValidator(
  47. JSONObjectValidationBuilder* builder) const override;
  48. const char* getTypeToken() const override;
  49. };
  50. class AnyItemFilter : public ItemFilter
  51. {
  52. public:
  53. AnyItemFilter();
  54. bool matchItem(const Item* zItem) const override;
  55. UIMLItemFilterBuilder* getUIML() const override;
  56. };
  57. class AnyItemFilterFactory : public SubTypeFactory<ItemFilter, AnyItemFilter>
  58. {
  59. public:
  60. AnyItemFilterFactory();
  61. AnyItemFilter* fromJson(Framework::JSON::JSONObject* zJson) const override;
  62. Framework::JSON::JSONObject* toJsonObject(
  63. AnyItemFilter* zObject) const override;
  64. JSONObjectValidationBuilder* addToValidator(
  65. JSONObjectValidationBuilder* builder) const override;
  66. const char* getTypeToken() const override;
  67. };
  68. class TypeItemFilter : public ItemFilter
  69. {
  70. private:
  71. const ItemType* type;
  72. public:
  73. TypeItemFilter();
  74. bool matchItem(const Item* zItem) const override;
  75. UIMLItemFilterBuilder* getUIML() const override;
  76. void setType(const ItemType* type);
  77. const ItemType* zType() const;
  78. };
  79. class TypeItemFilterFactory : public SubTypeFactory<ItemFilter, TypeItemFilter>
  80. {
  81. public:
  82. TypeItemFilterFactory();
  83. TypeItemFilter* fromJson(Framework::JSON::JSONObject* zJson) const override;
  84. Framework::JSON::JSONObject* toJsonObject(
  85. TypeItemFilter* zObject) const override;
  86. JSONObjectValidationBuilder* addToValidator(
  87. JSONObjectValidationBuilder* builder) const override;
  88. const char* getTypeToken() const override;
  89. };
  90. class SpecificSlotFilter : public ItemFilter
  91. {
  92. private:
  93. int sourceSlotId;
  94. int targetSlotId;
  95. public:
  96. SpecificSlotFilter(int sourceSlotId, int targetSlotId);
  97. bool matchSourceSlot(ItemSlot* zSlot) const override;
  98. bool matchTargetSlot(ItemSlot* zSlot) const override;
  99. UIMLItemFilterBuilder* getUIML() const override;
  100. };
  101. class SourceSlotBlacklistFilter : public ItemFilter
  102. {
  103. private:
  104. Framework::Array<int> blackList;
  105. public:
  106. SourceSlotBlacklistFilter();
  107. void addBlackListSlotId(int id);
  108. bool matchSourceSlot(ItemSlot* zSlot) const override;
  109. bool matchTargetSlot(ItemSlot* zSlot) const override;
  110. UIMLItemFilterBuilder* getUIML() const override;
  111. };
  112. class TargetSlotBlacklistFilter : public ItemFilter
  113. {
  114. private:
  115. Framework::Array<int> blackList;
  116. public:
  117. TargetSlotBlacklistFilter();
  118. void addBlackListSlotId(int id);
  119. bool matchSourceSlot(ItemSlot* zSlot) const override;
  120. bool matchTargetSlot(ItemSlot* zSlot) const override;
  121. UIMLItemFilterBuilder* getUIML() const override;
  122. };
  123. class GroupItemFilter : public ItemFilter
  124. {
  125. private:
  126. Framework::RCArray<Framework::Text> groups;
  127. public:
  128. GroupItemFilter();
  129. bool matchItem(const Item* zItem) const override;
  130. UIMLItemFilterBuilder* getUIML() const override;
  131. void addGroup(const Framework::Text group);
  132. const Framework::RCArray<Framework::Text>& getGroups() const;
  133. };
  134. class GroupItemFilterFactory
  135. : public SubTypeFactory<ItemFilter, GroupItemFilter>
  136. {
  137. public:
  138. GroupItemFilterFactory();
  139. GroupItemFilter* fromJson(
  140. Framework::JSON::JSONObject* zJson) const override;
  141. Framework::JSON::JSONObject* toJsonObject(
  142. GroupItemFilter* zObject) const override;
  143. JSONObjectValidationBuilder* addToValidator(
  144. JSONObjectValidationBuilder* builder) const override;
  145. const char* getTypeToken() const override;
  146. };
  147. class TargetSlotNameItemFilter : public ItemFilter
  148. {
  149. private:
  150. Framework::Text slotName;
  151. public:
  152. TargetSlotNameItemFilter(const Framework::Text& slotName);
  153. bool matchSourceSlot(ItemSlot* zSlot) const override;
  154. bool matchTargetSlot(ItemSlot* zSlot) const override;
  155. UIMLItemFilterBuilder* getUIML() const override;
  156. };
  157. class SourceSlotNameItemFilter : public ItemFilter
  158. {
  159. private:
  160. Framework::Text slotName;
  161. public:
  162. SourceSlotNameItemFilter(const Framework::Text& slotName);
  163. bool matchSourceSlot(ItemSlot* zSlot) const override;
  164. bool matchTargetSlot(ItemSlot* zSlot) const override;
  165. UIMLItemFilterBuilder* getUIML() const override;
  166. };