Search in sources :

Example 6 with RelationshipCategory

use of org.apache.atlas.model.typedef.AtlasRelationshipDef.RelationshipCategory in project incubator-atlas by apache.

the class AtlasRelationshipType method validateAtlasRelationshipDef.

/**
 * Throw an exception so we can junit easily.
 *
 * This method assumes that the 2 ends are not null.
 *
 * @param relationshipDef
 * @throws AtlasBaseException
 */
public static void validateAtlasRelationshipDef(AtlasRelationshipDef relationshipDef) throws AtlasBaseException {
    AtlasRelationshipEndDef endDef1 = relationshipDef.getEndDef1();
    AtlasRelationshipEndDef endDef2 = relationshipDef.getEndDef2();
    RelationshipCategory relationshipCategory = relationshipDef.getRelationshipCategory();
    String name = relationshipDef.getName();
    boolean isContainer1 = endDef1.getIsContainer();
    boolean isContainer2 = endDef2.getIsContainer();
    if ((endDef1.getCardinality() == AtlasAttributeDef.Cardinality.LIST) || (endDef2.getCardinality() == AtlasAttributeDef.Cardinality.LIST)) {
        throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_LIST_ON_END, name);
    }
    if (isContainer1 && isContainer2) {
        // we support 0 or 1 of these flags.
        throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_DOUBLE_CONTAINERS, name);
    }
    if ((isContainer1 || isContainer2)) {
        // we have an isContainer defined in an end
        if (relationshipCategory == RelationshipCategory.ASSOCIATION) {
            // associations are not containment relationships - so do not allow an endpoint with isContainer
            throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_ASSOCIATION_AND_CONTAINER, name);
        }
    } else {
        // we do not have an isContainer defined on an end
        if (relationshipCategory == RelationshipCategory.COMPOSITION) {
            // COMPOSITION needs one end to be the container.
            throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_COMPOSITION_NO_CONTAINER, name);
        } else if (relationshipCategory == RelationshipCategory.AGGREGATION) {
            // AGGREGATION needs one end to be the container.
            throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_AGGREGATION_NO_CONTAINER, name);
        }
    }
    if (relationshipCategory == RelationshipCategory.COMPOSITION) {
        // composition children should not be multiple cardinality
        if (endDef1.getCardinality() == AtlasAttributeDef.Cardinality.SET && !endDef1.getIsContainer()) {
            throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_COMPOSITION_MULTIPLE_PARENTS, name);
        }
        if ((endDef2.getCardinality() == AtlasAttributeDef.Cardinality.SET) && !endDef2.getIsContainer()) {
            throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIPDEF_COMPOSITION_MULTIPLE_PARENTS, name);
        }
    }
}
Also used : AtlasBaseException(org.apache.atlas.exception.AtlasBaseException) AtlasRelationshipEndDef(org.apache.atlas.model.typedef.AtlasRelationshipEndDef) RelationshipCategory(org.apache.atlas.model.typedef.AtlasRelationshipDef.RelationshipCategory)

Aggregations

RelationshipCategory (org.apache.atlas.model.typedef.AtlasRelationshipDef.RelationshipCategory)6 AtlasRelationshipEndDef (org.apache.atlas.model.typedef.AtlasRelationshipEndDef)6 AtlasBaseException (org.apache.atlas.exception.AtlasBaseException)4 AtlasRelationshipDef (org.apache.atlas.model.typedef.AtlasRelationshipDef)2 PropagateTags (org.apache.atlas.model.typedef.AtlasRelationshipDef.PropagateTags)2