/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package CSP_ANALYSE;
import LOGIC.Contract;
import LOGIC.Instance;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.LinkedList;
import javax.swing.JOptionPane;
/**
*
* @author sarah
*/
public class AnalyseRuleInterleave {
private ArrayList<FDRResult> rule;
private LinkedList<Instance> instance;
private String pegarErro = "";
private Contract c;
private ReadFileCSP rdf;
private ReturnMensageFDR mensagemF;
public AnalyseRuleInterleave(LinkedList<Instance> i) {
instance = i;
rule = new ArrayList<FDRResult>();
c = new Contract();
c.setName("RuleInterleaveOf" + i.get(0).getName() + "_" + i.get(1).getName());
rdf = new ReadFileCSP(c);
mensagemF = new ReturnMensageFDR(c);
}
public ArrayList<FDRResult> resultRule() {
rdf.saidaFDR();
// vai ler o arquivo saidaFDR.log verificando as condições de IOProcess
File pegarSaida = new File("fdrLog/" + c.getName() + "_saida_" + rdf.getTemp() + ".log");
if (!pegarSaida.exists()) {
System.exit(-1);
}
try {
BufferedReader pegarResultado = new BufferedReader(new FileReader(pegarSaida));
String line = "";
while ((line = pegarResultado.readLine()) != null) {
if (line == null) {
FDRResult retorno = new FDRResult();
retorno.setMensagem("O arquivo CSP está com erro");
retorno.setResultado(false);
rule.add(retorno);
} else if (line.equals("Checking STOP [T= RUN(inter(events(" + instance.get(0).getName() + "),events(" + instance.get(1).getName() + ")))")) {
line = pegarResultado.readLine();
if (line == null) {
FDRResult retorno = new FDRResult();
retorno.setMensagem("O arquivo CSP está com erro");
retorno.setResultado(false);
rule.add(retorno);
} else {
FDRResult retorno = new FDRResult();
if (line.equals("true") || line.equals("xtrue")) {
retorno.setMensagem("The Alphabets are disjont");
retorno.setResultado(true);
rule.add(retorno);
} else {
retorno.setMensagem("The Alphabets aren't disjont");
retorno.setResultado(false);
rule.add(retorno);
}
}
} else if (line.equals("Checking newComponent :[deadlock free[FD]]")) {
line = pegarResultado.readLine();
if (line == null) {
FDRResult retorno = new FDRResult();
retorno.setMensagem("O arquivo CSP está com erro");
retorno.setResultado(false);
rule.add(retorno);
} else {
FDRResult retorno = new FDRResult();
if (line.equals("true") || line.equals("xtrue")) {
retorno.setMensagem("The composition was successful (NO deadlock)");
retorno.setResultado(true);
rule.add(retorno);
} else {
retorno.setMensagem("The composition was not successful (is deadlock)");
retorno.setResultado(false);
rule.add(retorno);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "error occurred in verifying the composition");
}
//pegarErroSaida();
if(rule.size() == 0){
FDRResult retorno = new FDRResult();
retorno.setMensagem("O arquivo CSP está com erro");
retorno.setResultado(false);
rule.add(retorno);
}
rule.add(mensagemF.returnMensagefdr());
return rule;
}
}