package com.plectix.simulator.parser.abstractmodel.util;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import com.plectix.simulator.parser.IncompletesDisabledException;
import com.plectix.simulator.parser.SimulationDataFormatException;
import com.plectix.simulator.parser.abstractmodel.ModelAgent;
import com.plectix.simulator.parser.abstractmodel.ModelSolution;
import com.plectix.simulator.parser.abstractmodel.SolutionLineData;
import com.plectix.simulator.parser.abstractmodel.reader.ModelParseHelper;
public class ModelSolutionManager {
private final ModelSolution solution;
public ModelSolutionManager(ModelSolution solution) {
this.solution = solution;
}
public final void removeSubstance(String componentsRepresentation) {
Set<SolutionLineData> allMatchedLines = this.findAllLines(componentsRepresentation);
if (allMatchedLines != null) {
for (SolutionLineData line : allMatchedLines) {
solution.removeLineData(line);
}
}
}
private final Set<SolutionLineData> findAllLines(String componentsRepresentation) {
try {
Set<SolutionLineData> result = new LinkedHashSet<SolutionLineData>();
List<ModelAgent> agents = ModelParseHelper.readAgents(true, componentsRepresentation);
SolutionLineData newLine = new SolutionLineData(agents, -1);
for (SolutionLineData line : solution.getAgents()) {
if (this.solutionLinesAreEqual(line, newLine)) {
result.add(line);
}
}
return result;
} catch(Exception e) {
e.printStackTrace();
return null;
}
}
private final boolean solutionLinesAreEqual(SolutionLineData line1, SolutionLineData line2) {
return (line1 == null || line2 == null) ?
(line1 == null && line2 == null) :
(this.getSubstancePartOfLineData(line1).equals(this.getSubstancePartOfLineData(line2)));
}
private final String getSubstancePartOfLineData(SolutionLineData line) {
return line.toString().split("\\*")[1].trim();
}
}