All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.vertexium.cypher.ast.model.CypherRelationshipPattern Maven / Gradle / Ivy

There is a newer version: 4.10.0
Show newest version
package org.vertexium.cypher.ast.model;

public class CypherRelationshipPattern extends CypherElementPattern {
    private final CypherListLiteral relTypeNames;
    private final CypherRangeLiteral range;
    private CypherDirection direction;
    private CypherNodePattern previousNodePattern;
    private CypherNodePattern nextNodePattern;

    public CypherRelationshipPattern(
        String name,
        CypherListLiteral relTypeNames,
        CypherMapLiteral properties,
        CypherRangeLiteral range,
        CypherDirection direction
    ) {
        super(name, properties);
        this.relTypeNames = relTypeNames;
        this.range = range;
        this.direction = direction;
    }

    public CypherDirection getDirection() {
        return direction;
    }

    public CypherRangeLiteral getRange() {
        return range;
    }

    public CypherListLiteral getRelTypeNames() {
        return relTypeNames;
    }

    public boolean hasRelTypeNames() {
        return getRelTypeNames() != null && getRelTypeNames().size() > 0;
    }

    @Override
    public String toString() {
        StringBuilder result = new StringBuilder();
        if (getDirection().hasIn()) {
            result.append("<");
        }
        result.append("-");
        if (getName() != null
            || (getPropertiesMap() != null && getPropertiesMap().size() > 0)
            || (getRelTypeNames() != null && getRelTypeNames().size() > 0)
            || getRange() != null) {
            result.append("[");
            if (getName() != null) {
                result.append(getName());
            }
            if (getRelTypeNames() != null && getRelTypeNames().size() > 0) {
                result.append(getRelTypeNames());
            }
            if (getPropertiesMap() != null && getPropertiesMap().size() > 0) {
                result.append(" ").append(getPropertiesMap());
            }
            if (getRange() != null) {
                result.append("*");
                result.append(getRange());
            }
            result.append("]");
        }
        result.append("-");
        if (getDirection().hasOut()) {
            result.append(">");
        }
        return result.toString();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        if (!super.equals(o)) {
            return false;
        }

        CypherRelationshipPattern that = (CypherRelationshipPattern) o;

        if (relTypeNames != null ? !relTypeNames.equals(that.relTypeNames) : that.relTypeNames != null) {
            return false;
        }
        if (range != null ? !range.equals(that.range) : that.range != null) {
            return false;
        }
        if (direction != that.direction) {
            return false;
        }
        return super.equals(o);
    }

    @Override
    public int hashCode() {
        int result = super.hashCode();
        result = 31 * result + (relTypeNames != null ? relTypeNames.hashCode() : 0);
        result = 31 * result + (range != null ? range.hashCode() : 0);
        result = 31 * result + (direction != null ? direction.hashCode() : 0);
        return result;
    }

    @Override
    public int getConstraintCount() {
        return super.getConstraintCount() + (getRelTypeNames() == null ? 0 : getRelTypeNames().size());
    }

    public void setPreviousNodePattern(CypherNodePattern previousNodePattern) {
        this.previousNodePattern = previousNodePattern;
    }

    public CypherNodePattern getPreviousNodePattern() {
        return previousNodePattern;
    }

    public void setNextNodePattern(CypherNodePattern nextNodePattern) {
        this.nextNodePattern = nextNodePattern;
    }

    public CypherNodePattern getNextNodePattern() {
        return nextNodePattern;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy