/** * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ /* * Created on Oct 29, 2006 * @author Fabio */ package org.python.pydev.plugin.nature; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IProject; import org.python.pydev.core.IPythonNature; import org.python.pydev.core.log.Log; /** * This class is used to pass notifications about the python nature around for * those interested. * * @author Fabio */ public class PythonNatureListenersManager { private static List<WeakReference<IPythonNatureListener>> pythonNatureListeners = new ArrayList<WeakReference<IPythonNatureListener>>(); public static void addPythonNatureListener(IPythonNatureListener listener) { pythonNatureListeners.add(new WeakReference<IPythonNatureListener>(listener)); } public static void removePythonNatureListener(IPythonNatureListener provider) { for (Iterator<WeakReference<IPythonNatureListener>> it = pythonNatureListeners.iterator(); it.hasNext();) { WeakReference<IPythonNatureListener> ref = it.next(); if (ref.get() == provider) { it.remove(); } } } /** * Notification that the pythonpath has been rebuilt. * * @param project is the project that had the pythonpath rebuilt * @param nature the nature related to the project (can be null if the nature has actually been removed) */ public static void notifyPythonPathRebuilt(IProject project, IPythonNature nature) { for (Iterator<WeakReference<IPythonNatureListener>> it = pythonNatureListeners.iterator(); it.hasNext();) { WeakReference<IPythonNatureListener> ref = it.next(); try { IPythonNatureListener listener = ref.get(); if (listener == null) { it.remove(); } else { listener.notifyPythonPathRebuilt(project, nature); } } catch (Throwable e) { Log.log(e); } } } }