use of com.vaticle.typedb.core.graph.common.Encoding.Vertex.Type.Root.ROLE in project grakn by graknlabs.
the class RelationTypeImpl method getRelates.
/**
* Get the role type with a given {@code roleLabel} related by this relation type.
*
* First, look up the role type by the given label and it's scope: the relation label.
* If the role type vertex do not exist, then call {@code role()} to get the inherited role types,
* and see if the any of them has the {@code roleLabel} of interest.
*
* @param roleLabel the label of the role
* @return the role type related in this relation
*/
@Override
public RoleTypeImpl getRelates(String roleLabel) {
Optional<RoleTypeImpl> roleType;
TypeVertex roleTypeVertex = graphMgr.schema().getType(roleLabel, vertex.label());
if (roleTypeVertex != null) {
return RoleTypeImpl.of(graphMgr, roleTypeVertex);
} else if ((roleType = getRelates().filter(role -> role.getLabel().name().equals(roleLabel)).first()).isPresent()) {
return roleType.get();
} else
return null;
}
use of com.vaticle.typedb.core.graph.common.Encoding.Vertex.Type.Root.ROLE in project grakn by graknlabs.
the class RelationTypeImpl method setRelates.
@Override
public void setRelates(String roleLabel) {
validateIsNotDeleted();
TypeVertex roleTypeVertex = graphMgr.schema().getType(roleLabel, vertex.label());
if (roleTypeVertex == null) {
if (getSupertypes().filter(t -> !t.equals(this) && t.isRelationType()).map(TypeImpl::asRelationType).flatMap(RelationType::getRelates).anyMatch(role -> role.getLabel().name().equals(roleLabel))) {
throw exception(TypeDBException.of(RELATION_RELATES_ROLE_FROM_SUPERTYPE, roleLabel, getLabel()));
} else {
RoleTypeImpl roleType = RoleTypeImpl.of(graphMgr, roleLabel, vertex.label());
assert roleType.getSupertype() != null;
if (this.isAbstract())
roleType.setAbstract();
vertex.outs().put(RELATES, roleType.vertex);
vertex.outs().edge(RELATES, roleType.vertex).overridden(((TypeImpl) roleType.getSupertype()).vertex);
}
}
}
Aggregations