001: /*-
002: * See the file LICENSE for redistribution information.
003: *
004: * Copyright (c) 2002,2008 Oracle. All rights reserved.
005: *
006: * $Id: Shipment.java,v 1.17.2.2 2008/01/07 15:14:01 cwl Exp $
007: */
008:
009: package collections.ship.factory;
010:
011: import java.io.Serializable;
012:
013: import com.sleepycat.bind.tuple.MarshalledTupleKeyEntity;
014: import com.sleepycat.bind.tuple.TupleInput;
015: import com.sleepycat.bind.tuple.TupleOutput;
016:
017: /**
018: * A Shipment represents the combined key/data pair for a shipment entity.
019: *
020: * <p> In this sample, Shipment is bound to the stored key/data entry by
021: * implementing the MarshalledTupleKeyEntity interface. </p>
022: *
023: * <p> The binding is "tricky" in that it uses this class for both the stored
024: * data entry and the combined entity object. To do this, the key field(s)
025: * are transient and are set by the binding after the data object has been
026: * deserialized. This avoids the use of a ShipmentData class completely. </p>
027: *
028: * <p> Since this class is used directly for data storage, it must be
029: * Serializable. </p>
030: *
031: * @author Mark Hayes
032: */
033: public class Shipment implements Serializable, MarshalledTupleKeyEntity {
034:
035: static final String PART_KEY = "part";
036: static final String SUPPLIER_KEY = "supplier";
037:
038: private transient String partNumber;
039: private transient String supplierNumber;
040: private int quantity;
041:
042: public Shipment(String partNumber, String supplierNumber,
043: int quantity) {
044:
045: this .partNumber = partNumber;
046: this .supplierNumber = supplierNumber;
047: this .quantity = quantity;
048: }
049:
050: public final String getPartNumber() {
051:
052: return partNumber;
053: }
054:
055: public final String getSupplierNumber() {
056:
057: return supplierNumber;
058: }
059:
060: public final int getQuantity() {
061:
062: return quantity;
063: }
064:
065: public String toString() {
066:
067: return "[Shipment: part=" + partNumber + " supplier="
068: + supplierNumber + " quantity=" + quantity + ']';
069: }
070:
071: // --- MarshalledTupleKeyEntity implementation ---
072:
073: public void marshalPrimaryKey(TupleOutput keyOutput) {
074:
075: keyOutput.writeString(this .partNumber);
076: keyOutput.writeString(this .supplierNumber);
077: }
078:
079: public void unmarshalPrimaryKey(TupleInput keyInput) {
080:
081: this .partNumber = keyInput.readString();
082: this .supplierNumber = keyInput.readString();
083: }
084:
085: public boolean marshalSecondaryKey(String keyName,
086: TupleOutput keyOutput) {
087:
088: if (keyName.equals(PART_KEY)) {
089: keyOutput.writeString(this .partNumber);
090: return true;
091: } else if (keyName.equals(SUPPLIER_KEY)) {
092: keyOutput.writeString(this .supplierNumber);
093: return true;
094: } else {
095: throw new UnsupportedOperationException(keyName);
096: }
097: }
098:
099: public boolean nullifyForeignKey(String keyName) {
100:
101: throw new UnsupportedOperationException(keyName);
102: }
103: }
|