use of com.vaticle.typedb.core.concept.type.RoleType in project grakn by graknlabs.
the class ThingTypeSteps method thing_type_set_plays_role.
@When("{root_label}\\( ?{type_label} ?) set plays role: {scoped_label}")
public void thing_type_set_plays_role(RootLabel rootLabel, String typeLabel, Parameters.ScopedLabel roleLabel) {
RoleType roleType = tx().concepts().getRelationType(roleLabel.scope()).getRelates(roleLabel.label());
get_thing_type(rootLabel, typeLabel).setPlays(roleType);
}
use of com.vaticle.typedb.core.concept.type.RoleType in project grakn by graknlabs.
the class ThingTypeSteps method thing_type_set_plays_role_as.
@When("{root_label}\\( ?{type_label} ?) set plays role: {scoped_label} as {scoped_label}")
public void thing_type_set_plays_role_as(RootLabel rootLabel, String typeLabel, Parameters.ScopedLabel roleLabel, Parameters.ScopedLabel overriddenLabel) {
RoleType roleType = tx().concepts().getRelationType(roleLabel.scope()).getRelates(roleLabel.label());
RoleType overriddenType = tx().concepts().getRelationType(overriddenLabel.scope()).getRelates(overriddenLabel.label());
get_thing_type(rootLabel, typeLabel).setPlays(roleType, overriddenType);
}
use of com.vaticle.typedb.core.concept.type.RoleType 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.concept.type.RoleType 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);
}
}
}
use of com.vaticle.typedb.core.concept.type.RoleType in project grakn by graknlabs.
the class Util method getRoleType.
public static RoleType getRoleType(Relation relation, Thing player, RelationConstraint.RolePlayer rolePlayer) {
try (FactoryTracingThreadStatic.ThreadTrace ignored = traceOnThread(TRACE_PREFIX + "get_role_type")) {
RoleType roleType;
Set<? extends RoleType> inferred;
if (rolePlayer.roleType().isPresent()) {
RelationType relationType = relation.getType();
TypeVariable var = rolePlayer.roleType().get();
if ((roleType = relationType.getRelates(var.label().get().label())) == null) {
throw TypeDBException.of(TYPE_NOT_FOUND, Label.of(var.label().get().label(), relationType.getLabel().name()));
}
} else if ((inferred = player.getType().getPlays().filter(rt -> rt.getRelationType().equals(relation.getType())).toSet()).size() == 1) {
roleType = inferred.iterator().next();
} else if (inferred.size() > 1) {
throw TypeDBException.of(ROLE_TYPE_AMBIGUOUS, rolePlayer.player().reference());
} else {
throw TypeDBException.of(ROLE_TYPE_MISSING, rolePlayer.player().reference());
}
return roleType;
}
}
Aggregations