// 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 static org.eclipse.core.resources.ResourcesPlugin.getWorkspace; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.Job; import org.projectusus.core.statistics.UsusModelProvider; public class CodeProportionsComputerJob extends Job { public static final String codeProportionsComputerJob_computing = "Computing code proportions for Java files"; //$NON-NLS-1$ public static final String codeProportionsComputerJob_name = "Code proportions computer"; //$NON-NLS-1$ public static final Object FAMILY = new Object(); private final ICodeProportionComputationTarget target; public CodeProportionsComputerJob( ICodeProportionComputationTarget target ) { super( codeProportionsComputerJob_name ); setRule( getWorkspace().getRoot() ); setPriority( Job.DECORATE ); this.target = target; } @Override public boolean belongsTo( Object family ) { return family == FAMILY; } @Override protected IStatus run( IProgressMonitor mo ) { IProgressMonitor monitor = mo == null ? new NullProgressMonitor() : mo; return performRun( monitor ); } private IStatus performRun( IProgressMonitor monitor ) { IStatus result = Status.OK_STATUS; monitor.beginTask( codeProportionsComputerJob_computing, 1000 ); try { computeJavaCodeMetrics( new SubProgressMonitor( monitor, 700 ) ); } catch( CoreException cex ) { result = cex.getStatus(); } finally { updateModel( result, new SubProgressMonitor( monitor, 300 ) ); monitor.done(); } return result; } private void updateModel( IStatus result, IProgressMonitor monitor ) { UsusModelProvider.ususModelForAdapter().updateAfterComputationRun( result.isOK(), monitor ); } private void computeJavaCodeMetrics( IProgressMonitor monitor ) throws CoreException { new JDTDriver( target ).run( monitor ); } }