List<HollowDiffViewRow> traverseEffigyToCreateViewRows(HollowDiffViewRow parent) { if(parent.getFieldPair().isLeafNode()) return Collections.emptyList(); Field fromField = parent.getFieldPair().getFrom(); Field toField = parent.getFieldPair().getTo(); HollowEffigy from = fromField == null ? null : (HollowEffigy) fromField.getValue(); HollowEffigy to = toField == null ? null : (HollowEffigy) toField.getValue(); List<EffigyFieldPair> pairs = HollowEffigyFieldPairer.pair(from, to, diffUI.getMatchHints()); List<HollowDiffViewRow> childRows = new ArrayList<HollowDiffViewRow>(); for(int i=0;i<pairs.size();i++) { EffigyFieldPair pair = pairs.get(i); int indentation = parent.getRowPath().length + 1; int rowPath[] = Arrays.copyOf(parent.getRowPath(), indentation); rowPath[rowPath.length - 1] = i; childRows.add(new HollowDiffViewRow(pair, rowPath, parent, this)); } return childRows; }
public HollowDiffViewRow getHollowDiffViewRows() { HollowEffigy fromEffigy, toEffigy; if(diffUI != null && diffUI.getCustomHollowEffigyFactory(typeName) != null) { CustomHollowEffigyFactory effigyFactory = diffUI.getCustomHollowEffigyFactory(typeName); synchronized(effigyFactory) { effigyFactory.setFromHollowRecord(fromDataAccess.getTypeDataAccess(typeName), fromOrdinal); effigyFactory.setToHollowRecord(toDataAccess.getTypeDataAccess(typeName), toOrdinal); effigyFactory.generateEffigies(); fromEffigy = effigyFactory.getFromEffigy(); toEffigy = effigyFactory.getToEffigy(); } } else { HollowEffigyFactory effigyFactory = new HollowEffigyFactory(); fromEffigy = fromOrdinal == -1 ? null : effigyFactory.effigy(fromDataAccess, typeName, fromOrdinal); toEffigy = toOrdinal == -1 ? null : effigyFactory.effigy(toDataAccess, typeName, toOrdinal); } HollowDiffViewRow rootRow = createRootRow(fromEffigy, toEffigy); traverseEffigyToCreateViewRows(rootRow); return rootRow; }