package CREATOR_CONDICTIONS_RULES;
import LOGIC.Instance;
import LOGIC.Protocols;
import java.util.LinkedList;
/**
*
* @author sarah
*/
public class CreatorProtocol {
private String protocolo = "";
private LinkedList<Protocols> prot;
private LinkedList<Instance> instance;
private CreatorNamesOfProcessCSP creatName;
private LinkedList<String> pegarProtRIO;
private CreatorNamesOfProcessCSP creatNamePcsp;
private LinkedList<String> guardanomeProcessoProt_Imp;
private LinkedList<String> pegarDualProtRIO;
private LinkedList<String> pegarDualProt;
private String nomecanal = "";
private String eventoprotocol1 = "";
private String eventoprotocol2 = "";
public CreatorProtocol(LinkedList<Instance> i, LinkedList<Protocols> p) {
prot =new LinkedList<>();
prot.addAll(p);
instance = i;
creatName = new CreatorNamesOfProcessCSP(i, p);
pegarProtRIO = new LinkedList<>();
creatNamePcsp = new CreatorNamesOfProcessCSP(i, p);
guardanomeProcessoProt_Imp = new LinkedList<>();
pegarDualProtRIO = new LinkedList<>();
pegarDualProt = new LinkedList<>();
//pegando o nome do evento que passei por paramentro no protocolo
int pr1, pr2, pr3, pr4;
pr1 = p.get(0).getProtocol().indexOf("(");
pr2 = p.get(0).getProtocol().lastIndexOf(")");
eventoprotocol1 = p.get(0).getProtocol().substring(pr1 + 1, pr2);
pr3 = p.get(1).getProtocol().indexOf("(");
pr4 = p.get(1).getProtocol().lastIndexOf(")");
eventoprotocol2 = p.get(1).getProtocol().substring(pr3 + 1, pr4);
}
public String creatorProtocol_and_DualProtocol() {
creatoProtocol();
CreateDualProtocol();
CreateProtocolIMP_RIO();
CreateDual_ProtocolIMP_RIO();
return protocolo;
}
private void creatoProtocol() {
//protocoll
//PROT_IMP_CELL_1_write = PROT_CTRL(write)
for (int i = 0; i < prot.size(); i++) {
//se o canal tiver um "." substituo por "_"
nomecanal = prot.get(i).getCanal().getName().replace(".", "_");
if (prot.get(i).getProtocol().contains("=")) {
int st = prot.get(i).getProtocol().indexOf("=");
protocolo = protocolo + "PROT_IMP_"
+ instance.get(i).getName() + "_"
+ nomecanal;
protocolo = protocolo + " = "
+ prot.get(i).getProtocol().substring(st + 1, prot.get(i).getProtocol().length());
protocolo = protocolo + "\n\n";
} else {
protocolo = protocolo + "PROT_IMP_" + instance.get(i).getName() + "_"
+ nomecanal;
protocolo = protocolo + " = " + prot.get(i).getProtocol();
protocolo = protocolo + "\n\n";
}
}
protocolo = protocolo + "\n\n";
//renomeando protocolos
//protocolo = protocolo + "--renomeando protocolos \n\n";
//protocolo = protocolo + "PROT_IMP_" + instance.get(i).getName() + "_" + prot.get(i).getCanal().getName();
// protocolo = protocolo + " = " + prot.get(i).getProtocol().substring(st + 1, prot.get(i).getProtocol().length());
// protocolo = protocolo + "\n\n";
}
private void CreateDualProtocol() {
//dualProtocol
for (int i = 0; i < prot.size(); i++) {
//se o canal tiver um "." substituo por "_"
nomecanal = prot.get(i).getCanal().getName().replace(".", "_");
if (prot.get(i).getDualProtocol().contains("=")) {
int st = prot.get(i).getDualProtocol().indexOf("=");
protocolo = protocolo + "DUAL_PROT_IMP_" + instance.get(i).getName()
+ "_" + nomecanal;
protocolo = protocolo + " = "
+ prot.get(i).getDualProtocol().substring(st + 1, prot.get(i).getDualProtocol().length());
protocolo = protocolo + "\n\n";
} else {
protocolo = protocolo + "DUAL_PROT_IMP_" + instance.get(i).getName() + "_"
+ nomecanal;
protocolo = protocolo + " = " + prot.get(i).getDualProtocol();
protocolo = protocolo + "\n\n";
}
}
protocolo = protocolo + "\n\n";
}
private void CreateProtocolIMP_RIO() {
guardanomeProcessoProt_Imp = creatNamePcsp.CreatorProt_Name();
pegarProtRIO = creatNamePcsp.CreatorProt_RIO();
//String nomecanal1 = prot.get(0).getCanal().getName().replace(".","_");
//String nomecanal2 = prot.get(1).getCanal().getName().replace(".","_");
protocolo = protocolo + pegarProtRIO.get(0) + " = PROT_IMP_R("
+ guardanomeProcessoProt_Imp.get(0)
+ ",R_IO(" + instance.get(0).getName() + ","
+ eventoprotocol1 + ","
+ eventoprotocol2 + "))";
protocolo = protocolo + "\n\n";
protocolo = protocolo + pegarProtRIO.get(1) + " = PROT_IMP_R("
+ guardanomeProcessoProt_Imp.get(1)
+ ",R_IO(" + instance.get(1).getName() + ","
+ eventoprotocol2 + ","
+ eventoprotocol1 + "))";
protocolo = protocolo + "\n\n";
}
private void CreateDual_ProtocolIMP_RIO() {
pegarDualProtRIO = creatNamePcsp.CreatorDual_Prot_RIO();
pegarDualProt = creatNamePcsp.CreatorDual_Prot_Name();
protocolo = protocolo + pegarDualProtRIO.get(0)
+ " = DUAL_PROT_IMP_R(" + pegarDualProt.get(0)
+ ",R_IO(" + instance.get(0).getName() + ","
+ eventoprotocol1 + ","
+ eventoprotocol2 + "))";
protocolo = protocolo + "\n\n";
protocolo = protocolo + pegarDualProtRIO.get(1)
+ " = DUAL_PROT_IMP_R(" + pegarDualProt.get(1)
+ ",R_IO(" + instance.get(1).getName() + ","
+ eventoprotocol2 + ","
+ eventoprotocol1 + "))";
}
}