@Override final RelationshipType asCurrentType(Concept concept) { return concept.asRelationshipType(); }
@Override final RelationshipType asCurrentBaseType(Concept other) { return other.asRelationshipType(); }
@Override final RelationshipType asSelf(Concept concept) { return concept.asRelationshipType(); }
@Override final RelationshipType asMyType(Concept concept) { return concept.asRelationshipType(); }
@Override public RelationshipType putRelationshipType(Label label) { return client().putRelationshipType(label).asRelationshipType(); }
/** * * @param concept The element to be later validated */ public void trackForValidation(Concept concept) { if (concept.isThing()) { modifiedThings.add(concept.asThing()); } else if (concept.isRole()) { modifiedRoles.add(concept.asRole()); } else if (concept.isRelationshipType()) { modifiedRelationshipTypes.add(concept.asRelationshipType()); } else if (concept.isRule()){ modifiedRules.add(concept.asRule()); } } public void trackForValidation(Casting casting) {
@Override public RelationshipType putRelationshipType(Label label) { transceiver.send(RequestBuilder.Transaction.putRelationshipType(label)); return RemoteConcept.of(responseOrThrow().getPutRelationTypeRes().getRelationType(), this).asRelationshipType(); }
public static ConceptMethod<Void> setRelatedRole(Role role) { return ConceptMethod.builder(ConceptResponseType.UNIT) .requestSetter(builder -> builder.setSetRelatedRole(convert(role))) .functionVoid(concept -> concept.asRelationshipType().relates(role)) .build(); }
public static ConceptMethod<Void> unsetRelatedRole(Role role) { return ConceptMethod.builder(ConceptResponseType.UNIT) .requestSetter(builder -> builder.setUnsetRelatedRole(convert(role))) .functionVoid(concept -> concept.asRelationshipType().deleteRelates(role)) .build(); }
@Override public Collection<PropertyExecutor> undefine(Var var) throws GraqlQueryException { PropertyExecutor.Method method = executor -> { RelationshipType relationshipType = executor.get(var).asRelationshipType(); Role role = executor.get(this.role().var()).asRole(); if (!relationshipType.isDeleted() && !role.isDeleted()) { relationshipType.unrelate(role); } }; return ImmutableSet.of(PropertyExecutor.builder(method).requires(var, role().var()).build()); }
@Override public Collection<PropertyExecutor> define(Var var) throws GraqlQueryException { Var roleVar = role().var(); PropertyExecutor.Method relatesMethod = executor -> { Role role = executor.get(roleVar).asRole(); executor.get(var).asRelationshipType().relates(role); }; PropertyExecutor relatesExecutor = PropertyExecutor.builder(relatesMethod).requires(var, roleVar).build(); // This allows users to skip stating `$roleVar sub role` when they say `$var relates $roleVar` PropertyExecutor.Method isRoleMethod = executor -> executor.builder(roleVar).isRole(); PropertyExecutor isRoleExecutor = PropertyExecutor.builder(isRoleMethod).produces(roleVar).build(); VarPatternAdmin superRoleVarPattern = superRole(); if (superRoleVarPattern != null) { Var superRoleVar = superRoleVarPattern.var(); PropertyExecutor.Method subMethod = executor -> { Role superRole = executor.get(superRoleVar).asRole(); executor.builder(roleVar).sub(superRole); }; PropertyExecutor subExecutor = PropertyExecutor.builder(subMethod) .requires(superRoleVar).produces(roleVar).build(); return ImmutableSet.of(relatesExecutor, isRoleExecutor, subExecutor); } else { return ImmutableSet.of(relatesExecutor, isRoleExecutor); } }