/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.uff.ic.oceano.core.tools.metrics;
import br.uff.ic.oceano.core.model.Metric;
import br.uff.ic.oceano.core.model.MetricValue;
import br.uff.ic.oceano.core.model.Revision;
import br.uff.ic.oceano.core.model.transiente.Language;
import br.uff.ic.oceano.core.tools.metrics.extractors.IMetricExtractor;
import java.util.EnumMap;
/**
*
* @author DanCastellani
*
* Revision by DHeraclio removed Tool interface added extractor mapping for
* languages added metric attribute
*/
public class DirectMetricManager extends MetricManager {
private EnumMap<Language, IMetricExtractor> extractors = new EnumMap<Language, IMetricExtractor>(Language.class);
public DirectMetricManager(Metric metric) {
super(metric);
}
public MetricValue extractMetric(Revision revision) throws MetricException {
Language language = revision.getProject().getLanguage();
IMetricExtractor extractor = extractors.get(language);
if (extractor == null) {
throw new MetricException("Metric " + getMetric() + " not available for " + language);
}
return extractor.extractMetric(revision);
}
public MetricValue extractMetric(Revision revision, String path) throws MetricException {
Language language = revision.getProject().getLanguage();
IMetricExtractor extractor = extractors.get(language);
if (extractor == null) {
throw new MetricException("Metric " + getMetric() + " not available for " + language);
}
return extractor.extractMetric(revision, path);
}
@Override
public boolean isLanguageSupported(Language language) {
return extractors.get(language) != null;
}
/**
* Unregister metric extractor with this metric manager
* @param language
* @throws MetricException
*/
public void unregisterExtractor(Language language) throws MetricException {
IMetricExtractor extractor = extractors.remove(language);
extractor.setMetricManager(null);
}
/**
* Register metric extractor with this metric manager
* @param language
* @param extractor
* @throws MetricException
*/
public void registerExtractor(IMetricExtractor extractor) throws MetricException {
extractor.setMetricManager(this);
extractors.put(extractor.getLanguage(), extractor);
}
}