package org.javers.core.metamodel.object;
import org.javers.common.exception.JaversException;
import org.javers.common.reflection.ReflectionUtil;
import org.javers.core.metamodel.type.EntityType;
import static org.javers.common.validation.Validate.argumentsAreNotNull;
/**
* Entity instance global identifier, consists of Entity reference and cdoId
*
* @author bartosz walacik
*/
public class InstanceId extends GlobalId {
private final Object cdoId;
InstanceId(String typeName, Object cdoId) {
super(typeName);
argumentsAreNotNull(cdoId);
this.cdoId = cdoId;
}
/**
* @throws JaversException ENTITY_INSTANCE_WITH_NULL_ID
* @throws JaversException NOT_INSTANCE_OF
*/
public static InstanceId createFromInstance(Object instance, EntityType entity){
return new InstanceId(entity.getName(), entity.getIdOf(instance));
}
/**
* Identifier of (client's) Entity <b>instance</b>, should be unique in Entity scope.
* For example database primary key or any domain identifier like user.login
*/
public Object getCdoId() {
return cdoId;
}
public String value() {
return getTypeName()+"/"+getCdoIdAsString();
}
private String getCdoIdAsString(){
return ReflectionUtil.reflectiveToString(cdoId);
}
}