Bug 381441 - [hotbug] JSFFacetInstallDataModelProvider dispose method
does not remove all listeners it adds
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
index 9fc0b6d..3c57b7f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
@@ -61,6 +61,7 @@
     private final boolean jsfFacetConfigurationEnabled = JsfFacetConfigurationUtil.isJsfFacetConfigurationEnabled();
 
     private LibraryInstallDelegate libraryInstallDelegate = null;
+    private IPropertyChangeListener propertyChangeListener=null;
     
     private void initLibraryInstallDelegate()
     {
@@ -70,27 +71,36 @@
         if( this.libraryInstallDelegate == null && fpjwc != null && fv != null )
         {
             this.libraryInstallDelegate = new LibraryInstallDelegate( fpjwc, fv );
+            this.propertyChangeListener=new IPropertyChangeListener()
+            {
+            	public void propertyChanged( final String property,
+                        final Object oldValue,
+                        final Object newValue )
+            	{
+            		final IDataModel dm = getDataModel();
+            		
+            		if( dm != null )
+            		{
+            			dm.notifyPropertyChange( LIBRARY_PROVIDER_DELEGATE, IDataModel.VALUE_CHG );
+            		}
+            	}
+            	
+            };
             
-            this.libraryInstallDelegate.addListener
-            ( 
-                new IPropertyChangeListener()
-                {
-                    public void propertyChanged( final String property,
-                                                 final Object oldValue,
-                                                 final Object newValue )
-                    {
-                        final IDataModel dm = getDataModel();
-    
-                        if( dm != null )
-                        {
-                            dm.notifyPropertyChange( LIBRARY_PROVIDER_DELEGATE, IDataModel.VALUE_CHG );
-                        }
-                    }
-                }
-            );
+            this.libraryInstallDelegate.addListener(propertyChangeListener);
         }
     }
     
+    public void dispose()
+    {
+    	if(this.libraryInstallDelegate!=null)
+    	{
+    		this.libraryInstallDelegate.removeListener(propertyChangeListener);
+    		this.libraryInstallDelegate.dispose();
+    	}
+    	super.dispose();
+    }
+    
 	private String 	errorMessage;