File: dpl_exampleinventoryread.html

package info (click to toggle)
db5.3 5.3.28%2Bdfsg1-0.8
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 158,400 kB
  • sloc: ansic: 448,406; java: 111,824; tcl: 80,544; sh: 44,326; cs: 33,697; cpp: 21,604; perl: 14,557; xml: 10,799; makefile: 4,077; javascript: 1,998; yacc: 1,003; awk: 965; sql: 801; erlang: 342; python: 216; php: 24; asm: 14
file content (271 lines) | stat: -rw-r--r-- 11,322 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>ExampleInventoryRead.java</title>
    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
    <link rel="start" href="index.html" title="Getting Started with Berkeley DB" />
    <link rel="up" href="dpl_example.html" title="Chapter 6. A DPL Example" />
    <link rel="prev" href="dpl_exampledatabaseput.html" title="ExampleDatabasePut.java" />
    <link rel="next" href="baseapi.html" title="Part II. Programming with the Base API" />
  </head>
  <body>
    <div xmlns="" class="navheader">
      <div class="libver">
        <p>Library Version 11.2.5.3</p>
      </div>
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">ExampleInventoryRead.java</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="dpl_exampledatabaseput.html">Prev</a> </td>
          <th width="60%" align="center">Chapter 6. A DPL Example</th>
          <td width="20%" align="right"> <a accesskey="n" href="baseapi.html">Next</a></td>
        </tr>
      </table>
      <hr />
    </div>
    <div class="sect1" lang="en" xml:lang="en">
      <div class="titlepage">
        <div>
          <div>
            <h2 class="title" style="clear: both"><a id="dpl_exampleinventoryread"></a>ExampleInventoryRead.java</h2>
          </div>
        </div>
      </div>
      <p>
                    <code class="classname">ExampleInventoryRead</code>
                    retrieves
                    inventory information from our entity store and
                    displays it. When it displays each inventory item, it
                    also displays the related vendor contact information.
            </p>
      <p>
                    <code class="classname">ExampleInventoryRead</code>
                    can do one of two things. If you provide no search
                    criteria, it displays all of the inventory items in the
                    store. If you provide an item name (using the
                    <code class="literal">-s</code> command line switch), then just
                    those inventory items using that name are displayed.
            </p>
      <p>
                    The beginning of our example is almost identical to our
                    <code class="classname">ExampleDatabasePut</code>
                    example program. We
                    repeat that example code here for the sake of
                    completeness. For a complete walk-through of it, see
                    the previous section (<a class="xref" href="dpl_exampledatabaseput.html" title="ExampleDatabasePut.java">ExampleDatabasePut.java</a>).
            </p>
      <pre class="programlisting">package persist.gettingStarted;

import java.io.File;
import java.io.IOException;

import com.sleepycat.db.DatabaseException;
import com.sleepycat.persist.EntityCursor;

public class ExampleInventoryRead {

    private static File myDbEnvPath =
        new File("/tmp/JEDB");

    private DataAccessor da;

    // Encapsulates the database environment.
    private static MyDbEnv myDbEnv = new MyDbEnv();

    // The item to locate if the -s switch is used
    private static String locateItem;

    private static void usage() {
        System.out.println("ExampleInventoryRead [-h &lt;env directory&gt;]" +
                           "[-s &lt;item to locate&gt;]");
        System.exit(-1);
    }

    public static void main(String args[]) {
        ExampleInventoryRead eir = new ExampleInventoryRead();
        try {
            eir.run(args);
        } catch (DatabaseException dbe) {
            System.err.println("ExampleInventoryRead: " + dbe.toString());
            dbe.printStackTrace();
        } finally {
            myDbEnv.close();
        }
        System.out.println("All done.");
    }

