// Copyright (c) 2009-2010 by the projectusus.org contributors // This software is released under the terms and conditions // of the Eclipse Public License (EPL) 1.0. // See http://www.eclipse.org/legal/epl-v10.html for details. package org.projectusus.ui.viewer; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.jface.viewers.Viewer; public class WorkspaceRootConnection { private IResourceChangeListener listener; public void update( Viewer viewer, Object oldInput, Object newInput ) { disconnectFrom( oldInput ); connectTo( newInput, viewer ); } private void connectTo( Object input, Viewer viewer ) { if( input instanceof IWorkspaceRoot ) { this.listener = createListener( viewer ); toWorkspace( input ).addResourceChangeListener( listener ); } } private IWorkspace toWorkspace( Object input ) { return ((IWorkspaceRoot)input).getWorkspace(); } private void disconnectFrom( Object input ) { if( input instanceof IWorkspaceRoot && listener != null ) { toWorkspace( input ).removeResourceChangeListener( listener ); listener = null; } } protected IResourceChangeListener createListener( Viewer viewer ) { return new RefreshViewerOnResourceChange( viewer ); } }