package org.erlide.cover.api;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.erlide.engine.ErlangEngine;
import org.erlide.engine.model.ErlModelException;
import org.erlide.engine.model.root.IErlModule;
import org.erlide.engine.model.root.IErlProject;
/**
* Basic implementation for IConfiguration. Used to tell which modules at which
* project should be analysed
*
* @author Aleksandra Lipiec <aleksandra.lipiec@erlang-solutions.com>
*
*/
public class Configuration implements IConfiguration {
private IErlProject project;
private final Map<String, IErlModule> modules;
public Configuration() {
modules = new HashMap<>();
}
/**
* Set Erlang project
*
* @param name
* name of an Erlang project
*/
public void setProject(final String name) {
if (name == null || name.length() == 0) {
project = null;
} else {
project = ErlangEngine.getInstance().getModel().getErlangProject(
ResourcesPlugin.getWorkspace().getRoot().getProject(name));
}
}
/**
* Add new module to cover configuration. The coverage of added module is
* going to be analized.
*
* @param name
* Erlang module name
* @throws ErlModelException
* when there is no such module in the project
* @throws CoverException
* if project is not set
*/
public void addModule(final String name) throws ErlModelException, CoverException {
if (project == null) {
throw new CoverException("no project set");
}
IErlModule module = null;
module = project.getModule(name);
modules.put(name, module);
}
/**
* Add new module to cover configuration. The coverage of added module is
* going to be analized.
*
* @param module
* Erlang module
*/
public void addModule(final IErlModule module) {
modules.put(module.getModuleName(), module);
}
@Override
public IErlProject getProject() {
return project;
}
@Override
public Collection<IErlModule> getModules() {
return modules.values();
}
@Override
public IPath getOutputDir() {
return project.getProperties().getOutputDir();
}
@Override
public Collection<IPath> getSourceDirs() {
return project.getProperties().getSourceDirs();
}
@Override
public Collection<IPath> getIncludeDirs() {
return project.getProperties().getIncludeDirs();
}
@Override
public IErlModule getModule(final String name) {
return modules.get(name);
}
}