AttributeValues. If you want to provide a new type, extend this class and implement the equals(Object)
and hashCode
methods from Object
, which are used for equality checking.
@since 1.0
@author Seth Proctor
* @return a response based on the contents of the context
*/
public ResponseCtx evaluate(EvaluationCtx context) {
// see if we need to call the resource finder
if (context.getScope() != EvaluationCtx.SCOPE_IMMEDIATE) {
AttributeValue parent = context.getResourceId();
ResourceFinderResult resourceResult = null;
if (context.getScope() == EvaluationCtx.SCOPE_CHILDREN)
resourceResult =
resourceFinder.findChildResources(parent, context);
else
resourceResult =
resourceFinder.findDescendantResources(parent, context);
// see if we actually found anything
if (resourceResult.isEmpty()) {
// this is a problem, since we couldn't find any resources
// to work on...the spec is not explicit about what kind of
// error this is, so we're treating it as a processing error
ArrayList code = new ArrayList();
code.add(Status.STATUS_PROCESSING_ERROR);
String msg = "Couldn't find any resources to work on.";
return new
ResponseCtx(new Result(Result.DECISION_INDETERMINATE,
new Status(code, msg),
context.getResourceId().encode()));
}
// setup a set to keep track of the results
HashSet results = new HashSet();
// at this point, we need to go through all the resources we
// successfully found and start collecting results
Iterator it = resourceResult.getResources().iterator();
while (it.hasNext()) {
// get the next resource, and set it in the EvaluationCtx
AttributeValue resource = (AttributeValue)(it.next());
context.setResourceId(resource);
// do the evaluation, and set the resource in the result
Result result = evaluateContext(context);
result.setResource(resource.encode());
// add the result
results.add(result);
}
// now that we've done all the successes, we add all the failures
// from the finder result
Map failureMap = resourceResult.getFailures();
it = failureMap.keySet().iterator();
while (it.hasNext()) {
// get the next resource, and use it to get its Status data
AttributeValue resource = (AttributeValue)(it.next());
Status status = (Status)(failureMap.get(resource));
// add a new result
results.add(new Result(Result.DECISION_INDETERMINATE,
status, resource.encode()));
}
// return the set of results
return new ResponseCtx(results);
} else {
PolicyMetaData metaData)
throws ParsingException
{
Function function;
Evaluatable eval = null;
AttributeValue attrValue = null;
AttributeFactory attrFactory = AttributeFactory.getInstance();
// get the function type, making sure that it's really a correct
// Target function
if (SunxacmlUtil.getNodeName(node).equals("AttributeAssignment")) {
try {
URI attrId =
new URI(node.getAttributes().
getNamedItem("AttributeId").getNodeValue());
AttributeValue attrValue = attrFactory.createValue(node);
assignments.add(new Attribute(attrId, null, null,
attrValue));
} catch (URISyntaxException use) {
throw new ParsingException("Error parsing URI", use);
} catch (UnknownIdentifierException uie) {
"resource-scope Attribute");
throw new ParsingException("too many resource-scope attrs");
}
Attribute attr = (Attribute)(set.iterator().next());
AttributeValue attrValue = attr.getValue();
// scope must be a string, so throw an exception otherwise
if (! attrValue.getType().toString().
equals(StringAttribute.identifier))
throw new ParsingException("scope attr must be a string");
String value = ((StringAttribute)attrValue).getValue();
"resource-scope Attribute");
throw new ParsingException("too many resource-scope attrs");
}
Attribute attr = (Attribute)(set.iterator().next());
AttributeValue attrValue = attr.getValue();
// scope must be a string, so throw an exception otherwise
if (! attrValue.getType().toString().
equals(StringAttribute.identifier))
throw new ParsingException("scope attr must be a string");
String value = ((StringAttribute)attrValue).getValue();
* @return a response based on the contents of the context
*/
public ResponseCtx evaluate(EvaluationCtx context) {
// see if we need to call the resource finder
if (context.getScope() != EvaluationCtx.SCOPE_IMMEDIATE) {
AttributeValue parent = context.getResourceId();
ResourceFinderResult resourceResult = null;
if (context.getScope() == EvaluationCtx.SCOPE_CHILDREN)
resourceResult =
resourceFinder.findChildResources(parent, context);
else
resourceResult =
resourceFinder.findDescendantResources(parent, context);
// see if we actually found anything
if (resourceResult.isEmpty()) {
// this is a problem, since we couldn't find any resources
// to work on...the spec is not explicit about what kind of
// error this is, so we're treating it as a processing error
ArrayList code = new ArrayList();
code.add(Status.STATUS_PROCESSING_ERROR);
String msg = "Couldn't find any resources to work on.";
return new
ResponseCtx(new Result(Result.DECISION_INDETERMINATE,
new Status(code, msg),
context.getResourceId().encode()));
}
// setup a set to keep track of the results
HashSet results = new HashSet();
// at this point, we need to go through all the resources we
// successfully found and start collecting results
Iterator it = resourceResult.getResources().iterator();
while (it.hasNext()) {
// get the next resource, and set it in the EvaluationCtx
AttributeValue resource = (AttributeValue)(it.next());
context.setResourceId(resource);
// do the evaluation, and set the resource in the result
Result result = evaluateContext(context);
result.setResource(resource.encode());
// add the result
results.add(result);
}
// now that we've done all the successes, we add all the failures
// from the finder result
Map failureMap = resourceResult.getFailures();
it = failureMap.keySet().iterator();
while (it.hasNext()) {
// get the next resource, and use it to get its Status data
AttributeValue resource = (AttributeValue)(it.next());
Status status = (Status)(failureMap.get(resource));
// add a new result
results.add(new Result(Result.DECISION_INDETERMINATE,
status, resource.encode()));
}
// return the set of results
return new ResponseCtx(results);
} else {
// setup the two bags we'll be using
BagAttribute [] bags = new BagAttribute[2];
bags[0] = (BagAttribute)(argValues[0]);
bags[1] = (BagAttribute)(argValues[1]);
AttributeValue result = null;
switch(getFunctionId()) {
// *-at-least-one-member-of takes two bags of the same type and
// returns a boolean
case ID_BASE_AT_LEAST_ONE_MEMBER_OF:
PolicyMetaData metaData)
throws ParsingException
{
Function function;
Evaluatable eval = null;
AttributeValue attrValue = null;
AttributeFactory attrFactory = AttributeFactory.getInstance();
// get the function type, making sure that it's really a correct
// Target function
EvaluationResult result = evalArgs(inputs, context, argValues);
if (result != null)
return result;
// Now that we have real values, perform the requested operation.
AttributeValue attrResult = null;
switch (getFunctionId()) {
// *-one-and-only takes a single bag and returns a
// single value of baseType
// was never really the right behavior (there's no reason that a
// function can only be at the start of an Apply), we no longer make
// assumptions at this point, so the higher order functions are
// left to evaluate their own parameters.
EvaluationResult result = function.evaluate(xprs, context);
AttributeValue avalue = result.getAttributeValue();
StringBuilder builder = new StringBuilder();
builder.append("Function:"+function.getIdentifier().toASCIIString());
for(Object obj: xprs)
{
builder.append(":").append(obj).append(":");
}
builder.append("::result=");
if(avalue != null && avalue.isBag() == false)
builder.append(avalue.encode());
logger.log(Level.FINE, builder.toString());
return result;
}
Related Classes of org.jboss.security.xacml.sunxacml.attr.AttributeValue
Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.