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

io.permazen.core.util.GeneratedIdCache Maven / Gradle / Ivy


/*
 * Copyright (C) 2015 Archie L. Cobbs. All rights reserved.
 */

package io.permazen.core.util;

import com.google.common.base.Preconditions;

import io.permazen.core.ObjId;
import io.permazen.core.Transaction;

import java.util.HashMap;

import javax.annotation.concurrent.GuardedBy;
import javax.annotation.concurrent.ThreadSafe;

/**
 * Cache for randomly generated object IDs based on unique strings.
 *
 * 

* Instances are thread safe. * * @see XMLObjectSerializer */ @ThreadSafe public class GeneratedIdCache { @GuardedBy("this") private final HashMap map = new HashMap<>(); /** * Generate an object ID for the given object type storage ID and string. * *

* If an {@link ObjId} has already been created for the specified {@code storageId} and {@code string} by this instance, * it will be returned. * Otherwise, a random {@link ObjId} for which no object exists in the specified {@link Transaction} is generated * and returned. * * @param tx transaction from which to allocate new object IDs * @param storageId object type storage ID * @param string unique string * @return unique, unallocated object ID corresponding to {@code storageId} and {@code string} * @throws IllegalArgumentException if {@code storageId} is invalid * @throws IllegalArgumentException if {@code tx} or {@code string} is null */ public synchronized ObjId getGeneratedId(Transaction tx, int storageId, String string) { Preconditions.checkArgument(tx != null, "null tx"); Preconditions.checkArgument(string != null, "null string"); final String key = "" + storageId + ":" + string; ObjId id = this.map.get(key); if (id == null) { id = tx.generateId(storageId); this.map.put(key, id); } return id; } /** * Clear this instance. */ public synchronized void clear() { this.map.clear(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy