Package org.sugarj

Source Code of org.sugarj.AbstractBaseLanguage

package org.sugarj;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.List;

import org.eclipse.core.runtime.FileLocator;
import org.spoofax.interpreter.terms.IStrategoTerm;
import org.sugarj.common.FileCommands;
import org.sugarj.common.Log;
import org.sugarj.common.path.AbsolutePath;
import org.sugarj.common.path.Path;
import org.sugarj.common.path.RelativePath;
import org.sugarj.stdlib.StdLib;

/**
* Abstract base language representation. Configures some fixed options, such as file
* extensions.
*
* @author seba, frieger
*
*/
public abstract class AbstractBaseLanguage implements IBaseLanguage {
  private transient Path libDir;
  private transient Path libTmpDir;

  public List<Path> getPackagedGrammars() {
    return StdLib.stdGrammars();
  }

  public final Path getPluginDirectory() {
    if (libDir == null) { // set up directories first
      String thisClassPath = this.getClass().getName().replace(".", "/") + ".class";
      URL thisClassURL = this.getClass().getClassLoader().getResource(thisClassPath);
     
      if (thisClassURL.getProtocol().equals("bundleresource"))
        try {
          thisClassURL = FileLocator.resolve(thisClassURL);
        } catch (IOException e) {
          e.printStackTrace();
        }
     
      String classPath = thisClassURL.getPath();
      String binPath = classPath.substring(0, classPath.length() - thisClassPath.length());
     
      libDir = new AbsolutePath(binPath);
    }
   
    return libDir;
  }

  public Path ensureFile(String resource) {
    Path f = new RelativePath(getPluginDirectory(), resource);
 
    if (FileCommands.exists(f))
      return f;
 
    if (libTmpDir == null) {
      try {
        libTmpDir = FileCommands.newTempDir();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
 
    f = new RelativePath(libTmpDir, resource);
    f.getFile().getParentFile().mkdirs();
 
    try {
      InputStream in = this.getClass().getClassLoader().getResourceAsStream(resource);
      if (in == null) {
        Log.log.logErr("Could not load resource " + resource, Log.ALWAYS);
        return new RelativePath(getPluginDirectory(), resource);
      }
 
      FileOutputStream fos = new FileOutputStream(f.getFile());
      int len = -1;
      byte[] bs = new byte[256];
      while ((len = in.read(bs)) >= 0)
        fos.write(bs, 0, len);
      fos.close();
      in.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
 
    return f;
  }

  public          IStrategoTerm getTransformationApplication(IStrategoTerm decl) { return null; }

  public          IStrategoTerm getTransformationBody(IStrategoTerm decl) { return null; }

  public          String getTransformationName(IStrategoTerm decl) throws IOException { return null; }

  public          boolean isModelDec(IStrategoTerm decl) { return false; }

  public          boolean isTransformationApplication(IStrategoTerm decl) { return false; }

  public          boolean isTransformationDec(IStrategoTerm decl) { return false; }

  public          boolean isTransformationImportDec(IStrategoTerm decl) { return false; }

  public          String getModelName(IStrategoTerm decl) throws IOException { return null; }
}
TOP

Related Classes of org.sugarj.AbstractBaseLanguage

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.