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

com.github.vincentrussell.query.mongodb.sql.converter.holder.AliasHolder Maven / Gradle / Ivy

Go to download

sql-to-mongo-db-query-converter helps you build quieres for MongoDb based on Queries provided in SQL.

There is a newer version: 1.8
Show newest version
package com.github.vincentrussell.query.mongodb.sql.converter.holder;

import com.github.vincentrussell.query.mongodb.sql.converter.ParseException;

import java.util.Collections;
import java.util.Map;

/**
 * The class holds mapping between fields and aliases.
 */
public class AliasHolder {
    private Map aliasFromFieldHash;
    private Map fieldFromAliasHash;

    /**
     * Default constructor.
     * @param aliasFromFieldMap the alias from the field map.
     * @param fieldFromAliasMap the field to alias map.
     */
    public AliasHolder(final Map aliasFromFieldMap,
                       final Map fieldFromAliasMap) {
        this.aliasFromFieldHash = aliasFromFieldMap;
        this.fieldFromAliasHash = fieldFromAliasMap;
    }

    /**
     * Constructor with empty values.
     */
    public AliasHolder() {
        this(Collections.emptyMap(), Collections.emptyMap());
    }

    /**
     * Get the alias from a field name.
     * @param field the field that you want the alias for.
     * @return the alias from a field name.
     */
    public String getAliasFromFieldExp(final String field) {
        return aliasFromFieldHash.get(field);
    }

    /**
     * is there an alias for this field?
     * @param field  the field that you want the alias for.
     * @return true if there is an alias for this field
     */
    public boolean containsAliasForFieldExp(final String field) {
        return aliasFromFieldHash.containsKey(field);
    }

    /**
     * Will return the field name given an alias.
     * @param fieldOrAlias the field
     * @return the field name given an alias
     * @throws ParseException if the field is an ambiguous field
     */
    public String getFieldFromAliasOrField(final String fieldOrAlias) throws ParseException {
        if (!isAmbiguous(fieldOrAlias)) {
            String field = fieldFromAliasHash.get(fieldOrAlias);
            if (field == null) {
                return fieldOrAlias;
            } else {
                return field;
            }
        } else {
            throw new ParseException("Ambiguous field: " + fieldOrAlias);
        }
    }

    /**
     * Will return true if there are no alias used.
     * @return true if there are no alias used
     */
    public boolean isEmpty() {
        return aliasFromFieldHash.isEmpty();
    }

    private boolean isAmbiguous(final String fieldOrAlias) {
        String aliasFromField = aliasFromFieldHash.get(fieldOrAlias);
        String fieldFromAlias = fieldFromAliasHash.get(fieldOrAlias);
        return aliasFromField != null && fieldFromAlias != null && !aliasFromField.equals(fieldFromAlias);
    }

    /**
     * Combine two alias holders.
     * @param aliasHolder the {@link AliasHolder}
     */
    public void combine(final AliasHolder aliasHolder) {
        aliasFromFieldHash.putAll(aliasHolder.aliasFromFieldHash);
        fieldFromAliasHash.putAll(aliasHolder.fieldFromAliasHash);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy