blob: 6a610ec56d884f8bcf9ecea9510c03c192778ed6 [file] [log] [blame]
/*
-----------------------------------------------------------------------
-- CHESS M2M plugin --
-- --
-- Copyright (C) 2011-2012 --
-- University of Padova, ITALY --
-- --
-- Author: Alessandro Zovi azovi@math.unipd.it --
-- --
-- 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-v20.html --
-----------------------------------------------------------------------
*/
package org.polarsys.chess.m2m.transformations;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.emf.common.util.URI;
import org.eclipse.m2m.internal.qvt.oml.common.launch.IQvtLaunchConstants;
import org.eclipse.m2m.internal.qvt.oml.library.Context;
import org.eclipse.m2m.internal.qvt.oml.runtime.launch.QvtLaunchConfigurationDelegate;
import org.eclipse.m2m.internal.qvt.oml.runtime.launch.QvtLaunchConfigurationDelegateBase;
import org.eclipse.m2m.internal.qvt.oml.runtime.launch.QvtLaunchUtil;
import org.eclipse.m2m.internal.qvt.oml.runtime.project.QvtInterpretedTransformation;
import org.eclipse.m2m.internal.qvt.oml.runtime.project.QvtTransformation;
import org.eclipse.m2m.qvt.oml.ExecutionContext;
import org.eclipse.m2m.qvt.oml.ExecutionContextImpl;
import org.eclipse.m2m.qvt.oml.ExecutionDiagnostic;
import org.eclipse.m2m.qvt.oml.ModelExtent;
import org.eclipse.m2m.qvt.oml.TransformationExecutor;
import org.eclipse.m2m.qvt.oml.util.WriterLog;
import org.polarsys.chess.core.util.CHESSProjectSupport;
/**
* Utility class to launch QVTo transformations.
* Provides the following transformations too:
* -ceiling priorities assignment
* -multi-instance package creation
* -multi-instance package deletion
*
*/
@SuppressWarnings("restriction")
public class QVToTransformation {
/**
* Launch ceiling assignment transformation.
*
* @param model the model on which the ceiling assignment has to be applied
* @param monitor the monitor
* @throws Exception the exception
*/
public static void launchCeilingAssignment(IFile model, IProgressMonitor monitor)
throws Exception {
launchTransformation(TransUtil.QVTO_CEILING, "CHESS_CEILING", false,
model, monitor, new HashMap<String, String>());
}
/**
* Launch build multi instances transformation.
*
* @param model the model on which the multiple instances package need to be created
* @param monitor the monitor
* @throws Exception the exception
*/
public static void launchBuildMultiInstance(IFile model, IProgressMonitor monitor)
throws Exception {
launchTransformation(TransUtil.QVTO_MULTIINSTANCE, "BuildMultiInstance", false,
model, monitor, new HashMap<String, String>());
}
/**
* Launch remove multi instance transformation.
*
* @param model the model on which the multiple instances package need to be removed
* @param monitor the monitor
* @throws Exception the exception
*/
public static void launchRemoveMultiInstance(IFile model, IProgressMonitor monitor)
throws Exception {
launchTransformation(TransUtil.QVTO_REMMULTIINSTANCE, "RemoveMultiInstance", false,
model, monitor, new HashMap<String, String>());
}
/**
* Utility method to launch QVT-o transformation.
*
* @param transURI the URI of the transformation to be executed on the given model
* @param transName the name of the transformation
* @param generateTrace true if the trace of the model transformation has to be generated
* @param model the model on which the transformation is applied
* @param monitor the progress monitor
* @param configProps the map of configuration properties
* @throws Exception the exception
* @see org.eclipse.m2m.internal.qvt.oml.common.launch.IQvtLaunchConstants
*/
public static void launchTransformation(String transURI, String transName,
boolean generateTrace, IFile model, IProgressMonitor monitor, Map<String, String> configProps)
throws Exception {
SubMonitor subMonitor = SubMonitor.convert(monitor, 100);
CHESSProjectSupport.CHESS_CONSOLE.println("executing "+transName);
String modelURIString = URI.createPlatformResourceURI(
model.getFullPath().toString(), false).toString();
String traceURIString = generateTrace ? modelURIString.substring(0,
modelURIString.lastIndexOf('.') + 1) + "qvtotrace" : null;
String transfURIString = transURI;
// String marteURIString =
// org.eclipse.papyrus.MARTE.MARTEPackage.eNS_URI;
ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
ILaunchConfigurationType c = manager
.getLaunchConfigurationType(QvtLaunchConfigurationDelegate.LAUNCH_CONFIGURATION_TYPE_ID);
ILaunchConfigurationWorkingCopy instance = c.newInstance(null,
transName);
instance.setAttribute(IQvtLaunchConstants.CLEAR_CONTENTS + "1", true);
instance.setAttribute(IQvtLaunchConstants.CLEAR_CONTENTS + "2", true);
instance.setAttribute(IQvtLaunchConstants.CONFIGURATION_PROPERTIES, configProps);
instance.setAttribute(IQvtLaunchConstants.ELEM_COUNT, 2);
instance.setAttribute(IQvtLaunchConstants.FEATURE_NAME + "1", "");
instance.setAttribute(IQvtLaunchConstants.FEATURE_NAME + "2", "");
instance.setAttribute(IQvtLaunchConstants.MODULE, transfURIString);
instance.setAttribute(IQvtLaunchConstants.TARGET_MODEL + "1",
modelURIString);
// instance.setAttribute(IQvtLaunchConstants.TARGET_MODEL+"2",
// marteURIString);
instance.setAttribute(IQvtLaunchConstants.TARGET_TYPE + "1",
"NEW_MODEL");
// instance.setAttribute(IQvtLaunchConstants.TARGET_TYPE+"2",
// "NEW_MODEL");
if (generateTrace)
instance.setAttribute(IQvtLaunchConstants.TRACE_FILE,
traceURIString);
instance.setAttribute(IQvtLaunchConstants.USE_TRACE_FILE, generateTrace);
QvtTransformation qvtTransformation = new QvtInterpretedTransformation(
QvtLaunchConfigurationDelegateBase.getQvtModule(instance));
IStatus status = QvtLaunchConfigurationDelegateBase.validate(
qvtTransformation, instance);
if (status.getSeverity() > IStatus.WARNING) {
throw new CoreException(status);
}
ExecutionContextImpl context = (ExecutionContextImpl) QvtLaunchUtil.createContext(instance);
OutputStreamWriter s = new OutputStreamWriter(
CHESSProjectSupport.CHESS_CONSOLE);
context.setLog(new WriterLog(s));
context.setProgressMonitor(monitor);
subMonitor.newChild(30);
QvtLaunchUtil.doLaunch(qvtTransformation,instance, context);
subMonitor.newChild(60);
qvtTransformation.cleanup();
}
}