/** * Return the property value as an entity bean. */ public EntityBean getValueAsEntityBean(EntityBean owner) { return (EntityBean) getValue(owner); }
@Override public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException { EntityBean assocBean = (EntityBean) assocOne.getValue(bean); registerDeferred(request, bean, assocBean); }
@Override public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException { EntityBean assocBean = (EntityBean) assocOne.getValue(bean); importedId.bind(request, assocBean); } }
/** * JSON write property (non-recursive to other beans). */ @Override public void jsonWriteForInsert(SpiJsonWriter writeJson, EntityBean bean) throws IOException { if (!jsonSerialize) { return; } jsonWriteBean(writeJson, getValue(bean)); }
@Override public Object[] getIdValues(EntityBean bean) { Object val = embIdProperty.getValue(bean); Object[] bindvalues = new Object[props.length]; for (int i = 0; i < props.length; i++) { bindvalues[i] = props[i].getValue((EntityBean) val); } return bindvalues; }
/** * Convert from embedded bean to Map. */ @Override public Object getIdForJson(EntityBean bean) { EntityBean ebValue = (EntityBean) embIdProperty.getValue(bean); Map<String, Object> map = new LinkedHashMap<>(); for (BeanProperty prop : props) { map.put(prop.getName(), prop.getValue(ebValue)); } return map; }
@Override public void populate(EntityBean sourceBean, EntityBean embeddedId) { Object assocBean = assocOne.getValue(sourceBean); if (assocBean == null) { throw new NullPointerException("The assoc bean for " + assocOne + " is null?"); } Object value = foreignProp.getValue((EntityBean) assocBean); localProp.setValue(embeddedId, value); }
@Override public void dmlBind(BindableRequest bindRequest, EntityBean bean) throws SQLException { // get the embedded bean EntityBean embBean = (EntityBean) embProp.getValue(bean); if (embBean == null) { for (Bindable item : items) { item.dmlBind(bindRequest, null); } } else { //EntityBeanIntercept ebi = embBean._ebean_getIntercept(); for (Bindable item : items) { //if (ebi.isLoadedProperty(props[i].getPropertyIndex())) { item.dmlBind(bindRequest, embBean); //} } } } }
@Override public Object getCacheDataValue(EntityBean bean) { Object ap = getValue(bean); if (ap == null) { return null; } if (embedded) { return targetDescriptor.cacheEmbeddedBeanExtract((EntityBean) ap); } else { return targetDescriptor.getIdProperty().getCacheDataValue((EntityBean) ap); } }
@Override public void bindImport(SqlUpdate sql, EntityBean other) { EntityBean embeddedId = (EntityBean) foreignAssocOne.getValue(other); if (embeddedId == null) { throw new PersistenceException("Foreign Key value null?"); } for (ImportedIdSimple anImported : imported) { Object scalarValue = anImported.foreignProperty.getValue(embeddedId); sql.setNextParameter(scalarValue); } }
/** * For embedded bean set the owner and all properties to be loaded (recursively). */ void setAllLoadedEmbedded(EntityBean owner) { Object emb = getValue(owner); if (emb != null) { EntityBean embeddedBean = (EntityBean) emb; embeddedBean._ebean_getIntercept().setEmbeddedOwner(owner, propertyIndex); targetDescriptor.setAllLoaded(embeddedBean); } }
@Override public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException { EntityBean idValue = (EntityBean) embId.getValue(bean); for (BeanProperty prop : props) { Object value = prop.getValue(idValue); request.bind(value, prop); } request.setIdValue(idValue); }
@Override public int bind(int position, SqlUpdate update, EntityBean bean) { int pos = position; EntityBean embedded = (EntityBean) foreignAssocOne.getValue(bean); for (ImportedIdSimple anImported : imported) { if (anImported.owner.isUpdateable()) { Object scalarValue = anImported.foreignProperty.getValue(embedded); update.setParameter(pos++, scalarValue); } } return pos; }
@Override public void buildImport(IntersectionRow row, EntityBean other) { EntityBean embeddedId = (EntityBean) foreignAssocOne.getValue(other); if (embeddedId == null) { throw new PersistenceException("Foreign Key value null?"); } for (ImportedIdSimple anImported : imported) { Object scalarValue = anImported.foreignProperty.getValue(embeddedId); row.put(anImported.localDbColumn, scalarValue); } }
@Override public void diff(String prefix, Map<String, ValuePair> map, EntityBean newBean, EntityBean oldBean) { Object newEmb = (newBean == null) ? null : getValue(newBean); Object oldEmb = (oldBean == null) ? null : getValue(oldBean); if (newEmb == null && oldEmb == null) { return; } if (embedded) { prefix = (prefix == null) ? name : prefix + "." + name; BeanDescriptor<T> targetDescriptor = getTargetDescriptor(); targetDescriptor.diff(prefix, map, (EntityBean) newEmb, (EntityBean) oldEmb); } else { // we are only interested in the Id value newBean = (EntityBean) newEmb; oldBean = (EntityBean) oldEmb; BeanDescriptor<T> targetDescriptor = getTargetDescriptor(); BeanProperty idProperty = targetDescriptor.getIdProperty(); Object newId = (newBean == null) ? null : idProperty.getValue(newBean); Object oldId = (oldBean == null) ? null : idProperty.getValue(oldBean); if (newId != null || oldId != null) { prefix = (prefix == null) ? name : prefix + "." + name; idProperty.diffVal(prefix, map, newId, oldId); } } }
/** * Clear part of the L2 relationship cache for this property. */ void cacheDelete(boolean clear, EntityBean bean, CacheChangeSet changeSet) { if (cacheNotifyRelationship) { if (clear) { changeSet.addManyClear(targetDescriptor, relationshipProperty.getName()); } else { Object assocBean = getValue(bean); if (assocBean != null) { Object parentId = targetDescriptor.getId((EntityBean) assocBean); if (parentId != null) { changeSet.addManyRemove(targetDescriptor, relationshipProperty.getName(), parentId); } } } } }
/** * Delete the rows relating to the foreign keys. These deletions occur after * the parent bean has been deleted. */ void deleteCascade() { if (beanWithForeignKeys != null) { for (BeanPropertyAssocOne<?> prop : propList) { Object detailBean = prop.getValue(beanWithForeignKeys); // if bean exists with a unique id then delete it if (detailBean != null && prop.hasId((EntityBean) detailBean)) { if (deletePermanent) { server.deletePermanent(detailBean, request.getTransaction()); } else { server.delete(detailBean, request.getTransaction()); } } } } } }
@Override public Object bind(BindableRequest request, EntityBean bean) throws SQLException { Object embeddedId = (bean == null) ? null : foreignAssocOne.getValue(bean); boolean update = request.isUpdate(); if (embeddedId == null) { for (ImportedIdSimple anImported : imported) { if (anImported.isInclude(update)) { request.bind(null, anImported.foreignProperty); } } // return anything non-null to skip a derived relationship update return Object.class; } else { EntityBean embedded = (EntityBean) embeddedId; for (ImportedIdSimple anImported : imported) { if (anImported.isInclude(update)) { Object scalarValue = anImported.foreignProperty.getValue(embedded); request.bind(scalarValue, anImported.foreignProperty); } } return embedded; } }
/** * Delete any associated one beans. */ private void deleteAssocOne(PersistRequestBean<?> request) { DeleteMode deleteMode = request.deleteMode(); for (BeanPropertyAssocOne<?> prop : request.getBeanDescriptor().propertiesOneImportedDelete()) { if (deleteMode.isHard() || prop.isTargetSoftDelete()) { if (request.isLoadedProperty(prop)) { Object detailBean = prop.getValue(request.getEntityBean()); if (detailBean != null) { EntityBean detail = (EntityBean) detailBean; if (prop.hasId(detail)) { deleteRecurse(detail, request.getTransaction(), deleteMode); } } } } } }
Object detailBean = prop.getValue(parentBean); if (detailBean != null) { deleteRecurse((EntityBean) detailBean, t, deleteMode);