package com.griddynamics.jagger.dbapi.model.rules;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Rule {
private final Logger log = LoggerFactory.getLogger(Rule.class);
protected String id;
protected String displayName;
protected String rule = null;
protected By filterBy = By.ID;
public Rule() {}
public Rule(String id, String displayName, String rule) {
this.id = id;
this.displayName = displayName;
this.rule = rule;
}
public Rule(By filterBy, String id, String displayName, String rule) {
this.filterBy = filterBy;
this.id = id;
this.displayName = displayName;
this.rule = rule;
}
public String getId() {
return id;
}
public String getDisplayName() {
return displayName;
}
public String getRule() {
return rule;
}
public By getFilterBy() {
return filterBy;
}
protected <M extends Rule> List<M> sort(final By by, List<M> inputList) {
Collections.sort(inputList, (o1, o2) -> {
String param1 = "";
String param2 = "";
switch (by) {
case ID:
param1 = o1.getId();
param2 = o2.getId();
break;
case DISPLAY_NAME:
param1 = o1.getDisplayName();
param2 = o2.getDisplayName();
break;
default:
}
int res = String.CASE_INSENSITIVE_ORDER.compare(param1, param2);
return (res != 0) ? res : param1.compareTo(param2);
});
return inputList;
}
protected <M extends Rule> List<M> removeDuplicates(final By by, List<M> inputList) {
Set<String> params = new HashSet<>();
String param = "";
List<M> duplicates = new ArrayList<>();
for (M o : inputList) {
switch (by) {
case ID:
param = o.getId();
break;
case DISPLAY_NAME:
param = o.getDisplayName();
break;
default:
}
if (params.contains(param)) {
duplicates.add(o);
log.error("Rule with " + by + " '" + param + "' already exists. New rule will be ignored");
}
params.add(param);
}
inputList.removeAll(duplicates);
return inputList;
}
public enum By {
ID,
DISPLAY_NAME
}
}