/*============================================================================= Library: CTK Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics 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. =============================================================================*/ #ifndef CTKSERVICEREGISTRATION_H #define CTKSERVICEREGISTRATION_H #include "ctkPluginContext.h" #include "ctkServiceReference.h" #include "ctkPluginFrameworkExport.h" class ctkServiceRegistrationPrivate; /** * A registered service. * *

* The Framework returns a ctkServiceRegistration object when a * ctkPluginContext#registerService() method invocation is successful. * The ctkServiceRegistration object is for the private use of the * registering plugin and should not be shared with other plugins. *

* The ctkServiceRegistration object may be used to update the * properties of the service or to unregister the service. * * @see ctkPluginContext#registerService() * @threadsafe */ class CTK_PLUGINFW_EXPORT ctkServiceRegistration { Q_DECLARE_PRIVATE(ctkServiceRegistration) public: /** * Returns a ctkServiceReference object for a service being * registered. *

* The ctkServiceReference object may be shared with other * plugins. * * @throws std::logic_error If this * ctkServiceRegistration object has already been * unregistered. * @return ctkServiceReference object. */ ctkServiceReference getReference() const; /** * Updates the properties associated with a service. * *

* The {@link ctkPluginConstants#OBJECTCLASS} and {@link ctkPluginConstants#SERVICE_ID} keys * cannot be modified by this method. These values are set by the Framework * when the service is registered in the environment. * *

* The following steps are required to modify service properties: *

    *
  1. The service's properties are replaced with the provided properties. *
  2. A service event of type {@link ServiceEvent#MODIFIED} is fired. *
* * @param properties The properties for this service. See {@link ctkPluginConstants} * for a list of standard service property keys. Changes should not * be made to this object after calling this method. To update the * service's properties this method should be called again. * * @throws std::logic_error If this ctkServiceRegistration * object has already been unregistered. * @throws std::invalid_argument If properties contains * case variants of the same key name. */ void setProperties(const ServiceProperties& properties); /** * Unregisters a service. Remove a ctkServiceRegistration object * from the Framework service registry. All ctkServiceReference * objects associated with this ctkServiceRegistration object * can no longer be used to interact with the service once unregistration is * complete. * *

* The following steps are required to unregister a service: *

    *
  1. The service is removed from the Framework service registry so that * it can no longer be obtained. *
  2. A service event of type {@link ServiceEvent#UNREGISTERING} is fired * so that plugins using this service can release their use of the service. * Once delivery of the service event is complete, the * ctkServiceReference objects for the service may no longer be * used to get a service object for the service. *
  3. For each plugin whose use count for this service is greater than * zero:
    * The plugin's use count for this service is set to zero.
    * If the service was registered with a {@link ctkServiceFactory} object, the * ctkServiceFactory#ungetService method is called to release * the service object for the plugin. *
* * @throws std::logic_error If this * ctkServiceRegistration object has already been * unregistered. * @see BundleContext#ungetService * @see ctkServiceFactory#ungetService */ virtual void unregister(); bool operator<(const ctkServiceRegistration& o) const; protected: friend class ctkServices; ctkServiceRegistration(ctkPluginPrivate* plugin, QObject* service, const ServiceProperties& props); ctkServiceRegistration(ctkServiceRegistrationPrivate& dd); ctkServiceRegistrationPrivate * const d_ptr; }; #endif // CTKSERVICEREGISTRATION_H