org.hibernate.metamodel.model.domain.NavigableRole.java Source code

Java tutorial

Introduction

Here is the source code for org.hibernate.metamodel.model.domain.NavigableRole.java

Source

/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later
 * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
 */
package org.hibernate.metamodel.model.domain;

import java.io.Serializable;
import java.util.Objects;

import org.hibernate.internal.util.StringHelper;

/**
 * A representation of the static "Navigable" path relative to some "root entity".
 *
 * @author Steve Ebersole
 */
public class NavigableRole implements Serializable {
    public static final String IDENTIFIER_MAPPER_PROPERTY = "_identifierMapper";

    private final NavigableRole parent;
    private final String navigableName;
    private final String fullPath;

    public NavigableRole(NavigableRole parent, String navigableName) {
        this.parent = parent;
        this.navigableName = navigableName;

        // the _identifierMapper is a "hidden" property on entities with composite keys.
        // concatenating it will prevent the path from correctly being used to look up
        // various things such as criteria paths and fetch profile association paths
        if (IDENTIFIER_MAPPER_PROPERTY.equals(navigableName)) {
            this.fullPath = parent != null ? parent.getFullPath() : "";
        } else {
            final String prefix;
            if (parent != null) {
                final String resolvedParent = parent.getFullPath();
                if (StringHelper.isEmpty(resolvedParent)) {
                    prefix = "";
                } else {
                    prefix = resolvedParent + '.';
                }
            } else {
                prefix = "";
            }

            this.fullPath = prefix + navigableName;
        }
    }

    public NavigableRole(String navigableName) {
        this(null, navigableName);
    }

    public NavigableRole() {
        this("");
    }

    public NavigableRole append(String property) {
        return new NavigableRole(this, property);
    }

    public NavigableRole getParent() {
        return parent;
    }

    public String getNavigableName() {
        return navigableName;
    }

    public String getFullPath() {
        return fullPath;
    }

    public boolean isRoot() {
        return parent == null && StringHelper.isEmpty(navigableName);
    }

    @Override
    public String toString() {
        return getClass().getSimpleName() + '[' + fullPath + ']';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        NavigableRole that = (NavigableRole) o;
        return Objects.equals(getFullPath(), that.getFullPath());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getFullPath());
    }
}