/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package CSP_CREATOR; import LOGIC.Channel; import LOGIC.Contract; import LOGIC.Instance; import LOGIC.ObjectList; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author sarah */ public class CreatorInstance { private Instance instance; private Contract contract; private String IOprocessInstantiation = ""; private String include = ""; private String behavior = ""; private String declarate = ""; private ObjectList obl; private CreatorTypesAndChannels typechannel; private CreatorIOProcess iop; public CreatorInstance(Instance i, ObjectList ob) { instance = i; contract = instance.getContrato(); obl = ob; typechannel = new CreatorTypesAndChannels(ob); typechannel.creatorTypesChannels(); iop = new CreatorIOProcess(i); iop.creatorIOProcess(); } public void CSPCreatorInstance() { declarate = declarate + typechannel.getTypeChannel(); for (int i = 0; i < obl.getContractList().size(); i++) { behavior = behavior + "\n" + obl.getContractList().get(i).getBehavior(); } for (int i = 0; i < instance.getChannel().size(); i++) { //chama o método que cria o csp dos canais que estão associados ao contrato recebido channelInstanciation(instance.getChannel().get(i)); } functionrename(); functionGetChannelI(); functioninputI(); functionoutputI(); IOprocessInstantiation = IOprocessInstantiation + iop.getIoprocess(); include = "include \"sequence_aux.csp\" \ninclude \"function_aux.csp\" \n" + "include \"auxiliar.csp\" \ninclude \"rules.csp\""; FileWriter ioprocess = null; try { ioprocess = new FileWriter(new File("cspFiles/"+instance.getName()+".csp")); PrintWriter p = new PrintWriter(ioprocess); p.flush(); p.write(include + "\n\n" + declarate + "\n\n" + behavior + "\n\n" + IOprocessInstantiation); ioprocess.close(); p.close(); } catch (IOException ex) { Logger.getLogger(instance.getName()).log(Level.SEVERE, null, ex); } } public void functionrename() { //rename IOprocessInstantiation = IOprocessInstantiation + "\n\nRenameContract(i) = " + contract.getName() + " [["; for (int i = 0; i < contract.getChannel().size(); i++) { if (i == contract.getChannel().size() - 1) { IOprocessInstantiation = IOprocessInstantiation + contract.getChannel().get(i).getName() + " <- " + instance.getChannel().get(i).getName(); } else { IOprocessInstantiation = IOprocessInstantiation + contract.getChannel().get(i).getName() + " <- " + instance.getChannel().get(i).getName() + ","; } } IOprocessInstantiation = IOprocessInstantiation + "]] \n"; IOprocessInstantiation = IOprocessInstantiation + "Inst_" + instance.getName() + " = <"; for (int i = 0; i < contract.getChannel().size(); i++) { if (i == contract.getChannel().size() - 1) { IOprocessInstantiation = IOprocessInstantiation + "(" + contract.getChannel().get(i).getName() + "," + instance.getChannel().get(i).getName() + ")"; } else { IOprocessInstantiation = IOprocessInstantiation + "(" + contract.getChannel().get(i).getName() + "," + instance.getChannel().get(i).getName() + "),"; } } IOprocessInstantiation = IOprocessInstantiation + "> \n"; IOprocessInstantiation = IOprocessInstantiation + instance.getName() + " = rename(" + contract.getName() + ", Inst_" + instance.getName() + ") \n\n"; } public void functionGetChannelI() { //channels IOprocessInstantiation = IOprocessInstantiation + "\nGET_CHANNELS(P) ="; IOprocessInstantiation = IOprocessInstantiation + "\n \t let f ="; IOprocessInstantiation = IOprocessInstantiation + "\n \t < \n \t (" + instance.getName() + ", { "; IOprocessInstantiation = IOprocessInstantiation + "\n"; for (int i = 0; i < instance.getChannel().size(); i++) { if (i == instance.getChannel().size() - 1) { IOprocessInstantiation = IOprocessInstantiation + instance.getChannel().get(i).getName(); } else { IOprocessInstantiation = IOprocessInstantiation + instance.getChannel().get(i).getName() + ","; } } IOprocessInstantiation = IOprocessInstantiation + " }) \n \t > \n"; IOprocessInstantiation = IOprocessInstantiation + "\n \t within apply(f,P )"; } public void functioninputI() { //função inputs IOprocessInstantiation = IOprocessInstantiation + "\n"; // verificação para o contrato IOprocessInstantiation = IOprocessInstantiation + "\ninputs(P) = "; IOprocessInstantiation = IOprocessInstantiation + "\n \t let f = \n"; IOprocessInstantiation = IOprocessInstantiation + "\n \t < \n ( " + instance.getName() + ", {| "; // coloca todos os canais de in associado com seus tipos. ex: {|c.1, c.2|} for (int i = 0; i < instance.getIn().size(); i++) { if (i == instance.getIn().size() - 1) { IOprocessInstantiation = IOprocessInstantiation + instance.getIn().get(i).getEvento(); } else { IOprocessInstantiation = IOprocessInstantiation + instance.getIn().get(i).getEvento() + ", "; } } IOprocessInstantiation = IOprocessInstantiation + " |}) \n \t > \n"; IOprocessInstantiation = IOprocessInstantiation + "\n \t within apply(f, P )"; IOprocessInstantiation = IOprocessInstantiation + "\n"; } public void functionoutputI() { //função outputs IOprocessInstantiation = IOprocessInstantiation + "\noutputs(P) = "; IOprocessInstantiation = IOprocessInstantiation + "\n \t let f ="; IOprocessInstantiation = IOprocessInstantiation + "\n \t < \n ( " + instance.getName() + ", {| "; // coloca todos os canais de out associado com seus tipos. ex: {|c.1, c.2|} for (int i = 0; i < instance.getOut().size(); i++) { if (i == instance.getOut().size() - 1) { IOprocessInstantiation = IOprocessInstantiation + instance.getOut().get(i).getEvento(); } else { IOprocessInstantiation = IOprocessInstantiation + instance.getOut().get(i).getEvento() + ", "; } } IOprocessInstantiation = IOprocessInstantiation + " |}) \n \t >"; IOprocessInstantiation = IOprocessInstantiation + "\n \t within apply(f,P)\n"; } public void channelInstanciation(Channel Canal) { declarate = declarate + "\nchannel " + Canal.getName() + " : "; for (int i = 0; i < Canal.getType().size(); i++) { if (i == Canal.getType().size() - 1) { declarate = declarate + Canal.getType().get(i).getNome(); } else { declarate = declarate + Canal.getType().get(i).getNome() + "."; } } } }