/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002, 2015 Oracle and/or its affiliates. All rights reserved. * */ package com.sleepycat.persist.impl; /** * Interface implemented by a persistent class via bytecode enhancement. * * <p>See {@link Accessor} for method documentation. {@link EnhancedAccessor} * implements Accessor and forwards all calls to methods in the Enhanced * class.</p> * * <p>Each class that implements this interface (including its subclasses and * superclasses except for Object) must also implement a static block that * registers a prototype instance by calling * EnhancedAccessor.registerPrototype. Other instances are created from the * protype instance using {@link #bdbNewInstance}.</p> * * <pre>static { EnhancedAccessor.registerPrototype(new Xxx()); }</pre> * * <p>An example of the generated code for reading and writing fields is shown * below.</p> * * <pre> * private int f1; * private String f2; * private MyClass f3; * * public void bdbWriteNonKeyFields(EntityOutput output) { * * super.bdbWriteNonKeyFields(output); * * output.writeInt(f1); * output.writeObject(f2, null); * output.writeObject(f3, null); * } * * public void bdbReadNonKeyFields(EntityInput input, * int startField, * int endField, * int superLevel) { * * if (superLevel != 0) { * super.bdbReadNonKeyFields(input, startField, endField, * superLevel - 1); * } * if (superLevel <= 0) { * switch (startField) { * case 0: * f1 = input.readInt(); * if (endField == 0) break; * case 1: * f2 = (String) input.readObject(); * if (endField == 1) break; * case 2: * f3 = (MyClass) input.readObject(); * } * } * } * </pre> * * @author Mark Hayes */ public interface Enhanced { /** * @see Accessor#newInstance */ Object bdbNewInstance(); /** * @see Accessor#newArray */ Object bdbNewArray(int len); /** * Calls the super class method if this class does not contain the primary * key field. * * @see Accessor#isPriKeyFieldNullOrZero */ boolean bdbIsPriKeyFieldNullOrZero(); /** * Calls the super class method if this class does not contain the primary * key field. * * @see Accessor#writePriKeyField */ void bdbWritePriKeyField(EntityOutput output, Format format) throws RefreshException; /** * Calls the super class method if this class does not contain the primary * key field. * * @see Accessor#readPriKeyField */ void bdbReadPriKeyField(EntityInput input, Format format) throws RefreshException; /** * @see Accessor#writeSecKeyFields */ void bdbWriteSecKeyFields(EntityOutput output) throws RefreshException; /** * @see Accessor#readSecKeyFields */ void bdbReadSecKeyFields(EntityInput input, int startField, int endField, int superLevel) throws RefreshException; /** * @see Accessor#writeNonKeyFields */ void bdbWriteNonKeyFields(EntityOutput output) throws RefreshException; /** * @see Accessor#readNonKeyFields */ void bdbReadNonKeyFields(EntityInput input, int startField, int endField, int superLevel) throws RefreshException; /** * @see Accessor#writeCompositeKeyFields */ void bdbWriteCompositeKeyFields(EntityOutput output, Format[] formats) throws RefreshException; /** * @see Accessor#readCompositeKeyFields */ void bdbReadCompositeKeyFields(EntityInput input, Format[] formats) throws RefreshException; /** * @see Accessor#getField */ Object bdbGetField(Object o, int field, int superLevel, boolean isSecField); /** * @see Accessor#setField */ void bdbSetField(Object o, int field, int superLevel, boolean isSecField, Object value); /** * @see Accessor#setPriField */ void bdbSetPriField(Object o, Object value); }