package com.atlassian.labs.speakeasy.util;
import com.atlassian.plugin.ModuleDescriptor;
/**
* Tracks enabled plugin module descriptors, focusing on fast reads. Patterned off the
* {@link org.osgi.util.tracker.ServiceTracker}.
*
* @since 2.6.0
*/
public interface PluginModuleTracker<M, T extends ModuleDescriptor<M>>
{
/**
* Implement this to customize how and which descriptors are stored
*/
interface Customizer<M, T extends ModuleDescriptor<M>>
{
/**
* Called before adding the descriptor to the internal tracker
* @param descriptor The new descriptor
* @return The descriptor to track
*/
T adding(T descriptor);
/**
* Called after the descriptor has been removed from the internal tracker
* @param descriptor The descriptor that was removed
*/
void removed(T descriptor);
}
/**
* @return a snapshot of the currently tracked enabled module descriptors
*/
Iterable<T> getModuleDescriptors();
/**
* Gets a snapshot of the currently tracked enabled module instances
* @return The module instances
*/
Iterable<M> getModules();
/**
* @return The number of module descriptors currently tracked. Should only be used for reporting purposes as it
* only reflects the size at exactly the calling time.
*/
int size();
/**
* Closes the tracker. Ensure you call this, or you may cause a memory leak.
*/
void close();
}