/** * * * Copyright (c) 2005, 2006, 2007, 2008 Springsite BV (The Netherlands) and others * 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: * Martin Taal * * * $Id: SamplesSource.java,v 1.5 2008/02/28 07:08:07 mtaal Exp $ */ package org.eclipse.emf.teneo.samples; import java.io.File; import java.io.FileNotFoundException; import org.eclipse.emf.ecore.EPackage; /** * Utility method for different kinds of class and source file related actions. Is in this package * for convenience. * * @author Martin Taal * @version $Revision: 1.5 $ */ public final class SamplesSource { private static final String SOURCE_REL_PATH = "../src"; private static File SAMPLES_SOURCE_BASE = null; private SamplesSource() { } /** * Returns the outputlocation of the package of the passed class */ public static String getOutputDirectory(String name, boolean isPackage) { // this file is now in test/src/org/elver/store/test/Utils.class File file = new File(SamplesSource.class.getResource( '/' + SamplesSource.class.getName().replace('.', '/') + ".class").getFile()); // now go up 5 directories: // SamplesSource samples teneo emf eclipse org bin file = file.getParentFile().getParentFile().getParentFile().getParentFile().getParentFile() .getParentFile(); // now go down again to the package String path = name.replace('.', File.separatorChar); if (!isPackage) { path = path.substring(0, path.lastIndexOf(File.separatorChar)); } file = new File(file, path); return file.getAbsolutePath(); } /** * Returns the directory which contains the sources for the given package. * * @throws FileNotFoundException * if the source folder for the given package cannot be found. */ public static File getSourceDirectory(String packageName) throws FileNotFoundException { if (SAMPLES_SOURCE_BASE == null) { String[] classCompNames = SamplesSource.class.getName().split("\\."); File thisClassFile = new File(SamplesSource.class.getResource( classCompNames[classCompNames.length - 1] + ".class").getFile()); File baseDir = thisClassFile; for (int i = 0; i < classCompNames.length; i++) baseDir = baseDir.getParentFile(); SAMPLES_SOURCE_BASE = new File(baseDir, SOURCE_REL_PATH); } File baseDir = new File(SAMPLES_SOURCE_BASE, packageName.replace('.', File.separatorChar)); if (!baseDir.exists()) throw new FileNotFoundException("Directory " + baseDir.getAbsolutePath() + " does not exists"); return baseDir; } /** * Returns the directories which contains the sources for the given packages. * * @throws FileNotFoundException * if the source folder for a given package cannot be found. */ public static File[] getSourceDirectory(String[] packageNames) throws FileNotFoundException { File[] sourceFiles = new File[packageNames.length]; for (int i = 0; i < packageNames.length; i++) sourceFiles[i] = getSourceDirectory(packageNames[i]); return sourceFiles; } /** * Return the source folder name for the given package * * @param ePackage * @throws FileNotFoundException */ private static String getEPackageFolder(EPackage ePackage) throws FileNotFoundException { // TODO it is not robust, anyway answers for this project packages only String implPackageName = ePackage.getClass().getName(); int implPkgFinishAt = implPackageName.lastIndexOf('.'); if (implPackageName.substring(0, implPkgFinishAt).endsWith(".impl")) { return implPackageName.substring(0, implPkgFinishAt - 5); } else throw new FileNotFoundException("Could not find implementation package " + implPackageName.substring(0, implPkgFinishAt)); } /** * Returns the directory which contains the sources for the given ePackage. * * @throws FileNotFoundException * if the source folder for the given package cannot be found. */ public static File getSourceDirectory(EPackage ePackage) throws FileNotFoundException { return getSourceDirectory(getEPackageFolder(ePackage)); } /** * Returns the directories which contain the sources for the given ePackages. * * @throws FileNotFoundException * if the source folder for a given package cannot be found. */ public static File[] getSourceDirectory(EPackage[] ePackages) throws FileNotFoundException { File[] sourceFiles = new File[ePackages.length]; for (int i = 0; i < ePackages.length; i++) sourceFiles[i] = getSourceDirectory(ePackages[i]); return sourceFiles; } }