package de.uni_passau.fim.infosun.prophet.plugin.plugins;
import de.uni_passau.fim.infosun.prophet.experimentViewer.EViewer;
import de.uni_passau.fim.infosun.prophet.plugin.Plugin;
import de.uni_passau.fim.infosun.prophet.util.language.UIElementNames;
import de.uni_passau.fim.infosun.prophet.util.qTree.Attribute;
import de.uni_passau.fim.infosun.prophet.util.qTree.QTreeNode;
import de.uni_passau.fim.infosun.prophet.util.settings.Setting;
import de.uni_passau.fim.infosun.prophet.util.settings.components.CheckBoxSetting;
import static de.uni_passau.fim.infosun.prophet.util.qTree.QTreeNode.Type.CATEGORY;
import static de.uni_passau.fim.infosun.prophet.util.qTree.QTreeNode.Type.EXPERIMENT;
import static de.uni_passau.fim.infosun.prophet.util.qTree.QTreeNode.Type.QUESTION;
/**
* This <code>Plugin</code> enables the <code>ExperimentEditor</code> to mark nodes as 'inactive'. The
* <code>Plugin</code>'s {@link #denyEnterNode(QTreeNode)} will return <code>true</code> for any node marked 'inactive'
* and all its children.
*/
public class InactivityPlugin implements Plugin {
public static final String KEY = "inactive";
@Override
public Setting getSetting(QTreeNode node) {
if (node.getType() == EXPERIMENT) {
return null;
}
Attribute mainAttribute = node.getAttribute(KEY);
Setting setting = new CheckBoxSetting(mainAttribute, getClass().getSimpleName());
if (node.getType() == CATEGORY) {
setting.setCaption(UIElementNames.getLocalized("MENU_TAB_SETTINGS_DEACTIVATE_NODES"));
} else if (node.getType() == QUESTION) {
setting.setCaption(UIElementNames.getLocalized("MENU_TAB_SETTINGS_DEACTIVATE_THIS_NODE"));
}
return setting;
}
@Override
public void experimentViewerRun(EViewer experimentViewer) {
}
@Override
public boolean denyEnterNode(QTreeNode node) {
QTreeNode currentNode = node;
do {
if (currentNode.containsAttribute(KEY) && Boolean.parseBoolean(currentNode.getAttribute(KEY).getValue())) {
return true;
}
currentNode = currentNode.getParent();
} while (currentNode != null);
return false;
}
@Override
public void enterNode(QTreeNode node) {
}
@Override
public String denyNextNode(QTreeNode currentNode) {
return null;
}
@Override
public void exitNode(QTreeNode node) {
}
@Override
public String finishExperiment() {
return null;
}
}