blob: 68f7dae19ea2c7118b07e1e83440fea8e4d383a4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 Mia-Software.
* 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:
* Nicolas Payneau (Mia-Software) - initial API and implementation
*******************************************************************************/
package org.eclipse.gmt.modisco.workflow.generator;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.acceleo.engine.event.IAcceleoTextGenerationListener;
import org.eclipse.acceleo.engine.generation.strategy.IAcceleoGenerationStrategy;
import org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator;
import org.eclipse.emf.common.util.BasicMonitor;
import org.eclipse.emf.common.util.Monitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.gmt.modisco.workflow.modiscoworkflow.ModiscoworkflowPackage;
/**
* Entry point of the 'GenerateDiscoverer' generation module.
*
* @generated NOT
* @deprecated replaced by org.eclipse.modisco.workflow, cf
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=337942
*/
@Deprecated
public class GenerateDiscoverer extends AbstractAcceleoGenerator {
/**
* The name of the module.
*
* @generated
*/
public static final String MODULE_FILE_NAME = "generateDiscoverer"; //$NON-NLS-1$
/**
* The name of the templates that are to be generated.
*
* @generated
*/
public static final String[] TEMPLATE_NAMES = { "generateDiscoverer", }; //$NON-NLS-1$
/**
* Allows the public constructor to be used. Note that a generator created this way cannot be
* used to launch generations before one of {@link #initialize(EObject, File, List)} or
* {@link #initialize(URI, File, List)} is called.
* <p>
* The main reason for this constructor is to allow clients of this generation to call it from
* another Java file, as it allows for the retrieval of {@link #getProperties()} and
* {@link #getGenerationListeners()}.
* </p>
*
* @generated
*/
public GenerateDiscoverer() {
// Empty implementation
}
/**
* This allows clients to instantiates a generator with all required information.
*
* @param modelURI
* URI where the model on which this generator will be used is located.
* @param targetFolder
* This will be used as the output folder for this generation : it will be the base
* path against which all file block URLs will be resolved.
* @param arguments
* If the template which will be called requires more than one argument taken from
* the model, pass them here.
* @throws IOException
* This can be thrown in three scenarios : the module cannot be found, it cannot be
* loaded, or the model cannot be loaded.
* @generated NOT
*/
public GenerateDiscoverer(final URI modelURI, final File targetFolder,
final List<? extends Object> arguments) throws IOException {
initialize(modelURI, targetFolder, arguments);
fixURIs();
}
/**
* This allows clients to instantiates a generator with all required information.
*
* @param model
* We'll iterate over the content of this element to find Objects matching the first
* parameter of the template we need to call.
* @param targetFolder
* This will be used as the output folder for this generation : it will be the base
* path against which all file block URLs will be resolved.
* @param arguments
* If the template which will be called requires more than one argument taken from
* the model, pass them here.
* @throws IOException
* This can be thrown in two scenarios : the module cannot be found, or it cannot be
* loaded.
* @generated NOT
*/
public GenerateDiscoverer(final EObject model, final File targetFolder,
final List<? extends Object> arguments) throws IOException {
initialize(model, targetFolder, arguments);
fixURIs();
}
private void fixURIs() {
ResourceSetImpl resourceSet = (ResourceSetImpl) this.module.eResource().getResourceSet();
Map<URI, Resource> uriResourceMap = resourceSet.getURIResourceMap();
if (uriResourceMap == null) {
uriResourceMap = new HashMap<URI, Resource>();
resourceSet.setURIResourceMap(uriResourceMap);
}
// uriResourceMap.put(URI.createURI(ModiscoworkflowPackage.eNS_URI),
// ModiscoworkflowPackage.eINSTANCE.eResource()); // Workaround
// FIXME ugly hack to workaround Bug 335764 - EMTL file resolves URI unresolvably
uriResourceMap.put(
URI.createURI("/org.eclipse.gmt.modisco.workflow/model/ModiscoWorkflow.ecore"), //$NON-NLS-1$
ModiscoworkflowPackage.eINSTANCE.eResource()); // Workaround Bug 336119
}
/**
* This can be used to launch the generation from a standalone application.
*
* @param args
* Arguments of the generation.
* @generated
*/
public static void main(final String[] args) {
try {
if (args.length < 2) {
System.out.println("Arguments not valid : {model, folder}."); //$NON-NLS-1$
} else {
URI modelURI = URI.createFileURI(args[0]);
File folder = new File(args[1]);
List<String> arguments = new ArrayList<String>();
for (int i = 2; i < args.length; i++) {
arguments.add(args[i]);
}
GenerateDiscoverer generator = new GenerateDiscoverer(modelURI, folder, arguments);
generator.doGenerate(new BasicMonitor());
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Launches the generation described by this instance.
*
* @param monitor
* This will be used to display progress information to the user.
* @throws IOException
* This will be thrown if any of the output files cannot be saved to disk.
* @generated
*/
@Override
public void doGenerate(final Monitor monitor) throws IOException {
/*
* TODO if you wish to change the generation as a whole, override this. The default behavior
* should be sufficient in most cases.
*/
super.doGenerate(monitor);
}
/**
* If this generator needs to listen to text generation events, listeners can be returned from
* here.
*
* @return List of listeners that are to be notified when text is generated through this launch.
* @generated
*/
@Override
public List<IAcceleoTextGenerationListener> getGenerationListeners() {
List<IAcceleoTextGenerationListener> listeners = super.getGenerationListeners();
// TODO if you need to listen to generation event, add listeners to the list here
return listeners;
}
/**
* If you need to change the way files are generated, this is your entry point.
* <p>
* The default is {@link org.eclipse.acceleo.engine.generation.strategy.DefaultStrategy}; it
* generates files on the fly. If you only need to preview the results, return a new
* {@link org.eclipse.acceleo.engine.generation.strategy.PreviewStrategy}. Both of these aren't
* aware of the running Eclipse and can be used standalone.
* </p>
* <p>
* If you need the file generation to be aware of the workspace (A typical example is when you
* wanna override files that are under clear case or any other VCS that could forbid the
* overriding), then return a new
* {@link org.eclipse.acceleo.engine.generation.strategy.WorkspaceAwareStrategy}. <b>Note</b>,
* however, that this <b>cannot</b> be used standalone.
* </p>
* <p>
* All three of these default strategies support merging through JMerge.
* </p>
*
* @return The generation strategy that is to be used for generations launched through this
* launcher.
* @generated
*/
@Override
public IAcceleoGenerationStrategy getGenerationStrategy() {
return super.getGenerationStrategy();
}
/**
* This will be called in order to find and load the module that will be launched through this
* launcher. We expect this name not to contain file extension, and the module to be located
* beside the launcher.
*
* @return The name of the module that is to be launched.
* @generated
*/
@Override
public String getModuleName() {
return GenerateDiscoverer.MODULE_FILE_NAME;
}
/**
* If the module(s) called by this launcher require properties files, return their qualified
* path from here.Take note that the first added properties files will take precedence over
* subsequent ones if they contain conflicting keys.
* <p>
* Properties need to be in source folders, the path that we expect to get as a result of this
* call are of the form &lt;package>.&lt;properties file name without extension>. For example,
* if you have a file named "messages.properties" in package "org.eclipse.acceleo.sample", the
* path that needs be returned by a call to {@link #getProperties()} is
* "org.eclipse.acceleo.sample.messages".
* </p>
*
* @return The list of properties file we need to add to the generation context.
* @see java.util.ResourceBundle#getBundle(String)
* @generated
*/
@Override
public List<String> getProperties() {
List<String> propertiesFiles = super.getProperties();
/*
* TODO if your generation module requires access to properties files, add their qualified
* path to the list here. Properties files are expected to be in source folders, and the
* path here to be the qualified path as if referring to a Java class. For example, if you
* have a file named "messages.properties" in package "org.eclipse.acceleo.sample", the path
* that needs be added to this list is "org.eclipse.acceleo.sample.messages".
*/
return propertiesFiles;
}
/**
* This will be used to get the list of templates that are to be launched by this launcher.
*
* @return The list of templates to call on the module {@link #getModuleName()}.
* @generated
*/
@Override
public String[] getTemplateNames() {
return GenerateDiscoverer.TEMPLATE_NAMES;
}
/**
* This can be used to update the resource set's package registry with all needed EPackages.
*
* @param resourceSet
* The resource set which registry has to be updated.
* @generated NOT
*/
@Override
public void registerPackages(final ResourceSet resourceSet) {
super.registerPackages(resourceSet);
resourceSet
.getPackageRegistry()
.put(org.eclipse.gmt.modisco.workflow.modiscoworkflow.ModiscoworkflowPackage.eINSTANCE
.getNsURI(),
org.eclipse.gmt.modisco.workflow.modiscoworkflow.ModiscoworkflowPackage.eINSTANCE);
// TODO If you need additional package registrations, do them here. The following line is an
// example for UML.
// resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
}
/**
* This can be used to update the resource set's resource factory registry with all needed
* factories.
*
* @param resourceSet
* The resource set which registry has to be updated.
* @generated
*/
@Override
public void registerResourceFactories(final ResourceSet resourceSet) {
super.registerResourceFactories(resourceSet);
// TODO If you need additional resource factories registrations, do them here. The following
// line is an example for UML.
// resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION,
// UMLResource.Factory.INSTANCE);
}
}