@Override public void objectToEntry(Collection<RefsetMember<?, ?>> list, TupleOutput output) { List<RefsetMember<?, ?>> refsetMembersToWrite = new ArrayList<RefsetMember<?, ?>>(list.size()); for (RefsetMember<?, ?> refsetMember : list) { encountered.incrementAndGet(); assert refsetMember.primordialSapNid != Integer.MAX_VALUE; if (refsetMember.primordialSapNid > maxReadOnlyStatusAtPositionId) { if (refsetMember.getTime() != Long.MIN_VALUE) { refsetMembersToWrite.add(refsetMember); } } else { if (refsetMember.revisions != null) { for (RefsetRevision<?, ?> r : refsetMember.revisions) { if (r.getStatusAtPositionNid() > maxReadOnlyStatusAtPositionId && r.getTime() != Long.MIN_VALUE) { refsetMembersToWrite.add(refsetMember); break; } } } } } output.writeInt(refsetMembersToWrite.size()); // List size for (RefsetMember<?, ?> refsetMember : refsetMembersToWrite) { written.incrementAndGet(); output.writeInt(refsetMember.getTypeId()); refsetMember.writeComponentToBdb(output, maxReadOnlyStatusAtPositionId); } }
@Override public Collection<RefsetMember<?, ?>> entryToObject(TupleInput input) { assert enclosingConcept != null; int listSize = input.readInt(); Collection<RefsetMember<?, ?>> newRefsetMemberList; HashMap<Integer, RefsetMember<?, ?>> nidToRefsetMemberMap = null; if (refsetMemberList != null) { newRefsetMemberList = refsetMemberList; nidToRefsetMemberMap = new HashMap<Integer, RefsetMember<?, ?>>(listSize); for (RefsetMember<?, ?> component : refsetMemberList) { nidToRefsetMemberMap.put(component.nid, component); } } else { newRefsetMemberList = new ArrayList<RefsetMember<?, ?>>(listSize); } for (int index = 0; index < listSize; index++) { int typeNid = input.readInt(); // Can be removed in the future, here strictly for read/write conformance testing. try { REFSET_TYPES.nidToType(typeNid); } catch (IOException e1) { AceLog.getAppLog() .alertAndLogException(new Exception("For concept: " + enclosingConcept.toString(), e1)); AceLog.getAppLog().info("List prior to exception: " + newRefsetMemberList); return newRefsetMemberList; } input.mark(8); int nid = input.readInt(); input.reset(); RefsetMember<?, ?> refsetMember = (RefsetMember<?, ?>) Concept.componentsCRHM.get(nid); if (nidToRefsetMemberMap != null && nidToRefsetMemberMap.containsKey(nid)) { if (refsetMember == null) { refsetMember = nidToRefsetMemberMap.get(nid); RefsetMember<?, ?> oldMember = (RefsetMember<?, ?>) Concept.componentsCRHM.putIfAbsent(nid, refsetMember); if (oldMember != null) { refsetMember = oldMember; if (nidToRefsetMemberMap != null) { nidToRefsetMemberMap.put(nid, refsetMember); } } } refsetMember.readComponentFromBdb(input); } else { try { if (refsetMember == null) { refsetMember = factory.create(nid, typeNid, enclosingConcept, input); if (refsetMember.getTime() != Long.MIN_VALUE) { Concept.componentsCRHM.putIfAbsent(nid, refsetMember); RefsetMember<?, ?> oldMember = (RefsetMember<?, ?>) Concept.componentsCRHM.putIfAbsent(nid, refsetMember); if (oldMember != null) { refsetMember = oldMember; if (nidToRefsetMemberMap != null) { nidToRefsetMemberMap.put(nid, refsetMember); } } } else { AceLog.getAppLog() .warning( "\n########## Suppressing refset member:\n " + refsetMember + "\n##########"); } } else { refsetMember.merge(factory.create(nid, typeNid, enclosingConcept, input)); } } catch (IOException e) { throw new RuntimeException(e); } if (refsetMember.getTime() != Long.MIN_VALUE) { newRefsetMemberList.add(refsetMember); } } } return newRefsetMemberList; }