Files
ebean/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocOne.java
T
Roland PramlandRob Bygrave 808004165c Code cleanup (#1534)
* removed unused imports (no code change)

* Add missing @Override / @SupressWarnings (no code change)

* FIX: serialization warnings

* FIX: Access to static member
2018-11-10 20:07:01 +13:00

62 lines
1.7 KiB
Java

package io.ebeaninternal.server.persist;
import io.ebean.bean.EntityBean;
import io.ebeaninternal.server.deploy.BeanPropertyAssocOne;
import java.util.Objects;
/**
* Node for processing merge on ToOne properties.
*/
class MergeNodeAssocOne extends MergeNode {
private final BeanPropertyAssocOne<?> one;
MergeNodeAssocOne(String fullPath, BeanPropertyAssocOne<?> property) {
super(fullPath, property);
this.one = property;
}
@Override
public void merge(MergeRequest request) {
EntityBean entityBean = getEntityBean(request.getBean());
if (entityBean == null) {
checkOrphanRemoval(request);
} else {
Object beanId = targetDescriptor.getId(entityBean);
if (beanId == null) {
checkOrphanRemoval(request);
} else {
EntityBean outlineBean = getEntityBean(request.getOutline());
Object outlineId = (outlineBean == null) ? null : targetDescriptor.getId(outlineBean);
if (isUpdate(beanId, outlineId, request)) {
entityBean._ebean_getIntercept().setForceUpdate(true);
cascade(entityBean, outlineBean, request);
}
}
}
}
private void checkOrphanRemoval(MergeRequest request) {
if (one.isOrphanRemoval()) {
EntityBean outlineBean = getEntityBean(request.getOutline());
if (outlineBean != null) {
request.addDelete(outlineBean);
}
}
}
private boolean isUpdate(Object beanId, Object outlineId, MergeRequest request) {
return Objects.equals(beanId, outlineId)
|| !request.isClientGeneratedIds()
|| request.idExists(targetDescriptor.getBeanType(), beanId);
}
private EntityBean getEntityBean(Object bean) {
return (EntityBean) one.getVal(bean);
}
}