public JDBCCMRFieldBridge getCMRFieldByName(String name) { for (int i = 0; i < cmrFields.length; ++i) { JDBCCMRFieldBridge cmrField = cmrFields[i]; if (cmrField.getFieldName().equals(name)) return cmrField; } return null; }
public void cascadeDelete(CmpEntityBeanContext ctx, Map oldRelations) throws RemoveException, RemoteException { for (int i = 0; i < cmrFields.length; ++i) { JDBCCMRFieldBridge cmrField = cmrFields[i]; Object value = oldRelations.get(cmrField); if (value != null) cmrField.cascadeDelete(ctx, (List) value); } }
public void initInstance(CmpEntityBeanContext ctx) { for (int i = 0; i < tableFields.length; ++i) tableFields[i].initInstance(ctx); // for(int i = 0; i < primaryKeyFields.length; ++i) // primaryKeyFields[i].initInstance(ctx); // for(int i = 0; i < cmpFields.length; ++i) // cmpFields[i].initInstance(ctx); for (int i = 0; i < cmrFields.length; ++i) { JDBCCMRFieldBridge cmrField = cmrFields[i]; cmrField.initInstance(ctx); } }
private void destroyRelations(Object oldRelatedId, CmpEntityBeanContext ctx) { JDBCCMRFieldBridge relatedCMRField = (JDBCCMRFieldBridge) cmrField.getRelatedCMRField(); relatedCMRField.removeRelatedPKWaitingForMyPK(oldRelatedId, ctx.getPrimaryKey()); try { if (cmrField.isForeignKeyValid(oldRelatedId)) { cmrField.destroyRelationLinks(ctx, oldRelatedId, true, false); } } catch (Exception e) { // no such object } }
/** * Going down the chain current related id is calculated and stored in oldRelatedId. When the * next link is originator, the flow is going backward: - field state is updated with new value; * - new related id is calculated; - old relationship is destroyed (if there is one); - new * relationship is established (if it is valid). * * @param originator ChainLink that started execution. * @param ctx EnterpriseEntityContext of the entity. * @param fieldState field's state. * @param newValue new field value. */ public void doExecute( ChainLink originator, CmpEntityBeanContext ctx, FieldState fieldState, Object newValue) { // get old related id Object oldRelatedId = cmrField.getRelatedIdFromContext(ctx); // invoke down the cmrChain if (originator != getNextLink()) { getNextLink().doExecute(originator, ctx, fieldState, newValue); } // update field state fieldState.setValue(newValue); // get new related id Object newRelatedId = cmrField.getRelatedIdFromContext(ctx); // destroy old relationship if (oldRelatedId != null) destroyRelations(oldRelatedId, ctx); // establish new relationship if (newRelatedId != null) createRelations(newRelatedId, ctx); }
private boolean[] loadGroupMask(String groupName, boolean[] defaultGroup) { List<String> fieldNames = metadata.getLoadGroup(groupName); boolean[] group = new boolean[tableFields.length]; if (defaultGroup != null) System.arraycopy(defaultGroup, 0, group, 0, group.length); for (String fieldName : fieldNames) { JDBCFieldBridge field = (JDBCFieldBridge) getFieldByName(fieldName); if (field == null) throw MESSAGES.fieldNotFound(fieldName, getEntityName()); if (field instanceof JDBCCMRFieldBridge) { JDBCCMRFieldBridge cmrField = (JDBCCMRFieldBridge) field; if (cmrField.hasForeignKey()) { JDBCCMPFieldBridge[] fkFields = (JDBCCMPFieldBridge[]) cmrField.getForeignKeyFields(); for (int i = 0; i < fkFields.length; ++i) { group[fkFields[i].getTableIndex()] = true; } } else { throw MESSAGES.onlyCmrFieldsWithFkInLoadGroup(fieldName); } } else { group[((JDBCCMPFieldBridge) field).getTableIndex()] = true; } } return group; }
private void createRelations(Object newRelatedId, CmpEntityBeanContext ctx) { try { if (cmrField.isForeignKeyValid(newRelatedId)) { cmrField.createRelationLinks(ctx, newRelatedId, false); } else { // set foreign key to a new value cmrField.setForeignKey(ctx, newRelatedId); // put calculated relatedId to the waiting list if (ctx.getPrimaryKey() != null) { JDBCCMRFieldBridge relatedCMRField = (JDBCCMRFieldBridge) cmrField.getRelatedCMRField(); relatedCMRField.addRelatedPKWaitingForMyPK(newRelatedId, ctx.getPrimaryKey()); } } } catch (Exception e) { // no such object } }