浏览代码

Share project "org.yakindu.sct.commons" into "https://svn.codespot.com/a/eclipselabs.org/yakindu"

Andreas Mülder 13 年之前
父节点
当前提交
59255aa637

+ 7 - 0
plugins/org.yakindu.sct.commons/.classpath

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

+ 28 - 0
plugins/org.yakindu.sct.commons/.project

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.yakindu.sct.commons</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

+ 7 - 0
plugins/org.yakindu.sct.commons/.settings/org.eclipse.jdt.core.prefs

@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6

+ 13 - 0
plugins/org.yakindu.sct.commons/META-INF/MANIFEST.MF

@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Commons
+Bundle-SymbolicName: org.yakindu.sct.commons
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: YAKINDU
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Require-Bundle: org.eclipse.core.resources;bundle-version="3.8.0",
+ org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.jdt.core;bundle-version="3.8.1",
+ com.google.guava;bundle-version="10.0.1",
+ org.eclipse.jdt.launching;bundle-version="3.6.100"
+Export-Package: org.yakindu.sct.commons

+ 4 - 0
plugins/org.yakindu.sct.commons/build.properties

@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .

+ 32 - 0
plugins/org.yakindu.sct.commons/pom.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.yakindu.sct</groupId>
+		<artifactId>org.yakindu.sct.releng</artifactId>
+		<version>1.0.0-SNAPSHOT</version>
+		<relativePath>../org.yakindu.sct.releng/pom.xml</relativePath>
+	</parent>
+	<artifactId>org.yakindu.sct.commons</artifactId>
+	<groupId>org.yakindu.sct.plugins</groupId>
+	<packaging>eclipse-plugin</packaging>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-source-plugin</artifactId>
+				<version>${tycho-version}</version>
+				<executions>
+					<execution>
+						<id>plugin-source</id>
+						<goals>
+							<goal>plugin-source</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>

+ 139 - 0
plugins/org.yakindu.sct.commons/src/org/yakindu/sct/commons/WorkspaceClassLoaderFactory.java

@@ -0,0 +1,139 @@
+/**
+ * Copyright (c) 2011 committers of YAKINDU 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:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package org.yakindu.sct.commons;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.launching.JavaRuntime;
+
+import com.google.common.collect.Lists;
+
+/**
+ * Factory for {@link ClassLoader}s based on {@link IProject}s inside the
+ * workspace
+ * 
+ * @author koenemann - Initial contribution and API
+ * @author holger willebrandt
+ */
+public class WorkspaceClassLoaderFactory {
+
+	private final boolean resolveSimpleProjectReferences;
+
+	public WorkspaceClassLoaderFactory() {
+		this(false);
+	}
+
+	/**
+	 * @param resolveSimpleProjectReferences
+	 *            whether project references should be resolved for non-java
+	 *            projects
+	 */
+	public WorkspaceClassLoaderFactory(boolean resolveSimpleProjectReferences) {
+		this.resolveSimpleProjectReferences = resolveSimpleProjectReferences;
+	}
+
+	/**
+	 * Creates a {@link ClassLoader} that can be used to load resources from the
+	 * workspace.
+	 */
+	public ClassLoader createClassLoader(IProject project) {
+		final List<URL> urls = Lists.newArrayList();
+
+		addClasspathEntries(project, urls);
+
+		return URLClassLoader.newInstance(urls.toArray(new URL[urls.size()]),
+				WorkspaceClassLoaderFactory.class.getClassLoader());
+	}
+
+	protected void addClasspathEntries(IProject project, List<URL> urls) {
+		IJavaProject javaProject = toJavaProject(project);
+		if (javaProject != null) {
+			addJavaClasspathEntries(javaProject, urls);
+		} else {
+			try {
+				urls.add(getFileSystemFile(project).toURI().toURL());
+			} catch (MalformedURLException e1) {
+				e1.printStackTrace();
+			}
+			if (resolveSimpleProjectReferences) {
+				addReferencedProjectsClasspaths(project, urls);
+			}
+		}
+	}
+
+	protected void addReferencedProjectsClasspaths(IProject project,
+			List<URL> urls) {
+		try {
+			IProject[] referencedProjects = project.getReferencedProjects();
+			for (IProject iProject : referencedProjects) {
+				addClasspathEntries(iProject, urls);
+			}
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+
+	protected File getFileSystemFile(IResource resource) {
+		return new File(resource.getWorkspace().getRoot().getRawLocation()
+				.toFile().getAbsolutePath()
+				+ File.separator
+				+ resource.getFullPath().toFile().getAbsolutePath());
+	}
+
+	protected IJavaProject toJavaProject(IProject project) {
+		IJavaProject javaProject = JavaCore.create(project);
+		if (javaProject.exists()) {
+			return javaProject;
+		}
+		return null;
+	}
+
+	protected void addJavaClasspathEntries(IJavaProject project, List<URL> urls) {
+		try {
+			urls.addAll(Lists.newArrayList(convertClassPath(JavaRuntime
+					.computeDefaultRuntimeClassPath(project))));
+		} catch (CoreException e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * Converting string classpath to {@link URL}s.
+	 */
+	private static URL[] convertClassPath(String[] classPath) {
+		final URL[] urls = new URL[classPath.length];
+		for (int i = 0; i < classPath.length; i++) {
+			final String entry = classPath[i];
+			final IPath path = new Path(entry);
+			try {
+				final URL url = path.toFile().toURI().toURL();
+				urls[i] = url;
+			} catch (MalformedURLException e) {
+				throw new RuntimeException(
+						"Could not convert classpath entry to URL: "
+								+ path.toString(), e);
+			}
+		}
+		return urls;
+	}
+
+}