Merge branch 'refs/heads/master' into bugs/420338

Conflicts:
	plugins/org.eclipse.uml2.uml.ecore.exporter/META-INF/MANIFEST.MF
diff --git a/examples/org.eclipse.uml2.examples-feature/feature.xml b/examples/org.eclipse.uml2.examples-feature/feature.xml
index 20c6339..af80d34 100644
--- a/examples/org.eclipse.uml2.examples-feature/feature.xml
+++ b/examples/org.eclipse.uml2.examples-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.uml2.examples"
       label="%feature.label"
-      version="4.2.0.qualifier"
+      version="5.0.0.qualifier"
       provider-name="%feature.provider-name"
       image="eclipse_update_120.jpg"
       license-feature="org.eclipse.uml2.license"
diff --git a/examples/org.eclipse.uml2.examples.uml.ui/META-INF/MANIFEST.MF b/examples/org.eclipse.uml2.examples.uml.ui/META-INF/MANIFEST.MF
index 7415a69..e9f94cd 100644
--- a/examples/org.eclipse.uml2.examples.uml.ui/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.uml2.examples.uml.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.examples.uml.ui; singleton:=true
-Bundle-Version: 4.2.0.qualifier
+Bundle-Version: 5.0.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.uml2.examples.uml.ui.UMLExamplesUIPlugin$Implementation
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.uml2-feature/feature.properties b/plugins/org.eclipse.uml2-feature/feature.properties
index 9657d68..b43f79b 100644
--- a/plugins/org.eclipse.uml2-feature/feature.properties
+++ b/plugins/org.eclipse.uml2-feature/feature.properties
@@ -1,4 +1,4 @@
-# Copyright (c) 2003, 2011 IBM Corporation, Embarcadero Technologies, CEA, and others.
+# Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
@@ -9,6 +9,7 @@
 #   Kenn Hussey (Embarcadero Technologies) - 204200
 #   Kenn Hussey - 314388, 341158
 #   Kenn Hussey - 351776
+#   Christian W. Damus (CEA) - 227616
 #
 
 # NLS_MESSAGEFORMAT_VAR
@@ -28,4 +29,4 @@
 update.label = Eclipse Modeling Project Updates
 
 # "description" property - description of the feature
-description = Unified Modeling Language 2.x
+description = Run-time APIs, editors, and code generation for the Unified Modeling Language 2.x.
diff --git a/plugins/org.eclipse.uml2-feature/feature.xml b/plugins/org.eclipse.uml2-feature/feature.xml
index ec71a20..212c505 100644
--- a/plugins/org.eclipse.uml2-feature/feature.xml
+++ b/plugins/org.eclipse.uml2-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.uml2"
       label="%feature.label"
-      version="4.2.0.qualifier"
+      version="5.0.0.qualifier"
       provider-name="%feature.provider-name"
       image="eclipse_update_120.jpg"
       license-feature="org.eclipse.uml2.license"
@@ -13,7 +13,7 @@
    </description>
 
    <copyright url="http://www.eclipse.org/legal/epl-v10.html">
-      Copyright (c) 2003, 2012 IBM Corporation, Embarcadero Technologies, CEA, and others.
+      Copyright (c) 2003, 2014 IBM Corporation, Embarcadero Technologies, CEA, 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
@@ -29,6 +29,39 @@
       <discovery label="%update.label" url="http://www.eclipse.org/modeling/updates/"/>
    </url>
 
+   <includes
+         id="org.eclipse.uml2.codegen.ecore.ui"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.uml2.common"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.uml2.common.edit"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.uml2.uml"
+         version="0.0.0"/>
+
+   <includes
+         id="org.eclipse.uml2.uml.edit"
+         version="0.0.0"/>
+
+   <requires>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.core.resources"/>
+      <import plugin="org.eclipse.uml2.uml"/>
+      <import plugin="org.eclipse.emf.exporter"/>
+      <import plugin="org.eclipse.uml2.codegen.ecore"/>
+      <import plugin="org.eclipse.emf.importer"/>
+      <import plugin="org.eclipse.uml2.uml.edit"/>
+      <import plugin="org.eclipse.emf.ecore.xmi"/>
+      <import plugin="org.eclipse.emf.edit.ui"/>
+      <import plugin="org.eclipse.ui.ide"/>
+   </requires>
+
    <plugin
          id="org.eclipse.uml2"
          download-size="0"
@@ -37,48 +70,6 @@
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.uml2.codegen.ecore"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.uml2.codegen.ecore.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.uml2.common"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.uml2.common.edit"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.uml2.types"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.uml2.uml"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
          id="org.eclipse.uml2.uml.ecore.exporter"
          download-size="0"
          install-size="0"
@@ -93,13 +84,6 @@
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.uml2.uml.edit"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
          id="org.eclipse.uml2.uml.editor"
          download-size="0"
          install-size="0"
@@ -107,21 +91,14 @@
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.uml2.uml.profile.l2"
+         id="org.eclipse.uml2.uml.validation"
          download-size="0"
          install-size="0"
          version="0.0.0"
          unpack="false"/>
 
    <plugin
-         id="org.eclipse.uml2.uml.profile.l3"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.uml2.uml.resources"
+         id="org.eclipse.uml2.ant"
          download-size="0"
          install-size="0"
          version="0.0.0"
