/** * Copyright (c) 2007 IBM Corporation 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: * IBM - Initial API and implementation */ package org.eclipse.emf.test.common; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.util.List; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Platform; import org.eclipse.emf.common.EMFPlugin; import org.eclipse.emf.common.util.URI; import org.osgi.framework.Bundle; public class TestUtil { private static final String PLUGIN_ID = "org.eclipse.emf.test.common"; private static final String CLASS_FILE = "org/eclipse/emf/test/common/TestUtil.class"; public static String getTestCommonDirectory() { if (EMFPlugin.IS_ECLIPSE_RUNNING) { try { return new File(FileLocator.toFileURL(EMFTestCommonPlugin.getPlugin().getBundle().getEntry("/")).getFile()).toString(); } catch (Throwable t) { // Ignore } } URL url = ClassLoader.getSystemResource(CLASS_FILE); if (url != null) { URI uri = URI.createURI(url.toString()); if (uri.isArchive()) { // Returns the inner URI String authority = uri.authority(); // Removing the ! authority = authority.substring(0, authority.length()-1); uri = URI.createURI(authority); } if (uri.isFile()) { File parentDir = new File(uri.toFileString()).getParentFile(); while (parentDir != null && parentDir.isDirectory()) { String name = parentDir.getName(); if (name.equals(PLUGIN_ID) || name.startsWith(PLUGIN_ID + "_")) { return parentDir.getAbsolutePath(); } parentDir = parentDir.getParentFile(); } } } throw new RuntimeException("Unable to compute the " + PLUGIN_ID + " directory"); } public static String getPluginDirectory(String pluginID) { try { if (EMFPlugin.IS_ECLIPSE_RUNNING) { Bundle bundle = Platform.getBundle(pluginID); // A source bundle won't be installed by the platform at startup, so try installing it manually. // if (bundle == null && pluginID.endsWith(".source")) { String binaryPluginID = pluginID.substring(0, pluginID.length() - 7); Bundle binaryBundle = Platform.getBundle(binaryPluginID); String bundleLocation = binaryBundle.getLocation(); int i = bundleLocation.lastIndexOf(binaryPluginID); if (i != -1) { bundleLocation = bundleLocation.substring(0, i) + pluginID + bundleLocation.substring(i + binaryPluginID.length()); } bundle = binaryBundle.getBundleContext().installBundle(bundleLocation); } if (bundle != null) { File file = new File(FileLocator.toFileURL(bundle.getEntry("/")).getFile()); if (file.isDirectory()) { return file.getAbsolutePath(); } } } } catch (Throwable t) { // Ignore } File pluginsDirectory = new File(getTestCommonDirectory()).getParentFile(); File[] plugins = pluginsDirectory.listFiles(); for (int i = 0, maxi = plugins.length; i < maxi; i++) { if (plugins[i].isDirectory()) { String name = plugins[i].getName(); if (name.equals(pluginID) || name.startsWith(pluginID + "_")) { return plugins[i].getAbsolutePath(); } } } return null; } public static boolean areEqual(List<?> list1, List<?> list2) { if (list1 == null) return list2 == null; if (list2 == null) return false; int size = list1.size(); if (size != list2.size()) { return false; } for(int i=0; i<size; i++) { if (list1.get(i) != list2.get(i)) { if (list1.get(i) == null || list2.get(i) == null) { return false; } else if (!list1.get(i).equals(list2.get(i))) { return false; } } } return true; } public static String readFile(File file, boolean useSystemLineSeparator) { StringBuffer stringBuffer = new StringBuffer(); try { BufferedReader in = new BufferedReader(new FileReader(file)); try { int size = 0; char[] buff = new char[512]; while ((size = in.read(buff)) >= 0) { stringBuffer.append(buff, 0, size); } } finally { in.close(); } } catch(IOException exception) { throw new RuntimeException(exception); } int length = stringBuffer.length(); if(length > 0) { String nl = useSystemLineSeparator ? System.getProperties().getProperty("line.separator") : "\n"; return stringBuffer.toString().replaceAll("\\r\\n", "\n").replaceAll("[\\n|\\r]", nl); } return stringBuffer.toString(); } public static void delete(File file) { if (file.isDirectory()) { File[] children = file.listFiles(); if (children != null) { for (int i = 0, maxi = children.length; i < maxi; i++) { delete(children[i]); } } } if (file.exists()) { file.delete(); } } }