/** * Validate the fields in the the RelationshipType are consistent with respect to themselves. * @param relationship * @throws AtlasBaseException */ private boolean validateRelationship(AtlasRelationship relationship) { String end1TypeName = relationship.getEnd1() != null ? relationship.getEnd1().getTypeName() : null; String end2TypeName = relationship.getEnd2() != null ? relationship.getEnd2().getTypeName() : null; if (StringUtils.isNotEmpty(end1TypeName) && StringUtils.isNotEmpty(end2TypeName)) { return end1Type.isTypeOrSuperTypeOf(end1TypeName) && end2Type.isTypeOrSuperTypeOf(end2TypeName) && super.isValidValue(relationship); } return false; }
@Override @GraphTransaction public AtlasRelationship create(AtlasRelationship relationship) throws AtlasBaseException { if (LOG.isDebugEnabled()) { LOG.debug("==> create({})", relationship); } AtlasVertex end1Vertex = getVertexFromEndPoint(relationship.getEnd1()); AtlasVertex end2Vertex = getVertexFromEndPoint(relationship.getEnd2()); AtlasEdge edge = createRelationship(end1Vertex, end2Vertex, relationship); AtlasRelationship ret = edge != null ? entityRetriever.mapEdgeToAtlasRelationship(edge) : null; if (LOG.isDebugEnabled()) { LOG.debug("<== create({}): {}", relationship, ret); } return ret; }
@Override public AtlasRelationship getOrCreate(AtlasRelationship relationship) throws AtlasBaseException { if (LOG.isDebugEnabled()) { LOG.debug("==> getOrCreate({})", relationship); } AtlasVertex end1Vertex = getVertexFromEndPoint(relationship.getEnd1()); AtlasVertex end2Vertex = getVertexFromEndPoint(relationship.getEnd2()); AtlasRelationship ret = null; // check if relationship exists AtlasEdge relationshipEdge = getRelationship(end1Vertex, end2Vertex, relationship); if (relationshipEdge == null) { relationshipEdge = createRelationship(end1Vertex, end2Vertex, relationship, false); } if (relationshipEdge != null){ ret = entityRetriever.mapEdgeToAtlasRelationship(relationshipEdge); } if (LOG.isDebugEnabled()) { LOG.debug("<== getOrCreate({}): {}", relationship, ret); } return ret; }
@Override public boolean areEqualValues(Object val1, Object val2) { final boolean ret; if (val1 == null) { ret = val2 == null; } else if (val2 == null) { ret = false; } else { AtlasRelationship rel1 = getRelationshipFromValue(val1); if (rel1 == null) { ret = false; } else { AtlasRelationship rel2 = getRelationshipFromValue(val2); if (rel2 == null) { ret = false; } else if (!super.areEqualValues(rel1, rel2)) { ret = false; } else { ret = Objects.equals(rel1.getGuid(), rel2.getGuid()) && Objects.equals(rel1.getEnd1(), rel2.getEnd1()) && Objects.equals(rel1.getEnd2(), rel2.getEnd2()) && Objects.equals(rel1.getLabel(), rel2.getLabel()) && Objects.equals(rel1.getPropagateTags(), rel2.getPropagateTags()) && Objects.equals(rel1.getStatus(), rel2.getStatus()); } } } return ret; }
@Override @GraphTransaction public AtlasRelationship create(AtlasRelationship relationship) throws AtlasBaseException { if (LOG.isDebugEnabled()) { LOG.debug("==> create({})", relationship); } AtlasVertex end1Vertex = getVertexFromEndPoint(relationship.getEnd1()); AtlasVertex end2Vertex = getVertexFromEndPoint(relationship.getEnd2()); validateRelationship(end1Vertex, end2Vertex, relationship.getTypeName(), relationship.getAttributes()); AtlasEdge edge = createRelationship(end1Vertex, end2Vertex, relationship); AtlasRelationship ret = edge != null ? entityRetriever.mapEdgeToAtlasRelationship(edge) : null; if (LOG.isDebugEnabled()) { LOG.debug("<== create({}): {}", relationship, ret); } // notify entities for added/removed classification propagation entityChangeNotifier.notifyPropagatedEntities(); return ret; }
@Override public AtlasRelationship getOrCreate(AtlasRelationship relationship) throws AtlasBaseException { if (LOG.isDebugEnabled()) { LOG.debug("==> getOrCreate({})", relationship); } validateRelationship(relationship); AtlasVertex end1Vertex = getVertexFromEndPoint(relationship.getEnd1()); AtlasVertex end2Vertex = getVertexFromEndPoint(relationship.getEnd2()); AtlasRelationship ret = null; // check if relationship exists AtlasEdge relationshipEdge = getRelationshipEdge(end1Vertex, end2Vertex, relationship.getTypeName()); if (relationshipEdge == null) { validateRelationship(relationship); relationshipEdge = createRelationship(end1Vertex, end2Vertex, relationship); } if (relationshipEdge != null){ ret = entityRetriever.mapEdgeToAtlasRelationship(relationshipEdge); } if (LOG.isDebugEnabled()) { LOG.debug("<== getOrCreate({}): {}", relationship, ret); } return ret; }
AtlasRelationshipDef relationshipDef = typeRegistry.getRelationshipDefByName(relationshipTypeName); ends.add(relationship.getEnd1()); ends.add(relationship.getEnd2()); endDefs.add(relationshipDef.getEndDef1());
AtlasRelationshipDef relationshipDef = typeRegistry.getRelationshipDefByName(relationshipTypeName); ends.add(relationship.getEnd1()); ends.add(relationship.getEnd2()); endDefs.add(relationshipDef.getEndDef1());
if (relationship.getEnd1() != null) { String updatedEnd1Guid = relationship.getEnd1().getGuid(); AtlasVertex updatedEnd1Vertex = getVertexFromEndPoint(relationship.getEnd1()); String end1Guid = AtlasGraphUtilsV2.getIdFromVertex(end1Vertex); if (!StringUtils.equalsIgnoreCase(relationship.getEnd1().getGuid(), end1Guid)) { throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIP_UPDATE_END_CHANGE_NOT_ALLOWED, edgeType, guid, end1Guid, relationship.getEnd1().getGuid());
if (relationship.getEnd1() != null) { String updatedEnd1Guid = relationship.getEnd1().getGuid(); AtlasVertex updatedEnd1Vertex = getVertexFromEndPoint(relationship.getEnd1()); String end1Guid = AtlasGraphUtilsV2.getIdFromVertex(end1Vertex); if (!StringUtils.equalsIgnoreCase(relationship.getEnd1().getGuid(), end1Guid)) { throw new AtlasBaseException(AtlasErrorCode.RELATIONSHIP_UPDATE_END_CHANGE_NOT_ALLOWED, edgeType, guid, end1Guid, relationship.getEnd1().getGuid());
public AtlasRelationshipHeader(AtlasRelationship relationship) { this(relationship.getTypeName(), relationship.getGuid(), relationship.getEnd1(), relationship.getEnd2()); setLabel(relationship.getLabel()); switch (relationship.getStatus()) { case ACTIVE: setStatus(AtlasEntity.Status.ACTIVE); break; case DELETED: setStatus(AtlasEntity.Status.DELETED); break; } }
private void validateRelationship(AtlasRelationship relationship) throws AtlasBaseException { if (relationship == null) { throw new AtlasBaseException(AtlasErrorCode.INVALID_PARAMETERS, "AtlasRelationship is null"); } String relationshipName = relationship.getTypeName(); String end1TypeName = getTypeNameFromObjectId(relationship.getEnd1()); String end2TypeName = getTypeNameFromObjectId(relationship.getEnd2()); AtlasRelationshipType relationshipType = typeRegistry.getRelationshipTypeByName(relationshipName); if (relationshipType == null) { throw new AtlasBaseException(AtlasErrorCode.INVALID_VALUE, "unknown relationship type'" + relationshipName + "'"); } if (relationship.getEnd1() == null || relationship.getEnd2() == null) { throw new AtlasBaseException(AtlasErrorCode.INVALID_PARAMETERS, "end1/end2 is null"); } boolean validEndTypes = false; if (relationshipType.getEnd1Type().isTypeOrSuperTypeOf(end1TypeName)) { validEndTypes = relationshipType.getEnd2Type().isTypeOrSuperTypeOf(end2TypeName); } else if (relationshipType.getEnd2Type().isTypeOrSuperTypeOf(end1TypeName)) { validEndTypes = relationshipType.getEnd1Type().isTypeOrSuperTypeOf(end2TypeName); } if (!validEndTypes) { throw new AtlasBaseException(AtlasErrorCode.INVALID_RELATIONSHIP_END_TYPE, relationshipName, relationshipType.getEnd2Type().getTypeName(), end1TypeName); } validateEnds(relationship); validateAndNormalize(relationship); }
private void validateRelationship(AtlasRelationship relationship) throws AtlasBaseException { if (relationship == null) { throw new AtlasBaseException(AtlasErrorCode.INVALID_PARAMETERS, "AtlasRelationship is null"); } String relationshipName = relationship.getTypeName(); String end1TypeName = getTypeNameFromObjectId(relationship.getEnd1()); String end2TypeName = getTypeNameFromObjectId(relationship.getEnd2()); AtlasRelationshipType relationshipType = typeRegistry.getRelationshipTypeByName(relationshipName); if (relationshipType == null) { throw new AtlasBaseException(AtlasErrorCode.INVALID_VALUE, "unknown relationship type'" + relationshipName + "'"); } if (relationship.getEnd1() == null || relationship.getEnd2() == null) { throw new AtlasBaseException(AtlasErrorCode.INVALID_PARAMETERS, "end1/end2 is null"); } boolean validEndTypes = false; if (relationshipType.getEnd1Type().isTypeOrSuperTypeOf(end1TypeName)) { validEndTypes = relationshipType.getEnd2Type().isTypeOrSuperTypeOf(end2TypeName); } else if (relationshipType.getEnd2Type().isTypeOrSuperTypeOf(end1TypeName)) { validEndTypes = relationshipType.getEnd1Type().isTypeOrSuperTypeOf(end2TypeName); } if (!validEndTypes) { throw new AtlasBaseException(AtlasErrorCode.INVALID_RELATIONSHIP_END_TYPE, relationshipName, relationshipType.getEnd2Type().getTypeName(), end1TypeName); } validateEnds(relationship); validateAndNormalize(relationship); }