| /* |
| * Copyright (c) 2009 Borland Software Corporation |
| * |
| * 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: |
| * Artem Tikhomirov (Borland) - initial API and implementation |
| */ |
| package org.eclipse.gmf.internal.codegen.util; |
| |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.ILog; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.emf.ecore.EcorePackage; |
| import org.eclipse.gmf.internal.xpand.BufferOutput; |
| import org.eclipse.gmf.internal.xpand.XpandFacade; |
| import org.eclipse.gmf.internal.xpand.model.Scope; |
| import org.eclipse.gmf.internal.xpand.model.Variable; |
| import org.eclipse.gmf.internal.xpand.util.BundleResourceManager; |
| import org.eclipse.m2m.qvt.oml.blackbox.java.Operation; |
| import org.eclipse.m2m.qvt.oml.blackbox.java.Operation.Kind; |
| |
| /** |
| * @author artem |
| */ |
| @SuppressWarnings("restriction") |
| public class XpandFacadeAccess { |
| |
| private static final String VAR_MM_ACCESS = "mapModeAccessor"; |
| private static final String VAR_RT_TOKEN = "runtimeToken"; |
| |
| @Operation(contextual = true, kind = Kind.QUERY) |
| public String xpand(Object self, String templateName, List<String> templateRoots) { |
| StringBuilder result = new StringBuilder(); |
| ArrayList<URL> urls = new ArrayList<URL>(templateRoots.size()); |
| |
| for (String s : templateRoots) { |
| try { |
| urls.add(new URL(s)); |
| } catch (MalformedURLException ex) { |
| ILog l = Platform.getLog(Platform.getBundle("org.eclipse.gmf.codegen")); //$NON-NLS-1$ |
| l.log(new Status(Status.ERROR, l.getBundle().getSymbolicName(), ex.getClass().getSimpleName(), ex)); |
| } |
| } |
| |
| final Collection<Variable> globals = new ArrayList<Variable>(); |
| |
| globals.add( new Variable(VAR_MM_ACCESS, EcorePackage.eINSTANCE.getEString(), "")); |
| globals.add(new Variable(VAR_RT_TOKEN, EcorePackage.eINSTANCE.getEString(), "full")); |
| |
| BundleResourceManager rm = new BundleResourceManager(urls.toArray(new URL[urls.size()])); |
| try { |
| new XpandFacade(new Scope(rm, globals, new BufferOutput(result))).evaluate(templateName, self, null); |
| } catch (Exception ex) { |
| return ex.toString(); |
| } |
| return result.toString(); |
| } |
| } |