Merge branch 'master' of ssh://git.eclipse.org/gitroot/e4/org.eclipse.e4.utils

Conflicts:
	.gitignore
diff --git a/.gitignore b/.gitignore
index 2db576b..e90d179 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+.metadata
 bin/
 *~
 *.rej
diff --git a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/None.java b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/None.java
index b81a640..b18214d 100644
--- a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/None.java
+++ b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/None.java
@@ -10,17 +10,28 @@
  ******************************************************************************/
 package org.eclipse.e4.core.functionalprog.optionmonad;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
 /**
  * An Option instance that does not contain any value.
  * 
  * @param <T> The type that this Option is encapsulating.
  */
 public final class None<T> implements Option<T> {
+	private final IStatus additionalInfo;
+	
+    /**
+     * Construct a None<T>.
+     */
+    public None() { additionalInfo = Status.CANCEL_STATUS; }
  
     /**
      * Construct a None<T>.
      */
-    public None() {}
+    public None(IStatus additionalInfo) { 
+    	this.additionalInfo = Nulls.valueOrSubstitute(additionalInfo, Status.CANCEL_STATUS); 
+    }
  
 	/**
 	 * A convenience factory method meant to be imported statically and that
@@ -33,6 +44,17 @@
 	 */
 	public static <T> Option<T> none() { return new None<T>(); }
 
+	/**
+	 * A convenience factory method meant to be imported statically and that
+	 * eliminates a lot of the boilerplate that Java generics impose.
+	 * 
+	 * @param <T> The type of Option object to create.  Usually inferred 
+	 * automatically by the compiler.
+	 * 
+	 * @return a new None<T>.
+	 */
+	public static <T> Option<T> none(IStatus additionalInfo) { return new None<T>(additionalInfo); }
+
     /* (non-Javadoc)
      * @see org.eclipse.e4.core.functionalprog.optionmonad.Option#get()
      */
@@ -60,4 +82,11 @@
 	public boolean hasValue() {
 		return false;
 	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.e4.core.functionalprog.optionmonad.Option#getStatus()
+	 */
+	public IStatus getStatus() {
+		return additionalInfo;
+	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Option.java b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Option.java
index 7b5ec43..09a5175 100644
--- a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Option.java
+++ b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Option.java
@@ -9,6 +9,8 @@
  *    David Orme - initial API and implementation
  ******************************************************************************/
 package org.eclipse.e4.core.functionalprog.optionmonad;

+
+import org.eclipse.core.runtime.IStatus;
 

 /**

  * A Java implementation of the "Option Monad" design pattern.  (Note that this

@@ -64,6 +66,17 @@
      * 

      * @return true if this Option contains a value or false if it is empty.

      */

-    public boolean hasValue();

+    public boolean hasValue();
+    
+    /**
+     * Returns an IStatus providing further information on this result.  If
+     * clients do not explicitly provide an IStatus result, then Some(value) 
+     * will return Status.OK_STATUS and None will return Status.CANCEL_STATUS.
+     * Alternatively, clients can supply their own IStatus to return along with
+     * Some(value) or None.
+     * 
+     * @return IStatus additional information on this operation.
+     */
+    public IStatus getStatus();

 }

  

diff --git a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Some.java b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Some.java
index f6521d7..40eb1e6 100644
--- a/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Some.java
+++ b/bundles/org.eclipse.e4.core.functionalprog/src/org/eclipse/e4/core/functionalprog/optionmonad/Some.java
@@ -10,6 +10,9 @@
  ******************************************************************************/
 package org.eclipse.e4.core.functionalprog.optionmonad;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
 /**
  * An Option instance that contains a value.
  * 
@@ -17,6 +20,7 @@
  */
 public final class Some<T> implements Option<T> {
     private final T value;
+    private final IStatus additionalInfo;
  
     /**
      * Construct an Option with Some(value).
@@ -25,6 +29,17 @@
      */
     public Some(T value) {
         this.value = value;
+        this.additionalInfo = Status.OK_STATUS;
+    }
+ 
+    /**
+     * Construct an Option with Some(value).
+     * 
+     * @param value The value to encapsulate.
+     */
+    public Some(T value, IStatus additionalInfo) {
+        this.value = value;
+        this.additionalInfo = Nulls.valueOrSubstitute(additionalInfo, Status.OK_STATUS);
     }
  
 	/**
@@ -38,6 +53,19 @@
 	 */
 	public static <T> Option<T> some(T value) { return new Some<T>(value); }
 	
+	/**
+	 * A convenience factory method meant to be imported statically and that
+	 * eliminates a lot of the boilerplate that Java generics impose.
+	 * 
+	 * @param <T> The type of Option object to create.  Usually inferred 
+	 * automatically by the compiler.
+	 * @param additionalInfo An IStatus providing more information on this operation.
+	 * 
+	 * @return a new Some<T> containing the specified value.
+	 */
+	public static <T> Option<T> some(T value, IStatus additionalInfo) { return new Some<T>(value, additionalInfo); }
+
+	
     /* (non-Javadoc)
      * @see org.eclipse.e4.core.functionalprog.optionmonad.Option#get()
      */
@@ -65,5 +93,12 @@
 	public boolean hasValue() {
 		return true;
 	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.e4.core.functionalprog.optionmonad.Option#getStatus()
+	 */
+	public IStatus getStatus() {
+		return additionalInfo;
+	}
 }
  
diff --git a/org.eclipse.e4.utils.releng/.project b/org.eclipse.e4.utils.releng/.project
new file mode 100644
index 0000000..73c5280
--- /dev/null
+++ b/org.eclipse.e4.utils.releng/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.e4.utils.releng</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+	</buildSpec>

+	<natures>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.e4.utils.releng/pom.xml b/org.eclipse.e4.utils.releng/pom.xml
new file mode 100644
index 0000000..af6de4e
--- /dev/null
+++ b/org.eclipse.e4.utils.releng/pom.xml
@@ -0,0 +1,399 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>com.coconut_palm_software.xscalawt.lib</artifactId>
+	<groupId>com.coconut_palm_software</groupId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<properties>
+		<scala.version>2.9.0</scala.version>
+		<tycho-version>0.11.0</tycho-version>
+		<maven-scala-plugin-version>2.14</maven-scala-plugin-version>
+		<encoding>UTF-8</encoding>
+	</properties>
+
+	<prerequisites>
+		<maven>3.0</maven>
+	</prerequisites>
+
+	<modules>
+		<!-- Use this if you want a local target platform rather than the one in the cloud
+		<module>../xscalawt.targetplatform</module>
+		 -->
+		<module>../com.coconut_palm_software.xscalawt</module>
+		<module>../com.coconut_palm_software.xscalawt.feature</module>
+		<module>../com.coconut_palm_software.xscalawt.site</module>
+	</modules>
+
+	<repositories>
+		<repository>
+			<id>helios</id>
+			<name>Eclipse Helios p2 repository</name>
+			<layout>p2</layout>
+			<url>http://download.eclipse.org/releases/helios/</url>
+		</repository>
+
+		<repository>
+			<id>scala-tools.release</id>
+			<name>Scala Tools maven release repository</name>
+			<url>http://scala-tools.org/repo-releases</url>
+			<snapshots>
+				<enabled>false</enabled>
+			</snapshots>
+		</repository>
+		<repository>
+			<id>scala-tools.snapshot</id>
+			<name>Scala Tools maven snapshot repository</name>
+			<url>http://scala-tools.org/repo-snapshots</url>
+			<snapshots>
+				<updatePolicy>daily</updatePolicy>
+			</snapshots>
+		</repository>
+	</repositories>
+
+	<pluginRepositories>
+		<pluginRepository>
+			<id>org.sonatype.tycho</id>
+			<name>Tycho snapshot repository</name>
+			<url>https://repository.sonatype.org/content/repositories/snapshots</url>
+			<snapshots>
+				<updatePolicy>daily</updatePolicy>
+			</snapshots>
+		</pluginRepository>
+		<pluginRepository>
+			<id>scala-tools.release</id>
+			<name>Scala Tools maven release repository</name>
+			<url>http://scala-tools.org/repo-releases</url>
+			<snapshots>
+				<enabled>false</enabled>
+			</snapshots>
+		</pluginRepository>
+		<pluginRepository>
+			<id>scala-tools.snapshot</id>
+			<name>Scala Tools maven snapshot repository</name>
+			<url>http://scala-tools.org/repo-snapshots</url>
+		</pluginRepository>
+	</pluginRepositories>
+	
+	<profiles>
+		<profile>
+			<id>scala-2.8.0</id>
+			<activation>
+				<property>
+					<name>scala.version</name>
+					<value>2.8.0</value>
+				</property>
+			</activation>
+			<repositories>
+				<repository>
+					<id>scala-refactoring-2.8.0.final</id>
+					<name>Scala Refactoring Scala 2.8.0.final p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-refactoring-2.8.0.final</url>
+					<snapshots>
+						<enabled>false</enabled>
+					</snapshots>
+				</repository>
+				<repository>
+					<id>scalariform-2.8.0.final</id>
+					<name>Scalariform Scala 2.8.0.final p2 repo</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scalariform-2.8.0.final</url>
+				</repository>
+				<repository>
+					<id>scala-toolchain-2.8.0.final</id>
+					<name>Scala Toolchain 2.8.0.final p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-2.8.0.final</url>
+				</repository>
+			</repositories>
+		</profile>
+		<profile>
+			<id>scala-2.8.1</id>
+			<activation>
+				<property>
+					<name>scala.version</name>
+					<value>2.8.1</value>
+				</property>
+			</activation>
+			<repositories>
+				<repository>
+					<id>scala-refactoring-2.8.1.final</id>
+					<name>Scala Refactoring Scala 2.8.1.final p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-refactoring-2.8.1.final</url>
+					<snapshots>
+						<enabled>false</enabled>
+					</snapshots>
+				</repository>
+				<repository>
+					<id>scalariform-2.8.1.final</id>
+					<name>Scalariform Scala 2.8.1.final p2 repo</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scalariform-2.8.1.final</url>
+				</repository>
+				<repository>
+					<id>scala-toolchain-2.8.1.final</id>
+					<name>Scala Toolchain 2.8.1.final p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-2.8.1.final</url>
+				</repository>
+			</repositories>
+		</profile>
+		<profile>
+			<id>scala-2.8.1.RC2</id>
+			<activation>
+				<property>
+					<name>scala.version</name>
+					<value>2.8.1.RC2</value>
+				</property>
+			</activation>
+			<repositories>
+				<repository>
+					<id>scala-refactoring-2.8.1.RC2</id>
+					<name>Scala Refactoring Scala 2.8.1.RC2 p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-refactoring-2.8.1.RC2</url>
+					<snapshots>
+						<enabled>false</enabled>
+					</snapshots>
+				</repository>
+				<repository>
+					<id>scalariform-2.8.1.RC2</id>
+					<name>Scalariform Scala 2.8.1.RC2 p2 repo</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scalariform-2.8.1.RC2</url>
+				</repository>
+				<repository>
+					<id>scala-toolchain-2.8.1.RC2</id>
+					<name>Scala Toolchain 2.8.1.RC2 p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-2.8.1.RC2</url>
+				</repository>
+			</repositories>
+		</profile>
+		<profile>
+			<id>scala-2.8.0-maintenance</id>
+			<repositories>
+				<repository>
+					<id>scala-refactoring-2.8.0.final</id>
+					<name>Scala Refactoring Scala 2.8.0.final p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-refactoring-2.8.0.final</url>
+					<snapshots>
+						<enabled>false</enabled>
+					</snapshots>
+				</repository>
+				<repository>
+					<id>scalariform-2.8.0.final</id>
+					<name>Scalariform Scala 2.8.0.final p2 repo</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scalariform-2.8.0.final</url>
+				</repository>
+				<repository>
+					<id>scala-toolchain-2.8.0.final-maintenance</id>
+					<name>Scala Toolchain 2.8.0.final-maintenance p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-2.8.0.final-maintenance</url>
+				</repository>
+			</repositories>
+		</profile>
+		<profile>
+			<id>scala-2.8.x</id>
+			<activation>
+				<property>
+					<name>scala.version</name>
+					<value>2.8.1-SNAPSHOT</value>
+				</property>
+			</activation>
+			<repositories>
+				<repository>
+					<id>scala-refactoring-2.8.1.alpha</id>
+					<name>Scala Refactoring Scala 2.8.1.alpha p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-refactoring-2.8.1.alpha</url>
+				</repository>
+				<repository>
+					<id>scalariform-2.8.1.alpha</id>
+					<name>Scalariform Scala 2.8.1.alpha p2 repo</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scalariform-2.8.1.alpha</url>
+				</repository>
+				<repository>
+					<id>scala-toolchain-2.8.1.alpha</id>
+					<name>Scala Toolchain 2.8.1.alpha p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-2.8.1.alpha</url>
+				</repository>
+			</repositories>
+		</profile>
+		<profile>
+			<id>scala-trunk</id>
+			<activation>
+				<property>
+					<name>scala.version</name>
+					<value>2.9.0-SNAPSHOT</value>
+				</property>
+			</activation>
+			<repositories>
+				<repository>
+					<id>scala-refactoring-trunk</id>
+					<name>Scala Refactoring Scala trunk p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-refactoring-trunk</url>
+				</repository>
+				<repository>
+					<id>scalariform-trunk</id>
+					<name>Scalariform Scala trunk p2 repo</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scalariform-trunk</url>
+				</repository>
+				<repository>
+					<id>scala-toolchain-trunk</id>
+					<name>Scala Toolchain trunk p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-eclipse-toolchain-osgi-trunk</url>
+				</repository>
+			</repositories>
+		</profile>
+		<profile>
+			<id>local-scala-2.8.0</id>
+			<dependencies>
+				<dependency>
+					<groupId>org.scala-ide</groupId>
+					<artifactId>org.scala-ide.scala.library</artifactId>
+					<version>${scala.version}</version>
+				</dependency>
+				<dependency>
+					<groupId>org.scala-ide</groupId>
+					<artifactId>org.scala-ide.scala.compiler</artifactId>
+					<version>${scala.version}</version>
+				</dependency>
+			</dependencies>
+			<repositories>
+				<repository>
+					<id>scala-refactoring-2.8.0.final</id>
+					<name>Scala Refactoring Scala 2.8.0.final p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-refactoring-2.8.0.final</url>
+					<snapshots>
+						<enabled>false</enabled>
+					</snapshots>
+				</repository>
+				<repository>
+					<id>scalariform-2.8.0.final</id>
+					<name>Scalariform Scala 2.8.0.final p2 repo</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scalariform-2.8.0.final</url>
+				</repository>
+			</repositories>
+		</profile>
+		<profile>
+			<id>local-scala-2.8.1</id>
+			<dependencies>
+				<dependency>
+					<groupId>org.scala-ide</groupId>
+					<artifactId>org.scala-ide.scala.library</artifactId>
+					<version>${scala.version}</version>
+				</dependency>
+				<dependency>
+					<groupId>org.scala-ide</groupId>
+					<artifactId>org.scala-ide.scala.compiler</artifactId>
+					<version>${scala.version}</version>
+				</dependency>
+			</dependencies>
+			<repositories>
+				<repository>
+					<id>scala-refactoring-2.8.1.alpha</id>
+					<name>Scala Refactoring Scala 2.8.1.alpha p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-refactoring-2.8.1.alpha</url>
+					<snapshots>
+						<enabled>false</enabled>
+					</snapshots>
+				</repository>
+				<repository>
+					<id>scalariform-2.8.1.alpha</id>
+					<name>Scalariform Scala 2.8.1.alpha p2 repo</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scalariform-2.8.1.alpha</url>
+				</repository>
+			</repositories>
+		</profile>
+		<profile>
+			<id>local-scala-trunk</id>
+			<dependencies>
+				<dependency>
+					<groupId>org.scala-ide</groupId>
+					<artifactId>org.scala-ide.scala.library</artifactId>
+					<version>${scala.version}</version>
+				</dependency>
+				<dependency>
+					<groupId>org.scala-ide</groupId>
+					<artifactId>org.scala-ide.scala.compiler</artifactId>
+					<version>${scala.version}</version>
+				</dependency>
+			</dependencies>
+			<repositories>
+				<repository>
+					<id>scala-refactoring-trunk</id>
+					<name>Scala Refactoring Scala trunk p2 repository</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scala-refactoring-trunk</url>
+					<snapshots>
+						<enabled>false</enabled>
+					</snapshots>
+				</repository>
+				<repository>
+					<id>scalariform-trunk</id>
+					<name>Scalariform Scala trunk p2 repo</name>
+					<layout>p2</layout>
+					<url>http://download.scala-ide.org/scalariform-trunk</url>
+				</repository>
+			</repositories>
+		</profile>
+	</profiles>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.sonatype.tycho</groupId>
+				<artifactId>tycho-maven-plugin</artifactId>
+				<version>${tycho-version}</version>
+				<extensions>true</extensions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.sonatype.tycho</groupId>
+				<artifactId>target-platform-configuration</artifactId>
+				<version>${tycho-version}</version>
+				<configuration>
+					<resolver>p2</resolver>
+					<environments>
+						<environment>
+							<os>linux</os>
+							<ws>gtk</ws>
+							<arch>x86</arch>
+						</environment>
+						<environment>
+							<os>win32</os>
+							<ws>win32</ws>
+							<arch>x86</arch>
+						</environment>
+						<!-- For some reason, adding this breaks the build?
+							<environment> <os>macosx</os> <ws>carbon</ws> <arch>x86</arch>
+							</environment> <environment> <os>macosx</os> <ws>cocoa</ws>
+							<arch>x86_64</arch> </environment>
+						-->
+					</environments>
+				</configuration>
+			</plugin>
+
+		</plugins>
+	</build>
+
+</project>