org.picketlink.idm.spi.RelationshipPolicy Maven / Gradle / Ivy
/*
* JBoss, Home of Professional Open Source
*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.picketlink.idm.spi;
import org.picketlink.idm.model.Relationship;
import java.util.Collections;
import java.util.Set;
/**
* The relationship policy determines how and where relationships between identities are stored.
*
* There is a one-to-one relationship between an IdentityConfiguration and RelationshipPolicy, i.e. each
* IdentityConfiguration has its own RelationshipPolicy.
*
* The RelationshipPolicy defines the relationship types that are managed by the IdentityConfiguration itself for
* "self-contained" relationships, i.e. relationships for which all participating identities belong to a partition
* governed by that IdentityConfiguration. It also defines the "global" (i.e. relationships between identities
* belonging to different partitions/configurations) relationship types that the IdentityConfiguration
* is capable of supporting.
*
* It is the responsibility of the developer to ensure that multiple RelationshipPolicy configurations do not provide
* overlapping support for the same global relationship types. If multiple IdentityConfiguration instances have been
* configured and their relationship policies provide overlapping support, the behaviour is undefined.
*
* @author Shane Bryzak
*/
public class RelationshipPolicy {
private final Set> selfManagedRelationships;
private final Set> globalManagedRelationships;
public RelationshipPolicy(Set> selfManagedRelationships,
Set> globalManagedRelationships) {
this.selfManagedRelationships = Collections.unmodifiableSet(selfManagedRelationships);
this.globalManagedRelationships = Collections.unmodifiableSet(globalManagedRelationships);
}
public boolean isSelfRelationshipSupported(Class extends Relationship> relationshipClass) {
for (Class extends Relationship> cls : selfManagedRelationships) {
if (cls.isAssignableFrom(relationshipClass)) {
return true;
}
}
return false;
}
public boolean isGlobalRelationshipSupported(Class extends Relationship> relationshipClass) {
for (Class extends Relationship> cls : globalManagedRelationships) {
if (cls.isAssignableFrom(relationshipClass)) {
return true;
}
}
return Relationship.class.equals(relationshipClass) && !this.globalManagedRelationships.isEmpty();
}
}