| /******************************************************************************* |
| * Copyright (c) 2015, 2017 Willink Transformations Ltd., University of York and others. |
| * 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: |
| * Adolfo Sanchez-Barbudo Herrera (University of York) - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.qvtd.cs2as.build.mwe; |
| |
| import java.util.Map; |
| import java.util.Objects; |
| |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.resource.ResourceSet; |
| import org.eclipse.emf.mwe.core.WorkflowContext; |
| import org.eclipse.emf.mwe.core.issues.Issues; |
| import org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent; |
| import org.eclipse.emf.mwe.core.monitor.ProgressMonitor; |
| import org.eclipse.jdt.annotation.NonNull; |
| import org.eclipse.ocl.pivot.utilities.XMIUtil; |
| import org.eclipse.qvtd.cs2as.compiler.CS2ASJavaCompilerParameters; |
| import org.eclipse.qvtd.cs2as.compiler.OCL2QVTiCGTxCompiler; |
| import org.eclipse.qvtd.cs2as.compiler.internal.CS2ASJavaCompilerParametersImpl; |
| |
| public class GenerateCGedQVTiTransformation extends AbstractWorkflowComponent |
| { |
| private final static @NonNull String BACKSLASH = "/"; |
| // private final static @NonNull String EMPTY_STRING = ""; |
| |
| protected static boolean isDefined(final String string) { |
| return (!Objects.equals(string, null)); |
| } |
| |
| protected String projectName; |
| protected String oclFileURI; |
| protected ResourceSet resourceSet; |
| protected boolean debug = false; |
| protected String javaFolder = "src-gen/"; |
| protected String javaPackage = ""; |
| protected String lookupResolverClassName; |
| protected String lookupResultItfName; |
| protected String traceabilityPropName = "ast"; |
| protected Map<?, ?> savingOptions; |
| |
| @Override |
| public void checkConfiguration(final Issues issues) { |
| if (!isDefined(oclFileURI)) { |
| issues.addError(this, "OCL document URI not specified."); |
| } |
| |
| if (!isDefined(lookupResolverClassName)) { |
| issues.addError(this, "Fully qualified name of the Loookup Visitor java class not specified"); |
| } |
| |
| if (!isDefined(lookupResultItfName)) { |
| issues.addError(this, "Fully qualified name of the Named Element interface not specified"); |
| } |
| } |
| |
| |
| |
| |
| |
| @Override |
| protected void invokeInternal(WorkflowContext ctx, ProgressMonitor monitor, Issues issues) { |
| // QVTp2QVTs.CONNECTION_CREATION.setState(true); |
| // OperationDependencyAnalysis.ATTEMPT.setState(true); |
| // OperationDependencyAnalysis.CREATE.setState(true); |
| // OperationDependencyAnalysis.HYPOTHECATING.setState(true); |
| // OperationDependencyAnalysis.RESULT.setState(true); |
| // OperationDependencyAnalysis.START.setState(true); |
| try { |
| URI oclDocURI = URI.createURI(oclFileURI); |
| CS2ASJavaCompilerParameters cgParams = createParameters(); |
| OCL2QVTiCGTxCompiler createCompiler = createCompiler(); |
| createCompiler.setDebug(debug); |
| createCompiler.compileTransformation(resourceSet, cgParams, traceabilityPropName, oclDocURI); |
| } catch (Exception e) { |
| issues.addError(this, "Error while executing " + GenerateCGedQVTiTransformation.class.getName(), null, e, null); |
| } |
| } |
| |
| protected OCL2QVTiCGTxCompiler createCompiler() { |
| return new OCL2QVTiCGTxCompiler(); |
| } |
| protected @NonNull CS2ASJavaCompilerParameters createParameters() { |
| CS2ASJavaCompilerParametersImpl parameters = new CS2ASJavaCompilerParametersImpl(lookupResolverClassName, lookupResultItfName, javaFolder); |
| parameters.setPackagePrefix(javaPackage); |
| return parameters; |
| } |
| |
| /** |
| * (Optional) Enable debug outputs such as schedule graphs. |
| */ |
| public void setDebug(final boolean debug) { |
| this.debug = debug; |
| } |
| |
| /** |
| * (Optional) The folder within the project that forms the root of EMF |
| * generated sources. (default is "src-gen/") |
| */ |
| public void setJavaFolder(final String javaFolder) { |
| this.javaFolder = javaFolder.endsWith(BACKSLASH) ? javaFolder : javaFolder.concat(BACKSLASH); |
| } |
| |
| /** |
| * (Optional) The folder within the project that forms the root of EMF |
| * generated sources. (default is "") |
| */ |
| public void setJavaPackage(final String javaPackage) { |
| this.javaPackage = javaPackage; |
| } |
| |
| /** |
| * (Mandatory) The OCL document URI corresponding to the CS2AS description |
| */ |
| public void setOclDocURI(final String oclDocURI) { |
| this.oclFileURI = oclDocURI; |
| } |
| |
| /** |
| * (Mandatory) The fully qualified class name of the Lookup Resolver java class |
| */ |
| public void setLookupResolverClassName(final String visitorClassName) { |
| this.lookupResolverClassName = visitorClassName; |
| } |
| |
| /** |
| * (Mandatory) The fully qualified interface name of the Lookup Result java interface |
| */ |
| public void setLookupResultItfName(final String namedElementItfName) { |
| this.lookupResultItfName = namedElementItfName; |
| } |
| |
| /** |
| * An optional ResourceSet that MWE components may share to reduce model |
| * loading. |
| */ |
| public void setResourceSet(final ResourceSet resourceSet) { |
| this.resourceSet = resourceSet; |
| } |
| |
| /** |
| * An optional saving options used when serialising EMF resources. (default is {@link XMIUtil#createSaveOptions()}) |
| */ |
| public void setSavingOptions(final Map<?, ?> savingOptions) { |
| this.savingOptions = savingOptions; |
| } |
| |
| |
| /** |
| * An optional CS2AS traceability property name (default is "ast") |
| */ |
| public void setTracePropertyName(final String tracePropName) { |
| this.traceabilityPropName = tracePropName; |
| } |
| |
| |
| } |