package org.jactr.tools.experiment.actions.jactr; /* * default logging */ import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jactr.core.model.IModel; import org.jactr.tools.experiment.IExperiment; import org.jactr.tools.experiment.actions.IAction; import org.jactr.tools.experiment.impl.IVariableContext; import org.jactr.tools.experiment.impl.VariableResolver; import org.jactr.tools.experiment.misc.ExperimentUtilities; import org.jactr.tools.marker.IMarker; import org.jactr.tools.marker.MarkerManager; import org.jactr.tools.marker.impl.DefaultMarker; public class MarkerAction implements IAction { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(MarkerAction.class); private String _modelNames; private String _typeName; private String _name; private final IExperiment _experiment; private final boolean _shouldOpen; public MarkerAction(String modelNames, String typeName, String name, boolean open, IExperiment experiment) { _modelNames = modelNames; _typeName = typeName; _name = name; _experiment = experiment; _shouldOpen = open; } public void fire(IVariableContext context) { Collection<IModel> models = null; if (!_modelNames.equals("")) models = VariableResolver.getModels(_modelNames, _experiment.getVariableResolver(), context); else { IModel model = ExperimentUtilities.getExperimentsModel(_experiment); if (model != null) models = Collections.singleton(model); } String typeName = _experiment.getVariableResolver() .resolve(_typeName, _experiment.getVariableContext()).toString(); String name = _experiment.getVariableResolver() .resolve(_name, _experiment.getVariableContext()).toString(); HashSet<IMarker> existingMarkers = new HashSet<IMarker>(); for (IModel model : models) { if (_shouldOpen) { IMarker marker = new DefaultMarker(model, name, typeName); marker.open(_experiment.getTime()); } else { existingMarkers.clear(); Set<IMarker> markers = MarkerManager.get().getMarkers(model, existingMarkers); for (IMarker marker : markers) if (marker.getType().equals(typeName) && marker.getName().equals(name)) marker.close(_experiment.getTime()); } } } }