private void addUnmatchedElements(List<EffigyFieldPair> fieldPairs, BitSet pairedFromIndices, BitSet pairedToIndices) { for(int i=0;i<from.getFields().size();i++) { if(!pairedFromIndices.get(i)) fieldPairs.add(new EffigyFieldPair(from.getFields().get(i), null, i, -1)); } for(int i=0;i<to.getFields().size();i++) { if(!pairedToIndices.get(i)) fieldPairs.add(new EffigyFieldPair(null, to.getFields().get(i), -1, i)); } }
@Override public List<EffigyFieldPair> pair() { List<EffigyFieldPair> pairs = new ArrayList<EffigyFieldPair>(); if(from != null) { for(int i=0;i<from.getFields().size();i++) { pairs.add(new EffigyFieldPair(from.getFields().get(i), null, i, -1)); } } else if(to != null) { for(int i=0;i<to.getFields().size();i++) { pairs.add(new EffigyFieldPair(null, to.getFields().get(i), -1, i)); } } return pairs; }
public Field getField(HollowEffigy effigy, String fieldName) { for(Field field : effigy.getFields()) { if(field.getFieldName().equals(fieldName)) return field; } return null; }
@Override protected HollowEffigy getComparisonEffigy(HollowEffigy effigy) { return (HollowEffigy) effigy.getFields().get(0).getValue(); }
public long[] pair(final BitSet pairedFromIndices, final BitSet pairedToIndices, final int maxDiff) { final long diffMatrixElements[] = new long[from.getFields().size() * to.getFields().size()]; int matrixElementIdx = 0; for(int i=0;i<from.getFields().size();i++) { final int fromIdx = i; if(pairedFromIndices.get(fromIdx)) { for(int j=0;j<to.getFields().size();j++) { diffMatrixElements[matrixElementIdx++] = getDiffMatrixElement(fromIdx, j, MAX_MATRIX_ELEMENT_FIELD_VALUE); } } else { HollowEffigy fromElement = getComparisonEffigy((HollowEffigy) from.getFields().get(fromIdx).getValue()); HollowEffigyDiffRecord diffRecord = new HollowEffigyDiffRecord(fromElement); for(int j=0;j<to.getFields().size();j++) { if(pairedToIndices.get(j)) { diffMatrixElements[matrixElementIdx++] = getDiffMatrixElement(fromIdx, j, MAX_MATRIX_ELEMENT_FIELD_VALUE); } else { HollowEffigy toElement = getComparisonEffigy((HollowEffigy) to.getFields().get(j).getValue()); int diffScore = diffRecord.calculateDiff(toElement, maxDiff); diffMatrixElements[matrixElementIdx++] = getDiffMatrixElement(fromIdx, j, diffScore); } } } } return diffMatrixElements; }
List<EffigyFieldPair> fieldPairs = new ArrayList<EffigyFieldPair>(); BitSet pairedFromIndices = new BitSet(from.getFields().size()); BitSet pairedToIndices = new BitSet(to.getFields().size()); int maxPairs = Math.min(from.getFields().size(), to.getFields().size()); continue; fieldPairs.add(new EffigyFieldPair(from.getFields().get(fromIndex), to.getFields().get(toIndex), fromIndex, toIndex)); pairedFromIndices.set(fromIndex); pairedToIndices.set(toIndex);
@Override public List<EffigyFieldPair> pair() { List<EffigyFieldPair> fieldPairs = new ArrayList<EffigyFieldPair>(); for(Field fromField : from.getFields()) { fieldPairs.add(new EffigyFieldPair(fromField, getField(to, fromField.getFieldName()), -1, -1)); } for(Field toField : to.getFields()) { Field fromField = getField(from, toField.getFieldName()); if(fromField == null) fieldPairs.add(new EffigyFieldPair(null, toField, -1, -1)); } return fieldPairs; }
private void traverseOriginalFields(HollowEffigy effigy) { for(Field field : effigy.getFields()) { if(field.isLeafNode()) { FieldDiffCount fieldCount = map.get(field); if(fieldCount == null) { fieldCount = new FieldDiffCount(); map.put(field, fieldCount); } fieldCount.incrementOriginalCount(); totalOriginalFieldCount++; } else { traverseOriginalFields((HollowEffigy) field.getValue()); } } }
if(from.getFields().size() == 0) { for(int i=0;i<to.getFields().size();i++) fieldPairs.add(new EffigyFieldPair(null, to.getFields().get(i), -1, i)); return fieldPairs; } else if(to.getFields().size() == 0) { for(int i=0;i<from.getFields().size();i++) fieldPairs.add(new EffigyFieldPair(from.getFields().get(i), null, i, -1)); int hashedToFieldIndexes[] = new int[HashCodes.hashTableSize(to.getFields().size())]; Arrays.fill(hashedToFieldIndexes, -1); for(int i=0;i<to.getFields().size();i++) { HollowEffigy comparisonEffigy = getComparisonEffigy((HollowEffigy) to.getFields().get(i).getValue()); int hash = hashCode(comparisonEffigy, toFieldPathIndexes); hash &= hashedToFieldIndexes.length-1; BitSet matchedToElements = new BitSet(to.getFields().size()); BitSet matchedFromElements = new BitSet(from.getFields().size()); for(int i=0;i<from.getFields().size();i++) { HollowEffigy fromEffigy = getComparisonEffigy((HollowEffigy) from.getFields().get(i).getValue()); int hash = hashCode(fromEffigy, fromFieldPathIndexes); hash &= hashedToFieldIndexes.length-1; int toIdx = hashedToFieldIndexes[hash]; if(!matchedToElements.get(toIdx)) { HollowEffigy toEffigy = getComparisonEffigy((HollowEffigy) to.getFields().get(toIdx).getValue()); if(recordsMatch(fromEffigy, toEffigy, fromFieldPathIndexes, toFieldPathIndexes)) { fieldPairs.add(new EffigyFieldPair(from.getFields().get(i), to.getFields().get(toIdx), i, toIdx));
public void traverseComparisonFields(HollowEffigy comparison, int maxDiff) { for(Field field : comparison.getFields()) { if(field.isLeafNode()) { FieldDiffCount fieldCount = map.get(field); if(fieldCount == null) { if(simDiffCount.diffCount+1 >= maxDiff) { simDiffCount.diffCount++; return; } fieldCount = new FieldDiffCount(); map.put(field, fieldCount); } if(fieldCount.incrementComparisonCount(runId)) { if(++simDiffCount.diffCount >= maxDiff) return; } else { simDiffCount.simCount++; } } else { traverseComparisonFields((HollowEffigy) field.getValue(), maxDiff); if(simDiffCount.diffCount >= maxDiff) return; } } }
private void assertPair(EffigyFieldPair pair, String expectedFromField1, String expectedToField1) { if(expectedFromField1 != null) { HollowEffigy element = (HollowEffigy) pair.getFrom().getValue(); Assert.assertEquals(expectedFromField1, element.getFields().get(0).getValue()); } else { Assert.assertNull(pair.getFrom()); } if(expectedToField1 != null) { HollowEffigy element = (HollowEffigy) pair.getTo().getValue(); Assert.assertEquals(expectedToField1, element.getFields().get(0).getValue()); } else { Assert.assertNull(pair.getTo()); } }