package org.exist.client.xacml;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import com.sun.xacml.ctx.Result;
public class RuleEditor extends PolicyElementEditor
{
public static final String PERMIT = "Permit";
public static final String DENY = "Deny";
public RuleEditor() {}
protected String getComboLabel()
{
return "Rule Effect:";
}
protected ComboBoxModel getComboModel()
{
DefaultComboBoxModel model = new DefaultComboBoxModel();
model.addElement(PERMIT);
model.addElement(DENY);
return model;
}
protected Object getComboPrototype()
{
return PERMIT;
}
public int getEffect()
{
String effect = (String)getSelectedItem();
if(DENY.equals(effect))
return Result.DECISION_DENY;
if(PERMIT.equals(effect))
return Result.DECISION_PERMIT;
throw new IllegalStateException("Invalid effect: '" + effect + "'");
}
public void setNode(XACMLTreeNode treeNode)
{
if(!(treeNode instanceof RuleNode))
throw new IllegalArgumentException("RuleEditor can only edit RuleNodes");
RuleNode node = (RuleNode)treeNode;
super.setNode(node);
int effect = node.getEffect();
if(effect == Result.DECISION_DENY)
setSelectedItem(DENY);
else if(effect == Result.DECISION_PERMIT)
setSelectedItem(PERMIT);
else
throw new IllegalArgumentException("Unknown effect for rule '" + getId() + "'");
}
public void pushChanges()
{
super.pushChanges();
int effect = getEffect();
((RuleNode)node).setEffect(effect);
}
}