Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.equinox.cm/src/org/eclipse/equinox/internal/cm/ManagedServiceFactoryTracker.java')
-rw-r--r--bundles/org.eclipse.equinox.cm/src/org/eclipse/equinox/internal/cm/ManagedServiceFactoryTracker.java201
1 files changed, 0 insertions, 201 deletions
diff --git a/bundles/org.eclipse.equinox.cm/src/org/eclipse/equinox/internal/cm/ManagedServiceFactoryTracker.java b/bundles/org.eclipse.equinox.cm/src/org/eclipse/equinox/internal/cm/ManagedServiceFactoryTracker.java
deleted file mode 100644
index ec4dcdd1b..000000000
--- a/bundles/org.eclipse.equinox.cm/src/org/eclipse/equinox/internal/cm/ManagedServiceFactoryTracker.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006-2007 Cognos Incorporated, IBM Corporation and others
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Cognos Incorporated - initial API and implementation
- * IBM Corporation - bug fixes and enhancements
- *******************************************************************************/
-package org.eclipse.equinox.internal.cm;
-
-import java.util.*;
-import java.util.Map.Entry;
-import org.osgi.framework.*;
-import org.osgi.service.cm.ConfigurationException;
-import org.osgi.service.cm.ManagedServiceFactory;
-import org.osgi.service.log.LogService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * ManagedServiceFactoryTracker tracks... ManagedServiceFactory(s) and notifies them about related configuration changes
- */
-class ManagedServiceFactoryTracker extends ServiceTracker {
-
- final ConfigurationAdminFactory configurationAdminFactory;
- private final ConfigurationStore configurationStore;
-
- // managedServiceFactoryReferences guards both managedServiceFactories and managedServiceFactoryReferences
- private final Map managedServiceFactories = new HashMap();
- private final Map managedServiceFactoryReferences = new HashMap();
-
- private final SerializedTaskQueue queue = new SerializedTaskQueue("ManagedServiceFactory Update Queue"); //$NON-NLS-1$
-
- public ManagedServiceFactoryTracker(ConfigurationAdminFactory configurationAdminFactory, ConfigurationStore configurationStore, BundleContext context) {
- super(context, ManagedServiceFactory.class.getName(), null);
- this.configurationAdminFactory = configurationAdminFactory;
- this.configurationStore = configurationStore;
- }
-
- protected void notifyDeleted(ConfigurationImpl config) {
- config.checkLocked();
- String factoryPid = config.getFactoryPid(false);
- ServiceReference reference = getManagedServiceFactoryReference(factoryPid);
- if (reference != null && config.bind(reference.getBundle()))
- asynchDeleted(getManagedServiceFactory(factoryPid), config.getPid(false));
- }
-
- protected void notifyUpdated(ConfigurationImpl config) {
- config.checkLocked();
- String factoryPid = config.getFactoryPid();
- ServiceReference reference = getManagedServiceFactoryReference(factoryPid);
- if (reference != null && config.bind(reference.getBundle())) {
- Dictionary properties = config.getProperties();
- configurationAdminFactory.modifyConfiguration(reference, properties);
- asynchUpdated(getManagedServiceFactory(factoryPid), config.getPid(), properties);
- }
- }
-
- public Object addingService(ServiceReference reference) {
- String factoryPid = (String) reference.getProperty(Constants.SERVICE_PID);
- if (factoryPid == null)
- return null;
-
- ManagedServiceFactory service = (ManagedServiceFactory) context.getService(reference);
- if (service == null)
- return null;
-
- synchronized (configurationStore) {
- add(reference, factoryPid, service);
- }
- return service;
- }
-
- public void modifiedService(ServiceReference reference, Object service) {
- String factoryPid = (String) reference.getProperty(Constants.SERVICE_PID);
- synchronized (configurationStore) {
- if (getManagedServiceFactory(factoryPid) == service)
- return;
- String previousPid = getPidForManagedServiceFactory(service);
- remove(reference, previousPid);
- addingService(reference);
- }
- }
-
- public void removedService(ServiceReference reference, Object service) {
- String factoryPid = (String) reference.getProperty(Constants.SERVICE_PID);
- synchronized (configurationStore) {
- remove(reference, factoryPid);
- }
- context.ungetService(reference);
- }
-
- private void add(ServiceReference reference, String factoryPid, ManagedServiceFactory service) {
- ConfigurationImpl[] configs = configurationStore.getFactoryConfigurations(factoryPid);
- try {
- for (int i = 0; i < configs.length; ++i)
- configs[i].lock();
-
- if (trackManagedServiceFactory(factoryPid, reference, service)) {
- for (int i = 0; i < configs.length; ++i) {
- if (configs[i].isDeleted()) {
- // ignore this config
- } else if (configs[i].bind(reference.getBundle())) {
- Dictionary properties = configs[i].getProperties();
- configurationAdminFactory.modifyConfiguration(reference, properties);
- asynchUpdated(service, configs[i].getPid(), properties);
- } else {
- configurationAdminFactory.log(LogService.LOG_WARNING, "Configuration for " + Constants.SERVICE_PID + "=" + configs[i].getPid() + " could not be bound to " + reference.getBundle().getLocation()); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
- }
- }
- }
- } finally {
- for (int i = 0; i < configs.length; ++i)
- configs[i].unlock();
- }
- }
-
- private void remove(ServiceReference reference, String factoryPid) {
- ConfigurationImpl[] configs = configurationStore.getFactoryConfigurations(factoryPid);
- try {
- for (int i = 0; i < configs.length; ++i)
- configs[i].lock();
- untrackManagedServiceFactory(factoryPid, reference);
- } finally {
- for (int i = 0; i < configs.length; ++i)
- configs[i].unlock();
- }
- }
-
- private boolean trackManagedServiceFactory(String factoryPid, ServiceReference reference, ManagedServiceFactory service) {
- synchronized (managedServiceFactoryReferences) {
- if (managedServiceFactoryReferences.containsKey(factoryPid)) {
- configurationAdminFactory.log(LogService.LOG_WARNING, ManagedServiceFactory.class.getName() + " already registered for " + Constants.SERVICE_PID + "=" + factoryPid); //$NON-NLS-1$ //$NON-NLS-2$
- return false;
- }
- managedServiceFactoryReferences.put(factoryPid, reference);
- managedServiceFactories.put(factoryPid, service);
- return true;
- }
- }
-
- private void untrackManagedServiceFactory(String factoryPid, ServiceReference reference) {
- synchronized (managedServiceFactoryReferences) {
- managedServiceFactoryReferences.remove(factoryPid);
- managedServiceFactories.remove(factoryPid);
- }
- }
-
- private ManagedServiceFactory getManagedServiceFactory(String factoryPid) {
- synchronized (managedServiceFactoryReferences) {
- return (ManagedServiceFactory) managedServiceFactories.get(factoryPid);
- }
- }
-
- private ServiceReference getManagedServiceFactoryReference(String factoryPid) {
- synchronized (managedServiceFactoryReferences) {
- return (ServiceReference) managedServiceFactoryReferences.get(factoryPid);
- }
- }
-
- private String getPidForManagedServiceFactory(Object service) {
- synchronized (managedServiceFactoryReferences) {
- for (Iterator it = managedServiceFactories.entrySet().iterator(); it.hasNext();) {
- Entry entry = (Entry) it.next();
- if (entry.getValue() == service)
- return (String) entry.getKey();
- }
- return null;
- }
- }
-
- private void asynchDeleted(final ManagedServiceFactory service, final String pid) {
- queue.put(new Runnable() {
- public void run() {
- try {
- service.deleted(pid);
- } catch (Throwable t) {
- configurationAdminFactory.log(LogService.LOG_ERROR, t.getMessage(), t);
- }
- }
- });
- }
-
- private void asynchUpdated(final ManagedServiceFactory service, final String pid, final Dictionary properties) {
- queue.put(new Runnable() {
- public void run() {
- try {
- service.updated(pid, properties);
- } catch (ConfigurationException e) {
- // we might consider doing more for ConfigurationExceptions
- Throwable cause = e.getCause();
- configurationAdminFactory.log(LogService.LOG_ERROR, e.getMessage(), cause != null ? cause : e);
- } catch (Throwable t) {
- configurationAdminFactory.log(LogService.LOG_ERROR, t.getMessage(), t);
- }
- }
- });
- }
-} \ No newline at end of file

Back to the top