package org.exist.client.xacml;
import com.sun.xacml.AbstractPolicy;
import com.sun.xacml.combine.CombiningAlgorithm;
public abstract class AbstractPolicyNode extends PolicyElementNode implements PolicyElementContainer
{
private String documentName;
private CombiningAlgorithm originalAlgorithm;
private CombiningAlgorithm algorithm;
public AbstractPolicyNode(NodeContainer parent, AbstractPolicy policy)
{
this(parent, null, policy);
}
public AbstractPolicyNode(NodeContainer parent, String documentName, AbstractPolicy policy)
{
super(parent, policy);
this.documentName = documentName;
this.algorithm = policy.getCombiningAlg();
this.originalAlgorithm = this.algorithm;
}
/**
* Returns the name of the document represented by this
* element if it is the top-level policy element of the
* document.
*
* @return The document name, or null if this element
* is not a top-level element
*/
public String getDocumentName()
{
return documentName;
}
public CombiningAlgorithm getCombiningAlgorithm()
{
return algorithm;
}
public void setCombiningAlgorithm(CombiningAlgorithm algorithm)
{
if(algorithm == null)
throw new NullPointerException("Combining algorithm cannot be null");
this.algorithm = algorithm;
fireChanged();
}
public boolean isModified(boolean deep)
{
return super.isModified(deep) || isAlgorithmModified();
}
public boolean isAlgorithmModified()
{
return !algorithm.getIdentifier().equals(originalAlgorithm.getIdentifier());
}
public void commit(boolean deep)
{
originalAlgorithm = algorithm;
super.commit(deep);
}
public void revert(boolean deep)
{
algorithm = originalAlgorithm;
super.revert(deep);
}
public void setDocumentName(String documentName)
{
if(this.documentName == null)
this.documentName = documentName;
else
throw new IllegalStateException("Document name has already been set");
}
}