/******************************************************************************* * Copyright 2005-2007, CHISEL Group, University of Victoria, Victoria, BC, Canada * and IBM Corporation. All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * The Chisel Group, University of Victoria *******************************************************************************/ package net.sourceforge.tagsea.parsed.core.internal.operations; import java.lang.reflect.InvocationTargetException; import java.util.List; import net.sourceforge.tagsea.TagSEAPlugin; import net.sourceforge.tagsea.parsed.ParsedWaypointPlugin; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.MultiRule; /** * An operation for cleaning a list of files. * @author Del Myers * */ public class CleanFilesOperation extends AbstractWaypointUpdateOperation { private List<IFile> files; private MultiRule readRule; /** * */ public CleanFilesOperation(List<IFile> files) { super("Reparsing Files..."); this.files = files; ISchedulingRule[] nested = new ISchedulingRule[files.size()]; int i = 0; for (IFile file : files) { nested[i] = ResourcesPlugin.getWorkspace().getRuleFactory().modifyRule(file); i++; } this.readRule = new MultiRule(nested); } @Override public IStatus run(IProgressMonitor monitor) throws InvocationTargetException { MultiStatus status = new MultiStatus(ParsedWaypointPlugin.PLUGIN_ID, 0, "Parsing files...", null); monitor.beginTask("Parsing files...", files.size()); for (IFile file : files) { IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); status.merge(TagSEAPlugin.syncRun(new ParseFileOperation(file), subMonitor)); if (monitor.isCanceled()) { return new Status(IStatus.WARNING, ParsedWaypointPlugin.PLUGIN_ID, "Process cancelled. Waypoints may be out-of-sync."); } } return status; } @Override public ISchedulingRule getRule() { return readRule; } }