001: /*-
002: * See the file LICENSE for redistribution information.
003: *
004: * Copyright (c) 2002,2008 Oracle. All rights reserved.
005: *
006: * $Id: Enhanced.java,v 1.9.2.3 2008/01/07 15:14:19 cwl Exp $
007: */
008:
009: package com.sleepycat.persist.impl;
010:
011: /**
012: * Interface implemented by a persistent class via bytecode enhancement.
013: *
014: * <p>See {@link Accessor} for method documentation. {@link EnhancedAccessor}
015: * implements Accessor and forwards all calls to methods in the Enhanced
016: * class.</p>
017: *
018: * <p>Each class that implements this interface (including its subclasses and
019: * superclasses except for Object) must also implement a static block that
020: * registers a prototype instance by calling
021: * EnhancedAccessor.registerPrototype. Other instances are created from the
022: * protype instance using {@link #bdbNewInstance}.</p>
023: *
024: * <pre>static { EnhancedAccessor.registerPrototype(new Xxx()); }</pre>
025: *
026: * <p>An example of the generated code for reading and writing fields is shown
027: * below.</p>
028: *
029: * <pre>
030: * private int f1;
031: * private String f2;
032: * private MyClass f3;
033: *
034: * public void bdbWriteNonKeyFields(EntityOutput output) {
035: *
036: * super.bdbWriteNonKeyFields(output);
037: *
038: * output.writeInt(f1);
039: * output.writeObject(f2, null);
040: * output.writeObject(f3, null);
041: * }
042: *
043: * public void bdbReadNonKeyFields(EntityInput input,
044: * int startField,
045: * int endField,
046: * int superLevel) {
047: *
048: * if (superLevel != 0) {
049: * super.bdbReadNonKeyFields(input, startField, endField,
050: * superLevel - 1);
051: * }
052: * if (superLevel <= 0) {
053: * switch (startField) {
054: * case 0:
055: * f1 = input.readInt();
056: * if (endField == 0) break;
057: * case 1:
058: * f2 = (String) input.readObject();
059: * if (endField == 1) break;
060: * case 2:
061: * f3 = (MyClass) input.readObject();
062: * }
063: * }
064: * }
065: * </pre>
066: *
067: * @author Mark Hayes
068: */
069: public interface Enhanced {
070:
071: /**
072: * @see Accessor#newInstance
073: */
074: Object bdbNewInstance();
075:
076: /**
077: * @see Accessor#newArray
078: */
079: Object bdbNewArray(int len);
080:
081: /**
082: * Calls the super class method if this class does not contain the primary
083: * key field.
084: *
085: * @see Accessor#isPriKeyFieldNullOrZero
086: */
087: boolean bdbIsPriKeyFieldNullOrZero();
088:
089: /**
090: * Calls the super class method if this class does not contain the primary
091: * key field.
092: *
093: * @see Accessor#writePriKeyField
094: */
095: void bdbWritePriKeyField(EntityOutput output, Format format);
096:
097: /**
098: * Calls the super class method if this class does not contain the primary
099: * key field.
100: *
101: * @see Accessor#readPriKeyField
102: */
103: void bdbReadPriKeyField(EntityInput input, Format format);
104:
105: /**
106: * @see Accessor#writeSecKeyFields
107: */
108: void bdbWriteSecKeyFields(EntityOutput output);
109:
110: /**
111: * @see Accessor#readSecKeyFields
112: */
113: void bdbReadSecKeyFields(EntityInput input, int startField,
114: int endField, int super Level);
115:
116: /**
117: * @see Accessor#writeNonKeyFields
118: */
119: void bdbWriteNonKeyFields(EntityOutput output);
120:
121: /**
122: * @see Accessor#readNonKeyFields
123: */
124: void bdbReadNonKeyFields(EntityInput input, int startField,
125: int endField, int super Level);
126:
127: /**
128: * @see Accessor#getField
129: */
130: Object bdbGetField(Object o, int field, int super Level,
131: boolean isSecField);
132:
133: /**
134: * @see Accessor#setField
135: */
136: void bdbSetField(Object o, int field, int super Level,
137: boolean isSecField, Object value);
138: }
|