diff --git a/plugins/org.eclipse.uml2.ant/.classpath b/plugins/org.eclipse.uml2.ant/.classpath
new file mode 100644
index 0000000..c72f04c
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/.classpath
@@ -0,0 +1,8 @@
+<?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/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" output="bin.tasks" path="tasks"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.uml2.ant/.gitignore b/plugins/org.eclipse.uml2.ant/.gitignore
new file mode 100644
index 0000000..0a459fa
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/.gitignore
@@ -0,0 +1,2 @@
+bin
+bin.tasks
diff --git a/plugins/org.eclipse.uml2.ant/.project b/plugins/org.eclipse.uml2.ant/.project
new file mode 100644
index 0000000..bb89aba
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/.project
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.uml2.ant</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>
+        <buildCommand>
+            <name>org.eclipse.buckminster.ant.AntBuilder</name>
+            <arguments>
+                <dictionary>
+                    <key>given.name</key>
+                    <value>Create Ant tasks JAR</value>
+                </dictionary>
+                <dictionary>
+                    <key>script.file</key>
+                    <value>build_ant_tasks.xml</value>
+                </dictionary>
+                <dictionary>
+                    <key>derived.resource</key>
+                    <value>ant_tasks</value>
+                </dictionary>
+                <dictionary>
+                    <key>refresh.resource</key>
+                    <value>ant_tasks</value>
+                </dictionary>
+                <dictionary>
+                    <key>delta.resource</key>
+                    <value>tasks</value>
+                </dictionary>
+            </arguments>
+        </buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.uml2.ant/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.uml2.ant/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/.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.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.uml2.ant/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.ant/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..51aae90
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.uml2.ant;singleton:=true
+Bundle-Version: 5.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-ClassPath: .
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.uml2.uml,
+ org.eclipse.emf.ant,
+ org.apache.ant,
+ org.eclipse.core.resources
+Export-Package: org.eclipse.uml2.ant,
+ org.eclipse.uml2.ant.app,
+ org.eclipse.uml2.ant.taskdefs,
+ org.eclipse.uml2.ant.util
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.uml2.ant.AntPlugin
diff --git a/plugins/org.eclipse.uml2.ant/about.html b/plugins/org.eclipse.uml2.ant/about.html
new file mode 100644
index 0000000..598b368
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>May 12, 2008</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.ant/ant_tasks/.gitignore b/plugins/org.eclipse.uml2.ant/ant_tasks/.gitignore
new file mode 100644
index 0000000..d392f0e
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/ant_tasks/.gitignore
@@ -0,0 +1 @@
+*.jar
diff --git a/plugins/org.eclipse.uml2.ant/build.properties b/plugins/org.eclipse.uml2.ant/build.properties
new file mode 100644
index 0000000..b4c9113
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/build.properties
@@ -0,0 +1,30 @@
+# Copyright (c) 2013, 2014 CEA 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: 
+#   Christian W. Damus (CEA) - initial API and implementation
+#   Christian W. Damus (CEA) - 286404
+#
+
+source.. = src/
+source.ant_tasks/uml2.ant.tasks.jar = tasks/
+output.. = bin/
+output.ant_tasks/uml2.ant.tasks.jar = bin.tasks/
+bin.includes = META-INF/,\
+               .,\
+               plugin.properties,\
+               about.html,\
+               plugin.xml,\
+               ant_tasks/uml2.ant.tasks.jar
+src.includes = about.html,\
+               build_ant_tasks.xml
+jars.compile.order = .,\
+                     ant_tasks/uml2.ant.tasks.jar
+jars.extra.classpath = ./emf.ant.tasks.jar
+exclude.. = **/doc-files/**
+exclude.ant_tasks/. = **/doc-files/**
+javacSource = 1.5
+javacTarget = 1.5
diff --git a/plugins/org.eclipse.uml2.ant/build_ant_tasks.xml b/plugins/org.eclipse.uml2.ant/build_ant_tasks.xml
new file mode 100644
index 0000000..bc3ac16
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/build_ant_tasks.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.uml2.ant.tasks" default="jar.ant.tasks" basedir=".">
+	<property name="jar.name" value="uml2.ant.tasks"/>
+	<target name="jar.ant.tasks">
+		<jar destfile="ant_tasks/${jar.name}.jar">
+			<fileset dir="bin.tasks">
+				<include name="**/*.class"/>
+			</fileset>
+		</jar>
+	</target>
+	<target name="clean">
+		<delete file="ant_tasks/${jar.name}.jar" failonerror="false"/>
+	</target>
+</project>
diff --git a/plugins/org.eclipse.uml2.ant/emf.ant.tasks.jar b/plugins/org.eclipse.uml2.ant/emf.ant.tasks.jar
new file mode 100644
index 0000000..7bc801c
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/emf.ant.tasks.jar
Binary files differ
diff --git a/plugins/org.eclipse.uml2.ant/plugin.properties b/plugins/org.eclipse.uml2.ant/plugin.properties
new file mode 100644
index 0000000..801cc29
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/plugin.properties
@@ -0,0 +1,15 @@
+# Copyright (c) 2013, 2014 CEA 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: 
+#   Christian W. Damus (CEA) - initial API and implementation
+#   Christian W. Damus (CEA) - 286404
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+pluginName = UML2 Ant Tasks
+providerName = Eclipse Modeling Project 
diff --git a/plugins/org.eclipse.uml2.ant/plugin.xml b/plugins/org.eclipse.uml2.ant/plugin.xml
new file mode 100644
index 0000000..edf6549
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/plugin.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+ Copyright (c) 2013, 2014 CEA 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: 
+   Christian W. Damus (CEA) - initial API and implementation
+   Christian W. Damus (CEA) - 286404
+
+-->
+
+<plugin>
+
+  <extension point="org.eclipse.ant.core.extraClasspathEntries">
+    <extraClasspathEntry library="ant_tasks/uml2.ant.tasks.jar"/>
+  </extension>
+
+  <extension point="org.eclipse.ant.core.antTasks">
+    <antTask library="ant_tasks/uml2.ant.tasks.jar" name="uml2.defineProfile" headless="true" class="org.eclipse.uml2.ant.taskdefs.DefineProfileTask"/>
+  </extension>
+
+  <extension id="defineProfile" point="org.eclipse.core.runtime.applications">
+    <application>
+      <run class="org.eclipse.uml2.ant.app.DefineProfileApplication"/>
+    </application>
+  </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.uml2.ant/src/org/eclipse/uml2/ant/AntPlugin.java b/plugins/org.eclipse.uml2.ant/src/org/eclipse/uml2/ant/AntPlugin.java
new file mode 100644
index 0000000..6c2d074
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/src/org/eclipse/uml2/ant/AntPlugin.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2013, 2014 CEA 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:
+ *   Christian W. Damus (CEA) - Initial API and implementation
+ *   Christian W. Damus (CEA) - 286404
+ *
+ */
+package org.eclipse.uml2.ant;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * The plug-in activator/lifecycle class for the UML2 Ant plug-in.
+ */
+public class AntPlugin
+		extends Plugin {
+
+	private static AntPlugin instance;
+
+	public AntPlugin() {
+		super();
+	}
+
+	/**
+	 * Obtains the shared instance of the plug-in activator.
+	 */
+	public static AntPlugin getInstance() {
+		return instance;
+	}
+
+	@Override
+	public void start(BundleContext context)
+			throws Exception {
+
+		instance = this;
+
+		super.start(context);
+	}
+
+	@Override
+	public void stop(BundleContext context)
+			throws Exception {
+
+		super.stop(context);
+
+		instance = null;
+	}
+}
diff --git a/plugins/org.eclipse.uml2.ant/src/org/eclipse/uml2/ant/app/DefineProfileApplication.java b/plugins/org.eclipse.uml2.ant/src/org/eclipse/uml2/ant/app/DefineProfileApplication.java
new file mode 100644
index 0000000..ecca433
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/src/org/eclipse/uml2/ant/app/DefineProfileApplication.java
@@ -0,0 +1,312 @@
+/*
+ * Copyright (c) 2007, 2014 IBM Corporation, Embarcadero Technologies, CEA, 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
+ *   Kenn Hussey (Embarcadero Technologies) - 213218
+ *   Kenn Hussey (CEA) - 322715
+ *   Christian W. Damus (CEA) - 286404 (adapted from UMLImporterApplication)
+ *
+ */
+package org.eclipse.uml2.ant.app;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.BasicMonitor;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.Monitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.uml2.common.util.UML2Util;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.UMLPlugin;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+
+/**
+ * <p>
+ * An Equinox application that accepts file paths for local UML profiles to
+ * define, and options for the Profile-to-EPackage conversion, and converts each
+ * profile using the given options and saves them <i>in situ</i>.
+ * </p>
+ * <p>
+ * Invoke the application without any arguments, or just with <tt>-help</tt>,
+ * for a usage message.
+ * </p>
+ */
+public class DefineProfileApplication
+		implements IApplication {
+
+	protected static final Integer EXIT_FAILURE = 1;
+
+	protected final IDiagnosticReporter reporter;
+
+	protected List<URI> profileURIs = new java.util.ArrayList<URI>(1);
+
+	protected Map<String, String> profileDefinitionOptions = new java.util.HashMap<String, String>();
+
+	public DefineProfileApplication() {
+		this(null);
+	}
+
+	public DefineProfileApplication(IDiagnosticReporter reporter) {
+		this.reporter = (reporter == null)
+			? new IDiagnosticReporter.PrintStreamReporter(System.out)
+			: reporter;
+	}
+
+	public Object start(IApplicationContext context)
+			throws Exception {
+
+		String[] args = (String[]) context.getArguments().get(
+			IApplicationContext.APPLICATION_ARGS);
+
+		if (args == null) {
+			args = new String[0];
+		}
+
+		return run(args);
+	}
+
+	public void stop() {
+		// Pass
+	}
+
+	public Object run(final String[] args)
+			throws Exception {
+		try {
+			IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
+
+				public void run(IProgressMonitor progressMonitor)
+						throws CoreException {
+					try {
+						DefineProfileApplication.this.run(progressMonitor,
+							(String[]) args);
+					} catch (Exception exception) {
+						throw new CoreException(new Status(IStatus.ERROR,
+							UMLPlugin.getPlugin().getSymbolicName(), 0,
+							"Error running profile definition application.", //$NON-NLS-1$
+							exception));
+					} finally {
+						progressMonitor.done();
+					}
+				}
+			};
+
+			ResourcesPlugin.getWorkspace().run(runnable,
+				BasicMonitor.toIProgressMonitor(new BasicMonitor.Printing(System.out)));
+			return EXIT_OK;
+		} catch (Exception e) {
+			e.printStackTrace();
+			UMLPlugin.INSTANCE.log(e);
+			return EXIT_FAILURE;
+		}
+	}
+
+	public void run(IProgressMonitor progressMonitor, String[] arguments)
+			throws Exception {
+		run(BasicMonitor.toMonitor(progressMonitor), arguments);
+	}
+
+	public void run(Monitor monitor, String[] arguments)
+			throws Exception {
+
+		if ((arguments.length == 0)
+			|| "-help".equalsIgnoreCase(arguments[0].toString())) { //$NON-NLS-1$
+
+			printUsage();
+		} else {
+			processArguments(arguments);
+			execute(monitor);
+		}
+	}
+	
+	public void execute(Monitor monitor) throws Exception {
+		ResourceSet rset = new ResourceSetImpl();
+
+		try {
+			// One work item for clean-up
+			monitor.beginTask("Defining profile(s):", profileURIs.size() + 1); //$NON-NLS-1$
+			for (URI profileURI : profileURIs) {
+				monitor.subTask(profileURI.lastSegment());
+
+				defineProfile(rset, profileURI);
+
+				monitor.worked(1);
+			}
+		} finally {
+			try {
+				// Clean up the resource set
+				monitor.subTask("Cleaning up."); //$NON-NLS-1$
+				for (Resource next : rset.getResources()) {
+					next.unload();
+					next.eAdapters().clear();
+				}
+				rset.getResources().clear();
+				rset.eAdapters().clear();
+			} finally {
+				monitor.done();
+			}
+		}
+	}
+
+	protected void defineProfile(ResourceSet rset, URI profileURI)
+			throws Exception {
+
+		Profile profile = UML2Util.load(rset, profileURI,
+			UMLPackage.Literals.PROFILE);
+
+		if (profile != null) {
+			Map<Object, Object> context = new java.util.HashMap<Object, Object>();
+			context.put(UML2Util.QualifiedTextProvider.class,
+				new UMLUtil.QualifiedTextProvider());
+			BasicDiagnostic diagnostic = new BasicDiagnostic();
+
+			profile.define(profileDefinitionOptions, diagnostic, context);
+
+			for (Diagnostic next : diagnostic.getChildren()) {
+				reporter.report(next);
+			}
+
+			profile.eResource().save(null);
+		}
+	}
+
+	public void printUsage() {
+		System.out.println(getUsage());
+	}
+
+	protected String getUsage() {
+		final String nl = System.getProperty("line.separator"); //$NON-NLS-1$
+
+		StringBuilder result = new StringBuilder();
+
+		//@formatter:off
+		result.append("Usage: { <model.profile.uml> }+ <OPTIONS>").append(nl); //$NON-NLS-1$
+		result.append("<OPTIONS>             ::= { <DEFINE-OPTION> }*").append(nl); //$NON-NLS-1$
+		result.append("<DEFINE-OPTION>       ::= < -ECORE_TAGGED_VALUES |" ).append(nl); //$NON-NLS-1$
+		result.append("                               -REDEFINING_OPERATIONS | -REDEFINING_PROPERTIES |").append(nl); //$NON-NLS-1$
+		result.append("                               -SUBSETTING_PROPERTIES | -UNION_PROPERTIES | -DERIVED_FEATURES |" ).append(nl); //$NON-NLS-1$
+		result.append("                               -DUPLICATE_OPERATIONS | -DUPLICATE_OPERATION_INHERITANCE |" ).append(nl); //$NON-NLS-1$
+		result.append("                               -DUPLICATE_FEATURES | -DUPLICATE_FEATURE_INHERITANCE |" ).append(nl); //$NON-NLS-1$
+		result.append("                               -UNTYPED_PROPERTIES |").append(nl); //$NON-NLS-1$
+		result.append("                               -SUPER_CLASS_ORDER | -ANNOTATION_DETAILS |" ).append(nl); //$NON-NLS-1$
+		result.append("                               -INVARIANT_CONSTRAINTS | -VALIDATION_DELEGATES | -NON_API_INVARIANTS |" ).append(nl); //$NON-NLS-1$
+		result.append("                               -OPERATION_BODIES | -INVOCATION_DELEGATES |" ).append(nl); //$NON-NLS-1$
+		result.append("                               -COMMENTS | -CAMEL_CASE_NAMES |" ).append(nl); //$NON-NLS-1$
+		result.append("                               -FOREIGN_DEFINITIONS >" ).append(nl); //$NON-NLS-1$
+		result.append("                             < PROCESS | IGNORE | REPORT | DISCARD >").append(nl); //$NON-NLS-1$
+		result.append("").append(nl); //$NON-NLS-1$
+		result.append("For example:").append(nl); //$NON-NLS-1$
+		result.append("").append(nl); //$NON-NLS-1$
+		result.append("  defineProfile").append(nl); //$NON-NLS-1$
+		result.append("    ../../profiles/j2ee.profile.uml").append(nl); //$NON-NLS-1$
+		result.append("    -INVARIANT_CONSTRAINTS PROCESS -VALIDATION_DELEGATES PROCESS").append(nl); //$NON-NLS-1$
+		result.append("    -NON_API_INVARIANTS PROCESS -CAMEL_CASE_NAMES PROCESS").append(nl); //$NON-NLS-1$
+		result.append("    -UNTYPED_PROPERTIES REPORT").append(nl); //$NON-NLS-1$
+		//@formatter:on
+
+		return result.toString();
+	}
+
+	protected void processArguments(String[] arguments) {
+		int index = processModelPaths(arguments, 0);
+		while (index < arguments.length) {
+			index = processArgument(arguments, index);
+		}
+	}
+
+	protected int processModelPaths(String[] arguments, int index) {
+		while ((index < arguments.length)
+			&& (!UML2Util.isEmpty(arguments[index]))
+			&& !arguments[index].startsWith("-")) //$NON-NLS-1$
+		{
+			String location = arguments[index++];
+			profileURIs.add(URI.createFileURI(new File(location)
+				.getAbsolutePath()));
+		}
+
+		return index;
+	}
+
+	protected int processArgument(String[] arguments, int index) {
+		if (isProfileDefinitionOption(arguments[index])) {
+			profileDefinitionOptions.put(arguments[index].substring(1),
+				arguments[++index]);
+		} else {
+			handleUnrecognizedArgument(arguments[index]);
+		}
+
+		return index + 1;
+	}
+
+	protected boolean isProfileDefinitionOption(String key) {
+		String strippedKey = key.substring(1);
+
+		return UMLUtil.UML2EcoreConverter.OPTION__ECORE_TAGGED_VALUES
+			.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__REDEFINING_OPERATIONS
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__REDEFINING_PROPERTIES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__SUBSETTING_PROPERTIES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__UNION_PROPERTIES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__DERIVED_FEATURES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__DUPLICATE_OPERATIONS
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__DUPLICATE_OPERATION_INHERITANCE
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__DUPLICATE_FEATURES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__DUPLICATE_FEATURE_INHERITANCE
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__UNTYPED_PROPERTIES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__SUPER_CLASS_ORDER
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__ANNOTATION_DETAILS
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__INVARIANT_CONSTRAINTS
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__VALIDATION_DELEGATES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__NON_API_INVARIANTS
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__OPERATION_BODIES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__INVOCATION_DELEGATES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__COMMENTS
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.UML2EcoreConverter.OPTION__CAMEL_CASE_NAMES
+				.equalsIgnoreCase(strippedKey)
+			|| UMLUtil.Profile2EPackageConverter.OPTION__FOREIGN_DEFINITIONS
+				.equalsIgnoreCase(strippedKey);
+	}
+
+	protected void handleUnrecognizedArgument(String argument) {
+		throw new IllegalArgumentException(String.format(
+			"Unrecognized argument: \"%s\"", argument)); //$NON-NLS-1$
+	}
+}
diff --git a/plugins/org.eclipse.uml2.ant/src/org/eclipse/uml2/ant/app/IDiagnosticReporter.java b/plugins/org.eclipse.uml2.ant/src/org/eclipse/uml2/ant/app/IDiagnosticReporter.java
new file mode 100644
index 0000000..f28909d
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/src/org/eclipse/uml2/ant/app/IDiagnosticReporter.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2013, 2014 CEA 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:
+ *   Christian W. Damus (CEA) - Initial API and implementation
+ *   Christian W. Damus (CEA) - 286404
+ *
+ */
+package org.eclipse.uml2.ant.app;
+
+import java.io.PrintStream;
+
+import org.eclipse.emf.common.util.Diagnostic;
+
+/**
+ * An interface for objects that can consume ("report") {@link Diagnostic}s
+ * produced by the UML-to-Ecore conversion of a profile.
+ * 
+ * @see PrintStreamReporter
+ */
+public interface IDiagnosticReporter {
+
+	void report(Diagnostic diagnostic);
+
+	/**
+	 * Partial implementation of a diagnostic reporter.
+	 */
+	abstract class AbstractReporter
+			implements IDiagnosticReporter {
+
+		public AbstractReporter() {
+			super();
+		}
+
+		public void report(Diagnostic diagnostic) {
+			report(0, diagnostic);
+		}
+
+		protected void report(int depth, Diagnostic diagnostic) {
+			doReport(depth, diagnostic.getSeverity(), diagnostic.getMessage(),
+				diagnostic.getException());
+
+			if (!diagnostic.getChildren().isEmpty()) {
+				for (Diagnostic next : diagnostic.getChildren()) {
+					report(depth + 1, next);
+				}
+			}
+		}
+
+		protected abstract void doReport(int depth, int severity,
+				String message, Throwable exception);
+
+		protected String toSeverityString(int severity) {
+			switch (severity) {
+				case Diagnostic.OK :
+					return "OK"; //$NON-NLS-1$
+				case Diagnostic.INFO :
+					return "INFO"; //$NON-NLS-1$
+				case Diagnostic.WARNING :
+					return "WARN"; //$NON-NLS-1$
+				default :
+					return "ERROR"; //$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * A diagnostic reporter that prints diagnostics to a stream.
+	 */
+	class PrintStreamReporter
+			extends AbstractReporter {
+
+		private final PrintStream stream;
+
+		public PrintStreamReporter(PrintStream stream) {
+			this.stream = stream;
+		}
+
+		@Override
+		protected void doReport(int depth, int severity, String message,
+				Throwable exception) {
+
+			stream.printf("%" + (2 * depth) + "s[%5s] %s%n", //$NON-NLS-1$ //$NON-NLS-2$
+				"", //$NON-NLS-1$
+				toSeverityString(severity), message);
+		}
+
+		@Override
+		protected String toSeverityString(int severity) {
+			switch (severity) {
+				case Diagnostic.OK :
+					return "OK"; //$NON-NLS-1$
+				case Diagnostic.INFO :
+					return "INFO"; //$NON-NLS-1$
+				case Diagnostic.WARNING :
+					return "WARN"; //$NON-NLS-1$
+				default :
+					return "ERROR"; //$NON-NLS-1$
+			}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.uml2.ant/tasks/org/eclipse/uml2/ant/taskdefs/DefineProfileTask.java b/plugins/org.eclipse.uml2.ant/tasks/org/eclipse/uml2/ant/taskdefs/DefineProfileTask.java
new file mode 100644
index 0000000..a51f14a
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/tasks/org/eclipse/uml2/ant/taskdefs/DefineProfileTask.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright (c) 2013, 2014 CEA 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:
+ *   Christian W. Damus (CEA) - initial API and implementation
+ *   Christian W. Damus (CEA) - 286404
+ */
+
+package org.eclipse.uml2.ant.taskdefs;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.types.Commandline;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.resources.FileResource;
+import org.eclipse.emf.ant.taskdefs.EMFTask;
+import org.eclipse.uml2.ant.app.DefineProfileApplication;
+import org.eclipse.uml2.ant.util.AntDiagnosticReporter;
+
+
+/**
+ * <p>
+ * Creates dynamic profile definitions embedded in the profiles specified in
+ * <b>UML</b> files.
+ * </p>
+ * <p>
+ * Usage example:
+ * </p>
+ * 
+ * <pre>
+ * &lt;uml2.defineProfile profile="/Users/scott/profiles/j2ee.profile.uml"&gt;
+ *        &lt;arg line="-INVARIANT_CONSTRAINTS PROCESS -VALIDATION_DELEGATES PROCESS"/&gt;
+ *        &lt;arg line="-NON_API_INVARIANTS PROCESS -CAMEL_CASE_NAMES PROCESS"/&gt;
+ *        &lt;arg line="-UNTYPED_PROPERTIES REPORT"/&gt;
+ * &lt;/uml2.defineProfile&gt;
+ * </pre>
+ * <p>
+ * Defining several profiles at once:
+ * </p>
+ * 
+ * <pre>
+ * &lt;uml2.defineProfile&gt;
+ *        &lt;profile file="/Users/scott/profiles/j2ee.profile.uml"/&gt;
+ *        &lt;profile file="/Users/scott/profiles/rdbms.profile.uml"/&gt;
+ *        &lt;profile file="/Users/scott/profiles/jpa.profile.uml"/&gt;
+ *        &lt;arg line="-INVARIANT_CONSTRAINTS PROCESS -VALIDATION_DELEGATES PROCESS"/&gt;
+ *        &lt;arg line="-NON_API_INVARIANTS PROCESS -CAMEL_CASE_NAMES PROCESS"/&gt;
+ *        &lt;arg line="-UNTYPED_PROPERTIES REPORT"/&gt;
+ * &lt;/uml2.defineProfile&gt;
+ * </pre>
+ * <p>
+ * Or, using a fileset:
+ * </p>
+ * 
+ * <pre>
+ * &lt;fileset dir="${profiles.dir}" id="profiles.to.define"&gt;
+ *        &lt;include name="*.profile.uml"/&gt;
+ * &lt;/fileset&gt;
+ * &lt;uml2.defineProfile&gt;
+ *        &lt;profileset refid="profiles.to.define"/&gt;
+ *        &lt;arg line="-INVARIANT_CONSTRAINTS PROCESS -VALIDATION_DELEGATES PROCESS"/&gt;
+ *        &lt;arg line="-NON_API_INVARIANTS PROCESS -CAMEL_CASE_NAMES PROCESS"/&gt;
+ *        &lt;arg line="-UNTYPED_PROPERTIES REPORT"/&gt;
+ * &lt;/uml2.defineProfile&gt;
+ * </pre>
+ * 
+ */
+public class DefineProfileTask
+		extends EMFTask {
+		
+	private Commandline commandline = new Commandline();
+
+	private List<ProfileLocation> profileLocations = new java.util.ArrayList<ProfileLocation>(
+		1);
+
+	private List<FileSet> profileSets = new java.util.ArrayList<FileSet>(1);
+
+	protected Commandline getCommandline() {
+		return commandline;
+	}
+
+	public Commandline.Argument createArg() {
+		return getCommandline().createArgument();
+	}
+
+	public ProfileLocation createProfile() {
+		ProfileLocation result = new ProfileLocation();
+		profileLocations.add(result);
+		return result;
+	}
+
+	public FileSet createProfileSet() {
+		FileSet result = new FileSet();
+		profileSets.add(result);
+		return result;
+	}
+
+	public void setProfile(File location) {
+		createProfile().setFile(location);
+	}
+
+	@Override
+	protected void checkAttributes()
+			throws BuildException {
+
+		assertTrue("No profile locations specified.",
+			!profileLocations.isEmpty() || !profileSets.isEmpty());
+		if (!profileLocations.isEmpty()) {
+			for (ProfileLocation profile : profileLocations) {
+				profile.checkAttributes();
+			}
+		} else {
+			assertTrue("Profile sets do not include any profile resources.",
+				getProfileSets().hasNext());
+		}
+
+		super.checkAttributes();
+	}
+
+	protected Iterator<File> getProfileSets() {
+		return new Iterator<File>() {
+
+			private Iterator<FileSet> fileSets = profileSets.iterator();
+
+			private Iterator<Resource> resources;
+
+			private File preparedNext;
+
+			public boolean hasNext() {
+				out : while (preparedNext == null) {
+					while ((resources == null) || !resources.hasNext()) {
+						if (!fileSets.hasNext()) {
+							break out;
+						}
+
+						resources = fileSets.next().iterator();
+					}
+
+					if (resources.hasNext()) {
+						preparedNext = as(resources.next(), FileResource.class)
+							.getFile();
+					}
+				}
+
+				return preparedNext != null;
+			}
+
+			public File next() {
+				if (!hasNext()) {
+					throw new NoSuchElementException();
+				}
+
+				File result = preparedNext;
+				preparedNext = null;
+				return result;
+			}
+
+			public void remove() {
+				throw new UnsupportedOperationException("remove"); //$NON-NLS-1$
+			}
+		};
+	}
+
+	static <T> T as(Object o, Class<T> type) {
+		return type.isInstance(o)
+			? type.cast(o)
+			: null;
+	}
+
+	@Override
+	protected void doExecute()
+			throws Exception {
+
+		// collect profiles from <profile> elements (and 'profile' attribute)
+		for (ProfileLocation profile : profileLocations) {
+			getCommandline().createArgument(true).setFile(profile.getFile());
+		}
+
+		// collect profiles from <profileSet> elements
+		for (Iterator<File> profileSets = getProfileSets(); profileSets
+			.hasNext();) {
+
+			getCommandline().createArgument(true).setFile(profileSets.next());
+		}
+
+		new DefineProfileApplication(AntDiagnosticReporter.create(this))
+			.run(getCommandline().getArguments());
+	}
+
+	//
+	// Nested types
+	//
+
+	public static class ProfileLocation {
+
+		private File file;
+
+		public void setFile(File file) {
+			this.file = file;
+		}
+
+		public File getFile() {
+			return file;
+		}
+
+		protected void checkAttributes()
+				throws BuildException {
+
+			assertTrue("Profile element missing file location.", file != null);
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.ant/tasks/org/eclipse/uml2/ant/util/AntDiagnosticReporter.java b/plugins/org.eclipse.uml2.ant/tasks/org/eclipse/uml2/ant/util/AntDiagnosticReporter.java
new file mode 100644
index 0000000..97a60a0
--- /dev/null
+++ b/plugins/org.eclipse.uml2.ant/tasks/org/eclipse/uml2/ant/util/AntDiagnosticReporter.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2013, 2014 CEA 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:
+ *   Christian W. Damus (CEA) - Initial API and implementation
+ *   Christian W. Damus (CEA) - 286404
+ *
+ */
+package org.eclipse.uml2.ant.util;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Target;
+import org.apache.tools.ant.Task;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.uml2.ant.app.IDiagnosticReporter;
+
+
+/**
+ * A diagnostic reporter that delegates logging to Ant.
+ */
+public abstract class AntDiagnosticReporter
+		extends IDiagnosticReporter.AbstractReporter {
+
+	protected AntDiagnosticReporter() {
+		super();
+	}
+
+	public static AntDiagnosticReporter create(Project project) {
+		return new ProjectLogger(project);
+	}
+
+	public static AntDiagnosticReporter create(Target target) {
+		return new TargetLogger(target);
+	}
+
+	public static AntDiagnosticReporter create(Task task) {
+		return new TaskLogger(task);
+	}
+
+	public void log(Diagnostic diagnostic) {
+	}
+
+	@Override
+	protected void doReport(int depth, int severity, String message,
+			Throwable exception) {
+
+		doLog(toAntLevel(severity), indent(message, depth), exception);
+	}
+
+	protected abstract void doLog(int level, String message, Throwable exception);
+
+	protected String indent(String text, int tabs) {
+		String result = text;
+
+		if (tabs > 0) {
+			StringBuilder buf = new StringBuilder(text.length() + tabs * 2);
+			for (int i = 0; i < tabs; i++) {
+				buf.append("  "); //$NON-NLS-1$
+			}
+			buf.append(text);
+			result = buf.toString();
+		}
+
+		return result;
+	}
+
+	protected int toAntLevel(int diagnosticSeverity) {
+		switch (diagnosticSeverity) {
+			case Diagnostic.OK :
+				return Project.MSG_VERBOSE;
+			case Diagnostic.INFO :
+				return Project.MSG_INFO;
+			case Diagnostic.WARNING :
+				return Project.MSG_WARN;
+			default :
+				return Project.MSG_ERR;
+		}
+	}
+
+	//
+	// Nested types
+	//
+
+	private static class ProjectLogger
+			extends AntDiagnosticReporter {
+
+		private final Project project;
+
+		ProjectLogger(Project project) {
+			this.project = project;
+		}
+
+		@Override
+		protected void doLog(int level, String message, Throwable exception) {
+			project.log(message, exception, level);
+		}
+	}
+
+	private static class TargetLogger
+			extends AntDiagnosticReporter {
+
+		private final Target target;
+
+		TargetLogger(Target target) {
+			this.target = target;
+		}
+
+		@Override
+		protected void doLog(int level, String message, Throwable exception) {
+			target.getProject().log(target, message, exception, level);
+		}
+	}
+
+	private static class TaskLogger
+			extends AntDiagnosticReporter {
+
+		private final Task task;
+
+		TaskLogger(Task task) {
+			this.task = task;
+		}
+
+		@Override
+		protected void doLog(int level, String message, Throwable exception) {
+			task.getProject().log(task, message, exception, level);
+		}
+	}
+}
diff --git a/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/.gitignore b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/.project b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/.project
new file mode 100644
index 0000000..2268a33
--- /dev/null
+++ b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.uml2.codegen.ecore.ui-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/build.properties b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/build.properties
new file mode 100644
index 0000000..4fc9841
--- /dev/null
+++ b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/build.properties
@@ -0,0 +1,15 @@
+# Copyright (c) 2003, 2011 IBM Corporation, CEA, 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
+#   Kenn Hussey (CEA) - 351776
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = eclipse_update_120.jpg,\
+               feature.*
diff --git a/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/eclipse_update_120.jpg b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/eclipse_update_120.jpg
Binary files differ
diff --git a/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/feature.properties b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/feature.properties
new file mode 100644
index 0000000..7fbb3a4
--- /dev/null
+++ b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/feature.properties
@@ -0,0 +1,32 @@
+# Copyright (c) 2003, 2014 IBM Corporation, Embarcadero Technologies, CEA, 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
+#   Kenn Hussey (Embarcadero Technologies) - 204200
+#   Kenn Hussey - 314388, 341158, 351776
+#   Christian W. Damus (CEA) - 227616
+#   Kenn Hussey (CEA) - 227616
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+
+# "feature.label" property - name of the feature
+feature.label = UML2 Ecore Code Generation
+
+# "feature.provider-name" property - name of the company that provides the feature
+feature.provider-name = Eclipse Modeling Project
+
+# "update.label" property - label for the update site
+update.label = Eclipse Modeling Project Updates
+
+# "description" property - description of the feature
+description = Provides code generation templates for generation of EMF-based Java APIs for class models described with UML.
diff --git a/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/feature.xml b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/feature.xml
new file mode 100644
index 0000000..ef7ae9e
--- /dev/null
+++ b/plugins/org.eclipse.uml2.codegen.ecore.ui-feature/feature.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.uml2.codegen.ecore.ui"
+      label="%feature.label"
+      version="4.2.0.qualifier"
+      provider-name="%feature.provider-name"
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.uml2.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="http://www.eclipse.org/legal/epl-v10.html">
+      Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%update.label" url="http://www.eclipse.org/modeling/updates/"/>
+      <discovery label="%update.label" url="http://www.eclipse.org/modeling/updates/"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.core.resources"/>
+      <import plugin="org.eclipse.emf.ecore.xmi"/>
+      <import plugin="org.eclipse.emf.codegen.ecore"/>
+      <import plugin="org.eclipse.jdt.core"/>
+      <import plugin="org.eclipse.uml2.types"/>
+      <import plugin="org.eclipse.emf.codegen.ecore.ui"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.uml2.codegen.ecore"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.uml2.codegen.ecore.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/plugins/org.eclipse.uml2.codegen.ecore.ui/about.ini b/plugins/org.eclipse.uml2.codegen.ecore.ui/about.ini
new file mode 100644
index 0000000..cd69eeb
--- /dev/null
+++ b/plugins/org.eclipse.uml2.codegen.ecore.ui/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText = %aboutText
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage = modeling32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (translated)
+# needed for primary features only
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+# optional
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
diff --git a/plugins/org.eclipse.uml2.codegen.ecore.ui/about.mappings b/plugins/org.eclipse.uml2.codegen.ecore.ui/about.mappings
new file mode 100644
index 0000000..eb5946f
--- /dev/null
+++ b/plugins/org.eclipse.uml2.codegen.ecore.ui/about.mappings
@@ -0,0 +1,17 @@
+# Copyright (c) 2006, 2013 IBM Corporation, CEA, 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
+#   Christian W. Damus (CEA) - 227616
+#
+
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.codegen.ecore.ui/about.properties b/plugins/org.eclipse.uml2.codegen.ecore.ui/about.properties
new file mode 100644
index 0000000..88f63d5
--- /dev/null
+++ b/plugins/org.eclipse.uml2.codegen.ecore.ui/about.properties
@@ -0,0 +1,29 @@
+# Copyright (c) 2006, 2014 IBM Corporation, Embarcadero Technologies, CEA, 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
+#   Kenn Hussey (Embarcadero Technologies) - 219804, 204200
+#   Kenn Hussey - 323181
+#   Christian W. Damus (CEA) - 227616
+#   Kenn Hussey (CEA) - 227616
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+aboutText = UML2 Ecore Code Generation\n\
+\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+(c) Copyright Eclipse contributors and others 2003, 2014.  All rights reserved.\n\
+Visit http://www.eclipse.org/uml2
diff --git a/plugins/org.eclipse.uml2.codegen.ecore.ui/build.properties b/plugins/org.eclipse.uml2.codegen.ecore.ui/build.properties
index 3f3c066..5d27483 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore.ui/build.properties
+++ b/plugins/org.eclipse.uml2.codegen.ecore.ui/build.properties
@@ -1,18 +1,19 @@
-# Copyright (c) 2005, 2007 IBM Corporation and others.
+# Copyright (c) 2005, 2013 IBM Corporation, CEA, 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: 
+# Contributors:
 #   IBM - initial API and implementation
+#   Christian W. Damus (CEA) - 227616
 #
-# $Id: build.properties,v 1.8 2007/04/04 02:19:57 khussey Exp $
 
 # NLS_MESSAGEFORMAT_VAR
 source.. = src/
 output.. = bin/
-bin.includes = about.html,\
+bin.includes = about.*,\
+               modeling32.png,\
                plugin.*,\
                .,\
                META-INF/
diff --git a/plugins/org.eclipse.uml2.codegen.ecore.ui/modeling32.png b/plugins/org.eclipse.uml2.codegen.ecore.ui/modeling32.png
new file mode 100644
index 0000000..6b08de2
--- /dev/null
+++ b/plugins/org.eclipse.uml2.codegen.ecore.ui/modeling32.png
Binary files differ
diff --git a/plugins/org.eclipse.uml2.common-feature/.gitignore b/plugins/org.eclipse.uml2.common-feature/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common-feature/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.uml2.common-feature/.project b/plugins/org.eclipse.uml2.common-feature/.project
new file mode 100644
index 0000000..72bac19
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common-feature/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.uml2.common-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.uml2.common-feature/build.properties b/plugins/org.eclipse.uml2.common-feature/build.properties
new file mode 100644
index 0000000..4fc9841
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common-feature/build.properties
@@ -0,0 +1,15 @@
+# Copyright (c) 2003, 2011 IBM Corporation, CEA, 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
+#   Kenn Hussey (CEA) - 351776
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = eclipse_update_120.jpg,\
+               feature.*
diff --git a/plugins/org.eclipse.uml2.common-feature/eclipse_update_120.jpg b/plugins/org.eclipse.uml2.common-feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common-feature/eclipse_update_120.jpg
Binary files differ
diff --git a/plugins/org.eclipse.uml2.common-feature/feature.properties b/plugins/org.eclipse.uml2.common-feature/feature.properties
new file mode 100644
index 0000000..9a108a1
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common-feature/feature.properties
@@ -0,0 +1,32 @@
+# Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
+#   Kenn Hussey (Embarcadero Technologies) - 204200
+#   Kenn Hussey - 314388, 341158
+#   Kenn Hussey - 351776
+#   Christian W. Damus (CEA) - 227616
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+
+# "feature.label" property - name of the feature
+feature.label = UML2 Common Run-time APIs
+
+# "feature.provider-name" property - name of the company that provides the feature
+feature.provider-name = Eclipse Modeling Project
+
+# "update.label" property - label for the update site
+update.label = Eclipse Modeling Project Updates
+
+# "description" property - description of the feature
+description = The common run-time APIs supporting the implementation of the UML metamodel and any model generated by the UML2 SDK from a UML source.
diff --git a/plugins/org.eclipse.uml2.common-feature/feature.xml b/plugins/org.eclipse.uml2.common-feature/feature.xml
new file mode 100644
index 0000000..f759d31
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common-feature/feature.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.uml2.common"
+      label="%feature.label"
+      version="4.2.0.qualifier"
+      provider-name="%feature.provider-name"
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.uml2.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="http://www.eclipse.org/legal/epl-v10.html">
+      Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%update.label" url="http://www.eclipse.org/modeling/updates/"/>
+      <discovery label="%update.label" url="http://www.eclipse.org/modeling/updates/"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.emf.ecore"/>
+      <import plugin="org.eclipse.core.runtime"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.uml2.common"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.uml2.types"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/plugins/org.eclipse.uml2.common.edit-feature/.gitignore b/plugins/org.eclipse.uml2.common.edit-feature/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common.edit-feature/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.uml2.common.edit-feature/.project b/plugins/org.eclipse.uml2.common.edit-feature/.project
new file mode 100644
index 0000000..55d73eb
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common.edit-feature/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.uml2.common.edit-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.uml2.common.edit-feature/build.properties b/plugins/org.eclipse.uml2.common.edit-feature/build.properties
new file mode 100644
index 0000000..4fc9841
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common.edit-feature/build.properties
@@ -0,0 +1,15 @@
+# Copyright (c) 2003, 2011 IBM Corporation, CEA, 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
+#   Kenn Hussey (CEA) - 351776
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = eclipse_update_120.jpg,\
+               feature.*
diff --git a/plugins/org.eclipse.uml2.common.edit-feature/eclipse_update_120.jpg b/plugins/org.eclipse.uml2.common.edit-feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common.edit-feature/eclipse_update_120.jpg
Binary files differ
diff --git a/plugins/org.eclipse.uml2.common.edit-feature/feature.properties b/plugins/org.eclipse.uml2.common.edit-feature/feature.properties
new file mode 100644
index 0000000..18ea570
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common.edit-feature/feature.properties
@@ -0,0 +1,32 @@
+# Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
+#   Kenn Hussey (Embarcadero Technologies) - 204200
+#   Kenn Hussey - 314388, 341158
+#   Kenn Hussey - 351776
+#   Christian W. Damus (CEA) - 227616
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+
+# "feature.label" property - name of the feature
+feature.label = UML2 Common Model Edit Support
+
+# "feature.provider-name" property - name of the company that provides the feature
+feature.provider-name = Eclipse Modeling Project
+
+# "update.label" property - label for the update site
+update.label = Eclipse Modeling Project Updates
+
+# "description" property - description of the feature
+description = The model edit-providers framework supporting editors (graphical and otherwise) for the UML metamodel and any model generated by the UML2 SDK from a UML source.
diff --git a/plugins/org.eclipse.uml2.common.edit-feature/feature.xml b/plugins/org.eclipse.uml2.common.edit-feature/feature.xml
new file mode 100644
index 0000000..2203fea
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common.edit-feature/feature.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.uml2.common.edit"
+      label="%feature.label"
+      version="4.2.0.qualifier"
+      provider-name="%feature.provider-name"
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.uml2.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="http://www.eclipse.org/legal/epl-v10.html">
+      Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%update.label" url="http://www.eclipse.org/modeling/updates/"/>
+      <discovery label="%update.label" url="http://www.eclipse.org/modeling/updates/"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.uml2.common"/>
+      <import plugin="org.eclipse.emf.ecore.edit"/>
+      <import plugin="org.eclipse.emf.ecore.change"/>
+      <import plugin="org.eclipse.core.runtime"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.uml2.common.edit"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/plugins/org.eclipse.uml2.common.edit/about.ini b/plugins/org.eclipse.uml2.common.edit/about.ini
new file mode 100644
index 0000000..cd69eeb
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common.edit/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText = %aboutText
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage = modeling32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (translated)
+# needed for primary features only
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+# optional
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
diff --git a/plugins/org.eclipse.uml2.common.edit/about.mappings b/plugins/org.eclipse.uml2.common.edit/about.mappings
new file mode 100644
index 0000000..eb5946f
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common.edit/about.mappings
@@ -0,0 +1,17 @@
+# Copyright (c) 2006, 2013 IBM Corporation, CEA, 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
+#   Christian W. Damus (CEA) - 227616
+#
+
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.common.edit/about.properties b/plugins/org.eclipse.uml2.common.edit/about.properties
new file mode 100644
index 0000000..adc85df
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common.edit/about.properties
@@ -0,0 +1,28 @@
+# Copyright (c) 2006, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
+#   Kenn Hussey (Embarcadero Technologies) - 219804, 204200
+#   Kenn Hussey - 323181
+#   Christian W. Damus (CEA) - 227616
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+aboutText = UML2 Common Model Edit Support\n\
+\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+(c) Copyright Eclipse contributors and others 2003, 2013.  All rights reserved.\n\
+Visit http://www.eclipse.org/uml2
diff --git a/plugins/org.eclipse.uml2.common.edit/build.properties b/plugins/org.eclipse.uml2.common.edit/build.properties
index 308032f..97da4ad 100644
--- a/plugins/org.eclipse.uml2.common.edit/build.properties
+++ b/plugins/org.eclipse.uml2.common.edit/build.properties
@@ -1,4 +1,4 @@
-# Copyright (c) 2005, 2008 IBM Corporation, Embarcadero Technologies, and others.
+# Copyright (c) 2005, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
@@ -7,13 +7,14 @@
 # Contributors: 
 #   IBM - initial API and implementation
 #   Kenn Hussey (Embarcadero Technologies) - 204200
+#   Christian W. Damus (CEA) - 227616
 #
-# $Id: build.properties,v 1.11 2008/02/19 23:16:36 khussey Exp $
 
 # NLS_MESSAGEFORMAT_VAR
 source.. = src/
 output.. = bin/
-bin.includes = about.html,\
+bin.includes = about.*,\
+               modeling32.png,\
                plugin.properties,\
                .,\
                META-INF/
diff --git a/plugins/org.eclipse.uml2.common.edit/modeling32.png b/plugins/org.eclipse.uml2.common.edit/modeling32.png
new file mode 100644
index 0000000..6b08de2
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common.edit/modeling32.png
Binary files differ
diff --git a/plugins/org.eclipse.uml2.common/about.ini b/plugins/org.eclipse.uml2.common/about.ini
new file mode 100644
index 0000000..cd69eeb
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText = %aboutText
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage = modeling32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (translated)
+# needed for primary features only
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+# optional
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
diff --git a/plugins/org.eclipse.uml2.common/about.mappings b/plugins/org.eclipse.uml2.common/about.mappings
new file mode 100644
index 0000000..eb5946f
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common/about.mappings
@@ -0,0 +1,17 @@
+# Copyright (c) 2006, 2013 IBM Corporation, CEA, 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
+#   Christian W. Damus (CEA) - 227616
+#
+
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.common/about.properties b/plugins/org.eclipse.uml2.common/about.properties
new file mode 100644
index 0000000..b593b0c
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common/about.properties
@@ -0,0 +1,28 @@
+# Copyright (c) 2006, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
+#   Kenn Hussey (Embarcadero Technologies) - 219804, 204200
+#   Kenn Hussey - 323181
+#   Christian W. Damus (CEA) - 227616
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+aboutText = UML2 Common Run-time APIs\n\
+\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+(c) Copyright Eclipse contributors and others 2003, 2013.  All rights reserved.\n\
+Visit http://www.eclipse.org/uml2
diff --git a/plugins/org.eclipse.uml2.common/build.properties b/plugins/org.eclipse.uml2.common/build.properties
index faf722a..97da4ad 100644
--- a/plugins/org.eclipse.uml2.common/build.properties
+++ b/plugins/org.eclipse.uml2.common/build.properties
@@ -1,4 +1,4 @@
-# Copyright (c) 2005, 2008 IBM Corporation, Embarcadero Technologies, and others.
+# Copyright (c) 2005, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
@@ -7,13 +7,14 @@
 # Contributors: 
 #   IBM - initial API and implementation
 #   Kenn Hussey (Embarcadero Technologies) - 204200
+#   Christian W. Damus (CEA) - 227616
 #
-# $Id: build.properties,v 1.11 2008/02/19 23:16:37 khussey Exp $
 
 # NLS_MESSAGEFORMAT_VAR
 source.. = src/
 output.. = bin/
-bin.includes = about.html,\
+bin.includes = about.*,\
+               modeling32.png,\
                plugin.properties,\
                .,\
                META-INF/
diff --git a/plugins/org.eclipse.uml2.common/modeling32.png b/plugins/org.eclipse.uml2.common/modeling32.png
new file mode 100644
index 0000000..6b08de2
--- /dev/null
+++ b/plugins/org.eclipse.uml2.common/modeling32.png
Binary files differ
diff --git a/plugins/org.eclipse.uml2.sdk-feature/feature.properties b/plugins/org.eclipse.uml2.sdk-feature/feature.properties
index 422ea44..ff71ab0 100644
--- a/plugins/org.eclipse.uml2.sdk-feature/feature.properties
+++ b/plugins/org.eclipse.uml2.sdk-feature/feature.properties
@@ -1,4 +1,4 @@
-# Copyright (c) 2003, 2011 IBM Corporation, Embarcadero Technologies, CEA, and others.
+# Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
@@ -9,6 +9,7 @@
 #   Kenn Hussey (Embarcadero Technologies) - 204200
 #   Kenn Hussey - 314388, 341158
 #   Kenn Hussey (CEA) - 351776
+#   Christian W. Damus (CEA) - 227616
 #
 
 # NLS_MESSAGEFORMAT_VAR
@@ -28,4 +29,4 @@
 update.label = Eclipse Modeling Project Updates
 
 # "description" property - description of the feature
-description = Unified Modeling Language 2.x SDK
+description = Developer resources (documentation, source code, examples) for the run-time APIs, editors, and code generation for the Unified Modeling Language 2.x.
diff --git a/plugins/org.eclipse.uml2.sdk-feature/feature.xml b/plugins/org.eclipse.uml2.sdk-feature/feature.xml
index 6da1851..aab2f75 100644
--- a/plugins/org.eclipse.uml2.sdk-feature/feature.xml
+++ b/plugins/org.eclipse.uml2.sdk-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.uml2.sdk"
       label="%feature.label"
-      version="4.2.0.qualifier"
+      version="5.0.0.qualifier"
       provider-name="%feature.provider-name"
       image="eclipse_update_120.jpg"
       license-feature="org.eclipse.uml2.license"
@@ -13,7 +13,7 @@
    </description>
 
    <copyright url="http://www.eclipse.org/legal/epl-v10.html">
-      Copyright (c) 2003, 2012 IBM Corporation, Embarcadero Technologies, CEA, and others.
+      Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
diff --git a/plugins/org.eclipse.uml2.uml-feature/.gitignore b/plugins/org.eclipse.uml2.uml-feature/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml-feature/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.uml2.uml-feature/.project b/plugins/org.eclipse.uml2.uml-feature/.project
new file mode 100644
index 0000000..5e7cea7
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml-feature/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.uml2.uml-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.uml2.uml-feature/build.properties b/plugins/org.eclipse.uml2.uml-feature/build.properties
new file mode 100644
index 0000000..4fc9841
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml-feature/build.properties
@@ -0,0 +1,15 @@
+# Copyright (c) 2003, 2011 IBM Corporation, CEA, 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
+#   Kenn Hussey (CEA) - 351776
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = eclipse_update_120.jpg,\
+               feature.*
diff --git a/plugins/org.eclipse.uml2.uml-feature/eclipse_update_120.jpg b/plugins/org.eclipse.uml2.uml-feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml-feature/eclipse_update_120.jpg
Binary files differ
diff --git a/plugins/org.eclipse.uml2.uml-feature/feature.properties b/plugins/org.eclipse.uml2.uml-feature/feature.properties
new file mode 100644
index 0000000..e2f6fc6
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml-feature/feature.properties
@@ -0,0 +1,32 @@
+# Copyright (c) 2003, 2014 IBM Corporation, Embarcadero Technologies, CEA, 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
+#   Kenn Hussey (Embarcadero Technologies) - 204200
+#   Kenn Hussey - 314388, 341158, 351776
+#   Christian W. Damus (CEA) - 227616
+#   Kenn Hussey (CEA) - 227616
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+
+# "feature.label" property - name of the feature
+feature.label = UML 2.x Metamodel
+
+# "feature.provider-name" property - name of the company that provides the feature
+feature.provider-name = Eclipse Modeling Project
+
+# "update.label" property - label for the update site
+update.label = Eclipse Modeling Project Updates
+
+# "description" property - description of the feature
+description = Implementation of the Unified Modeling Language (UML) 2.x metamodel and supporting model resources such as standard profiles and model libraries.
diff --git a/plugins/org.eclipse.uml2.uml-feature/feature.xml b/plugins/org.eclipse.uml2.uml-feature/feature.xml
new file mode 100644
index 0000000..a972821
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml-feature/feature.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.uml2.uml"
+      label="%feature.label"
+      version="5.0.0.qualifier"
+      provider-name="%feature.provider-name"
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.uml2.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="http://www.eclipse.org/legal/epl-v10.html">
+      Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%update.label" url="http://www.eclipse.org/modeling/updates/"/>
+      <discovery label="%update.label" url="http://www.eclipse.org/modeling/updates/"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.emf.ecore"/>
+      <import plugin="org.eclipse.emf.ecore.xmi"/>
+      <import plugin="org.eclipse.uml2.common"/>
+      <import plugin="org.eclipse.uml2.types"/>
+      <import plugin="org.eclipse.emf.mapping.ecore2xml"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.uml2.uml"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.uml2.uml.profile.l2"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.uml2.uml.profile.l3"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.uml2.uml.resources"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/plugins/org.eclipse.uml2.uml.ecore.exporter/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml.ecore.exporter/META-INF/MANIFEST.MF
index 5b13e95..c4f5c08 100644
--- a/plugins/org.eclipse.uml2.uml.ecore.exporter/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.uml2.uml.ecore.exporter/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.uml.ecore.exporter; singleton:=true
-Bundle-Version: 2.7.100.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.uml2.uml.ecore.exporter.UMLExporterPlugin$Implementation
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.uml2.uml.ecore.importer/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml.ecore.importer/META-INF/MANIFEST.MF
index 69871ec..0d13e8c 100644
--- a/plugins/org.eclipse.uml2.uml.ecore.importer/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.uml2.uml.ecore.importer/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.uml.ecore.importer;singleton:=true
-Bundle-Version: 2.8.0.qualifier
+Bundle-Version: 3.0.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.uml2.uml.ecore.importer.UMLImporterPlugin$Implementation
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.uml2.uml.edit-feature/.gitignore b/plugins/org.eclipse.uml2.uml.edit-feature/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.edit-feature/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/plugins/org.eclipse.uml2.uml.edit-feature/.project b/plugins/org.eclipse.uml2.uml.edit-feature/.project
new file mode 100644
index 0000000..79d7720
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.edit-feature/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.uml2.uml.edit-feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.uml2.uml.edit-feature/build.properties b/plugins/org.eclipse.uml2.uml.edit-feature/build.properties
new file mode 100644
index 0000000..4fc9841
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.edit-feature/build.properties
@@ -0,0 +1,15 @@
+# Copyright (c) 2003, 2011 IBM Corporation, CEA, 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
+#   Kenn Hussey (CEA) - 351776
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+bin.includes = eclipse_update_120.jpg,\
+               feature.*
diff --git a/plugins/org.eclipse.uml2.uml.edit-feature/eclipse_update_120.jpg b/plugins/org.eclipse.uml2.uml.edit-feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.edit-feature/eclipse_update_120.jpg
Binary files differ
diff --git a/plugins/org.eclipse.uml2.uml.edit-feature/feature.properties b/plugins/org.eclipse.uml2.uml.edit-feature/feature.properties
new file mode 100644
index 0000000..b784b65
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.edit-feature/feature.properties
@@ -0,0 +1,32 @@
+# Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
+#   Kenn Hussey (Embarcadero Technologies) - 204200
+#   Kenn Hussey - 314388, 341158
+#   Kenn Hussey - 351776
+#   Christian W. Damus (CEA) - 227616
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+
+# "feature.label" property - name of the feature
+feature.label = UML 2.x Metamodel Edit Support
+
+# "feature.provider-name" property - name of the company that provides the feature
+feature.provider-name = Eclipse Modeling Project
+
+# "update.label" property - label for the update site
+update.label = Eclipse Modeling Project Updates
+
+# "description" property - description of the feature
+description = Model edit-providers for the UML 2.x metamodel.  These support editors (graphical and otherwise) for UML models.
diff --git a/plugins/org.eclipse.uml2.uml.edit-feature/feature.xml b/plugins/org.eclipse.uml2.uml.edit-feature/feature.xml
new file mode 100644
index 0000000..79f279e
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.edit-feature/feature.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="org.eclipse.uml2.uml.edit"
+      label="%feature.label"
+      version="5.0.0.qualifier"
+      provider-name="%feature.provider-name"
+      image="eclipse_update_120.jpg"
+      license-feature="org.eclipse.uml2.license"
+      license-feature-version="1.0.0.qualifier">
+
+   <description>
+      %description
+   </description>
+
+   <copyright url="http://www.eclipse.org/legal/epl-v10.html">
+      Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <url>
+      <update label="%update.label" url="http://www.eclipse.org/modeling/updates/"/>
+      <discovery label="%update.label" url="http://www.eclipse.org/modeling/updates/"/>
+   </url>
+
+   <requires>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.emf.edit"/>
+      <import plugin="org.eclipse.uml2.common.edit"/>
+      <import plugin="org.eclipse.uml2.uml"/>
+   </requires>
+
+   <plugin
+         id="org.eclipse.uml2.uml.edit"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/plugins/org.eclipse.uml2.uml.edit/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml.edit/META-INF/MANIFEST.MF
index ad9de54..8627056 100644
--- a/plugins/org.eclipse.uml2.uml.edit/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.uml2.uml.edit/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.uml.edit; singleton:=true
-Bundle-Version: 4.2.0.qualifier
+Bundle-Version: 5.0.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.uml2.uml.edit.UMLEditPlugin$Implementation
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.uml2.uml.edit/about.ini b/plugins/org.eclipse.uml2.uml.edit/about.ini
new file mode 100644
index 0000000..cd69eeb
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.edit/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText = %aboutText
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage = modeling32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (translated)
+# needed for primary features only
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+# optional
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
diff --git a/plugins/org.eclipse.uml2.uml.edit/about.mappings b/plugins/org.eclipse.uml2.uml.edit/about.mappings
new file mode 100644
index 0000000..eb5946f
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.edit/about.mappings
@@ -0,0 +1,17 @@
+# Copyright (c) 2006, 2013 IBM Corporation, CEA, 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
+#   Christian W. Damus (CEA) - 227616
+#
+
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.uml.edit/about.properties b/plugins/org.eclipse.uml2.uml.edit/about.properties
new file mode 100644
index 0000000..e28e182
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.edit/about.properties
@@ -0,0 +1,28 @@
+# Copyright (c) 2006, 2013 IBM Corporation, Embarcadero Technologies, CEA, 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
+#   Kenn Hussey (Embarcadero Technologies) - 219804, 204200
+#   Kenn Hussey - 323181
+#   Christian W. Damus (CEA) - 227616
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+aboutText = UML 2.x Metamodel Edit Support\n\
+\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+(c) Copyright Eclipse contributors and others 2003, 2013.  All rights reserved.\n\
+Visit http://www.eclipse.org/uml2
diff --git a/plugins/org.eclipse.uml2.uml.edit/build.properties b/plugins/org.eclipse.uml2.uml.edit/build.properties
index 1bbdabc..04f105d 100644
--- a/plugins/org.eclipse.uml2.uml.edit/build.properties
+++ b/plugins/org.eclipse.uml2.uml.edit/build.properties
@@ -1,4 +1,4 @@
-# Copyright (c) 2005, 2007 IBM Corporation and others.
+# Copyright (c) 2005, 2013 IBM Corporation, CEA, 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
@@ -6,13 +6,14 @@
 #
 # Contributors:
 #   IBM - initial API and implementation
+#   Christian W. Damus (CEA) - 227616
 #
-# $Id: build.properties,v 1.6 2007/04/04 02:19:59 khussey Exp $
 
 # NLS_MESSAGEFORMAT_VAR
 source.. = src/
 output.. = bin/
-bin.includes = about.html,\
+bin.includes = about.*,\
+               modeling32.png,\
                plugin.*,\
                .,\
                icons/,\
diff --git a/plugins/org.eclipse.uml2.uml.edit/modeling32.png b/plugins/org.eclipse.uml2.uml.edit/modeling32.png
new file mode 100644
index 0000000..6b08de2
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.edit/modeling32.png
Binary files differ
diff --git a/plugins/org.eclipse.uml2.uml.editor/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml.editor/META-INF/MANIFEST.MF
index bc3a3fe..b396411 100644
--- a/plugins/org.eclipse.uml2.uml.editor/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.uml2.uml.editor/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.uml.editor; singleton:=true
-Bundle-Version: 4.2.0.qualifier
+Bundle-Version: 5.0.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.uml2.uml.editor.UMLEditorPlugin$Implementation
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.uml2.uml.profile.l2/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml.profile.l2/META-INF/MANIFEST.MF
index 61049bb..753074d 100644
--- a/plugins/org.eclipse.uml2.uml.profile.l2/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.uml2.uml.profile.l2/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.uml.profile.l2;singleton:=true
-Bundle-Version: 1.1.100.qualifier
+Bundle-Version: 2.0.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.uml2.uml.profile.l2.L2Plugin$Implementation
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml.profile.l3/META-INF/MANIFEST.MF
index b3185d7..101eea2 100644
--- a/plugins/org.eclipse.uml2.uml.profile.l3/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.uml.profile.l3;singleton:=true
-Bundle-Version: 1.1.100.qualifier
+Bundle-Version: 2.0.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.uml2.uml.profile.l3.L3Plugin$Implementation
 Bundle-Vendor: %providerName
diff --git a/plugins/org.eclipse.uml2.uml.resources/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml.resources/META-INF/MANIFEST.MF
index c96e74f..66ab16f 100644
--- a/plugins/org.eclipse.uml2.uml.resources/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.uml2.uml.resources/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.uml.resources; singleton:=true
-Bundle-Version: 4.2.0.qualifier
+Bundle-Version: 5.0.0.qualifier
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.uml2.uml.validation/.classpath b/plugins/org.eclipse.uml2.uml.validation/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.validation/.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/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.uml2.uml.validation/.project b/plugins/org.eclipse.uml2.uml.validation/.project
new file mode 100644
index 0000000..10a8c20
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.validation/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.uml2.uml.validation</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>
diff --git a/plugins/org.eclipse.uml2.uml.validation/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.uml2.uml.validation/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.validation/.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.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.uml2.uml.validation/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml.validation/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..acda3fc
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.validation/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.uml2.uml.validation;singleton:=true
+Bundle-Version: 5.0.0.qualifier
+Bundle-Vendor: %providerName
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.eclipse.core.runtime;visibility:=reexport,
+ org.eclipse.emf.validation;visibility:=reexport,
+ org.eclipse.uml2.uml;visibility:=reexport
+Export-Package: org.eclipse.uml2.uml.validation
diff --git a/plugins/org.eclipse.uml2.uml.validation/about.html b/plugins/org.eclipse.uml2.uml.validation/about.html
new file mode 100644
index 0000000..598b368
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.validation/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>May 12, 2008</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.uml.validation/build.properties b/plugins/org.eclipse.uml2.uml.validation/build.properties
new file mode 100644
index 0000000..b52ff10
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.validation/build.properties
@@ -0,0 +1,21 @@
+# Copyright (c) 2013 CEA 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: 
+#   Christian W. Damus (CEA) - initial API and implementation
+#
+
+# NLS_MESSAGEFORMAT_VAR
+source.. = src/
+output.. = bin/
+bin.includes = about.html,\
+               plugin.properties,\
+               .,\
+               META-INF/
+src.includes = about.html
+exclude.. = **/doc-files/**
+javacSource = 1.5
+javacTarget = 1.5
diff --git a/plugins/org.eclipse.uml2.uml.validation/plugin.properties b/plugins/org.eclipse.uml2.uml.validation/plugin.properties
new file mode 100644
index 0000000..56963e9
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.validation/plugin.properties
@@ -0,0 +1,14 @@
+# Copyright (c) 2012, 2013 CEA 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:
+#   Christian W. Damus (CEA) - initial API and implementation
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+pluginName = UML Extensible Validation Support
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/validation/DelegatingConstraintDescriptor.java b/plugins/org.eclipse.uml2.uml.validation/src/org/eclipse/uml2/uml/validation/DelegatingConstraintDescriptor.java
similarity index 100%
rename from plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/validation/DelegatingConstraintDescriptor.java
rename to plugins/org.eclipse.uml2.uml.validation/src/org/eclipse/uml2/uml/validation/DelegatingConstraintDescriptor.java
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/validation/DelegatingConstraintProvider.java b/plugins/org.eclipse.uml2.uml.validation/src/org/eclipse/uml2/uml/validation/DelegatingConstraintProvider.java
similarity index 100%
rename from plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/validation/DelegatingConstraintProvider.java
rename to plugins/org.eclipse.uml2.uml.validation/src/org/eclipse/uml2/uml/validation/DelegatingConstraintProvider.java
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/validation/DelegatingModelConstraint.java b/plugins/org.eclipse.uml2.uml.validation/src/org/eclipse/uml2/uml/validation/DelegatingModelConstraint.java
similarity index 100%
rename from plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/validation/DelegatingModelConstraint.java
rename to plugins/org.eclipse.uml2.uml.validation/src/org/eclipse/uml2/uml/validation/DelegatingModelConstraint.java
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/validation/IEValidatorProvider.java b/plugins/org.eclipse.uml2.uml.validation/src/org/eclipse/uml2/uml/validation/IEValidatorProvider.java
similarity index 100%
rename from plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/validation/IEValidatorProvider.java
rename to plugins/org.eclipse.uml2.uml.validation/src/org/eclipse/uml2/uml/validation/IEValidatorProvider.java
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/validation/UMLTraversalStrategy.java b/plugins/org.eclipse.uml2.uml.validation/src/org/eclipse/uml2/uml/validation/UMLTraversalStrategy.java
similarity index 100%
rename from plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/validation/UMLTraversalStrategy.java
rename to plugins/org.eclipse.uml2.uml.validation/src/org/eclipse/uml2/uml/validation/UMLTraversalStrategy.java
diff --git a/plugins/org.eclipse.uml2.uml/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml/META-INF/MANIFEST.MF
index 87828cf..c9a0566 100644
--- a/plugins/org.eclipse.uml2.uml/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.uml2.uml/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.uml; singleton:=true
-Bundle-Version: 4.2.0.qualifier
+Bundle-Version: 5.0.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.uml2.uml.UMLPlugin$Implementation
 Bundle-Vendor: %providerName
@@ -13,14 +13,12 @@
  org.eclipse.uml2.uml.internal.operations;x-internal:=true,
  org.eclipse.uml2.uml.internal.resource;x-internal:=true,
  org.eclipse.uml2.uml.resource,
- org.eclipse.uml2.uml.util,
- org.eclipse.uml2.uml.validation
+ org.eclipse.uml2.uml.util
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.emf.ecore;visibility:=reexport,
  org.eclipse.emf.ecore.xmi;visibility:=reexport,
  org.eclipse.uml2.common;visibility:=reexport,
  org.eclipse.uml2.types;visibility:=reexport,
- org.eclipse.emf.mapping.ecore2xml;visibility:=reexport,
- org.eclipse.emf.validation;resolution:=optional;visibility:=reexport
+ org.eclipse.emf.mapping.ecore2xml;visibility:=reexport
 Eclipse-LazyStart: true
 Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.uml2.uml/about.ini b/plugins/org.eclipse.uml2.uml/about.ini
new file mode 100644
index 0000000..cd69eeb
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText = %aboutText
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage = modeling32.png
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (translated)
+# needed for primary features only
+
+# Property "welcomePage" contains path to welcome page (special XML-based format)
+# optional
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
diff --git a/plugins/org.eclipse.uml2.uml/about.mappings b/plugins/org.eclipse.uml2.uml/about.mappings
new file mode 100644
index 0000000..eb5946f
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml/about.mappings
@@ -0,0 +1,17 @@
+# Copyright (c) 2006, 2013 IBM Corporation, CEA, 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
+#   Christian W. Damus (CEA) - 227616
+#
+
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.uml/about.properties b/plugins/org.eclipse.uml2.uml/about.properties
new file mode 100644
index 0000000..29d9a3f
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml/about.properties
@@ -0,0 +1,29 @@
+# Copyright (c) 2006, 2014 IBM Corporation, Embarcadero Technologies, CEA, 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
+#   Kenn Hussey (Embarcadero Technologies) - 219804, 204200
+#   Kenn Hussey - 323181
+#   Christian W. Damus (CEA) - 227616
+#   Kenn Hussey (CEA) - 227616
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+aboutText = UML 2.x Metamodel\n\
+\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+(c) Copyright Eclipse contributors and others 2003, 2014.  All rights reserved.\n\
+Visit http://www.eclipse.org/uml2
diff --git a/plugins/org.eclipse.uml2.uml/build.properties b/plugins/org.eclipse.uml2.uml/build.properties
index 7a951a5..4795ee9 100644
--- a/plugins/org.eclipse.uml2.uml/build.properties
+++ b/plugins/org.eclipse.uml2.uml/build.properties
@@ -1,4 +1,4 @@
-# Copyright (c) 2005, 2011 IBM Corporation, CEA, and others.
+# Copyright (c) 2005, 2013 IBM Corporation, CEA, 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
@@ -6,15 +6,16 @@
 #
 # Contributors:
 #   IBM - initial API and implementation
-#   Kennn Hussey (CEA) - 327039
+#   Kenn Hussey (CEA) - 327039
+#   Christian W. Damus (CEA) - 227616
 #
-# $Id: build.properties,v 1.13 2007/09/28 21:14:32 jbruck Exp $
 
 # NLS_MESSAGEFORMAT_VAR
 
 source.. = src/
 output.. = bin/
-bin.includes = about.html,\
+bin.includes = about.*,\
+               modeling32.png,\
                plugin.*,\
                .,\
                model/*.ecore,\
diff --git a/plugins/org.eclipse.uml2.uml/modeling32.png b/plugins/org.eclipse.uml2.uml/modeling32.png
new file mode 100644
index 0000000..6b08de2
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml/modeling32.png
Binary files differ
diff --git a/plugins/org.eclipse.uml2/about.properties b/plugins/org.eclipse.uml2/about.properties
index 93cfc3e..54084d8 100644
--- a/plugins/org.eclipse.uml2/about.properties
+++ b/plugins/org.eclipse.uml2/about.properties
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2013 IBM Corporation, Embarcadero Technologies, and others.
+# Copyright (c) 2006, 2014 IBM Corporation, Embarcadero Technologies, 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
@@ -8,6 +8,7 @@
 #   IBM - initial API and implementation
 #   Kenn Hussey (Embarcadero Technologies) - 219804, 204200
 #   Kenn Hussey - 323181
+#   Kenn Hussey (CEA) - 286404
 #
 
 # NLS_MESSAGEFORMAT_VAR
@@ -23,5 +24,5 @@
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2003, 2013.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2003, 2014.  All rights reserved.\n\
 Visit http://www.eclipse.org/uml2
diff --git a/tests/org.eclipse.uml2.ant.tests/.classpath b/tests/org.eclipse.uml2.ant.tests/.classpath
new file mode 100644
index 0000000..64c5e31
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/.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/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.uml2.ant.tests/.gitignore b/tests/org.eclipse.uml2.ant.tests/.gitignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/tests/org.eclipse.uml2.ant.tests/.project b/tests/org.eclipse.uml2.ant.tests/.project
new file mode 100644
index 0000000..d4caa7e
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.uml2.ant.tests</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>
diff --git a/tests/org.eclipse.uml2.ant.tests/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.uml2.ant.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..af0f20f
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/.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.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/tests/org.eclipse.uml2.ant.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.uml2.ant.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..650ae59
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.uml2.ant.tests;singleton:=true
+Bundle-Version: 5.0.0.qualifier
+Bundle-ClassPath: uml2.ant.tests.jar
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.junit,
+ org.eclipse.core.runtime,
+ org.eclipse.uml2.ant,
+ org.eclipse.uml2.uml.tests,
+ org.eclipse.ant.core,
+ org.apache.ant
+Export-Package: org.eclipse.uml2.ant.app.tests,
+ org.eclipse.uml2.ant.tests
diff --git a/tests/org.eclipse.uml2.ant.tests/UML2 Ant Tests.launch b/tests/org.eclipse.uml2.ant.tests/UML2 Ant Tests.launch
new file mode 100644
index 0000000..409e74c
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/UML2 Ant Tests.launch
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/tests/AntAllTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit3"/>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.uml2.ant.tests.AntAllTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-consolelog"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.uml2.ant.tests"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useNamedJRE" value="true"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
diff --git a/tests/org.eclipse.uml2.ant.tests/about.html b/tests/org.eclipse.uml2.ant.tests/about.html
new file mode 100644
index 0000000..598b368
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>May 12, 2008</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/tests/org.eclipse.uml2.ant.tests/build.properties b/tests/org.eclipse.uml2.ant.tests/build.properties
new file mode 100644
index 0000000..7383850
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/build.properties
@@ -0,0 +1,22 @@
+# Copyright (c) 2005, 2014 IBM Corporation, Embarcadero Technologies, CEA, 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
+#   Kenn Hussey (Embarcadero Technologies) - 204200
+#   Christian W. Damus (CEA) - 286404 (adapted from UML2 UML Tests plug-in)
+#
+
+# NLS_MESSAGEFORMAT_VAR
+source.uml2.ant.tests.jar = src/
+output.uml2.ant.tests.jar = bin/
+bin.includes = about.html,\
+               plugin.properties,\
+               uml2.ant.tests.jar,\
+               META-INF/
+src.includes = about.html
+javacSource = 1.5
+javacTarget = 1.5
diff --git a/tests/org.eclipse.uml2.ant.tests/plugin.properties b/tests/org.eclipse.uml2.ant.tests/plugin.properties
new file mode 100644
index 0000000..2fcef95
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/plugin.properties
@@ -0,0 +1,15 @@
+# Copyright (c) 2013, 2014 CEA 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:
+#   Christian W. Damus (CEA) - initial API and implementation
+#   Christian W. Damus (CEA) - 286404
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+pluginName = UML2 Ant Tasks Tests
+providerName = Eclipse Modeling Project
diff --git a/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/app/tests/DefineProfileApplicationTest.java b/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/app/tests/DefineProfileApplicationTest.java
new file mode 100644
index 0000000..ebf5025
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/app/tests/DefineProfileApplicationTest.java
@@ -0,0 +1,434 @@
+/*
+ * Copyright (c) 2013, 2014 CEA 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:
+ *   Christian W. Damus (CEA) - Initial API and implementation
+ *   Christian W. Damus (CEA) - 286404
+ *
+ */
+package org.eclipse.uml2.ant.app.tests;
+
+import static org.eclipse.uml2.uml.util.UMLUtil.UML2EcoreConverter.*;
+import static org.eclipse.uml2.uml.util.UMLUtil.*;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EParameter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.uml2.ant.app.DefineProfileApplication;
+import org.eclipse.uml2.ant.app.IDiagnosticReporter;
+import org.eclipse.uml2.common.util.UML2Util;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.tests.util.StandaloneSupport;
+
+/**
+ * Tests the profile definition application.
+ * 
+ * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=286404
+ */
+public class DefineProfileApplicationTest
+		extends TestCase {
+
+	private static final String ECORE_ANNOTATION_URI = "http://www.eclipse.org/emf/2002/Ecore";
+
+	private static final String OCL_ANNOTATION_URI = ECORE_ANNOTATION_URI
+		+ "/OCL";
+
+	private File tempDir;
+
+	private ResourceSet rset;
+
+	public DefineProfileApplicationTest() {
+		super();
+	}
+
+	public DefineProfileApplicationTest(String name) {
+		super(name);
+	}
+
+	public static Test suite() {
+		return new TestSuite(DefineProfileApplicationTest.class,
+			"DefineProfileApplication tests"); //$NON-NLS-1$
+	}
+
+	public void testApplicationDefaultOptions() {
+		Profile profile = defineProfileByApplication(null,
+			new ValidatingReporter().assertDiagnostic(UNTYPED_PROPERTY,
+				Diagnostic.ERROR));
+
+		assertDefaultOptions(profile);
+	}
+
+	void assertDefaultOptions(Profile profile) {
+		// default option for untyped properties is to report (checked by the
+		// reporter)
+		EClass bean = getEClass(profile, "Bean");
+		EStructuralFeature attachment = bean
+			.getEStructuralFeature("attachment");
+		assertNotNull(attachment);
+		assertNull(attachment.getEType());
+
+		// default option for OCL constraints is to drop them
+		EClass finder = getEClass(profile, "Finder");
+		assertNoValidationOperations(finder);
+		assertNoAnnotation(finder, OCL_ANNOTATION_URI, "is_static");
+		assertNoAnnotation(finder, ECORE_ANNOTATION_URI, "constraints");
+	}
+
+	Map<String, String> getTestOptions() {
+		return options(OPTION__INVARIANT_CONSTRAINTS, OPTION__PROCESS,
+			OPTION__VALIDATION_DELEGATES, OPTION__PROCESS,
+			OPTION__NON_API_INVARIANTS, OPTION__PROCESS,
+			OPTION__UNTYPED_PROPERTIES, OPTION__DISCARD);
+	}
+
+	public void testApplicationWithOptions() {
+		Profile profile = defineProfileByApplication(getTestOptions(),
+			new ValidatingReporter().assertNotDiagnostic(UNTYPED_PROPERTY,
+				Diagnostic.ERROR));
+
+		assertTestOptions(profile);
+	}
+
+	void assertTestOptions(Profile profile) {
+		EClass bean = getEClass(profile, "Bean");
+		EStructuralFeature attachment = bean
+			.getEStructuralFeature("attachment");
+		assertNull(attachment);
+
+		EClass finder = getEClass(profile, "Finder");
+		assertNoValidationOperations(finder);
+		assertEcoreAnnotation(finder, "constraints", "is_static");
+		assertOCLAnnotation(finder, "is_static", "base_Operation.isStatic");
+	}
+
+	//
+	// Test framework
+	//
+
+	@Override
+	protected void setUp()
+			throws Exception {
+
+		rset = new ResourceSetImpl();
+		if (StandaloneSupport.isStandalone()) {
+			StandaloneSupport.init(rset);
+		}
+
+		// create a temporary file and convert it to a directory
+		tempDir = File.createTempFile(getName(), ".tmp");
+		tempDir.delete();
+		tempDir.mkdir();
+	}
+
+	@Override
+	protected void tearDown()
+			throws Exception {
+
+		rmdir(tempDir);
+
+		// clean up the CacheAdapter as well as we can
+		for (Resource next : rset.getResources()) {
+			next.unload();
+			next.eAdapters().clear();
+		}
+
+		rset.getResources().clear();
+		rset.eAdapters().clear();
+	}
+
+	static void rmdir(File directory) {
+		for (File next : directory.listFiles()) {
+			if (next.isDirectory()) {
+				rmdir(next);
+			} else {
+				next.delete();
+			}
+		}
+
+		directory.delete();
+	}
+
+	Profile defineProfileByApplication(Map<String, String> options,
+			IDiagnosticReporter reporter) {
+
+		URI uri = copyTestProfile();
+
+		if (options == null) {
+			options = Collections.emptyMap();
+		}
+
+		List<String> args = new java.util.ArrayList<String>(
+			options.size() * 2 + 1);
+		args.add(uri.toFileString());
+		for (Map.Entry<String, String> option : options.entrySet()) {
+			args.add("-" + option.getKey());
+			args.add(option.getValue());
+		}
+
+		try {
+			new DefineProfileApplication(reporter).run(
+				new NullProgressMonitor(),
+				args.toArray(new String[args.size()]));
+		} catch (Exception e) {
+			e.printStackTrace();
+			fail("Exception in profile definition application: "
+				+ e.getLocalizedMessage());
+		}
+
+		if (reporter instanceof ValidatingReporter) {
+			((ValidatingReporter) reporter).assertDiagnostics();
+		}
+
+		return (Profile) UML2Util.load(rset, uri, UMLPackage.Literals.PROFILE);
+	}
+
+	URI copyTestProfile() {
+		URL url = getClass().getResource(
+			"DefineProfileApplicationTest.profile.uml");
+		File result = new File(tempDir,
+			"DefineProfileApplicationTest.profile.uml");
+		InputStream input = null;
+		OutputStream output = null;
+		ReadableByteChannel inChan = null;
+		WritableByteChannel outChan = null;
+
+		try {
+			ByteBuffer buf = ByteBuffer.allocate(2048);
+			input = url.openStream();
+			output = new FileOutputStream(result);
+			inChan = Channels.newChannel(input);
+			outChan = Channels.newChannel(output);
+
+			for (int read = inChan.read(buf); read >= 0; read = inChan
+				.read(buf)) {
+
+				buf.flip();
+
+				for (int written = outChan.write(buf); written < read;) {
+					written += outChan.write(buf);
+				}
+
+				buf.flip();
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+			fail("Failed to read resource or write temporary file: "
+				+ e.getLocalizedMessage());
+		} finally {
+			if (outChan != null) {
+				try {
+					outChan.close();
+				} catch (Exception e) {
+					e.printStackTrace();
+					fail("Failed to close temporary file: "
+						+ e.getLocalizedMessage());
+				}
+			}
+			if (inChan != null) {
+				try {
+					inChan.close();
+				} catch (Exception e) {
+					e.printStackTrace();
+					fail("Failed to close resource: " + e.getLocalizedMessage());
+				}
+			}
+		}
+
+		return URI.createFileURI(result.getAbsolutePath());
+	}
+
+	Map<String, String> options(String option, String value, String... more) {
+		Map<String, String> result = new HashMap<String, String>();
+
+		result.put(option, value);
+
+		for (int i = 0; i < more.length;) {
+			option = more[i++];
+			value = more[i++];
+			result.put(option, value);
+		}
+
+		return result;
+	}
+
+	EClass getEClass(Profile profile, String name) {
+		return getEClassifier(profile, name, EClass.class);
+	}
+
+	EDataType getEDataType(Profile profile, String name) {
+		return getEClassifier(profile, name, EDataType.class);
+	}
+
+	<T extends EClassifier> T getEClassifier(Profile profile, String name,
+			Class<T> metaclass) {
+
+		EClassifier result = profile.getDefinition().getEClassifier(name);
+		assertTrue(metaclass.isInstance(result));
+		return metaclass.cast(result);
+	}
+
+	EOperation getEOperation(EClass eClass, String name) {
+		for (EOperation eOperation : eClass.getEOperations()) {
+			if (name.equals(eOperation.getName())) {
+				return eOperation;
+			}
+		}
+
+		fail("EOperation not found: " + name);
+		return null; // unreachable
+	}
+
+	void assertEcoreAnnotation(EModelElement element, String key, String value) {
+		assertAnnotation(element, ECORE_ANNOTATION_URI, key, value);
+	}
+
+	void assertOCLAnnotation(EModelElement element, String key, String value) {
+		assertAnnotation(element, OCL_ANNOTATION_URI, key, value);
+	}
+
+	void assertAnnotation(EModelElement element, String source, String key,
+			String value) {
+
+		String annotation = EcoreUtil.getAnnotation(element, source, key);
+		assertNotNull("Annotation key not found", annotation);
+		assertTrue(Pattern
+			.compile(
+				String.format("(?:^|\\s)%s(?:$|\\s)", Pattern.quote(value)))
+			.matcher(annotation).find());
+	}
+
+	void assertNoAnnotation(EModelElement element, String source, String key) {
+		String annotation = EcoreUtil.getAnnotation(element, source, key);
+		assertNull("Found annotation key", annotation);
+	}
+
+	void assertHasValidationOperations(EClass eclass) {
+		for (EOperation operation : eclass.getEOperations()) {
+			for (EParameter parameter : operation.getEParameters()) {
+				if (parameter.getEType() == EcorePackage.Literals.EDIAGNOSTIC_CHAIN) {
+					// success
+					return;
+				}
+			}
+		}
+
+		fail("Did not find a validation operation");
+	}
+
+	void assertNoValidationOperations(EClass eclass) {
+		for (EOperation operation : eclass.getEOperations()) {
+			for (EParameter parameter : operation.getEParameters()) {
+				assertNotSame(EcorePackage.Literals.EDIAGNOSTIC_CHAIN,
+					parameter.getEType());
+			}
+		}
+	}
+
+	//
+	// Nested types
+	//
+
+	static class ValidatingReporter
+			implements IDiagnosticReporter {
+
+		private final Map<Integer, Integer> assertions = new java.util.HashMap<Integer, Integer>();
+
+		private final Map<Integer, Integer> failedNegatives = new java.util.HashMap<Integer, Integer>();
+
+		ValidatingReporter assertDiagnostic(int code, int severity) {
+			assertions.put(code, severity);
+			return this;
+		}
+
+		ValidatingReporter assertNotDiagnostic(int code, int severity) {
+			assertions.put(-code, severity);
+			return this;
+		}
+
+		public void report(Diagnostic diagnostic) {
+			Integer code = diagnostic.getCode();
+			Integer expectedSeverity = assertions.get(code);
+
+			if ((expectedSeverity != null)
+				&& (expectedSeverity.intValue() == diagnostic.getSeverity())) {
+
+				assertions.remove(code);
+			}
+
+			code = -diagnostic.getCode();
+			expectedSeverity = assertions.get(code);
+
+			if ((expectedSeverity != null)
+				&& (expectedSeverity.intValue() == diagnostic.getSeverity())) {
+
+				assertions.remove(code);
+				failedNegatives.put(diagnostic.getCode(), expectedSeverity);
+			}
+
+			if (!diagnostic.getChildren().isEmpty()) {
+				for (Diagnostic child : diagnostic.getChildren()) {
+					report(child);
+				}
+			}
+		}
+
+		void assertDiagnostics() {
+			// remove negative assertions, which are successes if they remain
+			for (Iterator<Integer> iter = assertions.keySet().iterator(); iter
+				.hasNext();) {
+				if (iter.next().intValue() < 0) {
+					iter.remove();
+				}
+			}
+
+			if (!assertions.isEmpty()) {
+				fail("Not all expected diagnostics were reported: "
+					+ assertions);
+			}
+
+			if (!failedNegatives.isEmpty()) {
+				fail("Some diagnostics were reported that should not have been: "
+					+ failedNegatives);
+			}
+		}
+	}
+}
diff --git a/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/app/tests/DefineProfileApplicationTest.profile.uml b/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/app/tests/DefineProfileApplicationTest.profile.uml
new file mode 100644
index 0000000..85e2076
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/app/tests/DefineProfileApplicationTest.profile.uml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<uml:Profile xmi:version="20110701" xmlns:xmi="http://www.omg.org/spec/XMI/20110701" xmlns:uml="http://www.eclipse.org/uml2/4.0.0/UML" xmi:id="_wHQHgGckEeO3Y8Il99uIoQ" name="j2ee" URI="http://www.eclipse.org/schema/uml2/test/profiles/j2ee" metamodelReference="_5EP3sGckEeO3Y8Il99uIoQ">
+  <packageImport xmi:id="_5EP3sGckEeO3Y8Il99uIoQ">
+    <importedPackage xmi:type="uml:Model" href="pathmap://UML_METAMODELS/UML.metamodel.uml#_0"/>
+  </packageImport>
+  <packagedElement xmi:type="uml:Stereotype" xmi:id="_8xb7IGckEeO3Y8Il99uIoQ" name="Bean">
+    <ownedAttribute xmi:id="_8VQgAmclEeO3Y8Il99uIoQ" name="base_Class" association="_8VQgAGclEeO3Y8Il99uIoQ">
+      <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+    </ownedAttribute>
+    <ownedAttribute xmi:id="_fvcWIGclEeO3Y8Il99uIoQ" name="interface" type="_BbQl8GclEeO3Y8Il99uIoQ" isReadOnly="true" isDerived="true" association="_qpSNgGclEeO3Y8Il99uIoQ">
+      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_jU-SYGclEeO3Y8Il99uIoQ" value="*"/>
+    </ownedAttribute>
+    <ownedAttribute xmi:id="_OCFIQGdAEeOvUKRFSEuPKQ" name="attachment">
+      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PikDkGdAEeOvUKRFSEuPKQ"/>
+      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_QEwKoGdAEeOvUKRFSEuPKQ" value="*"/>
+    </ownedAttribute>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Stereotype" xmi:id="_BbQl8GclEeO3Y8Il99uIoQ" name="BeanInterface">
+    <ownedAttribute xmi:id="_ASRIImcmEeO3Y8Il99uIoQ" name="base_Interface" association="_ASRIIGcmEeO3Y8Il99uIoQ">
+      <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Interface"/>
+    </ownedAttribute>
+    <ownedAttribute xmi:id="_IoJqcGclEeO3Y8Il99uIoQ" name="finder" type="_FUrHgGclEeO3Y8Il99uIoQ" isReadOnly="true" isDerived="true" association="_VM2hIGclEeO3Y8Il99uIoQ">
+      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_KzxNcGclEeO3Y8Il99uIoQ"/>
+      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_LSctgGclEeO3Y8Il99uIoQ" value="*"/>
+    </ownedAttribute>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Stereotype" xmi:id="_FUrHgGclEeO3Y8Il99uIoQ" name="Finder">
+    <ownedRule xmi:id="_NRszAGcmEeO3Y8Il99uIoQ" name="is_static">
+      <specification xmi:type="uml:OpaqueExpression" xmi:id="_U_HxsGcmEeO3Y8Il99uIoQ">
+        <language>OCL</language>
+        <body>base_Operation.isStatic</body>
+      </specification>
+    </ownedRule>
+    <ownedRule xmi:id="_auNbcGcmEeO3Y8Il99uIoQ" name="returns_interface_type">
+      <specification xmi:type="uml:OpaqueExpression" xmi:id="_auNbcWcmEeO3Y8Il99uIoQ">
+        <language>OCL</language>
+        <body>base_Operation.type &lt;> null and base_Operation.type.conformsTo(beanInterface.base_Interface)</body>
+      </specification>
+    </ownedRule>
+    <ownedAttribute xmi:id="_EvC1cmcmEeO3Y8Il99uIoQ" name="base_Operation" association="_EvC1cGcmEeO3Y8Il99uIoQ">
+      <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Operation"/>
+    </ownedAttribute>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Association" xmi:id="_VM2hIGclEeO3Y8Il99uIoQ" memberEnd="_IoJqcGclEeO3Y8Il99uIoQ _Yr5a4GclEeO3Y8Il99uIoQ">
+    <ownedEnd xmi:id="_Yr5a4GclEeO3Y8Il99uIoQ" name="beanInterface" type="_BbQl8GclEeO3Y8Il99uIoQ" association="_VM2hIGclEeO3Y8Il99uIoQ"/>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Association" xmi:id="_qpSNgGclEeO3Y8Il99uIoQ" memberEnd="_fvcWIGclEeO3Y8Il99uIoQ _wgbnEGclEeO3Y8Il99uIoQ">
+    <ownedEnd xmi:id="_wgbnEGclEeO3Y8Il99uIoQ" name="implementation" type="_8xb7IGckEeO3Y8Il99uIoQ" association="_qpSNgGclEeO3Y8Il99uIoQ">
+      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_yuvRsGclEeO3Y8Il99uIoQ"/>
+      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_zOGuQGclEeO3Y8Il99uIoQ" value="*"/>
+    </ownedEnd>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Extension" xmi:id="_8VQgAGclEeO3Y8Il99uIoQ" name="Class_Bean" memberEnd="_8VQgAWclEeO3Y8Il99uIoQ _8VQgAmclEeO3Y8Il99uIoQ">
+    <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_8VQgAWclEeO3Y8Il99uIoQ" name="extension_Bean" type="_8xb7IGckEeO3Y8Il99uIoQ" aggregation="composite" association="_8VQgAGclEeO3Y8Il99uIoQ"/>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Extension" xmi:id="_ASRIIGcmEeO3Y8Il99uIoQ" name="Interface_BeanInterface" memberEnd="_ASRIIWcmEeO3Y8Il99uIoQ _ASRIImcmEeO3Y8Il99uIoQ">
+    <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_ASRIIWcmEeO3Y8Il99uIoQ" name="extension_BeanInterface" type="_BbQl8GclEeO3Y8Il99uIoQ" aggregation="composite" association="_ASRIIGcmEeO3Y8Il99uIoQ"/>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Extension" xmi:id="_EvC1cGcmEeO3Y8Il99uIoQ" name="Operation_Finder" memberEnd="_EvC1cWcmEeO3Y8Il99uIoQ _EvC1cmcmEeO3Y8Il99uIoQ">
+    <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_EvC1cWcmEeO3Y8Il99uIoQ" name="extension_Finder" type="_FUrHgGclEeO3Y8Il99uIoQ" aggregation="composite" association="_EvC1cGcmEeO3Y8Il99uIoQ"/>
+  </packagedElement>
+</uml:Profile>
diff --git a/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/tests/AntAllTests.java b/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/tests/AntAllTests.java
new file mode 100644
index 0000000..1bf8af4
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/tests/AntAllTests.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2013, 2014 CEA 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:
+ *   Christian W. Damus (CEA) - initial API and implementation
+ *   Christian W. Damus (CEA) - 286404
+ *
+ */
+package org.eclipse.uml2.ant.tests;
+
+import org.eclipse.uml2.ant.app.tests.DefineProfileApplicationTest;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * The master test suite for the UML2 Ant Tasks tests.
+ */
+public class AntAllTests
+		extends TestSuite {
+
+	/**
+	 * Initializes me with my name.
+	 */
+	public AntAllTests(String name) {
+		super(name);
+	}
+
+	public static Test suite() {
+		TestSuite suite = new AntAllTests("Ant Tasks Tests"); //$NON-NLS-1$
+		suite.addTestSuite(DefineProfileApplicationTest.class);
+		suite.addTestSuite(DefineProfileTaskTest.class);
+		return suite;
+	}
+
+}
diff --git a/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/tests/DefineProfileTaskTest.java b/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/tests/DefineProfileTaskTest.java
new file mode 100644
index 0000000..aa2a9a3
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/tests/DefineProfileTaskTest.java
@@ -0,0 +1,524 @@
+/*
+ * Copyright (c) 2013, 2014 CEA 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:
+ *   Christian W. Damus (CEA) - Initial API and implementation
+ *   Christian W. Damus (CEA) - 286404
+ *
+ */
+package org.eclipse.uml2.ant.tests;
+
+import static org.eclipse.uml2.uml.util.UMLUtil.UML2EcoreConverter.*;
+import static org.eclipse.uml2.uml.util.UMLUtil.*;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.tools.ant.BuildException;
+import org.eclipse.ant.core.AntRunner;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EModelElement;
+import org.eclipse.emf.ecore.EOperation;
+import org.eclipse.emf.ecore.EParameter;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.uml2.common.util.UML2Util;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.tests.util.StandaloneSupport;
+
+/**
+ * Tests the profile definition Ant task.
+ * 
+ * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=286404
+ */
+public class DefineProfileTaskTest
+		extends TestCase {
+
+	private static final String ECORE_ANNOTATION_URI = "http://www.eclipse.org/emf/2002/Ecore";
+
+	private static final String OCL_ANNOTATION_URI = ECORE_ANNOTATION_URI
+		+ "/OCL";
+
+	private File tempDir;
+
+	private ResourceSet rset;
+
+	public DefineProfileTaskTest() {
+		super();
+	}
+
+	public DefineProfileTaskTest(String name) {
+		super(name);
+	}
+
+	public static Test suite() {
+		return new TestSuite(DefineProfileTaskTest.class,
+			"UML Profile Definition Ant Task tests"); //$NON-NLS-1$
+	}
+
+	void assertDefaultOptions(Profile profile) {
+		// default option for untyped properties is to report (checked by the
+		// reporter)
+		EClass bean = getEClass(profile, "Bean");
+		EStructuralFeature attachment = bean
+			.getEStructuralFeature("attachment");
+		assertNotNull(attachment);
+		assertNull(attachment.getEType());
+
+		// default option for OCL constraints is to drop them
+		EClass finder = getEClass(profile, "Finder");
+		assertNoValidationOperations(finder);
+		assertNoAnnotation(finder, OCL_ANNOTATION_URI, "is_static");
+		assertNoAnnotation(finder, ECORE_ANNOTATION_URI, "constraints");
+	}
+
+	Map<String, String> getTestOptions() {
+		return options(OPTION__INVARIANT_CONSTRAINTS, OPTION__PROCESS,
+			OPTION__VALIDATION_DELEGATES, OPTION__PROCESS,
+			OPTION__NON_API_INVARIANTS, OPTION__PROCESS,
+			OPTION__UNTYPED_PROPERTIES, OPTION__DISCARD);
+	}
+
+	void assertTestOptions(Profile profile) {
+		EClass bean = getEClass(profile, "Bean");
+		EStructuralFeature attachment = bean
+			.getEStructuralFeature("attachment");
+		assertNull(attachment);
+
+		EClass finder = getEClass(profile, "Finder");
+		assertNoValidationOperations(finder);
+		assertEcoreAnnotation(finder, "constraints", "is_static");
+		assertOCLAnnotation(finder, "is_static", "base_Operation.isStatic");
+	}
+
+	public void testAntBuildDefaultOptions() {
+		URI uri = copyTestProfile();
+
+		Profile profile = defineProfileByAntBuild(uri,
+			ProfileAntLocationKind.PROFILE_ATTRIBUTE, null);
+
+		assertDefaultOptions(profile);
+	}
+
+	public void testAntBuildWithOptions() {
+		URI uri = copyTestProfile();
+
+		Profile profile = defineProfileByAntBuild(uri,
+			ProfileAntLocationKind.PROFILE_ATTRIBUTE, getTestOptions());
+
+		assertTestOptions(profile);
+	}
+
+	public void testAntBuildProfileElement() {
+		URI uri = copyTestProfile();
+
+		Profile profile = defineProfileByAntBuild(uri,
+			ProfileAntLocationKind.PROFILE_ELEMENT, getTestOptions());
+
+		assertTestOptions(profile);
+	}
+
+	public void testAntBuildProfileSet() {
+		URI uri = copyTestProfile();
+
+		Profile profile = defineProfileByAntBuild(uri,
+			ProfileAntLocationKind.PROFILESET_ELEMENT, getTestOptions());
+
+		assertTestOptions(profile);
+	}
+
+	public void testAntBuildNoProfileSpecified() {
+		try {
+			defineProfileByAntBuild(null,
+				ProfileAntLocationKind.PROFILE_ATTRIBUTE, getTestOptions());
+			fail("And build should have failed.");
+		} catch (RuntimeException e) {
+			assertEquals("Unexpected exception: " + e.getLocalizedMessage(),
+				BuildException.class.getName(), e.getClass().getName());
+		}
+	}
+
+	public void testAntBuildProfileElementMissingFile() {
+		try {
+			defineProfileByAntBuild(null,
+				ProfileAntLocationKind.PROFILE_ELEMENT, getTestOptions());
+			fail("And build should have failed.");
+		} catch (RuntimeException e) {
+			assertEquals("Unexpected exception: " + e.getLocalizedMessage(),
+				BuildException.class.getName(), e.getClass().getName());
+		}
+	}
+
+	public void testAntBuildProfileSetSelectsNothing() {
+		try {
+			defineProfileByAntBuild(null,
+				ProfileAntLocationKind.PROFILESET_ELEMENT, getTestOptions());
+			fail("And build should have failed.");
+		} catch (RuntimeException e) {
+			assertEquals("Unexpected exception: " + e.getLocalizedMessage(),
+				BuildException.class.getName(), e.getClass().getName());
+		}
+	}
+
+	//
+	// Test framework
+	//
+
+	@Override
+	protected void setUp()
+			throws Exception {
+
+		rset = new ResourceSetImpl();
+		if (StandaloneSupport.isStandalone()) {
+			StandaloneSupport.init(rset);
+		}
+
+		// create a temporary file and convert it to a directory
+		tempDir = File.createTempFile(getName(), ".tmp");
+		tempDir.delete();
+		tempDir.mkdir();
+	}
+
+	@Override
+	protected void tearDown()
+			throws Exception {
+
+		rmdir(tempDir);
+
+		// clean up the CacheAdapter as well as we can
+		for (Resource next : rset.getResources()) {
+			next.unload();
+			next.eAdapters().clear();
+		}
+
+		rset.getResources().clear();
+		rset.eAdapters().clear();
+	}
+
+	static void rmdir(File directory) {
+		for (File next : directory.listFiles()) {
+			if (next.isDirectory()) {
+				rmdir(next);
+			} else {
+				next.delete();
+			}
+		}
+
+		directory.delete();
+	}
+
+	Profile defineProfileByAntBuild(URI profileURI,
+			ProfileAntLocationKind antLocationKind, Map<String, String> options) {
+
+		AntRunner runner = new AntRunner();
+
+		try {
+			runner.setBuildFileLocation(createAntBuildFile(profileURI,
+				antLocationKind, options).getAbsolutePath());
+			runner.run();
+		} catch (CoreException e) {
+			Throwable cause = unwrap(e);
+
+			// the BuildException class is loaded in a distinct class loader by
+			// the AntRunner, so we cannot do an instanceof check here
+			if (cause.getClass().getName()
+				.equals(BuildException.class.getName())) {
+				// RuntimeException class is loaded by the bootstrap
+				// classloader, so this is OK
+				throw (RuntimeException) cause;
+			}
+
+			e.printStackTrace();
+			fail("Failed to run Ant build: " + e.getLocalizedMessage());
+		} catch (Exception e) {
+			e.printStackTrace();
+			fail("Failed to run Ant build: " + e.getLocalizedMessage());
+		}
+
+		return (Profile) UML2Util.load(rset, profileURI,
+			UMLPackage.Literals.PROFILE);
+	}
+
+	Throwable unwrap(CoreException e) {
+		Throwable result = null;
+		Throwable cause = e.getCause();
+
+		if ((cause != null) && (cause != e)) {
+			result = cause;
+
+			while (result instanceof InvocationTargetException) {
+				result = ((InvocationTargetException) result)
+					.getTargetException();
+			}
+		} else {
+			result = e;
+		}
+
+		return result;
+	}
+
+	File createAntBuildFile(URI profileURI,
+			ProfileAntLocationKind antLocationKind, Map<String, String> options)
+			throws IOException {
+
+		if (options == null) {
+			options = Collections.emptyMap();
+		}
+
+		File result = new File(tempDir, "build.xml");
+		PrintWriter writer = null;
+
+		try {
+			writer = new PrintWriter(result);
+			writer
+				.println("<project name=\"define.profiles\" default=\"define\">");
+			writer
+				.println("   <property name=\"profiles.base\" location=\".\"/>");
+
+			if (antLocationKind == ProfileAntLocationKind.PROFILESET_ELEMENT) {
+				writer
+					.println("   <fileset dir=\"${profiles.base}\" id=\"profiles.to.define\">");
+				if (profileURI != null) {
+					writer.println("      <include name=\"*.profile.uml\"/>");
+				} else {
+					// this won't match anything
+					writer.println("      <include name=\"*.bogus\"/>");
+				}
+				writer.println("   </fileset>");
+			}
+
+			writer
+				.println("   <target name=\"define\" description=\"Define our profiles\">");
+
+			switch (antLocationKind) {
+				case PROFILE_ATTRIBUTE :
+					if (profileURI != null) {
+						writer
+							.printf(
+								"      <uml2.defineProfile profile=\"${profiles.base}/%s\">%n",
+								profileURI.lastSegment());
+					} else {
+						writer.println("      <uml2.defineProfile>");
+					}
+					break;
+				case PROFILE_ELEMENT :
+					writer.println("      <uml2.defineProfile>");
+					if (profileURI != null) {
+						writer
+							.printf(
+								"         <profile file=\"${profiles.base}/%s\"/>%n",
+								profileURI.lastSegment());
+					} else {
+						writer.println("         <profile/>");
+					}
+					break;
+				case PROFILESET_ELEMENT :
+					writer.println("      <uml2.defineProfile>");
+					writer
+						.println("         <profileset refid=\"profiles.to.define\"/>");
+					break;
+			}
+
+			for (Map.Entry<String, String> option : options.entrySet()) {
+				writer.printf("         <arg line=\"-%s %s\"/>%n",
+					option.getKey(), option.getValue());
+			}
+			writer.println("      </uml2.defineProfile>");
+			writer.println("   </target>");
+			writer.println("</project>");
+		} finally {
+			if (writer != null) {
+				try {
+					writer.close();
+				} catch (Exception e) {
+					e.printStackTrace();
+					fail("Failed to close Ant build file: "
+						+ e.getLocalizedMessage());
+				}
+			}
+		}
+
+		return result;
+	}
+
+	URI copyTestProfile() {
+		final String resourceName = getClass().getSimpleName() + ".profile.uml";
+		URL url = getClass().getResource(resourceName);
+		File result = new File(tempDir, resourceName);
+		InputStream input = null;
+		OutputStream output = null;
+		ReadableByteChannel inChan = null;
+		WritableByteChannel outChan = null;
+
+		try {
+			ByteBuffer buf = ByteBuffer.allocate(2048);
+			input = url.openStream();
+			output = new FileOutputStream(result);
+			inChan = Channels.newChannel(input);
+			outChan = Channels.newChannel(output);
+
+			for (int read = inChan.read(buf); read >= 0; read = inChan
+				.read(buf)) {
+
+				buf.flip();
+
+				for (int written = outChan.write(buf); written < read;) {
+					written += outChan.write(buf);
+				}
+
+				buf.flip();
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+			fail("Failed to read resource or write temporary file: "
+				+ e.getLocalizedMessage());
+		} finally {
+			if (outChan != null) {
+				try {
+					outChan.close();
+				} catch (Exception e) {
+					e.printStackTrace();
+					fail("Failed to close temporary file: "
+						+ e.getLocalizedMessage());
+				}
+			}
+			if (inChan != null) {
+				try {
+					inChan.close();
+				} catch (Exception e) {
+					e.printStackTrace();
+					fail("Failed to close resource: " + e.getLocalizedMessage());
+				}
+			}
+		}
+
+		return URI.createFileURI(result.getAbsolutePath());
+	}
+
+	Map<String, String> options(String option, String value, String... more) {
+		Map<String, String> result = new HashMap<String, String>();
+
+		result.put(option, value);
+
+		for (int i = 0; i < more.length;) {
+			option = more[i++];
+			value = more[i++];
+			result.put(option, value);
+		}
+
+		return result;
+	}
+
+	EClass getEClass(Profile profile, String name) {
+		return getEClassifier(profile, name, EClass.class);
+	}
+
+	EDataType getEDataType(Profile profile, String name) {
+		return getEClassifier(profile, name, EDataType.class);
+	}
+
+	<T extends EClassifier> T getEClassifier(Profile profile, String name,
+			Class<T> metaclass) {
+
+		EClassifier result = profile.getDefinition().getEClassifier(name);
+		assertTrue(metaclass.isInstance(result));
+		return metaclass.cast(result);
+	}
+
+	EOperation getEOperation(EClass eClass, String name) {
+		for (EOperation eOperation : eClass.getEOperations()) {
+			if (name.equals(eOperation.getName())) {
+				return eOperation;
+			}
+		}
+
+		fail("EOperation not found: " + name);
+		return null; // unreachable
+	}
+
+	void assertEcoreAnnotation(EModelElement element, String key, String value) {
+		assertAnnotation(element, ECORE_ANNOTATION_URI, key, value);
+	}
+
+	void assertOCLAnnotation(EModelElement element, String key, String value) {
+		assertAnnotation(element, OCL_ANNOTATION_URI, key, value);
+	}
+
+	void assertAnnotation(EModelElement element, String source, String key,
+			String value) {
+
+		String annotation = EcoreUtil.getAnnotation(element, source, key);
+		assertNotNull("Annotation key not found", annotation);
+		assertTrue(Pattern
+			.compile(
+				String.format("(?:^|\\s)%s(?:$|\\s)", Pattern.quote(value)))
+			.matcher(annotation).find());
+	}
+
+	void assertNoAnnotation(EModelElement element, String source, String key) {
+		String annotation = EcoreUtil.getAnnotation(element, source, key);
+		assertNull("Found annotation key", annotation);
+	}
+
+	void assertHasValidationOperations(EClass eclass) {
+		for (EOperation operation : eclass.getEOperations()) {
+			for (EParameter parameter : operation.getEParameters()) {
+				if (parameter.getEType() == EcorePackage.Literals.EDIAGNOSTIC_CHAIN) {
+					// success
+					return;
+				}
+			}
+		}
+
+		fail("Did not find a validation operation");
+	}
+
+	void assertNoValidationOperations(EClass eclass) {
+		for (EOperation operation : eclass.getEOperations()) {
+			for (EParameter parameter : operation.getEParameters()) {
+				assertNotSame(EcorePackage.Literals.EDIAGNOSTIC_CHAIN,
+					parameter.getEType());
+			}
+		}
+	}
+
+	//
+	// Nested types
+	//
+
+	enum ProfileAntLocationKind {
+		PROFILE_ATTRIBUTE, PROFILE_ELEMENT, PROFILESET_ELEMENT;
+	}
+}
diff --git a/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/tests/DefineProfileTaskTest.profile.uml b/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/tests/DefineProfileTaskTest.profile.uml
new file mode 100644
index 0000000..85e2076
--- /dev/null
+++ b/tests/org.eclipse.uml2.ant.tests/src/org/eclipse/uml2/ant/tests/DefineProfileTaskTest.profile.uml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<uml:Profile xmi:version="20110701" xmlns:xmi="http://www.omg.org/spec/XMI/20110701" xmlns:uml="http://www.eclipse.org/uml2/4.0.0/UML" xmi:id="_wHQHgGckEeO3Y8Il99uIoQ" name="j2ee" URI="http://www.eclipse.org/schema/uml2/test/profiles/j2ee" metamodelReference="_5EP3sGckEeO3Y8Il99uIoQ">
+  <packageImport xmi:id="_5EP3sGckEeO3Y8Il99uIoQ">
+    <importedPackage xmi:type="uml:Model" href="pathmap://UML_METAMODELS/UML.metamodel.uml#_0"/>
+  </packageImport>
+  <packagedElement xmi:type="uml:Stereotype" xmi:id="_8xb7IGckEeO3Y8Il99uIoQ" name="Bean">
+    <ownedAttribute xmi:id="_8VQgAmclEeO3Y8Il99uIoQ" name="base_Class" association="_8VQgAGclEeO3Y8Il99uIoQ">
+      <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Class"/>
+    </ownedAttribute>
+    <ownedAttribute xmi:id="_fvcWIGclEeO3Y8Il99uIoQ" name="interface" type="_BbQl8GclEeO3Y8Il99uIoQ" isReadOnly="true" isDerived="true" association="_qpSNgGclEeO3Y8Il99uIoQ">
+      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_jU-SYGclEeO3Y8Il99uIoQ" value="*"/>
+    </ownedAttribute>
+    <ownedAttribute xmi:id="_OCFIQGdAEeOvUKRFSEuPKQ" name="attachment">
+      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PikDkGdAEeOvUKRFSEuPKQ"/>
+      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_QEwKoGdAEeOvUKRFSEuPKQ" value="*"/>
+    </ownedAttribute>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Stereotype" xmi:id="_BbQl8GclEeO3Y8Il99uIoQ" name="BeanInterface">
+    <ownedAttribute xmi:id="_ASRIImcmEeO3Y8Il99uIoQ" name="base_Interface" association="_ASRIIGcmEeO3Y8Il99uIoQ">
+      <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Interface"/>
+    </ownedAttribute>
+    <ownedAttribute xmi:id="_IoJqcGclEeO3Y8Il99uIoQ" name="finder" type="_FUrHgGclEeO3Y8Il99uIoQ" isReadOnly="true" isDerived="true" association="_VM2hIGclEeO3Y8Il99uIoQ">
+      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_KzxNcGclEeO3Y8Il99uIoQ"/>
+      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_LSctgGclEeO3Y8Il99uIoQ" value="*"/>
+    </ownedAttribute>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Stereotype" xmi:id="_FUrHgGclEeO3Y8Il99uIoQ" name="Finder">
+    <ownedRule xmi:id="_NRszAGcmEeO3Y8Il99uIoQ" name="is_static">
+      <specification xmi:type="uml:OpaqueExpression" xmi:id="_U_HxsGcmEeO3Y8Il99uIoQ">
+        <language>OCL</language>
+        <body>base_Operation.isStatic</body>
+      </specification>
+    </ownedRule>
+    <ownedRule xmi:id="_auNbcGcmEeO3Y8Il99uIoQ" name="returns_interface_type">
+      <specification xmi:type="uml:OpaqueExpression" xmi:id="_auNbcWcmEeO3Y8Il99uIoQ">
+        <language>OCL</language>
+        <body>base_Operation.type &lt;> null and base_Operation.type.conformsTo(beanInterface.base_Interface)</body>
+      </specification>
+    </ownedRule>
+    <ownedAttribute xmi:id="_EvC1cmcmEeO3Y8Il99uIoQ" name="base_Operation" association="_EvC1cGcmEeO3Y8Il99uIoQ">
+      <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Operation"/>
+    </ownedAttribute>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Association" xmi:id="_VM2hIGclEeO3Y8Il99uIoQ" memberEnd="_IoJqcGclEeO3Y8Il99uIoQ _Yr5a4GclEeO3Y8Il99uIoQ">
+    <ownedEnd xmi:id="_Yr5a4GclEeO3Y8Il99uIoQ" name="beanInterface" type="_BbQl8GclEeO3Y8Il99uIoQ" association="_VM2hIGclEeO3Y8Il99uIoQ"/>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Association" xmi:id="_qpSNgGclEeO3Y8Il99uIoQ" memberEnd="_fvcWIGclEeO3Y8Il99uIoQ _wgbnEGclEeO3Y8Il99uIoQ">
+    <ownedEnd xmi:id="_wgbnEGclEeO3Y8Il99uIoQ" name="implementation" type="_8xb7IGckEeO3Y8Il99uIoQ" association="_qpSNgGclEeO3Y8Il99uIoQ">
+      <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_yuvRsGclEeO3Y8Il99uIoQ"/>
+      <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_zOGuQGclEeO3Y8Il99uIoQ" value="*"/>
+    </ownedEnd>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Extension" xmi:id="_8VQgAGclEeO3Y8Il99uIoQ" name="Class_Bean" memberEnd="_8VQgAWclEeO3Y8Il99uIoQ _8VQgAmclEeO3Y8Il99uIoQ">
+    <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_8VQgAWclEeO3Y8Il99uIoQ" name="extension_Bean" type="_8xb7IGckEeO3Y8Il99uIoQ" aggregation="composite" association="_8VQgAGclEeO3Y8Il99uIoQ"/>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Extension" xmi:id="_ASRIIGcmEeO3Y8Il99uIoQ" name="Interface_BeanInterface" memberEnd="_ASRIIWcmEeO3Y8Il99uIoQ _ASRIImcmEeO3Y8Il99uIoQ">
+    <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_ASRIIWcmEeO3Y8Il99uIoQ" name="extension_BeanInterface" type="_BbQl8GclEeO3Y8Il99uIoQ" aggregation="composite" association="_ASRIIGcmEeO3Y8Il99uIoQ"/>
+  </packagedElement>
+  <packagedElement xmi:type="uml:Extension" xmi:id="_EvC1cGcmEeO3Y8Il99uIoQ" name="Operation_Finder" memberEnd="_EvC1cWcmEeO3Y8Il99uIoQ _EvC1cmcmEeO3Y8Il99uIoQ">
+    <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_EvC1cWcmEeO3Y8Il99uIoQ" name="extension_Finder" type="_FUrHgGclEeO3Y8Il99uIoQ" aggregation="composite" association="_EvC1cGcmEeO3Y8Il99uIoQ"/>
+  </packagedElement>
+</uml:Profile>
diff --git a/tests/org.eclipse.uml2.tests-feature/feature.xml b/tests/org.eclipse.uml2.tests-feature/feature.xml
index 3b5d8d8..eb1eb8e 100644
--- a/tests/org.eclipse.uml2.tests-feature/feature.xml
+++ b/tests/org.eclipse.uml2.tests-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.uml2.tests"
       label="%feature.label"
-      version="4.2.0.qualifier"
+      version="5.0.0.qualifier"
       provider-name="%feature.provider-name"
       image="eclipse_update_120.jpg"
       license-feature="org.eclipse.uml2.license"
@@ -13,7 +13,7 @@
    </description>
 
    <copyright url="http://www.eclipse.org/legal/epl-v10.html">
-      Copyright (c) 2003, 2013 IBM Corporation, Embarcadero Technologies, CEA, and others.
+      Copyright (c) 2003, 2014 IBM Corporation, Embarcadero Technologies, CEA, 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
@@ -42,6 +42,12 @@
          version="0.0.0"/>
 
    <plugin
+         id="org.eclipse.uml2.ant.tests"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"/>
+
+   <plugin
          id="org.eclipse.test"
          download-size="0"
          install-size="0"
diff --git a/tests/org.eclipse.uml2.tests/about.properties b/tests/org.eclipse.uml2.tests/about.properties
index 8e95f39..c6b2776 100644
--- a/tests/org.eclipse.uml2.tests/about.properties
+++ b/tests/org.eclipse.uml2.tests/about.properties
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2013 IBM Corporation, Embarcadero Technologies, CEA, and others.
+# Copyright (c) 2006, 2014 IBM Corporation, Embarcadero Technologies, CEA, 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
@@ -7,7 +7,7 @@
 # Contributors: 
 #   IBM - initial API and implementation
 #   Kenn Hussey (Embarcadero Technologies) - 219804, 204200
-#   Kenn Hussey (CEA) - 327039, 388240, 297216
+#   Kenn Hussey (CEA) - 327039, 388240, 297216, 286404
 #
 
 # NLS_MESSAGEFORMAT_VAR
@@ -23,5 +23,5 @@
 Version: {featureVersion}\n\
 Build id: {0}\n\
 \n\
-(c) Copyright Eclipse contributors and others 2003, 2013.  All rights reserved.\n\
+(c) Copyright Eclipse contributors and others 2003, 2014.  All rights reserved.\n\
 Visit http://www.eclipse.org/uml2
diff --git a/tests/org.eclipse.uml2.uml.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.uml2.uml.tests/META-INF/MANIFEST.MF
index c0b7bad..7727079 100644
--- a/tests/org.eclipse.uml2.uml.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.uml2.uml.tests/META-INF/MANIFEST.MF
@@ -2,15 +2,19 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.uml.tests;singleton:=true
-Bundle-Version: 4.2.0.qualifier
+Bundle-Version: 5.0.0.qualifier
 Bundle-ClassPath: uml2.uml.tests.jar
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Export-Package: org.eclipse.uml2.uml.tests
+Export-Package: org.eclipse.uml2.uml.bug.tests,
+ org.eclipse.uml2.uml.tests,
+ org.eclipse.uml2.uml.tests.util,
+ org.eclipse.uml2.uml.validation.tests
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.uml2.uml;visibility:=reexport,
  org.eclipse.uml2.uml.resources;visibility:=reexport,
+ org.eclipse.uml2.uml.validation;visibility:=reexport,
  org.eclipse.emf.ecore.xmi;visibility:=reexport,
  org.junit;visibility:=reexport
 Eclipse-LazyStart: true
diff --git a/tests/org.eclipse.uml2.uml.tests/UML Tests Standalone.launch b/tests/org.eclipse.uml2.uml.tests/UML2 UML Tests Standalone.launch
similarity index 100%
rename from tests/org.eclipse.uml2.uml.tests/UML Tests Standalone.launch
rename to tests/org.eclipse.uml2.uml.tests/UML2 UML Tests Standalone.launch
diff --git a/tests/org.eclipse.uml2.uml.tests/UML Tests.launch b/tests/org.eclipse.uml2.uml.tests/UML2 UML Tests.launch
similarity index 100%
rename from tests/org.eclipse.uml2.uml.tests/UML Tests.launch
rename to tests/org.eclipse.uml2.uml.tests/UML2 UML Tests.launch
diff --git a/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/bug/tests/Bug403374Test.java b/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/bug/tests/Bug403374Test.java
index c4842e6..3a28935 100644
--- a/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/bug/tests/Bug403374Test.java
+++ b/tests/org.eclipse.uml2.uml.tests/src/org/eclipse/uml2/uml/bug/tests/Bug403374Test.java
@@ -229,7 +229,7 @@
 		assertNotNull("Annotation key not found", annotation);
 		assertTrue(Pattern
 			.compile(
-				String.format("(?:^|\\w)%s(?:$|\\w)", Pattern.quote(value)))
+				String.format("(?:^|\\s)%s(?:$|\\s)", Pattern.quote(value)))
 			.matcher(annotation).find());
 	}