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

org.datanucleus.store.rdbms.identifier.JPOXIdentifierFactory Maven / Gradle / Ivy

There is a newer version: 6.0.7
Show newest version
package org.datanucleus.store.rdbms.identifier;

import java.util.Map;

import org.datanucleus.ClassLoaderResolver;
import org.datanucleus.store.rdbms.adapter.DatastoreAdapter;

public class JPOXIdentifierFactory extends DNIdentifierFactory
{

    public JPOXIdentifierFactory(DatastoreAdapter dba, ClassLoaderResolver clr, Map props)
    {
        super(dba, clr, props);
        // TODO Auto-generated constructor stub
    }

    /** Range to use for creating hased ending when truncating identifiers. */
    private static final int HASH_RANGE = Character.MAX_RADIX * Character.MAX_RADIX / 2;
    
    /**
     * Method to truncate an identifier to fit within the specified identifier length.
     * If truncation is necessary will use a 2 char hashcode (at the end) to attempt to create uniqueness.
     * @param identifier The identifier
     * @param length The (max) length to use
     * @return The truncated identifier.
     */
    protected String truncate(String identifier, int length)
    {
        if (identifier.length() > length)
        {
            // Truncation is necessary so cut down to "maxlength-2" and add 2 char hashcode
            int tailIndex = length - 2;
            int tailHash = identifier.substring(tailIndex).hashCode();

            // Scale the hash code down to the range 0 - 1295
            if (tailHash < 0)
            {
                tailHash = tailHash % HASH_RANGE + (HASH_RANGE - 1);
            }
            else
            {
                tailHash = tailHash % HASH_RANGE + HASH_RANGE;
            }

            String suffix = "0" + Integer.toString(tailHash, Character.MAX_RADIX);

            return identifier.substring(0, tailIndex) + suffix.substring(suffix.length() - 2);
        }
        return identifier;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy