Package org.eclipse.xtext.xdoc.generator

Source Code of org.eclipse.xtext.xdoc.generator.XdocGeneratorComponent

package org.eclipse.xtext.xdoc.generator;

import static com.google.common.collect.Lists.*;
import static com.google.common.collect.Maps.newHashMap;

import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.mwe2.runtime.workflow.IWorkflowContext;
import org.eclipse.xtext.ISetup;
import org.eclipse.xtext.generator.GeneratorComponent;
import org.eclipse.xtext.generator.IFileSystemAccess;
import org.eclipse.xtext.generator.JavaIoFileSystemAccess;
import org.eclipse.xtext.xdoc.generator.config.Config;
import com.google.inject.Injector;

public class XdocGeneratorComponent extends GeneratorComponent{

  protected List<String> slotNames = newArrayList();
  protected Map<String,String> outlets = newHashMap();
  protected Injector injector;

  protected Map<String, Object> config = newHashMap();

  @Override
  public void addSlot(String slot) {
    this.slotNames.add(slot);
  }

  @Override
  public void preInvoke() {
    // Nothing should fail here, the workflow provides all the values checked in super.preInvoke()
  }

  @Override
  public void invoke(IWorkflowContext ctx) {
    IConfigurableGenerator instance = injector.getInstance(IConfigurableGenerator.class);
    JavaIoFileSystemAccess fsa = (JavaIoFileSystemAccess)getConfiguredFileSystemAccess();
    config.put(Config.outletPath, fsa.getOutputConfigurations().get(IFileSystemAccess.DEFAULT_OUTPUT).getOutputDirectory());
    config.put(Config.BASE_DIR, System.getProperty("user.dir"));
    initializeConfig(instance);
    for (String slot : slotNames) {
      Object object = ctx.get(slot);
      if (object == null) {
        throw new IllegalStateException("Slot '"+slot+"' was empty!");
      }
      if (object instanceof Iterable) {
        Iterable<?> iterable = (Iterable<?>) object;
        for (Object object2 : iterable) {
          if ((object2 instanceof EObject)) {
            instance.doGenerate(((EObject) object2).eResource(), fsa);
          }
          else
            throw new IllegalStateException("Slot contents was not a List<Resource> but a '"+object.getClass().getSimpleName()+"'!");
        }
      } else if (object instanceof Resource) {
        instance.doGenerate((Resource) object, fsa);
      } else {
        throw new IllegalStateException("Slot contents was not a Resource but a '"+object.getClass().getSimpleName()+"'!");
      }
    }
  }

  protected void initializeConfig(IConfigurableGenerator instance) {
    Map<String, Object> generatorConfig = instance.getConfiguration();
    generatorConfig.put(Config.release, false);
    generatorConfig.put(Config.cleanAfterRun, false);
    generatorConfig.putAll(config);
  }

  @Override
  protected IFileSystemAccess getConfiguredFileSystemAccess() {
    final JavaIoFileSystemAccess configuredFileSystemAccess = injector.getInstance(JavaIoFileSystemAccess.class);
    for (Entry<String, String> outs : outlets.entrySet()) {
      configuredFileSystemAccess.setOutputPath(outs.getKey(), outs.getValue());
    }
    return configuredFileSystemAccess;
  }

  @Override
  public void setRegister(ISetup setup) {
    super.setRegister(setup);
    injector = setup.createInjectorAndDoEMFRegistration();
  }

  @Override
  public void addOutlet(Outlet out) {
    outlets.put(out.getOutletName(),out.getPath());
  }

  public boolean isCleanAfterRun() {
    return (Boolean) config.get(Config.cleanAfterRun);
  }

  public void setCleanAfterRun(boolean cleanAfterRun) {
    this.config.put(Config.cleanAfterRun, cleanAfterRun);
  }

  public boolean isRelease() {
    return (Boolean) config.get(Config.release);
  }

  public void setRelease(boolean release) {
    this.config.put(Config.release, release);
  }
}
TOP

Related Classes of org.eclipse.xtext.xdoc.generator.XdocGeneratorComponent

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.