/** * Copyright (c) 2012-2016 Marsha Chechik, Alessio Di Sandro, Michalis Famelis, * Rick Salay. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Alessio Di Sandro - Implementation. */ package edu.toronto.cs.se.modelepedia.istar_mavo.operator; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.eclipse.acceleo.engine.event.IAcceleoTextGenerationListener; import org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator; import org.eclipse.emf.ecore.EObject; import org.eclipse.jdt.annotation.NonNull; import edu.toronto.cs.se.mavo.MAVORoot; import edu.toronto.cs.se.mmint.MMINTException; import edu.toronto.cs.se.mmint.mid.Model; import edu.toronto.cs.se.mmint.mid.utils.MIDOperatorIOUtils; import edu.toronto.cs.se.modelepedia.z3.mavo.EcoreMAVOToSMTLIB; import edu.toronto.cs.se.modelepedia.z3.mavo.EcoreMAVOToSMTLIBListener; public class IStarMAVOToSMTLIB extends EcoreMAVOToSMTLIB { public class IStarMAVOToSMTLIBWithListeners_M2T extends IStarMAVOToSMTLIB_M2T { public IStarMAVOToSMTLIBWithListeners_M2T(EObject model, File targetFolder, List<? extends Object> arguments) throws IOException { super(model, targetFolder, arguments); } @Override public List<IAcceleoTextGenerationListener> getGenerationListeners() { List<IAcceleoTextGenerationListener> listeners = new ArrayList<>(); smtListener = new EcoreMAVOToSMTLIBListener(mavoModelObjs, isMayOnly); listeners.add(smtListener); return listeners; } } public enum AnalysisDirection {FORWARD, BACKWARD}; private static final @NonNull String PROPERTY_IN_ANALYSISDIRECTION = "analysisDirection"; private static final @NonNull AnalysisDirection PROPERTY_IN_ANALYSISDIRECTION_DEFAULT = AnalysisDirection.FORWARD; private AnalysisDirection analysisDirection; @Override public void readInputProperties(Properties inputProperties) throws MMINTException { super.readInputProperties(inputProperties); analysisDirection = MIDOperatorIOUtils.getOptionalEnumProperty(inputProperties, PROPERTY_IN_ANALYSISDIRECTION, PROPERTY_IN_ANALYSISDIRECTION_DEFAULT, AnalysisDirection.class); } @Override protected List<Object> createAcceleoArguments(Model mavoModel) { List<Object> m2tArgs = super.createAcceleoArguments(mavoModel); switch (analysisDirection) { case BACKWARD: m2tArgs.add(false); break; case FORWARD: default: m2tArgs.add(true); break; } return m2tArgs; } @Override protected AbstractAcceleoGenerator createAcceleoGenerator(MAVORoot rootMavoModelObj, File folder, List<Object> m2tArgs) throws IOException { return new IStarMAVOToSMTLIBWithListeners_M2T(rootMavoModelObj, folder, m2tArgs); } }