I need to generate random .xml instances from an .als in my program. I managed to do that by running alloy in background (invisible JFrame) and calling the doOpen, doExecuteLatest and doShowLatest functions. But having to wait alloy to start every time I run my code is a pain. I think it would be more efficient if I simply used the alloy code section that does this procedure (I imagine that would be kodkod). Does anyone know how to do that? I found alloy's code to be pretty confusing...
You can use the Alloy API. Generating an instance and writing it as an XML file can be easily done following those steps:
Read the alloy model from its source file.
model = CompUtil.parseEverything_fromFile(null, null, "yourmodel.als");
Get the command to execute. for example :
Command cmd=model.getAllCommands().get(0);
Execute the model using the command obtained in step 2
A4Solution solution= TranslateAlloyToKodkod.execute_command(null, model.getAllReachableSigs(), cmd, new A4Options());
Write the solution generated in step 3
solution.writeXML("path/to/your.xml");
Examples can be found in the edu.mit.csail.sdg.alloy4whole package of the Alloy jar file
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With