1/*-
2 * See the file LICENSE for redistribution information.
3 *
4 * Copyright (c) 2002,2008 Oracle.  All rights reserved.
5 *
6 * $Id: SampleViews.java,v 12.7 2008/01/08 20:58:30 bostic Exp $
7 */
8
9package collections.ship.index;
10
11import com.sleepycat.bind.EntryBinding;
12import com.sleepycat.bind.serial.ClassCatalog;
13import com.sleepycat.bind.serial.SerialBinding;
14import com.sleepycat.collections.StoredEntrySet;
15import com.sleepycat.collections.StoredSortedMap;
16
17/**
18 * SampleViews defines the data bindings and collection views for the sample
19 * database.
20 *
21 * @author Mark Hayes
22 */
23public class SampleViews {
24
25    private StoredSortedMap partMap;
26    private StoredSortedMap supplierMap;
27    private StoredSortedMap shipmentMap;
28    private StoredSortedMap shipmentByPartMap;
29    private StoredSortedMap shipmentBySupplierMap;
30    private StoredSortedMap supplierByCityMap;
31
32    /**
33     * Create the data bindings and collection views.
34     */
35    public SampleViews(SampleDatabase db) {
36
37        // Create the data bindings.
38        // In this sample, the stored key and data entries are used directly
39        // rather than mapping them to separate objects. Therefore, no binding
40        // classes are defined here and the SerialBinding class is used.
41        //
42        ClassCatalog catalog = db.getClassCatalog();
43        EntryBinding partKeyBinding =
44            new SerialBinding(catalog, PartKey.class);
45        EntryBinding partDataBinding =
46            new SerialBinding(catalog, PartData.class);
47        EntryBinding supplierKeyBinding =
48            new SerialBinding(catalog, SupplierKey.class);
49        EntryBinding supplierDataBinding =
50            new SerialBinding(catalog, SupplierData.class);
51        EntryBinding shipmentKeyBinding =
52            new SerialBinding(catalog, ShipmentKey.class);
53        EntryBinding shipmentDataBinding =
54            new SerialBinding(catalog, ShipmentData.class);
55        EntryBinding cityKeyBinding =
56            new SerialBinding(catalog, String.class);
57
58        // Create map views for all stores and indices.
59        // StoredSortedMap is not used since the stores and indices are
60        // ordered by serialized key objects, which do not provide a very
61        // useful ordering.
62        //
63        partMap =
64            new StoredSortedMap(db.getPartDatabase(),
65                                partKeyBinding, partDataBinding, true);
66        supplierMap =
67            new StoredSortedMap(db.getSupplierDatabase(),
68                                supplierKeyBinding, supplierDataBinding, true);
69        shipmentMap =
70            new StoredSortedMap(db.getShipmentDatabase(),
71                                shipmentKeyBinding, shipmentDataBinding, true);
72        shipmentByPartMap =
73            new StoredSortedMap(db.getShipmentByPartDatabase(),
74                                partKeyBinding, shipmentDataBinding, true);
75        shipmentBySupplierMap =
76            new StoredSortedMap(db.getShipmentBySupplierDatabase(),
77                                supplierKeyBinding, shipmentDataBinding, true);
78        supplierByCityMap =
79            new StoredSortedMap(db.getSupplierByCityDatabase(),
80                                cityKeyBinding, supplierDataBinding, true);
81    }
82
83    // The views returned below can be accessed using the java.util.Map or
84    // java.util.Set interfaces, or using the StoredSortedMap and
85    // StoredEntrySet classes, which provide additional methods.  The entry
86    // sets could be obtained directly from the Map.entrySet() method, but
87    // convenience methods are provided here to return them in order to avoid
88    // down-casting elsewhere.
89
90    /**
91     * Return a map view of the part storage container.
92     */
93    public final StoredSortedMap getPartMap() {
94
95        return partMap;
96    }
97
98    /**
99     * Return a map view of the supplier storage container.
100     */
101    public final StoredSortedMap getSupplierMap() {
102
103        return supplierMap;
104    }
105
106    /**
107     * Return a map view of the shipment storage container.
108     */
109    public final StoredSortedMap getShipmentMap() {
110
111        return shipmentMap;
112    }
113
114    /**
115     * Return an entry set view of the part storage container.
116     */
117    public final StoredEntrySet getPartEntrySet() {
118
119        return (StoredEntrySet) partMap.entrySet();
120    }
121
122    /**
123     * Return an entry set view of the supplier storage container.
124     */
125    public final StoredEntrySet getSupplierEntrySet() {
126
127        return (StoredEntrySet) supplierMap.entrySet();
128    }
129
130    /**
131     * Return an entry set view of the shipment storage container.
132     */
133    public final StoredEntrySet getShipmentEntrySet() {
134
135        return (StoredEntrySet) shipmentMap.entrySet();
136    }
137
138    /**
139     * Return a map view of the shipment-by-part index.
140     */
141    public StoredSortedMap getShipmentByPartMap() {
142
143        return shipmentByPartMap;
144    }
145
146    /**
147     * Return a map view of the shipment-by-supplier index.
148     */
149    public StoredSortedMap getShipmentBySupplierMap() {
150
151        return shipmentBySupplierMap;
152    }
153
154    /**
155     * Return a map view of the supplier-by-city index.
156     */
157    public final StoredSortedMap getSupplierByCityMap() {
158
159        return supplierByCityMap;
160    }
161}
162