blob: 985987eae418e1e73e3753b937196debea6c1845 [file] [log] [blame]
/*-
* Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
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);
}
}