@Override protected Condition createCondition() { URI designatorType = null; URI designatorId = null; try { designatorType = new URI("http://www.w3.org/2001/XMLSchema#integer"); designatorId = new URI(getId()); } catch (URISyntaxException ex) { log.fatal(null, ex); } FunctionFactory factory = FunctionFactory.getConditionInstance(); Function conditionFunction = null; try { conditionFunction = factory.createFunction(globalFunction.getFunctionName()); } catch (UnknownIdentifierException ex) { log.fatal(null, ex); } catch (FunctionTypeException ex) { log.fatal(null, ex); } if (this.values.isEmpty()) { List tmp = new ArrayList(); tmp.add(BooleanAttribute.getInstance(false)); return new Condition(conditionFunction, tmp); } Function conditionFunction2 = null; try { conditionFunction2 = factory.createFunction("urn:oasis:names:tc:xacml:1.0:function:" + "and"); } catch (UnknownIdentifierException ex) { log.fatal(null, ex); } catch (FunctionTypeException ex) { log.fatal(null, ex); } factory = FunctionFactory.getGeneralInstance(); Function greaterFunction; try { greaterFunction = factory.createFunction(ComparisonFunction.NAME_INTEGER_GREATER_THAN_OR_EQUAL); } catch (Exception e) { log.fatal("Exception in condition creation", e); return null; } Function lessFunction; try { lessFunction = factory.createFunction(ComparisonFunction.NAME_INTEGER_LESS_THAN_OR_EQUAL); } catch (Exception e) { log.fatal("Exception in condition creation", e); return null; } URI quantityDesignatorId = null; try { quantityDesignatorId = new URI("urn:oasis:names:tc:xacml:1.0:resource:quantity-id"); } catch (URISyntaxException ex) { log.error(null, ex); } Function quantityFunction; try { quantityFunction = factory.createFunction("urn:oasis:names:tc:xacml:1.0:function:" + "integer-one-and-only"); } catch (Exception e) { log.fatal("Exception in SCQuantity condition", e); return null; } List applyCondArgs = new ArrayList(); List conditionArgs = new ArrayList(); for (Object quantitiesOb : values) { applyCondArgs.clear(); List quantities = (List) quantitiesOb; List applyArgs = new ArrayList(); List applyArgsUser = new ArrayList(); List greatApplyArgs = new ArrayList(); List greatApplyArgsUser = new ArrayList(); AttributeDesignator lowDesignator = new AttributeDesignator( AttributeDesignator.RESOURCE_TARGET, designatorType, quantityDesignatorId, false, null); applyArgsUser.add(lowDesignator); Apply lowApplyUser = new Apply(quantityFunction, applyArgsUser); IntegerAttribute lowQuantityAttribute = new IntegerAttribute((Long) quantities.get(0)); applyArgs.add(lowApplyUser); applyArgs.add(lowQuantityAttribute); Apply lowApply = new Apply(greaterFunction, applyArgs); applyCondArgs.add(lowApply); AttributeDesignator greatDesignator = new AttributeDesignator( AttributeDesignator.RESOURCE_TARGET, designatorType, quantityDesignatorId, false, null); greatApplyArgsUser.add(greatDesignator); Apply greatApplyUser = new Apply(quantityFunction, greatApplyArgsUser); IntegerAttribute greatQuantityAttribute = new IntegerAttribute((Long) quantities.get(1)); greatApplyArgs.add(greatApplyUser); greatApplyArgs.add(greatQuantityAttribute); Apply applyCondition = new Apply(lessFunction, greatApplyArgs); applyCondArgs.add(applyCondition); Apply applyCond = new Apply(conditionFunction2, applyCondArgs); conditionArgs.add(applyCond); } Condition condition = new Condition(conditionFunction, conditionArgs); return condition; }