/** * Checks if a {@link Relationship} has at least one role player. * @param relationship The {@link Relationship} to check */ static Optional<String> validateRelationshipHasRolePlayers(Relationship relationship) { if(!relationship.rolePlayers().findAny().isPresent()){ return Optional.of(ErrorMessage.VALIDATION_RELATIONSHIP_WITH_NO_ROLE_PLAYERS.getMessage(relationship.id(), relationship.type().label())); } return Optional.empty(); } }
/** * This method checks if the plays edge has been added between the roleplayer's {@link Type} and * the {@link Role} being played. * * It also checks if the {@link Role} of the {@link Casting} has been linked to the {@link RelationshipType} of the * {@link Relationship} which the {@link Casting} connects to. * * @return Specific errors if any are found */ static Set<String> validatePlaysAndRelatesStructure(Casting casting) { Set<String> errors = new HashSet<>(); //Gets here to make sure we traverse/read only once Thing thing = casting.getRolePlayer(); Role role = casting.getRole(); Relationship relationship = casting.getRelationship(); //Actual checks roleNotAllowedToBePlayed(role, thing).ifPresent(errors::add); roleNotLinkedToRelationShip(role, relationship.type(), relationship).ifPresent(errors::add); return errors; }
/** * Map a {@link Relationship} to a var, along with all of the roleplayers * Exclude any relations that are mapped to an encountered resource * @param relationship {@link Relationship} to be mapped * @return var patterns representing the given instance */ //TODO resources on relations private static VarPattern map(Relationship relationship){ if(relationship.type().isImplicit()){ return var(); } VarPattern var = base(relationship); var = roleplayers(var, relationship); return var; }
public Pattern pattern(Relationship concept) { VarPattern relationPattern = Graql.var(); Set<Pattern> idPatterns = new HashSet<>(); for (Map.Entry<Role, Set<Thing>> entry : concept.rolePlayersMap().entrySet()) { for (Thing var : entry.getValue()) { Var rolePlayer = Graql.var(); relationPattern = relationPattern.rel(Graql.label(entry.getKey().label()), rolePlayer); idPatterns.add(rolePlayer.asUserDefined().id(var.id())); } } relationPattern = relationPattern.isa(Graql.label(concept.type().label())); Pattern pattern = relationPattern; for (Pattern idPattern : idPatterns) { pattern = pattern.and(idPattern); } return pattern; } }
/** * Deletes the concept as an Thing */ @Override public void delete() { //Remove links to relationships and return them Set<Relationship> relationships = castingsInstance().map(casting -> { Relationship relationship = casting.getRelationship(); Role role = casting.getRole(); relationship.unassign(role, this); return relationship; }).collect(toSet()); vertex().tx().txCache().removedInstance(type().id()); deleteNode(); relationships.forEach(relation -> { if(relation.type().isImplicit()){//For now implicit relationships die relation.delete(); } else { RelationshipImpl rel = (RelationshipImpl) relation; rel.cleanUp(); } }); }