// 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.adapter; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.projectusus.core.UsusCorePlugin; import org.projectusus.core.statistics.UsusModelProvider; public class RunComputationOnResourceChange implements IResourceChangeListener { private static final List<IResourceDelta> collectedDeltas = new ArrayList<IResourceDelta>(); private static boolean cockpitIsVisible = false; public static void cockpitIsVisible() { cockpitIsVisible = true; runComputationJobOnCollectedDeltas(); } public static void cockpitIsInvisible() { cockpitIsVisible = false; } public void resourceChanged( IResourceChangeEvent event ) { collectDelta( event ); runComputationJobOnCollectedDeltas(); } private void collectDelta( IResourceChangeEvent event ) { IResourceDelta delta = event.getDelta(); if( delta != null ) { collectedDeltas.add( delta ); } } private static void runComputationJobOnCollectedDeltas() { if( !cockpitIsVisible ) { return; } try { runComputationJob( collectedDeltas ); collectedDeltas.clear(); } catch( CoreException cex ) { log( cex.getStatus() ); } } private static void runComputationJob( List<IResourceDelta> deltas ) throws CoreException { if( deltas.isEmpty() ) return; ICodeProportionComputationTarget target = null; if( UsusModelProvider.ususModel().needsFullRecompute() ) { target = new WorkspaceCodeProportionComputationTarget(); } else { target = new DeltaCodeProportionComputationTarget( deltas ); } if( target.isNotEmpty() ) new CodeProportionsComputerJob( target ).schedule(); } private static void log( IStatus status ) { UsusCorePlugin.getDefault().getLog().log( status ); } }