FELIX-4401 Update ServiceComponentRuntime to spec, enable/disable are async returhing Promise

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1604452 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scr/src/main/java/org/osgi/annotation/versioning/ConsumerType.java b/scr/src/main/java/org/osgi/annotation/versioning/ConsumerType.java
new file mode 100644
index 0000000..f5fa786
--- /dev/null
+++ b/scr/src/main/java/org/osgi/annotation/versioning/ConsumerType.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) OSGi Alliance (2013, 2014). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.annotation.versioning;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * A type implemented by the Consumer Role.
+ * 
+ * <p>
+ * A non-binary compatible change to a consumer type normally requires
+ * incrementing the major version of the type's package. This change will
+ * require all providers and all consumers to be updated to handle the change
+ * since consumers implement the consumer type and all providers must understand
+ * the change in the consumer type.
+ * 
+ * <p>
+ * A type can be marked {@link ConsumerType} or {@link ProviderType} but not
+ * both. A type is assumed to be {@link ConsumerType} if it is not marked either
+ * {@link ConsumerType} or {@link ProviderType}.
+ * 
+ * <p>
+ * This annotation is not retained at runtime. It is for use by tools to
+ * understand the semantic version of a package. When a bundle implements a
+ * consumer type from an imported package, then the bundle's import range for
+ * that package must require the exact major version and a minor version greater
+ * than or equal to the package's version.
+ * 
+ * @see <a href="http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf"
+ *      >Semantic Versioning</a>
+ * @author $Id: 319ac9d62b568a8cde1523e0059aa3e44c7e86af $
+ */
+@Documented
+@Retention(RetentionPolicy.CLASS)
+@Target(ElementType.TYPE)
+public @interface ConsumerType {
+	// marker annotation
+}
diff --git a/scr/src/main/java/org/osgi/annotation/versioning/ProviderType.java b/scr/src/main/java/org/osgi/annotation/versioning/ProviderType.java
new file mode 100644
index 0000000..fdfee9e
--- /dev/null
+++ b/scr/src/main/java/org/osgi/annotation/versioning/ProviderType.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) OSGi Alliance (2013, 2014). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.annotation.versioning;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * A type implemented by the Provider Role.
+ * 
+ * <p>
+ * A non-binary compatible change to a provider type normally requires
+ * incrementing the minor version of the type's package. This change will
+ * require all providers to be updated to handle the change, but consumers of
+ * that package will not require changes since they only use, and do not
+ * implement, the provider type.
+ * 
+ * <p>
+ * A type can be marked {@link ConsumerType} or {@link ProviderType} but not
+ * both. A type is assumed to be {@link ConsumerType} if it is not marked either
+ * {@link ConsumerType} or {@link ProviderType}.
+ * 
+ * <p>
+ * This annotation is not retained at runtime. It is for use by tools to
+ * understand the semantic version of a package. When a bundle implements a
+ * provider type from an imported package, then the bundle's import range for
+ * that package must require the package's exact major and minor version.
+ * 
+ * @see <a href="http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf"
+ *      >Semantic Versioning</a>
+ * @author $Id: 46ccfd7aa446f79451d090e0c23e257c3c5c3cf0 $
+ */
+@Documented
+@Retention(RetentionPolicy.CLASS)
+@Target(ElementType.TYPE)
+public @interface ProviderType {
+	// marker annotation
+}
diff --git a/scr/src/main/java/org/osgi/annotation/versioning/Version.java b/scr/src/main/java/org/osgi/annotation/versioning/Version.java
new file mode 100644
index 0000000..982680a
--- /dev/null
+++ b/scr/src/main/java/org/osgi/annotation/versioning/Version.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) OSGi Alliance (2013). All Rights Reserved.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.osgi.annotation.versioning;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Specify the version of a package.
+ * 
+ * <p>
+ * This annotation is not retained at runtime. It is for use by tools to
+ * generate bundle manifests or otherwise process the version of a package.
+ * 
+ * @see <a href="http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf"
+ *      >Semantic Versioning</a>
+ * @author $Id: dcb5aff364bf7d59d647211711ae0e32697cc56f $
+ */
+@Documented
+@Retention(RetentionPolicy.CLASS)
+@Target(ElementType.PACKAGE)
+public @interface Version {
+	/**
+	 * The version of the annotated package.
+	 * 
+	 * <p>
+	 * The version must be a valid OSGi version string.
+	 */
+	String value();
+}
diff --git a/scr/src/main/java/org/osgi/annotation/versioning/package-info.java b/scr/src/main/java/org/osgi/annotation/versioning/package-info.java
new file mode 100644
index 0000000..7268d2d
--- /dev/null
+++ b/scr/src/main/java/org/osgi/annotation/versioning/package-info.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) OSGi Alliance (2013). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * OSGi Versioning Annotations Package Version 1.0.
+ *
+ * <p>
+ * This package is not used at runtime.
+ *
+ * @see <a href="http://www.osgi.org/wiki/uploads/Links/SemanticVersioning.pdf"
+ *      >Semantic Versioning</a>
+ * @version 1.0
+ * @author $Id: 1bffd081f72d9ddcdc31a7c49493b35b009ba0e3 $
+ */
+@Version("1.0")
+package org.osgi.annotation.versioning;
+