/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002, 2015 Oracle and/or its affiliates. All rights reserved. * */ package com.sleepycat.persist.impl; import com.sleepycat.persist.model.EntityModel; import com.sleepycat.persist.evolve.Converter; import com.sleepycat.persist.raw.RawObject; /** * Reader for invoking a class Converter mutation. * * @author Mark Hayes */ public class ConverterReader implements Reader { private static final long serialVersionUID = -305788321064984348L; private Converter converter; private transient Format oldFormat; ConverterReader(Converter converter) { this.converter = converter; } public void initializeReader(Catalog catalog, EntityModel model, int initVersion, Format oldFormat) { this.oldFormat = oldFormat; } public Object newInstance(EntityInput input, boolean rawAccess) throws RefreshException { /* Create the old format RawObject. */ return oldFormat.newInstance(input, true); } public void readPriKey(Object o, EntityInput input, boolean rawAccess) throws RefreshException { /* Read the old format RawObject's primary key. */ oldFormat.readPriKey(o, input, true); } public Object readObject(Object o, EntityInput input, boolean rawAccess) throws RefreshException { Catalog catalog = input.getCatalog(); /* Read the old format RawObject and convert it. */ boolean currentRawMode = input.setRawAccess(true); try { o = oldFormat.readObject(o, input, true); } finally { input.setRawAccess(currentRawMode); } o = converter.getConversion().convert(o); /* Convert the current format RawObject to a live Object. */ if (!rawAccess && o instanceof RawObject) { o = catalog.convertRawObject((RawObject) o, null); } return o; } public Accessor getAccessor(boolean rawAccess) { return oldFormat.getAccessor(rawAccess); } }