package net.sf.eclipsefp.haskell.ui.internal.backend; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import net.sf.eclipsefp.haskell.core.HaskellCorePlugin; import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin; import net.sf.eclipsefp.haskell.ui.util.CabalFileChangeListener; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; /** * <p>Utility to retrieve cabal file change listener</p> * * @author JP Moresmau */ public class CabalFileChangeListenerManager { private static Collection<CabalFileChangeListener> listeners=null; public static Collection<CabalFileChangeListener> getListeners(){ if (listeners==null){ IConfigurationElement[] elts=HaskellUIPlugin.getDefault().getExtensions( HaskellUIPlugin.ID_EXT_CabalChangeListener ); listeners=Collections.synchronizedList( new ArrayList<CabalFileChangeListener>()); for (IConfigurationElement elem:elts){ try { Object o = elem.createExecutableExtension(HaskellCorePlugin.ATT_CLASS); listeners.add( (CabalFileChangeListener )o); } catch (CoreException cex) { HaskellCorePlugin.log( cex ); } } } return listeners; } public static void addDynamicListener(final CabalFileChangeListener listener){ getListeners().add( listener ); } public static void removeDynamicListener(final CabalFileChangeListener listener){ getListeners().remove( listener ); } }