package org.bundlemaker.core.internal.parser;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Callable;
import org.bundlemaker.core.internal.parser.ModelSetup.Directory;
import org.bundlemaker.core.parser.IProblem;
import org.bundlemaker.core.project.IProjectContentEntry;
import org.bundlemaker.core.spi.parser.IParser;
import org.bundlemaker.core.spi.parser.IParser.ParserType;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IProgressMonitor;
public class CallableReparse implements Callable<List<IProblem>> {
/** - */
private ResourceCache _resourceCache;
/** - */
private IProgressMonitor _progressMonitor;
/** - */
private IProjectContentEntry _content;
/** - */
private Collection<Directory> _directories;
// /** the list of all errors */
// private List<IProblem> _errors;
/** - */
private IParser[] _parser;
/**
* <p>
* Creates a new instance of type {@link ParserCallable}.
* </p>
*
* @param content
* @param resources
* @param parser
* @param resourceCache
*/
public CallableReparse(IProjectContentEntry content, Collection<Directory> directories, IParser[] parser,
ResourceCache resourceCache, IProgressMonitor progressMonitor) {
//
Assert.isNotNull(content);
Assert.isNotNull(directories);
Assert.isNotNull(parser);
Assert.isNotNull(resourceCache);
Assert.isNotNull(progressMonitor);
//
_content = content;
// set the directories to parse
_directories = directories;
//
_parser = parser;
//
_resourceCache = resourceCache;
//
_progressMonitor = progressMonitor;
}
/**
* {@inheritDoc}
*/
@Override
public List<IProblem> call() throws Exception {
List<IProblem> problems = new LinkedList<IProblem>();
for (Directory directory : _directories) {
problems.addAll(FunctionalHelper.parseNewOrModifiedResources(_content, directory.getSourceResources(),
_resourceCache, ParserType.SOURCE, _parser, _progressMonitor));
}
for (Directory directory : _directories) {
problems.addAll(FunctionalHelper.parseNewOrModifiedResources(_content, directory.getBinaryResources(),
_resourceCache, ParserType.BINARY, _parser, _progressMonitor));
}
return problems;
}
}