/******************************************************************************* * Copyright (c) 2011 Obeo. * 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: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.docs.intent.exporter; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.acceleo.common.IAcceleoConstants; import org.eclipse.acceleo.parser.compiler.AbstractAcceleoCompiler; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; 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.EcorePackage; import org.eclipse.mylyn.docs.intent.core.document.IntentDocumentPackage; import org.eclipse.mylyn.docs.intent.core.document.descriptionunit.DescriptionUnitPackage; import org.eclipse.mylyn.docs.intent.core.modelingunit.ModelingUnitPackage; import org.eclipse.mylyn.docs.intent.markup.markup.MarkupPackage; import org.eclipse.mylyn.docs.intent.markup.wikigen.WikigenPackage; /** * The Acceleo Stand Alone compiler. * * @author <a href="mailto:stephane.begaudeau@obeo.fr">Stephane Begaudeau</a> * @since 3.1 */ public class AcceleoCompiler extends AbstractAcceleoCompiler { /** * The entry point of the compilation. * * @param args * The arguments used in the compilation: the source folder, the output folder, a boolean * indicating if we should use binary resource serialization and finally the dependencies of * the project. */ public static void main(String[] args) { if (args.length < 3) { throw new IllegalArgumentException("Missing parameters"); //$NON-NLS-1$ } AcceleoCompiler acceleoCompiler = new AcceleoCompiler(); acceleoCompiler.setSourceFolder(args[0]); acceleoCompiler.setOutputFolder(args[1]); acceleoCompiler.setBinaryResource(Boolean.valueOf(args[2]).booleanValue()); if (args.length == 4 && args[3] != null && !"".equals(args[3])) { //$NON-NLS-1$ acceleoCompiler.setDependencies(args[3]); } acceleoCompiler.doCompile(new BasicMonitor()); } /** * Launches the compilation of the mtl files in the generator. * * @param monitor * the progress monitor * @see org.eclipse.acceleo.parser.compiler.AbstractAcceleoCompiler#doCompile(org.eclipse.emf.common.util.Monitor) */ @Override public void doCompile(Monitor monitor) { super.doCompile(monitor); } /** * Registers the packages of the metamodels used in the generator. * * @see org.eclipse.acceleo.parser.compiler.AbstractAcceleoCompiler#registerPackages() */ @Override protected void registerPackages() { super.registerPackages(); /* * If you want to add the other packages used by your generator, for example UML: * org.eclipse.emf.ecore.EPackage.Registry.put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE); */ org.eclipse.emf.ecore.EPackage.Registry.INSTANCE.put(MarkupPackage.eNS_URI, MarkupPackage.eINSTANCE); org.eclipse.emf.ecore.EPackage.Registry.INSTANCE .put(WikigenPackage.eNS_URI, WikigenPackage.eINSTANCE); org.eclipse.emf.ecore.EPackage.Registry.INSTANCE.put(IntentDocumentPackage.eNS_URI, IntentDocumentPackage.eINSTANCE); org.eclipse.emf.ecore.EPackage.Registry.INSTANCE.put(ModelingUnitPackage.eNS_URI, ModelingUnitPackage.eINSTANCE); org.eclipse.emf.ecore.EPackage.Registry.INSTANCE.put(DescriptionUnitPackage.eNS_URI, DescriptionUnitPackage.eINSTANCE); org.eclipse.emf.ecore.EPackage.Registry.INSTANCE.put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE); } /** * Registers the resource factories. * * @see org.eclipse.acceleo.parser.compiler.AbstractAcceleoCompiler#registerResourceFactories() */ @Override protected void registerResourceFactories() { super.registerResourceFactories(); /* * If you want to add other resource factories, for example if your metamodel uses a specific * serialization: * org.eclipse.emf.ecore.resource.Resource.Factory.Registry.getExtensionToFactoryMap().put * (UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE); */ } /** * {@inheritDoc} * * @see org.eclipse.acceleo.parser.compiler.AbstractAcceleoCompiler#computeDependencies(java.util.List, * java.util.Map) */ protected void computeDependencies(List<URI> dependenciesURIs, Map<URI, URI> mapURIs) { // USED TO FIX COMPILER WITH TYCHO Iterator<String> identifiersIt = dependenciesIDs.iterator(); for (Iterator<File> dependenciesIt = dependencies.iterator(); dependenciesIt.hasNext() && identifiersIt.hasNext();) { File requiredFolder = dependenciesIt.next(); String identifier = identifiersIt.next(); if (requiredFolder != null && requiredFolder.exists() && requiredFolder.isDirectory()) { List<File> emtlFiles = new ArrayList<File>(); members(emtlFiles, requiredFolder, IAcceleoConstants.EMTL_FILE_EXTENSION); for (File emtlFile : emtlFiles) { String requiredFolderAbsolutePath = requiredFolder.getAbsolutePath(); if (requiredFolderAbsolutePath.endsWith("target/classes")) { // using tycho String[] splited = requiredFolderAbsolutePath.split("\\/"); StringBuffer buf = new StringBuffer(requiredFolderAbsolutePath.length()); for (int i = 0; i < splited.length - 3; i++) { buf.append(splited[i]); buf.append("/"); } requiredFolderAbsolutePath = buf.toString(); String emtlAbsolutePath = emtlFile.getAbsolutePath(); URI emtlFileURI = URI.createFileURI(emtlAbsolutePath); dependenciesURIs.add(emtlFileURI); String emtlModifiedPath = emtlAbsolutePath.replaceAll("target\\/|classes\\/", ""); IPath relativePath = new Path(emtlModifiedPath.substring(requiredFolderAbsolutePath .length())); URI relativeURI = URI.createPlatformPluginURI(relativePath.toString(), false); mapURIs.put(emtlFileURI, relativeURI); } else { // normal behavior String emtlAbsolutePath = emtlFile.getAbsolutePath(); URI emtlFileURI = URI.createFileURI(emtlAbsolutePath); dependenciesURIs.add(emtlFileURI); IPath relativePath = new Path(identifier).append(emtlAbsolutePath .substring(requiredFolderAbsolutePath.length())); mapURIs.put(emtlFileURI, URI.createPlatformPluginURI(relativePath.toString(), false)); } } } } } }