/** ** Returns an OrderedMap of defined primary keys ** @return map of defined primary keys */ public Map<DBField, Object> getKeyMap() { Map<DBField, Object> keyMap = new OrderedMap<DBField, Object>(); // ordered key list if (this.dbFactory != null) { DBField keyField[] = this.dbFactory.getKeyFields(); for (int i = 0; i < keyField.length; i++) { String key = keyField[i].getName(); Object val = null; if (this.dbRecord != null) { // all key values will be defined val = this.dbRecord.getFieldValue(key); } else { // use parent keys DBFactoryTree parent = this.getParentNode(); for (; (parent != null) && (val == null); parent = parent.getParentNode()) { DBRecord dbr = parent.getDBRecord(); if (dbr == null) { // stop at the first undefined ancestor break; } else if (dbr.hasField(key)) { // try getting key value from ancestor DBField parFld = dbr.getField(key); if ((parFld != null) && parFld.isPrimaryKey()) { // primary key fields only val = dbr.getFieldValue(key); } } } } // save key DBField and value if (val != null) { keyMap.put(keyField[i], val); } else { keyMap.put(keyField[i], null); } } } return keyMap; }