Package sharpen.core

Source Code of sharpen.core.SharpenConversionBatch

/* Copyright (C) 2004 - 2008  Versant Inc.  http://www.db4o.com

This file is part of the sharpen open source java to c# translator.

sharpen is free software; you can redistribute it and/or modify it under
the terms of version 2 of the GNU General Public License as published
by the Free Software Foundation and as clarified by db4objects' GPL
interpretation policy, available at
http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
Suite 350, San Mateo, CA 94403, USA.

sharpen is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */

package sharpen.core;

import java.io.*;

import sharpen.core.csharp.ast.CSCompilationUnit;
import sharpen.core.framework.*;
import sharpen.core.framework.resources.WorkspaceUtilities;

import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.jdt.core.*;
import org.eclipse.jdt.core.dom.*;

/**
* Converts a set of java source files to c#.
*
* The c# files are created relative to the targetFolder directory. If no
* targetFolder is specified the files will be created side by side with the
* corresponding java source files.
*/
public class SharpenConversionBatch extends ConversionBatch {
 
  private IProject _targetProject;

  private final Configuration _configuration; 

  public SharpenConversionBatch() {
    this(Sharpen.getDefault().configuration());
  }
 
  public SharpenConversionBatch(Configuration configuration) {
    if (null == configuration) {
      throw new IllegalArgumentException("configuration");
    }
    _configuration = configuration;
  }
 
  public void setTargetProject(IProject project) {
    _targetProject = project;
  }

  @Override
  protected void convertCompilationUnit(ASTResolver resolver, ICompilationUnit source, CompilationUnit ast)
      throws CoreException, IOException {
    SharpenConversion converter = new SharpenConversion(_configuration);
    final StringWriter writer = new StringWriter();
    converter.setTargetWriter(writer);
    converter.setSource(source);
    converter.setASTResolver(resolver);
    CSCompilationUnit result = converter.run(ast);
    if (writer.getBuffer().length() > 0) {
      saveConvertedFile(source, result, writer);
    }
  }
  /**
   * @param cu
   * @throws JavaModelException
   * @throws CoreException
   * @throws UnsupportedEncodingException
   */
  private void saveConvertedFile(ICompilationUnit cu, CSCompilationUnit csModule, StringWriter convertedContents) throws JavaModelException, CoreException, UnsupportedEncodingException {
    String newName = csModule.elementName();
    if (newName == null) {
      newName = getNameWithoutExtension(cu.getElementName()) + ".cs";
    }

    IFolder folder = targetFolderForCompilationUnit(cu, csModule.namespace());
    ensureFolder(folder);
    WorkspaceUtilities.writeText(folder.getFile(newName), convertedContents.getBuffer().toString());
  }

  private void ensureFolder(IFolder folder) throws CoreException {
      WorkspaceUtilities.initializeTree(folder, null);
    }

  IFolder targetFolderForCompilationUnit(ICompilationUnit cu, String generatedNamespace)
      throws CoreException {

    if (null == _targetProject) {
      // no target folder specified
      // converted files go in the same folder as their corresponding
      // java source files
      return (IFolder) cu.getCorrespondingResource().getParent();
    }
   
    final IPath basePath = cu.getAncestor(IJavaElement.PACKAGE_FRAGMENT_ROOT).getResource().getProjectRelativePath();
    final IFolder targetFolder = _targetProject.getFolder(basePath);

    // compute target folder based on packageName
    String packageName = generatedNamespace == null
      ? cu.getParent().getElementName()
      : cleanupNamespace(generatedNamespace);
    if (packageName.length() > 0) {
      return getTargetPackageFolder(targetFolder, packageName);
    }
    return targetFolder;
  }

  public static String cleanupNamespace(String generatedNamespace) {
    // remove any keyword markers from the namespace
    return generatedNamespace.replace("@", "");
  }

  private IFolder getTargetPackageFolder(IFolder targetFolder, String packageName)
      throws CoreException {
    return targetFolder.getFolder(packageName.replace('.', '/'));
  }
 
  private String getNameWithoutExtension(String name) {
    return name.split("\\.")[0];
  }

  public Configuration getConfiguration() {
    return _configuration;
  }
}
TOP

Related Classes of sharpen.core.SharpenConversionBatch

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.