package com.evolveum.midpoint.repo.sql.util;
import com.evolveum.midpoint.repo.sql.data.common.RFocusPhoto;
import com.evolveum.midpoint.repo.sql.data.common.RObjectReference;
import com.evolveum.midpoint.repo.sql.data.common.any.RAExtValue;
import com.evolveum.midpoint.repo.sql.data.common.any.RAssignmentExtension;
import com.evolveum.midpoint.repo.sql.data.common.any.ROExtValue;
import com.evolveum.midpoint.repo.sql.data.common.container.RAssignmentReference;
import com.evolveum.midpoint.repo.sql.data.common.container.RContainerReference;
import org.hibernate.EmptyInterceptor;
/**
* @author lazyman
*/
public class EntityStateInterceptor extends EmptyInterceptor {
@Override
public Boolean isTransient(Object entity) {
if (entity instanceof EntityState) {
return isTransient((EntityState) entity);
}
if (entity instanceof RObjectReference) {
RObjectReference ref = (RObjectReference) entity;
return isTransient(ref.getOwner());
} else if (entity instanceof RAssignmentReference) {
RContainerReference ref = (RContainerReference) entity;
return isTransient(ref.getOwner());
} else if (entity instanceof RAssignmentExtension) {
RAssignmentExtension ext = (RAssignmentExtension) entity;
return isTransient(ext.getOwner());
} else if (entity instanceof RAExtValue) {
RAExtValue val = (RAExtValue) entity;
RAssignmentExtension ext = val.getAnyContainer();
return ext != null ? isTransient(ext.getOwner()) : null;
} else if (entity instanceof ROExtValue) {
ROExtValue val = (ROExtValue) entity;
return isTransient(val.getOwner());
} else if (entity instanceof RFocusPhoto) {
RFocusPhoto photo = (RFocusPhoto) entity;
return isTransient(photo.getOwner());
}
return null;
}
private Boolean isTransient(EntityState object) {
return isTransient(object, false);
}
private Boolean isTransient(EntityState object, boolean isObjectMyParent) {
Boolean trans = object != null ? object.isTransient() : null;
if (!isObjectMyParent) {
return trans;
}
if (Boolean.TRUE.equals(trans)) {
return true;
}
return null;
}
}