package im.actor.sdk.controllers.pickers.file.util;
import im.actor.sdk.controllers.pickers.file.items.ExplorerItem;
import java.util.ArrayList;
/**
* Created by kiolt_000 on 07/10/2014.
*/
public class FileSearchOrderComparator extends FileOrderComparator {
private final String strongRegex;
private final String mostStrongRegex;
private final String searchQuery;
public FileSearchOrderComparator(String searchQuery) {
this.searchQuery = searchQuery;
String tempRegex = searchQuery.toLowerCase();
String[] splitedTempRegex = tempRegex.split("\\s+");
ArrayList<String> filtered = new ArrayList<String>();
for (String s : splitedTempRegex) {
if (s != null && !s.equals("")) {
filtered.add(s);
}
}
tempRegex = filtered.toString()
.replaceAll("\\[", "(").replaceAll("]", ")")
.replaceAll(",", "|")
.replaceAll("\\s+", "")
.replaceAll("\\.", "\\\\.");
this.strongRegex = "(((.*)(\\s+))|(^))" + tempRegex + ".*"; // strong regex
this.mostStrongRegex = "^" + tempRegex + ".*"; // THE MOST STRONG REGEX CAREFUL!!1
}
@Override
protected int compareFiles(ExplorerItem explorerItem, ExplorerItem explorerItem2) {
boolean firstStronk = false;
boolean secondStronk = false;
String firstTitle = explorerItem.getTitle().toLowerCase();
String secondTitle = explorerItem2.getTitle().toLowerCase();
if (searchQuery.length() < 3) {
return (firstTitle.compareTo(secondTitle));
}
if (firstTitle.matches(strongRegex)) {
firstStronk = true;
}
if (secondTitle.matches(strongRegex)) {
secondStronk = true;
}
if (firstStronk && secondStronk) {
boolean firstVeryStronk = false;
boolean secondVeryStronk = false;
if (firstTitle.matches(mostStrongRegex)) {
firstVeryStronk = true;
}
if (secondTitle.matches(mostStrongRegex)) {
secondVeryStronk = true;
}
if (firstVeryStronk && secondVeryStronk) {
return (firstTitle.compareTo(secondTitle));
}
if (!firstVeryStronk && !secondVeryStronk) {
return (firstTitle.compareTo(secondTitle));
}
return firstVeryStronk ? -1 : 1;
}
if (!firstStronk && !secondStronk) {
return (firstTitle.compareTo(secondTitle));
}
return firstStronk ? -1 : 1;
}
}