Skip to content

Commit fc31b46

Browse files
authored
MainFilterGroup (#36)
* MainFilterGroup * Filter Group refactoring
1 parent 8fab2ea commit fc31b46

File tree

1 file changed

+45
-57
lines changed

1 file changed

+45
-57
lines changed

force-app/main/default/classes/SOQL.cls

Lines changed: 45 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public inherited sharing class SOQL implements Queryable {
2323

2424
public static FilterGroup FilterGroup { // A group to nest more filters
2525
get {
26-
return new FilterGroup(false);
26+
return new FilterGroup();
2727
}
2828
}
2929

@@ -559,12 +559,12 @@ public inherited sharing class SOQL implements Queryable {
559559
}
560560
}
561561

562-
public FilterGroup conditions {
562+
public MainFilterGroup conditions {
563563
get {
564564
if (clauses[4] == null) {
565-
clauses.set(4, new FilterGroup(true));
565+
clauses.set(4, new MainFilterGroup());
566566
}
567-
return (FilterGroup) clauses[4];
567+
return (MainFilterGroup) clauses[4];
568568
}
569569
}
570570

@@ -629,7 +629,7 @@ public inherited sharing class SOQL implements Queryable {
629629
soqlParts.add(clause.build());
630630
}
631631

632-
return String.join(new List<String>(soqlParts), ' ').trim();
632+
return String.join(soqlParts, ' ').trim();
633633
}
634634
}
635635

@@ -662,7 +662,7 @@ public inherited sharing class SOQL implements Queryable {
662662

663663
public void with(List<SObjectField> fields) {
664664
for (SObjectField field : fields) {
665-
queryFields.add(field.getDescribe().getName());
665+
with(field);
666666
}
667667
}
668668

@@ -855,16 +855,10 @@ public inherited sharing class SOQL implements Queryable {
855855
Boolean isEmpty();
856856
}
857857

858-
public class FilterGroup implements FilterClause, QueryClause, SoqlFiltersGroup {
858+
public virtual class FilterGroup implements FilterClause, QueryClause, SoqlFiltersGroup {
859859
private List<FilterClause> queryConditions = new List<FilterClause>();
860-
private String stringConditions;
861-
private String order = '';
860+
private String order;
862861
private String connector = 'AND';
863-
private Boolean isMain = false;
864-
865-
public FilterGroup(Boolean isMain) {
866-
this.isMain = isMain;
867-
}
868862

869863
public FilterGroup add(FilterClause condition) {
870864
if (condition.isEmpty()) {
@@ -874,13 +868,6 @@ public inherited sharing class SOQL implements Queryable {
874868
return this;
875869
}
876870

877-
public void evaluate(String conditions) {
878-
if (String.isEmpty(conditions)) {
879-
return;
880-
}
881-
stringConditions = String.escapeSingleQuotes(conditions);
882-
}
883-
884871
public FilterGroup anyConditionMatching() {
885872
connector = 'OR';
886873
return this;
@@ -895,68 +882,69 @@ public inherited sharing class SOQL implements Queryable {
895882
return queryConditions.isEmpty();
896883
}
897884

898-
public String build() {
899-
if (String.isNotEmpty(stringConditions)) {
900-
return 'WHERE ' + stringConditions;
901-
}
902-
903-
if (String.isEmpty(order)) {
904-
setDefaultOrder();
905-
}
906-
907-
String conditions = buildNested();
908-
909-
if (String.isEmpty(conditions)) {
910-
return '';
911-
}
885+
public virtual String build() {
886+
return '(' + buildNested() + ')';
887+
}
912888

913-
if (isMain) {
914-
return 'WHERE ' + conditions;
889+
private void setDefaultOrderWhenEmpty() {
890+
if (String.isNotEmpty(order)) {
891+
return;
915892
}
916893

917-
return conditions;
918-
}
919-
920-
private void setDefaultOrder() {
921894
List<String> defaultOrder = new List<String>();
922895

923-
for (Integer i = 0; i < queryConditions.size(); i++) {
924-
defaultOrder.add(String.valueOf(i + 1));
896+
for (Integer i = 1; i <= queryConditions.size(); i++) {
897+
defaultOrder.add(String.valueOf(i));
925898
}
926899

927900
order = String.join(defaultOrder, ' ' + connector + ' '); // e.g (1 AND 2 AND 3)
928901
}
929902

930903
public String buildNested() {
931-
String conditions = addSpecialCharactersToOrder(order); // e.g (*1* AND (*2* OR *3*))
904+
setDefaultOrderWhenEmpty();
905+
906+
String conditions = applySpecialCharactersToOrder(); // e.g (*1* AND (*2* OR *3*))
932907

933908
for (Integer i = 0; i < queryConditions.size(); i++) {
934909
conditions = conditions.replace(
935-
addSpecialCharacters(String.valueOf(i + 1)), // e.g *1*
910+
conditionNumberWithSpecialCharacters(i + 1), // e.g *1*
936911
queryConditions.get(i).build()
937912
);
938913
}
939914

940915
return conditions;
941916
}
942917

943-
private String addSpecialCharactersToOrder(String order) {
944-
String formattedOrder = order;
945-
946-
for (Integer i = 0; i < queryConditions.size(); i++) {
947-
String conditionNumber = String.valueOf(i + 1);
948-
formattedOrder = formattedOrder.replace(conditionNumber, addSpecialCharacters(conditionNumber));
918+
private String applySpecialCharactersToOrder() {
919+
for (Integer i = 1; i <= queryConditions.size(); i++) {
920+
order = order.replace(String.valueOf(i), conditionNumberWithSpecialCharacters(i));
949921
}
950922

951-
if (isMain) {
952-
return formattedOrder;
953-
}
923+
return order; // e.g (*1* AND (*2* OR *3*))
924+
}
925+
926+
private String conditionNumberWithSpecialCharacters(Integer conditionNumber) {
927+
return '*' + conditionNumber + '*';
928+
}
929+
}
954930

955-
return '(' + formattedOrder + ')'; // e.g (*1* AND (*2* OR *3*))
931+
public class MainFilterGroup extends FilterGroup {
932+
private String stringConditions;
933+
934+
public void evaluate(String conditions) {
935+
stringConditions = String.escapeSingleQuotes(conditions);
956936
}
957937

958-
private String addSpecialCharacters(String condition) {
959-
return '*' + condition.trim() + '*';
938+
public override String build() {
939+
if (String.isNotEmpty(stringConditions)) {
940+
return 'WHERE ' + stringConditions;
941+
}
942+
943+
if (isEmpty()) {
944+
return '';
945+
}
946+
947+
return 'WHERE ' + buildNested();
960948
}
961949
}
962950

0 commit comments

Comments
 (0)