StatisticalPlugin.java
package progen.output.plugins;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import progen.context.ProGenContext;
/**
* Clase que calcula las distintas variables estadísticas de un valor
* determinado. Las variables estadísticas que calcula este plugin, vendrán
* definidas en el fichero de configuración.
*
* @author jirsis
* @since 2.0
*
*/
public class StatisticalPlugin implements MacroPlugin {
/** Conjunto de plugins que definen un plugin estadístico. */
private List<Plugin> plugins;
/**
* Constructor por defecto.
*/
public StatisticalPlugin() {
plugins = new ArrayList<Plugin>();
}
@SuppressWarnings("rawtypes")
public void addValue(Comparable value) {
for (Plugin plugin : plugins) {
plugin.addValue(value);
}
}
/**
* Devuelve una colección de valores de todos los resultados que devuelven los
* plugins que contiene.
*
* @return La colección de valores de los plugins que contiene.
*/
public Map<String, Object> getValue() {
final HashMap<String, Object> values = new HashMap<String, Object>();
for (Plugin plugin : plugins) {
values.put(plugin.getName(), plugin.getValue());
}
return values;
}
public void initialValue() {
for (Plugin plugin : plugins) {
plugin.initialValue();
}
}
public void addPlugin(List<Plugin> pluginsCollection, Plugin plugin) {
Plugin alreadyDefined = null;
// if variance, needs mean
if (plugin instanceof Variance) {
plugin.checkDependeces(pluginsCollection);
}
for (Plugin pluginDefined : plugins) {
if (pluginDefined.getName().compareTo(plugin.getName()) == 0) {
alreadyDefined = pluginDefined;
}
}
if (alreadyDefined == null) {
plugins.add(plugin);
}
}
public String getName() {
return "statistical";
}
public int getPriority() {
int priority = 0;
for (Plugin plugin : plugins) {
priority = Math.max(0, plugin.getPriority());
}
return priority;
}
public void initPlugin(String propertyFamily) {
final String [] pluginsName = ProGenContext.getOptionalProperty(propertyFamily + "." + getName() + ".enable", "Best, Worst, Mean, Median").trim().split(",[ ]*");
Plugin plugin;
for (int i = 0; i < pluginsName.length; i++) {
try {
plugin = (Plugin) Class.forName("progen.output.plugins." + pluginsName[i]).newInstance();
this.addPlugin(plugins, plugin);
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
throw new UnknownPluginException(getName() + ": " + pluginsName[i], e);
}
}
}
public Plugin getPlugin(String name) {
Plugin plugin = null;
if (getName().compareTo(name) == 0) {
plugin = this;
} else {
for (Plugin pluginFound : plugins) {
if (pluginFound.getName().compareTo(name) == 0) {
plugin = pluginFound;
}
}
}
if (plugin == null) {
plugin = new NullPlugin();
}
return plugin;
}
public void checkDependeces(List<Plugin> pluginCollection) {
// do nothing
}
public List<Plugin> getPlugins() {
return plugins;
}
}