package org.exist.client.xacml; import java.net.URI; import java.util.Iterator; import java.util.Set; import javax.swing.ComboBoxModel; import javax.swing.DefaultComboBoxModel; import com.sun.xacml.combine.CombiningAlgorithm; import com.sun.xacml.combine.PolicyCombiningAlgorithm; import com.sun.xacml.combine.RuleCombiningAlgorithm; import com.sun.xacml.combine.StandardCombiningAlgFactory; public class AbstractPolicyEditor extends PolicyElementEditor { public AbstractPolicyEditor() { super(); } protected String getComboLabel() { return ((node instanceof PolicySetNode) ? "Policy" : "Rule") + " Combining Algorithm:"; } protected ComboBoxModel getComboModel() { boolean isPolicy = node instanceof PolicyNode; DefaultComboBoxModel model = new DefaultComboBoxModel(); Set algorithms = StandardCombiningAlgFactory.getFactory().getStandardAlgorithms(); for(Iterator it = algorithms.iterator(); it.hasNext();) { CombiningAlgorithm algorithm = (CombiningAlgorithm)it.next(); if(isPolicy) { if(algorithm instanceof RuleCombiningAlgorithm) { String abbreviatedID = abbrev.getAbbreviatedCombiningID(algorithm.getIdentifier()); model.addElement(abbreviatedID); } } else if(algorithm instanceof PolicyCombiningAlgorithm) { String abbreviatedID = abbrev.getAbbreviatedCombiningID(algorithm.getIdentifier()); model.addElement(abbreviatedID); } } return model; } protected Object getComboPrototype() { Object prototype = ""; int maxLength = -1; Set algorithms = StandardCombiningAlgFactory.getFactory().getStandardAlgorithms(); for(Iterator it = algorithms.iterator(); it.hasNext();) { CombiningAlgorithm algorithm = (CombiningAlgorithm)it.next(); URI ID = algorithm.getIdentifier(); String abbreviatedID = abbrev.getAbbreviatedCombiningID(ID); int length = abbreviatedID.length(); if(length > maxLength) { maxLength = length; prototype = abbreviatedID; } } return prototype; } public void setNode(XACMLTreeNode treeNode) { if(!(treeNode instanceof AbstractPolicyNode)) throw new IllegalArgumentException("AbstractPolicy Editor can only edit AbstractPolicyNodes"); AbstractPolicyNode node = (AbstractPolicyNode)treeNode; super.setNode(node); CombiningAlgorithm algorithm = node.getCombiningAlgorithm(); String abbreviatedID = abbrev.getAbbreviatedCombiningID(algorithm.getIdentifier()); setSelectedItem(abbreviatedID); } public void pushChanges() { super.pushChanges(); CombiningAlgorithm algorithm = getAlgorithm(); if(algorithm != null) ((AbstractPolicyNode)node).setCombiningAlgorithm(algorithm); } }