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

org.hibernate.bytecode.enhance.internal.tracker.CompositeOwnerTracker Maven / Gradle / Ivy

There is a newer version: 6.5.0.CR2
Show newest version
/*
 * 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 .
 */
package org.hibernate.bytecode.enhance.internal.tracker;

import java.util.Arrays;

import org.hibernate.engine.spi.CompositeOwner;

/**
 * small low memory class to keep references to composite owners
 *
 * @author Ståle W. Pedersen
 */
public final class CompositeOwnerTracker {

	private String[] names;
	private CompositeOwner[] owners;

	public CompositeOwnerTracker() {
		names = new String[0];
		owners = new CompositeOwner[0];
	}

	public void add(String name, CompositeOwner owner) {
		for ( int i = 0; i < names.length; i++ ) {
			if ( names[i].equals( name ) ) {
				owners[i] = owner;
				return;
			}
		}
		names = Arrays.copyOf( names, names.length + 1 );
		names[names.length - 1] = name;
		owners = Arrays.copyOf( owners, owners.length + 1 );
		owners[owners.length - 1] = owner;
	}

	public void callOwner(String fieldName) {
		for ( int i = 0; i < owners.length ; i++ ) {
			if ( owners[i] != null ) {
				owners[i].$$_hibernate_trackChange( names[i] + fieldName );
			}
		}
	}

	public void removeOwner(String name) {
		for ( int i = 0; i < names.length; i++ ) {
			if ( name.equals( names[i] ) ) {

				final String[] newNames = Arrays.copyOf( names, names.length - 1 );
				System.arraycopy( names, i + 1, newNames, i, newNames.length - i);
				names = newNames;

				final CompositeOwner[] newOwners = Arrays.copyOf( owners, owners.length - 1 );
				System.arraycopy( owners, i + 1, newOwners, i, newOwners.length - i);
				owners = newOwners;

				return;
			}
		}
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy