2013-12-13 3 views
3

Мне нужно создать случайные экземпляры .xml из .als в моей программе. Мне удалось это сделать, запустив сплав в фоновом режиме (невидимый JFrame) и вызвав функции doOpen, doExecuteLatest и doShowLatest. Но, чтобы ждать, когда сплав начнется каждый раз, когда я запускаю свой код, это боль. Я думаю, что было бы более эффективно, если бы я просто использовал раздел кода сплава, который выполняет эту процедуру (я предполагаю, что это будет код). Кто-нибудь знает, как это сделать? Я нашел код сплава довольно запутанным ...Сплав - генерировать экземпляр .xml из .als

ответ

6

Вы можете использовать API сплавов. Создание экземпляра и записи его в файл XML можно легко сделать после этих шагов:

  1. Прочитайте модель сплава от его исходного файла.

    модель = CompUtil.parseEverything_fromFile (NULL, NULL, " yourmodel.als");

  2. Получить команду для выполнения. например:

    Команда cmd = model.getAllCommands(). get (0);

  3. Выполнить модель с помощью команды, полученной на стадии 2

    раствор A4Solution = TranslateAlloyToKodkod.execute_command (нуль, model.getAllReachableSigs(), CMD, новые A4Options());

  4. Написать решение сгенерированного на шаге 3

solution.writeXML ("путь/к/your.xml");

Примеры можно найти в edu.mit.csail.sdg.alloy4whole пакет из баночки файла сплава

+0

Вы не имеете ни малейшего представления о том, как полезно это было! Спасибо огромное! – mcopo

+0

рад, что это помогло: D –

+1

Как перебирать решения? (задано в ). Благодарю. –