org.springframework.security.acls.model.ObjectIdentity Maven / Gradle / Ivy
/*
* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.security.acls.model;
import java.io.Serializable;
/**
* Represents the identity of an individual domain object instance.
*
*
* As implementations of ObjectIdentity are used as the key to represent domain
* objects in the ACL subsystem, it is essential that implementations provide methods so
* that object-equality rather than reference-equality can be relied upon reliably. In
* other words, the ACL subsystem can consider two ObjectIdentitys equal if
* identity1.equals(identity2), rather than reference-equality of
* identity1==identity2.
*
*
* @author Ben Alex
*/
public interface ObjectIdentity extends Serializable {
/**
* @param obj to be compared
* @return true if the objects are equal, false otherwise
* @see Object#equals(Object)
*/
@Override
boolean equals(Object obj);
/**
* Obtains the actual identifier. This identifier must not be reused to represent
* other domain objects with the same javaType.
*
*
* Because ACLs are largely immutable, it is strongly recommended to use a synthetic
* identifier (such as a database sequence number for the primary key). Do not use an
* identifier with business meaning, as that business meaning may change in the future
* such change will cascade to the ACL subsystem data.
*
* @return the identifier (unique within this type; never null)
*/
Serializable getIdentifier();
/**
* Obtains the "type" metadata for the domain object. This will often be a Java type
* name (an interface or a class) – traditionally it is the name of the domain
* object implementation class.
* @return the "type" of the domain object (never null).
*/
String getType();
/**
* @return a hash code representation of the ObjectIdentity
* @see Object#hashCode()
*/
@Override
int hashCode();
}