package sushi.application.pages.eventrepository.model;
import java.util.ArrayList;
import java.util.List;
import sushi.application.pages.eventrepository.ProcessInstancePanel;
import sushi.process.SushiProcess;
import sushi.process.SushiProcessInstance;
/**
* This class filters {@link SushiProcessInstance}es in the {@link ProcessInstancePanel}.
* @author micha
*/
public class ProcessInstanceFilter extends AbstractFilter {
private static final long serialVersionUID = 1L;
/**
* Constructor for the class, which filters {@link SushiProcessInstance}s in the {@link ProcessInstancePanel}.
*/
public ProcessInstanceFilter(){
super();
}
/**
* Constructor for the class, which filters {@link SushiProcessInstance}s in the {@link ProcessInstancePanel}.
* @param filterCriteria
* @param filterCondition
* @param filterValue
*/
public ProcessInstanceFilter(String filterCriteria, String filterCondition, String filterValue){
super(filterCriteria, filterCondition, filterValue);
}
public boolean match(SushiProcessInstance processInstance) {
if(filterCriteria == null || filterCondition == null || filterValue == null){
return true;
}
if(filterCriteria.equals("ID")){
try{
if(filterCondition.equals("<")){
if(processInstance.getID() < Integer.parseInt(filterValue)) return true;
} else if(filterCondition.equals(">")){
if(processInstance.getID() > Integer.parseInt(filterValue)) return true;
} else {
if(processInstance.getID() == Integer.parseInt(filterValue)) return true;
}
}
catch(NumberFormatException e){
return false;
}
} else if(filterCriteria.equals("Process")){
List<SushiProcess> filterProcesses = SushiProcess.findByName(filterValue);
if(!filterProcesses.isEmpty()){
List<SushiProcessInstance> filteredProcessInstances = new ArrayList<SushiProcessInstance>();
for(SushiProcess process : filterProcesses){
filteredProcessInstances.addAll(process.getProcessInstances());
}
return filteredProcessInstances.contains(processInstance);
}
} else if(filterCriteria.equals("Process (ID)")){
try {
if(filterCondition.equals("<")){
if(processInstance.getProcess().getID() < Integer.parseInt(filterValue)) return true;
} else if(filterCondition.equals(">")){
if(processInstance.getProcess().getID() > Integer.parseInt(filterValue)) return true;
} else {
if(processInstance.getProcess().getID() == Integer.parseInt(filterValue)) return true;
}
}
catch(NumberFormatException e){
return false;
}
}
return false;
}
}