public static String joinRecordsIntoString( long startRecordId, List<LegacyDynamicRecord> legacyDynamicRecords) { Map<Long, LegacyDynamicRecord> recordsMap = new HashMap<Long, LegacyDynamicRecord>(); long recordToFind = startRecordId; for (LegacyDynamicRecord record : legacyDynamicRecords) { recordsMap.put(record.getId(), record); } List<char[]> charList = new LinkedList<char[]>(); while (recordToFind != Record.NO_NEXT_BLOCK.intValue()) { LegacyDynamicRecord record = recordsMap.get(recordToFind); if (!record.isCharData()) { ByteBuffer buf = ByteBuffer.wrap(record.getData()); char[] chars = new char[record.getData().length / 2]; buf.asCharBuffer().get(chars); charList.add(chars); } else { charList.add(record.getDataAsChar()); } recordToFind = record.getNextBlock(); } StringBuffer buf = new StringBuffer(); for (char[] str : charList) { buf.append(str); } return buf.toString(); }
public Object getArrayFor(LegacyPropertyRecord propertyRecord) { long recordToFind = propertyRecord.getPropBlock(); Map<Long, LegacyDynamicRecord> recordsMap = new HashMap<Long, LegacyDynamicRecord>(); for (LegacyDynamicRecord record : readDynamicRecords(propertyRecord)) { recordsMap.put(record.getId(), record); } List<byte[]> byteList = new LinkedList<byte[]>(); int totalSize = 0; while (recordToFind != Record.NO_NEXT_BLOCK.intValue()) { LegacyDynamicRecord record = recordsMap.get(recordToFind); if (!record.isCharData()) { ByteBuffer buf = ByteBuffer.wrap(record.getData()); byte[] bytes = new byte[record.getData().length]; totalSize += bytes.length; buf.get(bytes); byteList.add(bytes); } else { throw new InvalidRecordException("Expected byte data on record " + record); } recordToFind = record.getNextBlock(); } byte[] bArray = new byte[totalSize]; int offset = 0; for (byte[] currentArray : byteList) { System.arraycopy(currentArray, 0, bArray, offset, currentArray.length); offset += currentArray.length; } return arrayPropertyStore.getRightArray(bArray); }