    private void run(String args[])
        throws DatabaseException {
        // Parse the arguments list
        parseArgs(args);

        myDbEnv.setup(myDbEnvPath, // path to the environment home
                      true);       // is this environment read-only?

        // Open the data accessor. This is used to retrieve
        // persistent objects.
        da = new DataAccessor(myDbEnv.getEntityStore());

        // If a item to locate is provided on the command line,
        // show just the inventory items using the provided name.
        // Otherwise, show everything in the inventory.
        if (locateItem != null) {
            showItem();
        } else {
            showAllInventory();
        }
    } </pre>
      <p>
            The first method that we provide is used to show inventory
            items related to a given inventory name. This method is called
            only if an inventory name is passed to
            <code class="classname">ExampleInventoryRead</code>
            via the <code class="literal">-s</code> option. Given the sample data
            that we provide with this example, each matching inventory name
            will result in the display of three inventory objects.
    </p>
      <p>
            To display these objects we use the
            <code class="classname">Inventory</code> class'
            <code class="literal">inventoryByName</code> secondary index to retrieve
            an <code class="classname">EntityCursor</code>, and then we iterate
            over the resulting objects using the cursor.
    </p>
      <p>
            Notice that this method calls
            <code class="methodname">displayInventoryRecord()</code>
            to display each individual object. We show this
            method a little later in the example.
    </p>
      <pre class="programlisting">    // Shows all the inventory items that exist for a given
    // inventory name.
    private void showItem() throws DatabaseException {

        // Use the inventory name secondary key to retrieve
        // these objects.
        EntityCursor&lt;Inventory&gt; items =
            da.inventoryByName.subIndex(locateItem).entities();
        try {
            for (Inventory item : items) {
                displayInventoryRecord(item);
            }
        } finally {
            items.close();
        }
    } </pre>
      <p>
            Next we implement <code class="methodname">showAllInventory()</code>,
            which shows all of the <code class="classname">Inventory</code>
            objects in the store.  To do this, we
            obtain an <code class="classname">EntityCursor</code>
            from the <code class="classname">Inventory</code> class'
            primary index and, again, we iterate using that cursor. 
     </p>
      <pre class="programlisting">    // Displays all the inventory items in the store
    private void showAllInventory()
        throws DatabaseException {

        // Get a cursor that will walk every
        // inventory object in the store.
        EntityCursor&lt;Inventory&gt; items =
            da.inventoryBySku.entities();

        try {
            for (Inventory item : items) {
                displayInventoryRecord(item);
            }
        } finally {
            items.close();
        }
    } </pre>
      <p>
                Now we implement
                <code class="methodname">displayInventoryRecord()</code>. This
                uses the getter methods on the <code class="classname">Inventory</code> 
                class to obtain the information that we want to display.
                The only thing interesting about this method is that we
                obtain <code class="classname">Vendor</code> objects within.
                The vendor objects are retrieved <code class="classname">Vendor</code> 
                objects using their primary index. We get the key
                for the retrieval from the <code class="classname">Inventory</code>
                object that we are displaying at the time.
            </p>
      <pre class="programlisting">    private void displayInventoryRecord(Inventory theInventory)
            throws DatabaseException {

            System.out.println(theInventory.getSku() + ":");
            System.out.println("\t " + theInventory.getItemName());
            System.out.println("\t " + theInventory.getCategory());
            System.out.println("\t " + theInventory.getVendor());
            System.out.println("\t\tNumber in stock: " +
                theInventory.getVendorInventory());
            System.out.println("\t\tPrice per unit:  " +
                theInventory.getVendorPrice());
            System.out.println("\t\tContact: ");

            Vendor theVendor =
                    da.vendorByName.get(theInventory.getVendor());
            assert theVendor != null;

            System.out.println("\t\t " + theVendor.getAddress());
            System.out.println("\t\t " + theVendor.getCity() + ", " +
                theVendor.getState() + " " + theVendor.getZipcode());
            System.out.println("\t\t Business Phone: " +
                theVendor.getBusinessPhoneNumber());
            System.out.println("\t\t Sales Rep: " +
                                theVendor.getRepName());
            System.out.println("\t\t            " +
                theVendor.getRepPhoneNumber());
    } </pre>
      <p>
                The last remaining parts of the example are used to parse
                the command line. This is not very
                interesting for our purposes here, but we show it anyway
                for the sake of completeness.
        </p>
      <pre class="programlisting">    protected ExampleInventoryRead() {}

    private static void parseArgs(String args[]) {
        for(int i = 0; i &lt; args.length; ++i) {
            if (args[i].startsWith("-")) {
                switch(args[i].charAt(1)) {
                    case 'h':
                        myDbEnvPath = new File(args[++i]);
                    break;
                    case 's':
                        locateItem = args[++i];
                    break;
                    default:
                        usage();
                }
            }
        }
    }
} </pre>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="dpl_exampledatabaseput.html">Prev</a> </td>
          <td width="20%" align="center">
            <a accesskey="u" href="dpl_example.html">Up</a>
          </td>
          <td width="40%" align="right"> <a accesskey="n" href="baseapi.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">ExampleDatabasePut.java </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> Part II. Programming with the Base API</td>
        </tr>
      </table>
    </div>
  </body>
</html>