Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentContext.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentContext.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentContext.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentContext.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,183 @@ +/* + * Copyright (c) OSGi Alliance (2004, 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.service.component; + +import java.util.Dictionary; +import org.osgi.annotation.versioning.ProviderType; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; + +/** + * A Component Context object is used by a component instance to interact with + * its execution context including locating services by reference name. Each + * component instance has a unique Component Context. + * + * <p> + * A component instance may obtain its Component Context object through its + * activate, modified, and deactivate methods. + * + * @ThreadSafe + * @author $Id: 5499691841bcfbb0d35222564785af1a5a530c7f $ + */ +@ProviderType +public interface ComponentContext { + /** + * Returns the component properties for this Component Context. + * + * @return The properties for this Component Context. The Dictionary is read + * only and cannot be modified. + */ + public Dictionary<String, Object> getProperties(); + + /** + * Returns the service object for the specified reference name. + * + * <p> + * If the cardinality of the reference is {@code 0..n} or {@code 1..n} and + * multiple services are bound to the reference, the service with the + * highest ranking (as specified in its {@code Constants.SERVICE_RANKING} + * property) is returned. If there is a tie in ranking, the service with the + * lowest service id (as specified in its {@code Constants.SERVICE_ID} + * property); that is, the service that was registered first is returned. + * + * @param name The name of a reference as specified in a {@code reference} + * element in this component's description. + * @return A service object for the referenced service or {@code null} if + * the reference cardinality is {@code 0..1} or {@code 0..n} and no + * bound service is available. + * @throws ComponentException If Service Component Runtime catches an + * exception while activating the bound service. + */ + public Object locateService(String name); + + /** + * Returns the service object for the specified reference name and + * {@code ServiceReference}. + * + * @param <S> Type of Service. + * @param name The name of a reference as specified in a {@code reference} + * element in this component's description. + * @param reference The {@code ServiceReference} to a bound service. This + * must be a {@code ServiceReference} provided to the component via + * the bind or unbind method for the specified reference name. + * @return A service object for the referenced service or {@code null} if + * the specified {@code ServiceReference} is not a bound service for + * the specified reference name. + * @throws ComponentException If Service Component Runtime catches an + * exception while activating the bound service. + */ + public <S> S locateService(String name, ServiceReference<S> reference); + + /** + * Returns the service objects for the specified reference name. + * + * @param name The name of a reference as specified in a {@code reference} + * element in this component's description. + * @return An array of service objects for the referenced service or + * {@code null} if the reference cardinality is {@code 0..1} or + * {@code 0..n} and no bound service is available. If the reference + * cardinality is {@code 0..1} or {@code 1..1} and a bound service + * is available, the array will have exactly one element. + * @throws ComponentException If Service Component Runtime catches an + * exception while activating a bound service. + */ + public Object[] locateServices(String name); + + /** + * Returns the {@code BundleContext} of the bundle which contains this + * component. + * + * @return The {@code BundleContext} of the bundle containing this + * component. + */ + public BundleContext getBundleContext(); + + /** + * If the component instance is registered as a service using the + * {@code servicescope="bundle"} or {@code servicescope="prototype"} + * attribute, then this method returns the bundle using the service provided + * by the component instance. + * <p> + * This method will return {@code null} if: + * <ul> + * <li>The component instance is not a service, then no bundle can be using + * it as a service.</li> + * <li>The component instance is a service but did not specify the + * {@code servicescope="bundle"} or {@code servicescope="prototype"} + * attribute, then all bundles using the service provided by the component + * instance will share the same component instance.</li> + * <li>The service provided by the component instance is not currently being + * used by any bundle.</li> + * </ul> + * + * @return The bundle using the component instance as a service or + * {@code null}. + */ + public Bundle getUsingBundle(); + + /** + * Returns the Component Instance object for the component instance + * associated with this Component Context. + * + * @return The Component Instance object for the component instance. + */ + public ComponentInstance getComponentInstance(); + + /** + * Enables the specified component name. The specified component name must + * be in the same bundle as this component. + * + * <p> + * This method must return after changing the enabled state of the specified + * component name. Any actions that result from this, such as activating or + * deactivating a component configuration, must occur asynchronously to this + * method call. + * + * @param name The name of a component or {@code null} to indicate all + * components in the bundle. + */ + public void enableComponent(String name); + + /** + * Disables the specified component name. The specified component name must + * be in the same bundle as this component. + * + * <p> + * This method must return after changing the enabled state of the specified + * component name. Any actions that result from this, such as activating or + * deactivating a component configuration, must occur asynchronously to this + * method call. + * + * @param name The name of a component. + */ + public void disableComponent(String name); + + /** + * If the component instance is registered as a service using the + * {@code service} element, then this method returns the service reference + * of the service provided by this component instance. + * <p> + * This method will return {@code null} if the component instance is not + * registered as a service. + * + * @return The {@code ServiceReference} object for the component instance or + * {@code null} if the component instance is not registered as a + * service. + */ + public ServiceReference<?> getServiceReference(); +}
Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentException.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentException.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentException.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentException.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,79 @@ +/* + * Copyright (c) OSGi Alliance (2004, 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.service.component; + +/** + * Unchecked exception which may be thrown by Service Component Runtime. + * + * @author $Id: 6b47774608ff37a2076b9f58090509093314a67a $ + */ +public class ComponentException extends RuntimeException { + static final long serialVersionUID = -7438212656298726924L; + + /** + * Construct a new ComponentException with the specified message and cause. + * + * @param message The message for the exception. + * @param cause The cause of the exception. May be {@code null}. + */ + public ComponentException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Construct a new ComponentException with the specified message. + * + * @param message The message for the exception. + */ + public ComponentException(String message) { + super(message); + } + + /** + * Construct a new ComponentException with the specified cause. + * + * @param cause The cause of the exception. May be {@code null}. + */ + public ComponentException(Throwable cause) { + super(cause); + } + + /** + * Returns the cause of this exception or {@code null} if no cause was set. + * + * @return The cause of this exception or {@code null} if no cause was set. + */ + @Override + public Throwable getCause() { + return super.getCause(); + } + + /** + * Initializes the cause of this exception to the specified value. + * + * @param cause The cause of this exception. + * @return This exception. + * @throws IllegalArgumentException If the specified cause is this + * exception. + * @throws IllegalStateException If the cause of this exception has already + * been set. + */ + @Override + public Throwable initCause(Throwable cause) { + return super.initCause(cause); + } +} Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentFactory.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentFactory.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentFactory.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentFactory.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,49 @@ +/* + * Copyright (c) OSGi Alliance (2004, 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.service.component; + +import java.util.Dictionary; +import org.osgi.annotation.versioning.ProviderType; + +/** + * When a component is declared with the {@code factory} attribute on its + * {@code component} element, Service Component Runtime will register a + * Component Factory service to allow new component configurations to be created + * and activated rather than automatically creating and activating component + * configuration as necessary. + * + * @ThreadSafe + * @author $Id: a6422fc517a31533b1188d5ab9d9ee95a7a52c8a $ + */ +@ProviderType +public interface ComponentFactory { + /** + * Create and activate a new component configuration. Additional properties + * may be provided for the component configuration. + * + * @param properties Additional properties for the component configuration + * or {@code null} if there are no additional properties. + * @return A {@code ComponentInstance} object encapsulating the component + * instance of the component configuration. The component + * configuration has been activated and, if the component specifies + * a {@code service} element, the component instance has been + * registered as a service. + * @throws ComponentException If Service Component Runtime is unable to + * activate the component configuration. + */ + public ComponentInstance newInstance(Dictionary<String, ?> properties); +} Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentInstance.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentInstance.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentInstance.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentInstance.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,49 @@ +/* + * Copyright (c) OSGi Alliance (2004, 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.service.component; + +import org.osgi.annotation.versioning.ProviderType; + +/** + * A ComponentInstance encapsulates a component instance of an activated + * component configuration. ComponentInstances are created whenever a component + * configuration is activated. + * + * <p> + * ComponentInstances are never reused. A new ComponentInstance object will be + * created when the component configuration is activated again. + * + * @ThreadSafe + * @author $Id: 8078babdd771f18831a54bfaa407e4edd2781552 $ + */ +@ProviderType +public interface ComponentInstance { + /** + * Dispose of the component configuration for this component instance. The + * component configuration will be deactivated. If the component + * configuration has already been deactivated, this method does nothing. + */ + public void dispose(); + + /** + * Returns the component instance of the activated component configuration. + * + * @return The component instance or {@code null} if the component + * configuration has been deactivated. + */ + public Object getInstance(); +} Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentServiceObjects.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentServiceObjects.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentServiceObjects.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/ComponentServiceObjects.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,95 @@ +/* + * Copyright (c) OSGi Alliance (2012, 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.service.component; + +import org.osgi.annotation.versioning.ProviderType; +import org.osgi.framework.Constants; +import org.osgi.framework.ServiceObjects; +import org.osgi.framework.ServiceReference; + +/** + * Allows multiple service objects for a service to be obtained. + * + * <p> + * A component instance can receive a {@code ComponentServiceObjects} object via + * a reference that is typed {@code ComponentServiceObjects}. + * + * <p> + * For services with {@link Constants#SCOPE_PROTOTYPE prototype} scope, multiple + * service objects for the service can be obtained. For services with + * {@link Constants#SCOPE_SINGLETON singleton} or {@link Constants#SCOPE_BUNDLE + * bundle} scope, only one, use-counted service object is available. + * + * <p> + * Any unreleased service objects obtained from this + * {@code ComponentServiceObjects} object are automatically released by Service + * Component Runtime when the service becomes unbound. + * + * @param <S> Type of Service + * @ThreadSafe + * @since 1.3 + * @see ServiceObjects + * @author $Id: 49fc5e86384324c73b412d8b733f715f8b55d4d6 $ + */ +@ProviderType +public interface ComponentServiceObjects<S> { + /** + * Returns a service object for the {@link #getServiceReference() + * associated} service. + * + * <p> + * This method will always return {@code null} when the associated service + * has been become unbound. + * + * @return A service object for the associated service or {@code null} if + * the service is unbound, the customized service object returned by + * a {@code ServiceFactory} does not implement the classes under + * which it was registered or the {@code ServiceFactory} threw an + * exception. + * @throws IllegalStateException If the associated service has been become + * unbound. + * @see #ungetService(Object) + */ + public S getService(); + + /** + * Releases a service object for the {@link #getServiceReference() + * associated} service. + * + * <p> + * The specified service object must no longer be used and all references to + * it should be destroyed after calling this method. + * + * @param service A service object previously provided by this + * {@code ComponentServiceObjects} object. + * @throws IllegalStateException If the associated service has been become + * unbound. + * @throws IllegalArgumentException If the specified service object was not + * provided by this {@code ComponentServiceObjects} object. + * @see #getService() + */ + public void ungetService(S service); + + /** + * Returns the {@link ServiceReference} for the service associated with this + * {@code ComponentServiceObjects} object. + * + * @return The {@link ServiceReference} for the service associated with this + * {@code ComponentServiceObjects} object. + */ + public ServiceReference<S> getServiceReference(); +} Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/package-info.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/package-info.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/package-info.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/package-info.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,42 @@ +/* + * Copyright (c) OSGi Alliance (2010, 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. + */ + +/** + * Service Component Package Version 1.3. + * + * <p> + * Bundles wishing to use this package must list the package in the + * Import-Package header of the bundle's manifest. This package has two types of + * users: the consumers that use the API in this package and the providers that + * implement the API in this package. + * + * <p> + * Example import for consumers using the API in this package: + * <p> + * {@code Import-Package: org.osgi.service.component; version="[1.3,2.0)"} + * <p> + * Example import for providers implementing the API in this package: + * <p> + * {@code Import-Package: org.osgi.service.component; version="[1.3,1.4)"} + * + * @author $Id: 9c158e8fb0f0512b3fbfb759fc06ed54afc0d8b0 $ + */ + +@Version("1.3") +package org.osgi.service.component; + +import org.osgi.annotation.versioning.Version; + Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/ServiceComponentRuntime.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/ServiceComponentRuntime.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/ServiceComponentRuntime.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/ServiceComponentRuntime.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,165 @@ +/* + * 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.service.component.runtime; + +import java.util.Collection; +import org.osgi.annotation.versioning.ProviderType; +import org.osgi.framework.Bundle; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO; +import org.osgi.service.component.runtime.dto.ComponentDescriptionDTO; +import org.osgi.util.promise.Promise; + +/** + * The {@code ServiceComponentRuntime} service represents the Declarative + * Services actor, known as Service Component Runtime (SCR), that manages the + * service components and their life cycle. The {@code ServiceComponentRuntime} + * service allows introspection of the components managed by Service Component + * Runtime. + * + * <p> + * This service differentiates between a {@link ComponentDescriptionDTO} and a + * {@link ComponentConfigurationDTO}. A {@link ComponentDescriptionDTO} is a + * representation of a declared component description. A + * {@link ComponentConfigurationDTO} is a representation of an actual instance + * of a declared component description parameterized by component properties. + * <p> + * + * Access to this service requires the + * {@code ServicePermission[ServiceComponentRuntime, GET]} permission. It is + * intended that only administrative bundles should be granted this permission + * to limit access to the potentially intrusive methods provided by this + * service. + * + * @ThreadSafe + * @since 1.3 + * @author $Id: 59760dcd57f2162574cfd0c7f3a393825566e78f $ + */ +@ProviderType +public interface ServiceComponentRuntime { + + /** + * Returns the component descriptions declared by the specified active + * bundles. + * + * <p> + * Only component descriptions from active bundles are returned. If the + * specified bundles have no declared components or are not active, an empty + * collection is returned. + * + * @param bundles The bundles whose declared component descriptions are to + * be returned. Specifying no bundles, or the equivalent of an empty + * {@code Bundle} array, will return the declared component + * descriptions from all active bundles. + * @return The declared component descriptions of the specified active + * {@code bundles}. An empty collection is returned if there are no + * component descriptions for the specified active bundles. + */ + Collection<ComponentDescriptionDTO> getComponentDescriptionDTOs(Bundle... bundles); + + /** + * Returns the {@link ComponentDescriptionDTO} declared with the specified name + * by the specified bundle. + * + * <p> + * Only component descriptions from active bundles are returned. + * {@code null} if no such component is declared by the given {@code bundle} + * or the bundle is not active. + * + * @param bundle The bundle declaring the component description. Must not be + * {@code null}. + * @param name The name of the component description. Must not be + * {@code null}. + * @return The declared component description or {@code null} if the + * specified bundle is not active or does not declare a component + * description with the specified name. + */ + ComponentDescriptionDTO getComponentDescriptionDTO(Bundle bundle, String name); + + /** + * Returns the component configurations for the specified component + * description. + * + * @param description The component description. Must not be {@code null}. + * @return A collection containing a snapshot of the current component + * configurations for the specified component description. An empty + * collection is returned if there are none. + */ + Collection<ComponentConfigurationDTO> getComponentConfigurationDTOs(ComponentDescriptionDTO description); + + /** + * Returns whether the specified component description is currently enabled. + * + * <p> + * The enabled state of a component description is initially set by the + * {@link ComponentDescriptionDTO#defaultEnabled enabled} attribute of the + * component description. + * + * @param description The component description. Must not be {@code null}. + * @return {@code true} if the specified component description is currently + * enabled. Otherwise, {@code false}. + * @see #enableComponent(ComponentDescriptionDTO) + * @see #disableComponent(ComponentDescriptionDTO) + * @see ComponentContext#disableComponent(String) + * @see ComponentContext#enableComponent(String) + */ + boolean isComponentEnabled(ComponentDescriptionDTO description); + + /** + * Enables the specified component description. + * + * <p> + * If the specified component description is currently enabled, this method + * has no effect. + * + * <p> + * This method must return after changing the enabled state of the specified + * component description. Any actions that result from this, such as + * activating or deactivating a component configuration, must occur + * asynchronously to this method call. + * + * @param description The component description to enable. Must not be + * {@code null}. + * @return A promise that will be resolved when the actions that result from + * changing the enabled state of the specified component have + * completed. + * @see #isComponentEnabled(ComponentDescriptionDTO) + */ + Promise<Void> enableComponent(ComponentDescriptionDTO description); + + /** + * Disables the specified component description. + * + * <p> + * If the specified component description is currently disabled, this method + * has no effect. + * + * <p> + * This method must return after changing the enabled state of the specified + * component description. Any actions that result from this, such as + * activating or deactivating a component configuration, must occur + * asynchronously to this method call. + * + * @param description The component description to disable. Must not be + * {@code null}. + * @return A promise that will be resolved when the actions that result from + * changing the enabled state of the specified component have + * completed. + * @see #isComponentEnabled(ComponentDescriptionDTO) + */ + Promise<Void> disableComponent(ComponentDescriptionDTO description); +} Propchange: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/ServiceComponentRuntime.java ------------------------------------------------------------------------------ svn:executable = * Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ComponentConfigurationDTO.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ComponentConfigurationDTO.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ComponentConfigurationDTO.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ComponentConfigurationDTO.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,113 @@ +/* + * 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.service.component.runtime.dto; + +import java.util.Map; +import org.osgi.dto.DTO; +import org.osgi.service.component.ComponentContext; + +/** + * A representation of an actual instance of a declared component description + * parameterized by component properties. + * + * @since 1.3 + * @NotThreadSafe + * @author $Id: a3e98bbac97a1d79805f9be0ed7f2ae811f112d0 $ + */ +public class ComponentConfigurationDTO extends DTO { + /** + * The component configuration is unsatisfied due to a missing required + * configuration. + */ + public static final int UNSATISFIED_CONFIGURATION = 1; + + /** + * The component configuration is unsatisfied due to an unsatisfied + * reference. + */ + public static final int UNSATISFIED_REFERENCE = 2; + + /** + * The component configuration is satisfied. + * + * <p> + * Any {@link ComponentDescriptionDTO#serviceInterfaces services} declared + * by the component description are registered. + */ + public static final int SATISFIED = 4; + + /** + * The component configuration is active. + * + * <p> + * This is the normal operational state of a component configuration. + */ + public static final int ACTIVE = 8; + + /** + * The representation of the component configuration's component + * description. + */ + public ComponentDescriptionDTO description; + + /** + * The current state of the component configuration. + * + * <p> + * This is one of {@link #UNSATISFIED_CONFIGURATION}, + * {@link #UNSATISFIED_REFERENCE}, {@link #SATISFIED} or {@link #ACTIVE}. + */ + public int state; + + /** + * The id of the component configuration. + * + * <p> + * The id is a non-persistent, unique value assigned at runtime. The id is + * also available as the {@code component.id} component property. The value + * of this field is unspecified if the state of this component configuration + * is unsatisfied. + */ + public long id; + + /** + * The component properties for the component configuration. + * + * @see ComponentContext#getProperties() + */ + public Map<String, Object> properties; + + /** + * The satisfied references. + * + * <p> + * Each {@link SatisfiedReferenceDTO} in the array represents a satisfied + * reference of the component configuration. The array must be empty if the + * component configuration has no satisfied references. + */ + public SatisfiedReferenceDTO[] satisfiedReferences; + + /** + * The unsatisfied references. + * + * <p> + * Each {@link UnsatisfiedReferenceDTO} in the array represents an + * unsatisfied reference of the component configuration. The array must be + * empty if the component configuration has no unsatisfied references. + */ + public UnsatisfiedReferenceDTO[] unsatisfiedReferences; +} Propchange: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ComponentConfigurationDTO.java ------------------------------------------------------------------------------ svn:executable = * Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ComponentDescriptionDTO.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ComponentDescriptionDTO.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ComponentDescriptionDTO.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ComponentDescriptionDTO.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,171 @@ +/* + * 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.service.component.runtime.dto; + +import java.util.Map; +import org.osgi.dto.DTO; +import org.osgi.framework.dto.BundleDTO; + +/** + * A representation of a declared component description. + * + * @since 1.3 + * @NotThreadSafe + * @author $Id: 9f098a6edef3359b4dbd21e1e58bbad01b89b995 $ + */ +public class ComponentDescriptionDTO extends DTO { + /** + * The name of the component. + * + * <p> + * This is declared in the {@code name} attribute of the {@code component} + * element. This must be the default name if the component description does + * not declare a name. + */ + public String name; + + /** + * The bundle declaring the component description. + */ + public BundleDTO bundle; + + /** + * The component factory name. + * + * <p> + * This is declared in the {@code factory} attribute of the + * {@code component} element. This must be {@code null} if the component + * description is not declared as a component factory. + */ + public String factory; + + /** + * The service scope. + * + * <p> + * This is declared in the {@code scope} attribute of the {@code service} + * element. This must be {@code null} if the component description does not + * declare any service interfaces. + */ + public String scope; + + /** + * The fully qualified name of the implementation class. + * + * <p> + * This is declared in the {@code class} attribute of the + * {@code implementation} element. + */ + public String implementationClass; + + /** + * The initial enabled state. + * + * <p> + * This is declared in the {@code enabled} attribute of the + * {@code component} element. + */ + public boolean defaultEnabled; + + /** + * The immediate state. + * + * <p> + * This is declared in the {@code immediate} attribute of the + * {@code component} element. + */ + public boolean immediate; + + /** + * The fully qualified names of the service interfaces. + * + * <p> + * These are declared in the {@code interface} attribute of the + * {@code provide} elements. The array must be empty if the component + * description does not declare any service interfaces. + */ + public String[] serviceInterfaces; + + /** + * The declared component properties. + * + * <p> + * These are declared in the {@code property} and {@code properties} + * elements. + */ + public Map<String, Object> properties; + + /** + * The referenced services. + * + * <p> + * These are declared in the {@code reference} elements. The array must be + * empty if the component description does not declare references to any + * services. + */ + public ReferenceDTO[] references; + + /** + * The name of the activate method. + * + * <p> + * This is declared in the {@code activate} attribute of the + * {@code component} element. This must be {@code null} if the component + * description does not declare an activate method name. + */ + public String activate; + + /** + * The name of the deactivate method. + * + * <p> + * This is declared in the {@code deactivate} attribute of the + * {@code component} element. This must be {@code null} if the component + * description does not declare a deactivate method name. + */ + public String deactivate; + + /** + * The name of the modified method. + * + * <p> + * This is declared in the {@code modified} attribute of the + * {@code component} element. This must be {@code null} if the component + * description does not declare a modified method name. + */ + public String modified; + + /** + * The configuration policy. + * + * <p> + * This is declared in the {@code configuration-policy} attribute of the + * {@code component} element. This must be the default configuration policy + * if the component description does not declare a configuration policy. + */ + public String configurationPolicy; + + /** + * The configuration pids. + * + * <p> + * These are declared in the {@code configuration-pid} attribute of the + * {@code component} element. This must contain the default configuration + * pid if the component description does not declare a configuration pid. + */ + public String[] configurationPid; +} Propchange: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ComponentDescriptionDTO.java ------------------------------------------------------------------------------ svn:executable = * Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ReferenceDTO.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ReferenceDTO.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ReferenceDTO.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ReferenceDTO.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,148 @@ +/* + * Copyright (c) OSGi Alliance (2013, 2015). 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.service.component.runtime.dto; + +import org.osgi.dto.DTO; + +/** + * A representation of a declared reference to a service. + * + * @since 1.3 + * @NotThreadSafe + * @author $Id: fca2413271fcded16b4ebe3c6628fe8660e2575e $ + */ +public class ReferenceDTO extends DTO { + + /** + * The name of the reference. + * + * <p> + * This is declared in the {@code name} attribute of the {@code reference} + * element. This must be the default name if the component description does + * not declare a name for the reference. + */ + public String name; + + /** + * The service interface of the reference. + * + * <p> + * This is declared in the {@code interface} attribute of the + * {@code reference} element. + */ + public String interfaceName; + + /** + * The cardinality of the reference. + * + * <p> + * This is declared in the {@code cardinality} attribute of the + * {@code reference} element. This must be the default cardinality if the + * component description does not declare a cardinality for the reference. + */ + public String cardinality; + + /** + * The policy of the reference. + * + * <p> + * This is declared in the {@code policy} attribute of the {@code reference} + * element. This must be the default policy if the component description + * does not declare a policy for the reference. + */ + public String policy; + + /** + * The policy option of the reference. + * + * <p> + * This is declared in the {@code policy-option} attribute of the + * {@code reference} element. This must be the default policy option if the + * component description does not declare a policy option for the reference. + */ + public String policyOption; + + /** + * The target of the reference. + * + * <p> + * This is declared in the {@code target} attribute of the {@code reference} + * element. This must be {@code null} if the component description does not + * declare a target for the reference. + */ + public String target; + + /** + * The name of the bind method of the reference. + * + * <p> + * This is declared in the {@code bind} attribute of the {@code reference} + * element. This must be {@code null} if the component description does not + * declare a bind method for the reference. + */ + public String bind; + + /** + * The name of the unbind method of the reference. + * + * <p> + * This is declared in the {@code unbind} attribute of the {@code reference} + * element. This must be {@code null} if the component description does not + * declare an unbind method for the reference. + */ + public String unbind; + + /** + * The name of the updated method of the reference. + * + * <p> + * This is declared in the {@code updated} attribute of the + * {@code reference} element. This must be {@code null} if the component + * description does not declare an updated method for the reference. + */ + public String updated; + + /** + * The name of the field of the reference. + * + * <p> + * This is declared in the {@code field} attribute of the {@code reference} + * element. This must be {@code null} if the component description does not + * declare a field for the reference. + */ + public String field; + + /** + * The field option of the reference. + * + * <p> + * This is declared in the {@code field-option} attribute of the + * {@code reference} element. This must be {@code null} if the component + * description does not declare a field for the reference. + */ + public String fieldOption; + + /** + * The scope of the reference. + * + * <p> + * This is declared in the {@code scope} attribute of the {@code reference} + * element. This must be the default scope if the component description does + * not declare a scope for the reference. + */ + public String scope; +} Propchange: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/ReferenceDTO.java ------------------------------------------------------------------------------ svn:executable = * Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/SatisfiedReferenceDTO.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/SatisfiedReferenceDTO.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/SatisfiedReferenceDTO.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/SatisfiedReferenceDTO.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,62 @@ +/* + * 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.service.component.runtime.dto; + +import org.osgi.dto.DTO; +import org.osgi.framework.dto.ServiceReferenceDTO; + +/** + * A representation of a satisfied reference. + * + * @since 1.3 + * @NotThreadSafe + * @author $Id: 20de229ef78ffbfd603b62d4534721e2f2b17922 $ + */ +public class SatisfiedReferenceDTO extends DTO { + /** + * The name of the declared reference. + * + * <p> + * This is declared in the {@code name} attribute of the {@code reference} + * element of the component description. + * + * @see ReferenceDTO#name + */ + public String name; + + /** + * The target property of the satisfied reference. + * + * <p> + * This is the value of the {@link ComponentConfigurationDTO#properties + * component property} whose name is the concatenation of the + * {@link ReferenceDTO#name declared reference name} and + * ".target". This must be {@code null} if no target property is + * set for the reference. + */ + public String target; + + /** + * The bound services. + * + * <p> + * Each {@link ServiceReferenceDTO} in the array represents a service bound + * to the satisfied reference. The array must be empty if there are no bound + * services. + */ + public ServiceReferenceDTO[] boundServices; +} Propchange: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/SatisfiedReferenceDTO.java ------------------------------------------------------------------------------ svn:executable = * Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/UnsatisfiedReferenceDTO.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/UnsatisfiedReferenceDTO.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/UnsatisfiedReferenceDTO.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/UnsatisfiedReferenceDTO.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,64 @@ +/* + * 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.service.component.runtime.dto; + +import org.osgi.dto.DTO; +import org.osgi.framework.dto.ServiceReferenceDTO; + +/** + * A representation of an unsatisfied reference. + * + * @since 1.3 + * @NotThreadSafe + * @author $Id: 20ce77a3dbc307be592c86bf7b5eddacfe77e21b $ + */ +public class UnsatisfiedReferenceDTO extends DTO { + /** + * The name of the declared reference. + * + * <p> + * This is declared in the {@code name} attribute of the {@code reference} + * element of the component description. + * + * @see ReferenceDTO#name + */ + public String name; + + /** + * The target property of the unsatisfied reference. + * + * <p> + * This is the value of the {@link ComponentConfigurationDTO#properties + * component property} whose name is the concatenation of the + * {@link ReferenceDTO#name declared reference name} and + * ".target". This must be {@code null} if no target property is + * set for the reference. + */ + public String target; + + /** + * The target services. + * + * <p> + * Each {@link ServiceReferenceDTO} in the array represents a target service + * for the reference. The array must be empty if there are no target + * services. The upper bound on the number of target services in the array + * is the upper bound on the {@link ReferenceDTO#cardinality cardinality} of + * the reference. + */ + public ServiceReferenceDTO[] targetServices; +} Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/package-info.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/package-info.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/package-info.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/dto/package-info.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,42 @@ +/* + * Copyright (c) OSGi Alliance (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. + */ + +/** + * Service Component Runtime Data Transfer Objects Package Version 1.3. + * + * <p> + * Bundles wishing to use this package must list the package in the + * Import-Package header of the bundle's manifest. This package has two types of + * users: the consumers that use the API in this package and the providers that + * implement the API in this package. + * + * <p> + * Example import for consumers using the API in this package: + * <p> + * {@code Import-Package: org.osgi.service.component.runtime.dto; version="[1.3,2.0)"} + * <p> + * Example import for providers implementing the API in this package: + * <p> + * {@code Import-Package: org.osgi.service.component.runtime.dto; version="[1.3,1.4)"} + * + * @author $Id: d7d82da09d67a3ce4274ad8554966c1952a2b4de $ + */ + +@Version("1.3") +package org.osgi.service.component.runtime.dto; + +import org.osgi.annotation.versioning.Version; + Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/package-info.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/package-info.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/package-info.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/service/component/runtime/package-info.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,42 @@ +/* + * 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. + */ + +/** + * Service Component Runtime Package Version 1.3. + * + * <p> + * Bundles wishing to use this package must list the package in the + * Import-Package header of the bundle's manifest. This package has two types of + * users: the consumers that use the API in this package and the providers that + * implement the API in this package. + * + * <p> + * Example import for consumers using the API in this package: + * <p> + * {@code Import-Package: org.osgi.service.component.runtime; version="[1.3,2.0)"} + * <p> + * Example import for providers implementing the API in this package: + * <p> + * {@code Import-Package: org.osgi.service.component.runtime; version="[1.3,1.4)"} + * + * @author $Id: 3d4fa42ce33a4682cbaeee3f094b558e6ea6080f $ + */ + +@Version("1.3") +package org.osgi.service.component.runtime; + +import org.osgi.annotation.versioning.Version; + Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/Function.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/Function.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/Function.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/Function.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,43 @@ +/* + * Copyright (c) OSGi Alliance (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.util.function; + +import org.osgi.annotation.versioning.ConsumerType; + +/** + * A function that accepts a single argument and produces a result. + * + * <p> + * This is a functional interface and can be used as the assignment target for a + * lambda expression or method reference. + * + * @param <T> The type of the function input. + * @param <R> The type of the function output. + * + * @ThreadSafe + * @author $Id: 5d812f75c0b4f88f01083189babb3ef7476b5ced $ + */ +@ConsumerType +public interface Function<T, R> { + /** + * Applies this function to the specified argument. + * + * @param t The input to this function. + * @return The output of this function. + */ + R apply(T t); +} Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/Predicate.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/Predicate.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/Predicate.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/Predicate.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,43 @@ +/* + * Copyright (c) OSGi Alliance (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.util.function; + +import org.osgi.annotation.versioning.ConsumerType; + +/** + * A predicate that accepts a single argument and produces a boolean result. + * + * <p> + * This is a functional interface and can be used as the assignment target for a + * lambda expression or method reference. + * + * @param <T> The type of the predicate input. + * + * @ThreadSafe + * @author $Id: 0c2c61f78bede4e2afc4278af4f5e4b873769347 $ + */ +@ConsumerType +public interface Predicate<T> { + /** + * Evaluates this predicate on the specified argument. + * + * @param t The input to this predicate. + * @return {@code true} if the specified argument is accepted by this + * predicate; {@code false} otherwise. + */ + boolean test(T t); +} Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/package-info.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/package-info.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/package-info.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/function/package-info.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,40 @@ +/* + * Copyright (c) OSGi Alliance (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. + */ + +/** + * Function Package Version 1.0. + * + * <p> + * Bundles wishing to use this package must list the package in the + * Import-Package header of the bundle's manifest. + * + * <p> + * Example import for consumers using the API in this package: + * <p> + * {@code Import-Package: org.osgi.util.function; version="[1.0,2.0)"} + * <p> + * Example import for providers implementing the API in this package: + * <p> + * {@code Import-Package: org.osgi.util.function; version="[1.0,1.1)"} + * + * @author $Id: 899d786b27012f55ed87b4c872a6ab2087a20a39 $ + */ + +@Version("1.0") +package org.osgi.util.function; + +import org.osgi.annotation.versioning.Version; + Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/Deferred.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/Deferred.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/Deferred.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/Deferred.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,142 @@ +/* + * Copyright (c) OSGi Alliance (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.util.promise; + +import static org.osgi.util.promise.PromiseImpl.requireNonNull; + +/** + * A Deferred Promise resolution. + * + * <p> + * Instances of this class can be used to create a {@link Promise} that can be + * resolved in the future. The {@link #getPromise() associated} Promise can be + * successfully resolved with {@link #resolve(Object)} or resolved with a + * failure with {@link #fail(Throwable)}. It can also be resolved with the + * resolution of another promise using {@link #resolveWith(Promise)}. + * + * <p> + * The associated Promise can be provided to any one, but the Deferred object + * should be made available only to the party that will responsible for + * resolving the Promise. + * + * @param <T> The value type associated with the created Promise. + * + * @Immutable + * @author $Id: b12288b7edc994f615dc1305d6aeaeeb56208df7 $ + */ +public class Deferred<T> { + private final PromiseImpl<T> promise; + + /** + * Create a new Deferred with an associated Promise. + */ + public Deferred() { + promise = new PromiseImpl<T>(); + } + + /** + * Returns the Promise associated with this Deferred. + * + * @return The Promise associated with this Deferred. + */ + public Promise<T> getPromise() { + return promise; + } + + /** + * Successfully resolve the Promise associated with this Deferred. + * + * <p> + * After the associated Promise is resolved with the specified value, all + * registered {@link Promise#onResolve(Runnable) callbacks} are called and + * any {@link Promise#then(Success, Failure) chained} Promises are resolved. + * + * <p> + * Resolving the associated Promise <i>happens-before</i> any registered + * callback is called. That is, in a registered callback, + * {@link Promise#isDone()} must return {@code true} and + * {@link Promise#getValue()} and {@link Promise#getFailure()} must not + * block. + * + * @param value The value of the resolved Promise. + * @throws IllegalStateException If the associated Promise was already + * resolved. + */ + public void resolve(T value) { + promise.resolve(value, null); + } + + /** + * Fail the Promise associated with this Deferred. + * + * <p> + * After the associated Promise is resolved with the specified failure, all + * registered {@link Promise#onResolve(Runnable) callbacks} are called and + * any {@link Promise#then(Success, Failure) chained} Promises are resolved. + * + * <p> + * Resolving the associated Promise <i>happens-before</i> any registered + * callback is called. That is, in a registered callback, + * {@link Promise#isDone()} must return {@code true} and + * {@link Promise#getValue()} and {@link Promise#getFailure()} must not + * block. + * + * @param failure The failure of the resolved Promise. Must not be + * {@code null}. + * @throws IllegalStateException If the associated Promise was already + * resolved. + */ + public void fail(Throwable failure) { + promise.resolve(null, requireNonNull(failure)); + } + + /** + * Resolve the Promise associated with this Deferred with the specified + * Promise. + * + * <p> + * If the specified Promise is successfully resolved, the associated Promise + * is resolved with the value of the specified Promise. If the specified + * Promise is resolved with a failure, the associated Promise is resolved + * with the failure of the specified Promise. + * + * <p> + * After the associated Promise is resolved with the specified Promise, all + * registered {@link Promise#onResolve(Runnable) callbacks} are called and + * any {@link Promise#then(Success, Failure) chained} Promises are resolved. + * + * <p> + * Resolving the associated Promise <i>happens-before</i> any registered + * callback is called. That is, in a registered callback, + * {@link Promise#isDone()} must return {@code true} and + * {@link Promise#getValue()} and {@link Promise#getFailure()} must not + * block. + * + * @param with A Promise whose value or failure will be used to resolve the + * associated Promise. Must not be {@code null}. + * @return A Promise that is resolved only when the associated Promise is + * resolved by the specified Promise. The returned Promise will be + * successfully resolved, with the value {@code null}, if the + * associated Promise was resolved by the specified Promise. The + * returned Promise will be resolved with a failure of + * {@link IllegalStateException} if the associated Promise was + * already resolved when the specified Promise was resolved. + */ + public Promise<Void> resolveWith(Promise<? extends T> with) { + return promise.resolveWith(with); + } +} Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/FailedPromisesException.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/FailedPromisesException.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/FailedPromisesException.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/FailedPromisesException.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,55 @@ +/* + * Copyright (c) OSGi Alliance (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.util.promise; + +import java.util.Collection; +import java.util.Collections; + +/** + * Promise failure exception for a collection of failed Promises. + * + * @author $Id: 95546abe53fcca0c3daa3d2847a915fe94b9cef8 $ + */ +public class FailedPromisesException extends RuntimeException { + private static final long serialVersionUID = 1L; + private final Collection<Promise<?>> failed; + + /** + * Create a new FailedPromisesException with the specified Promises. + * + * @param failed A collection of Promises that have been resolved with a + * failure. Must not be {@code null}, must not be empty and all of + * the elements in the collection must not be {@code null}. + * @param cause The cause of this exception. This is typically the failure + * of the first Promise in the specified collection. + */ + public FailedPromisesException(Collection<Promise<?>> failed, Throwable cause) { + super(cause); + this.failed = Collections.unmodifiableCollection(failed); + } + + /** + * Returns the collection of Promises that have been resolved with a + * failure. + * + * @return The collection of Promises that have been resolved with a + * failure. The returned collection is unmodifiable. + */ + public Collection<Promise<?>> getFailedPromises() { + return failed; + } +} Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/Failure.java URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/Failure.java?rev=1689973&view=auto ============================================================================== --- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/Failure.java (added) +++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/src/org/osgi/util/promise/Failure.java Wed Jul 8 22:10:14 2015 @@ -0,0 +1,61 @@ +/* + * Copyright (c) OSGi Alliance (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.util.promise; + +import org.osgi.annotation.versioning.ConsumerType; + +/** + * Failure callback for a Promise. + * + * <p> + * A Failure callback is registered with a {@link Promise} using the + * {@link Promise#then(Success, Failure)} method and is called if the Promise is + * resolved with a failure. + * + * <p> + * This is a functional interface and can be used as the assignment target for a + * lambda expression or method reference. + * + * @ThreadSafe + * @author $Id: a4bd1ef9948a4abb9fc01a140bd9562be0beb9aa $ + */ +@ConsumerType +public interface Failure { + /** + * Failure callback for a Promise. + * + * <p> + * This method is called if the Promise with which it is registered resolves + * with a failure. + * + * <p> + * In the remainder of this description we will refer to the Promise + * returned by {@link Promise#then(Success, Failure)} when this Failure + * callback was registered as the chained Promise. + * + * <p> + * If this methods completes normally, the chained Promise will be failed + * with the same exception which failed the resolved Promise. If this method + * throws an exception, the chained Promise will be failed with the thrown + * exception. + * + * @param resolved The failed resolved {@link Promise}. + * @throws Exception The chained Promise will be failed with the thrown + * exception. + */ + void fail(Promise<?> resolved) throws Exception; +}
