org.xacml4j.v30.AttributeContainer Maven / Gradle / Ivy
package org.xacml4j.v30;
/*
* #%L
* Xacml4J Core Engine Implementation
* %%
* Copyright (C) 2009 - 2014 Xacml4J.org
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Lesser Public License for more details.
*
* You should have received a copy of the GNU General Lesser Public
* License along with this program. If not, see
* .
* #L%
*/
import java.util.Collection;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Iterables;
/**
* Base class for XACML attribute containers
*
* @author Giedrius Trumpickas
*/
public class AttributeContainer
{
protected final ImmutableMultimap attributes;
protected AttributeContainer(Builder> b){
this.attributes = b.attrsBuilder.build();
}
/**
* Tests if this instance contains an
* attribute with a given identifier
*
* @param attributeId an attribute id
* @return {@code true} if contains
*/
public boolean containsAttribute(String attributeId){
return attributes.containsKey(attributeId);
}
/**
* Gets all attributes with a given identifier
*
* @param attributeId an attribute identifier
* @return a collection of attributes if there is no
* attributes with a given identifier empty collection
* is returned
*/
public Collection getAttributes(String attributeId){
return attributes.get(attributeId);
}
/**
* Gets a single {@link Attribute} instance with
* a given attribute identifier
*
* @param attributeId an attribute identifier
* @return {@link Attribute} instance or {@code null}
* if no attribute available with a given identifier
*/
public Attribute getOnlyAttribute(String attributeId){
return Iterables.getOnlyElement(attributes.get(attributeId), null);
}
/**
* Gets all attributes with a given attribute
* identifier and issuer
*
* @param attributeId an attribute identifier
* @param issuer an attribute issuer
* @return a collection of attributes with a given identifier
* and given issuer
*/
public Collection getAttributes(final String attributeId, final String issuer){
return Collections2.filter(
attributes.get(attributeId),
new Predicate() {
@Override
public boolean apply(Attribute attr) {
return issuer == null || issuer.equals(attr.getIssuer());
}});
}
/**
* Gets all attribute {@link Attribute}
* instances
*
* @return immutable collection of {@link Attribute}
* instances
*/
public Collection getAttributes() {
return attributes.values();
}
/**
* Finds all instance of {@link Attribute} with
* {@link Attribute#isIncludeInResult()} returning
* {@code true}
*
* @return a collection of {@link Attribute}
* instances
*/
public Collection getIncludeInResultAttributes(){
return Collections2.filter(attributes.values(), new Predicate() {
@Override
public boolean apply(Attribute attr) {
return attr.isIncludeInResult();
}});
}
/**
* @see AttributeContainer#getAttributeValues(String, String, AttributeExpType)
*/
public Collection getAttributeValues(
String attributeId,
AttributeExpType dataType){
return getAttributeValues(attributeId, null, dataType);
}
/**
* Gets only one {@link AttributeExp} instance of the given type
* from an attribute with a given identifier
*
* @param attributeId an attribute identifier
* @param dataType an attribute value data type
* @return {@link AttributeExp} of the given type or {@code null}
* if value matching given criteria does not exist
* @exception IllegalArgumentException if more than one value is found
* matching given criteria
*/
public AttributeExp getOnlyAttributeValue(String attributeId,
AttributeExpType dataType){
return Iterables.getOnlyElement(getAttributeValues(attributeId, dataType), null);
}
/**
* Gets all {@link AttributeExp} instances
* contained in this attributes instance
*
* @param attributeId an attribute id
* @param issuer an attribute issuer
* @param type an attribute value data type
* @return a collection of {@link AttributeExp} instances
*/
public Collection getAttributeValues(
String attributeId, String issuer, final AttributeExpType type){
Preconditions.checkNotNull(type);
Collection found = getAttributes(attributeId, issuer);
ImmutableList.Builder b = ImmutableList.builder();
for(Attribute a : found){
b.addAll(a.getValuesByType(type));
}
return b.build();
}
public static abstract class Builder>
{
private ImmutableListMultimap.Builder attrsBuilder = ImmutableListMultimap.builder();
public T attribute(Attribute... attrs) {
for(Attribute attr : attrs){
attrsBuilder.put(attr.getAttributeId(), attr);
}
return getThis();
}
public T noAttributes() {
this.attrsBuilder = ImmutableListMultimap.builder();
return getThis();
}
public T attributes(Iterable attrs) {
if(attrs == null){
return getThis();
}
for(Attribute attr : attrs){
attrsBuilder.put(attr.getAttributeId(), attr);
}
return getThis();
}
protected abstract T getThis();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy