blob: eb4bc23ed1428adfdb11cc9fa3faa3bb7e0fbf31 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.felix.scr;
import java.util.Dictionary;
import org.osgi.framework.Bundle;
import org.osgi.service.component.ComponentInstance;
/**
* The <code>Component</code> interface represents a single component managed
* by the Service Component Runtime. Management agents may access the Component
* instances through the {@link ScrService}.
*
* @deprecated Use the ServiceComponentRuntime service.
*/
@Deprecated
public interface Component
{
/**
* The Component has just been created and is still disabled or it has
* been disabled by calling the {@link #disable()} method (value is 1).
*/
static final int STATE_DISABLED = 1;
/**
* The Component is being enabled (value is 512). After the component has
* been enabled it enters the {@link #STATE_UNSATISFIED} state.
* @since 1.2
* @deprecated since 1.8.0
*/
@Deprecated
static final int STATE_ENABLING = 512;
/**
* The Component has been enabled and is now going to be activated (value
* is 2).
* @deprecated as of version 1.2 the enabled state is collapsed into the
* {@link #STATE_UNSATISFIED} state. This status code is never returned
* from the {@link #getState()} method.
*/
@Deprecated
static final int STATE_ENABLED = 2;
/**
* The Component activation failed because any dependency is not satisfied
* (value is 4).
*/
static final int STATE_UNSATISFIED = 4;
/**
* The Component is currently being activated either because it has been
* enabled or because any dependency which was previously unsatisfied has
* become satisfied (value is 8).
* @deprecated since 1.8.0 transient states are no longer used
*/
@Deprecated
static final int STATE_ACTIVATING = 8;
/**
* The Component has successfully been activated and is fully functional
* (value is 16). This is the state of immediate components after
* successful activation. Delayed and Service Factory Components enter
* this state when the service instance has actually been instantiated because
* the service has been acquired.
*/
static final int STATE_ACTIVE = 16;
/**
* The Component has successfully been activated but is a Delayed or Service
* Factory Component pending instantiation on first use (value is 32).
*/
static final int STATE_REGISTERED = 32;
/**
* The Component is a Component Factory ready to create Component instances
* with the <code>ComponentFactory.newInstance(Dictionary)</code> method
* or (if enabled with the <code>ds.factory.enabled</code> configuration) to
* manage Component instances from configuration data received from the
* Configuration Admin Service (value is 64).
*/
static final int STATE_FACTORY = 64;
/**
* The Component is being deactivated either because it is being disabled
* or because a dependency is not satisfied any more (value is 128). After
* deactivation the Component enters the {@link #STATE_UNSATISFIED} state.
* @deprecated since 1.8.0 transient states are no longer used
*/
@Deprecated
static final int STATE_DEACTIVATING = 128;
/**
* The Component is being disabled (value is 1024). After the component has
* been disabled it enters the {@link #STATE_DISABLED} state.
* @since 1.2
* @deprecated since 1.8.0 transient states are no longer used
*/
@Deprecated
static final int STATE_DISABLING = 1024;
/**
* The Component is being disposed off (value is 2048). After the component
* has been disposed off it enters the {@link #STATE_DESTROYED} state.
* @since 1.2
* @deprecated since 1.8.0 transient states are no longer used
*/
@Deprecated
static final int STATE_DISPOSING = 2048;
/**
* The Component has been destroyed and cannot be used any more (value is
* 256). This state is only used when the bundle declaring the component
* is being stopped and all components have to be removed.
* @deprecated as of version 1.2 this constant has been renamed to
* {@link #STATE_DISPOSED}.
*/
@Deprecated
static final int STATE_DESTROYED = 256;
/**
* The Component has been disposed off and cannot be used any more (value is
* 256). This state is used when the bundle declaring the component
* is being stopped and all components have to be removed. This status is
* also the final status of a component after the
* <code>ComponentInstance.dispose()</code> method has been called.
* @since 1.2
*/
static final int STATE_DISPOSED = 256;
/**
* Returns the component ID of this component. This ID is managed by the
* SCR. If the component is not currently enabled the ID might not be
* assigned to the component (yet) and this method will return -1 in this
* case.
*/
long getId();
/**
* Returns the name of the component, which is also used as the service PID.
* This method provides access to the <code>name</code> attribute of the
* <code>component</code> element.
*/
String getName();
/**
* Returns the current state of the Component, which is one of the
* <code>STATE_*</code> constants defined in this interface.
*/
int getState();
/**
* Returns the <code>Bundle</code> declaring this component.
*/
Bundle getBundle();
/**
* Returns the component factory name or <code>null</code> if this component
* is not defined as a component factory. This method provides access to
* the <code>factory</code> attribute of the <code>component</code>
* element.
*/
String getFactory();
/**
* Returns <code>true</code> if this component is a service factory. This
* method returns the value of the <code>serviceFactory</code> attribute of
* the <code>service</code> element. If the component has no service
* element, this method returns <code>false</code>.
*/
boolean isServiceFactory();
/**
* Returns the class name of the Component implementation. This method
* provides access to the <code>class</code> attribute of the
* <code>implementation</code> element.
*/
String getClassName();
/**
* Returns whether the Component is declared to be enabled initially. This
* method provides access to the <code>enabled</code> attribute of the
* <code>component</code> element.
*/
boolean isDefaultEnabled();
/**
* Returns whether the Component is an Immediate or a Delayed Component.
* This method provides access to the <code>immediate</code> attribute of
* the <code>component</code> element.
*/
boolean isImmediate();
/**
* Returns an array of service names provided by this Component or
* <code>null</code> if the Component is not registered as a service. This
* method provides access to the <code>interface</code> attributes of the
* <code>provide</code> elements.
*/
String[] getServices();
/**
* Returns the properties of the Component. The Dictionary returned is a
* private copy of the actual properties and contains the same entries as
* are used to register the Component as a service and are returned by
* the <code>ComponentContext.getProperties()</code> method.
*/
Dictionary getProperties();
/**
* Returns an array of {@link Reference} instances representing the service
* references (or dependencies) of this Component. If the Component has no
* references, <code>null</code> is returned.
*/
Reference[] getReferences();
/**
* Returns the <code>org.osgi.service.component.ComponentInstance</code>
* representing this component or <code>null</code> if this component
* is not been activated yet.
*
* @since 1.2
*/
ComponentInstance getComponentInstance();
/**
* Returns the name of the method to be called when the component is being
* activated.
* <p>
* This method never returns <code>null</code>, that is, if this method is
* not declared in the component descriptor this method returns the
* default value <i>activate</i>.
*
* @since 1.2
*/
String getActivate();
/**
* Returns <code>true</code> if the name of the method to be called on
* component activation (see {@link #getActivate()} is declared in the
* component descriptor or not.
* <p>
* For a component declared in a Declarative Services 1.0 descriptor, this
* method always returns <code>false</code>.
*
* @since 1.2
*/
boolean isActivateDeclared();
/**
* Returns the name of the method to be called when the component is being
* deactivated.
* <p>
* This method never returns <code>null</code>, that is, if this method is
* not declared in the component descriptor this method returns the
* default value <i>deactivate</i>.
*
* @since 1.2
*/
String getDeactivate();
/**
* Returns <code>true</code> if the name of the method to be called on
* component deactivation (see {@link #getDeactivate()} is declared in the
* component descriptor or not.
* <p>
* For a component declared in a Declarative Services 1.0 descriptor, this
* method always returns <code>false</code>.
*
* @since 1.2
*/
boolean isDeactivateDeclared();
/**
* Returns the name of the method to be called when the component
* configuration has been updated or <code>null</code> if such a method is
* not declared in the component descriptor.
* <p>
* For a component declared in a Declarative Services 1.0 descriptor, this
* method always returns <code>null</code>.
*
* @since 1.2
*/
String getModified();
/**
* Returns the configuration policy declared in the component descriptor.
* If the component descriptor is a Declarative Services 1.0 descriptor or
* no configuration policy has been declared, the default value
* <i>optional</i> is returned.
* <p>
* The returned string is one of the three policies defined in the
* Declarative Services specification 1.1:
* <dl>
* <dt>optional</dt>
* <dd>Configuration from the Configuration Admin service is supplied to
* the component if available. Otherwise the component is activated without
* Configuration Admin configuration. This is the default value reflecting
* the behaviour of Declarative Services 1.0</dd>
* <dt>require</dt>
* <dd>Configuration is required. The component remains unsatisfied until
* configuration is available from the Configuration Admin service.</dd>
* <dt>ignore</dt>
* <dd>Configuration is ignored. No Configuration Admin service
* configuration is supplied to the component.</dd>
* </dl>
*
* @since 1.2
*/
String getConfigurationPolicy();
/**
* Returns the configuration pid declared in the component descriptor.
* The value is used to retrieve the component configuration from the
* OSGi configuration admin service. The value returned by this method
* depends on the Declarative Service namespace used by the component:
* <p>
* <dl>
* <dt>DS 1.0</dt>
* <dd>The component name is returned.</dd>
* <dt>DS 1.1</dt>
* <dd>The component name is returned, if it has been specified. If not specified,
* then the default component name is returned (that is the fully qualified component
* class name).
* <dt>DS 1.2</dt>
* <dd>The value of the configuration-pid attribute is returned if it has been specified.
* If not specified, then the same DS 1.1 rules are applied.</dd>
* </dl>
*
* @since 1.2
*/
String getConfigurationPid();
/**
* Returns whether the configuration-pid has been declared in the descriptor
* or not.
*
* @return whether the configuration-pid has method has been declared in the descriptor
* or not.
* @since DS 1.2
*/
boolean isConfigurationPidDeclared();
/**
* Enables this Component if it is disabled. If the Component is not
* currently {@link #STATE_DISABLED disabled} this method has no effect. If
* the Component is {@link #STATE_DESTROYED destroyed}, this method throws
* an <code>IllegalStateException</code>.
*
* @throws IllegalStateException If the Component is destroyed.
*/
void enable();
/**
* Disables this Component if it is enabled. If the Component is already
* {@link #STATE_DISABLED disabled} this method has no effect. If the
* Component is {@link #STATE_DESTROYED destroyed}, this method throws an
* <code>IllegalStateException</code>.
*
* @throws IllegalStateException If the Component is destroyed.
*/
void disable();
}