ProviderTracker.java revision 331c327f500d45223e8ad933fd4472740a75aeea
/**
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2011-2015 ForgeRock AS. All Rights Reserved
*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the License). You may not use this file except in
* compliance with the License.
*
* You can obtain a copy of the License at
* See the License for the specific language governing
* permission and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* Header Notice in each file and include the License file
* If applicable, add the following below the CDDL Header,
* with the fields enclosed by brackets [] replaced by
* your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
*
*/
/**
* Keep track of meta data providers, either declared in bundle meta-data, or registered as services.
*/
public class ProviderTracker implements ServiceTrackerListener {
static ServiceTracker providerTracker;
// Map from origin identifiers to MetaDataProvider
// Long type key are bundle identifiers
// String keys are service pids
// This map MUST be thread safe to avoid the java.util.ConcurrentModificationException
/**
* Constructor
* @param context a bundle context to access OSGi
* @param listener the listener to notify when a provider change was detecte
* @param notifyDuringInit whether to notify the listener during the ProviderTracker construction.
* Setting it to false allows to query the providers acquired during init with getProviders, and to process additional
* providers via the listener.
*/
public ProviderTracker(BundleContext context, ProviderListener listener, boolean notifyDuringInit) {
// TODO: add bundle listeners to track new installs and remove uninstalls
}
if (logger.isTraceEnabled()) {
}
try {
if (providerClazzName == null) {
logger.trace("No MetaDataProvider class declared in meta data file {} for {}", entryUrl, bundle.getSymbolicName());
} else {
// Instantiate and set the provider callback
// Add the provider to the listener
}
}
logger.warn("Failed to obtain meta-data on handling configuration for {}", bundle.getSymbolicName(), ex);
}
}
}
}
}
ServiceTracker tracker = new ServiceTrackerNotifier(context, MetaDataProvider.class.getName(), null, this);
return tracker;
}
// Instantiate and set the provider callback
// Add the provider to the listener
}
}
}
}
/**
* Get the current registered providers
* Providers can be backed by an OSGi services,
* or created from a bundle factory
* @return meta data providers
*/
//The returned value MUST be thread safe!
}
/**
* A MetaDataProviderCallback implementation that is used to notify the ProvicerListener
* when a MetaDataProvider calls refresh()
*/
private class ProviderTrackerCallback implements MetaDataProviderCallback {
/**
* Constructor
* @param provider the MetaDataProvider instance
* @param originId the MetaDataProvider id
*/
}
public void refresh() {
}
}
}