Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Alloy - Generate .xml instance from .als

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...

like image 531
mcopo Avatar asked Mar 21 '23 07:03

mcopo


1 Answers

You can use the Alloy API. Generating an instance and writing it as an XML file can be easily done following those steps:

  1. Read the alloy model from its source file.

    model = CompUtil.parseEverything_fromFile(null, null, "yourmodel.als");

  2. Get the command to execute. for example :

    Command cmd=model.getAllCommands().get(0);

  3. Execute the model using the command obtained in step 2

    A4Solution solution= TranslateAlloyToKodkod.execute_command(null, model.getAllReachableSigs(), cmd, new A4Options());

  4. 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

like image 141
Loïc Gammaitoni Avatar answered Mar 31 '23 12:03

Loïc Gammaitoni