private HollowHistory createHistoryD()

in hollow-diff-ui/src/tools/java/com/netflix/hollow/diff/ui/HistoryUITest.java [250:365]


    private HollowHistory createHistoryD() throws IOException {
        HollowHistory history;
        HollowReadStateEngine readStateEngine;
        HollowBlobReader reader;
        HollowWriteStateEngine stateEngine;

        {
            schema = new HollowObjectSchema("TypeA", 2);
            stateEngine = new HollowWriteStateEngine();
            schema.addField("a1", HollowObjectSchema.FieldType.INT);
            schema.addField("a2", HollowObjectSchema.FieldType.INT);

            //attach schema to write state engine
            stateEngine.addTypeState(new HollowObjectTypeWriteState(schema));

            // v0
            stateEngine.addHeaderTag(CUSTOM_VERSION_TAG, "v0");
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 3, 13 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 4, 44 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 15, 150 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 16, 160 });
            stateEngine.prepareForWrite();
            ByteArrayOutputStream baos_v0 = new ByteArrayOutputStream();
            HollowBlobWriter writer = new HollowBlobWriter(stateEngine);
            writer.writeSnapshot(baos_v0);
            stateEngine.prepareForNextCycle();

            // v1
            stateEngine.addHeaderTag(CUSTOM_VERSION_TAG, "v1");
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 1, 1 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 2, 2 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 3, 3 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 4, 4 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 5, 5 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 6, 6 });
            stateEngine.prepareForWrite();
            ByteArrayOutputStream baos_v0_to_v1 = new ByteArrayOutputStream();
            ByteArrayOutputStream baos_v1_to_v0 = new ByteArrayOutputStream();
            ByteArrayOutputStream baos_v1 = new ByteArrayOutputStream();
            writer = new HollowBlobWriter(stateEngine);
            writer.writeSnapshot(baos_v1);
            writer.writeDelta(baos_v0_to_v1);
            writer.writeReverseDelta(baos_v1_to_v0);

            stateEngine.prepareForNextCycle();

            // v2
            stateEngine.addHeaderTag(CUSTOM_VERSION_TAG, "v2");
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 2, 7 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 3, 3 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 5, 8 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 6, 6 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 7, 9 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 8, 10 });
            stateEngine.prepareForWrite();
            ByteArrayOutputStream baos_v2 = new ByteArrayOutputStream();
            ByteArrayOutputStream baos_v1_to_v2 = new ByteArrayOutputStream();
            ByteArrayOutputStream baos_v2_to_v1 = new ByteArrayOutputStream();
            writer.writeSnapshot(baos_v2);
            writer.writeDelta(baos_v1_to_v2);
            writer.writeReverseDelta(baos_v2_to_v1);
            stateEngine.prepareForNextCycle();

            // v3
            stateEngine.addHeaderTag(CUSTOM_VERSION_TAG, "v3");
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 1, 1 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 2, 7 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 3, 11 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 6, 12 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 7, 13 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 8, 10 });
            stateEngine.prepareForWrite();
            ByteArrayOutputStream baos_v3 = new ByteArrayOutputStream();
            ByteArrayOutputStream baos_v2_to_v3 = new ByteArrayOutputStream();
            ByteArrayOutputStream baos_v3_to_v2 = new ByteArrayOutputStream();
            writer.writeSnapshot(baos_v3);
            writer.writeDelta(baos_v2_to_v3);
            writer.writeReverseDelta(baos_v3_to_v2);
            stateEngine.prepareForNextCycle();

            // v4
            stateEngine.addHeaderTag(CUSTOM_VERSION_TAG, "v4");
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 1, 18 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 2, 7 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 3, 19 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 6, 12 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 15, 13 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 8, 10 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 18, 10 });
            addRec(stateEngine, schema, new String[] { "a1", "a2" }, new int[] { 28, 90 });
            stateEngine.prepareForWrite();
            ByteArrayOutputStream baos_v4 = new ByteArrayOutputStream();
            ByteArrayOutputStream baos_v3_to_v4 = new ByteArrayOutputStream();
            ByteArrayOutputStream baos_v4_to_v3 = new ByteArrayOutputStream();
            writer.writeDelta(baos_v3_to_v4);
            writer.writeReverseDelta(baos_v4_to_v3);
            writer.writeSnapshot(baos_v4);

            // Build history
            readStateEngine = new HollowReadStateEngine();
            reader = new HollowBlobReader(readStateEngine);
            reader.readSnapshot(HollowBlobInput.serial(baos_v0.toByteArray()));
            history = new HollowHistory(readStateEngine, 0L, MAX_STATES);
            history.getKeyIndex().addTypeIndex("TypeA", "a1");
            reader.applyDelta(HollowBlobInput.serial(baos_v0_to_v1.toByteArray()));
            history.deltaOccurred(1L);
            reader.applyDelta(HollowBlobInput.serial(baos_v1_to_v2.toByteArray()));
            history.deltaOccurred(2L);
            reader.applyDelta(HollowBlobInput.serial(baos_v2_to_v3.toByteArray()));
            history.deltaOccurred(3L);
            reader.applyDelta(HollowBlobInput.serial(baos_v3_to_v4.toByteArray()));
            history.deltaOccurred(4L);
        }

        return history;
    }