KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > mdr > persistence > jdbcimpl > JdbcSet


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19 package org.netbeans.mdr.persistence.jdbcimpl;
20
21 import org.netbeans.mdr.persistence.*;
22
23 import java.util.*;
24
25 /**
26  * JdbcSet is a read-only Set backed by queries.
27  *
28  * @author John V. Sichi
29  * @version $Id: JdbcSet.java,v 1.2 2006/06/30 20:56:10 jtulach Exp $
30  */

31 class JdbcSet extends AbstractSet
32 {
33     private final JdbcStorage storage;
34     private final Storage.EntryType entryType;
35     private final LazyPreparedStatement sqlIterator;
36     private final LazyPreparedStatement sqlSize;
37     private final LazyPreparedStatement sqlContains;
38
39     JdbcSet(
40         JdbcStorage storage,
41         Storage.EntryType entryType,
42         LazyPreparedStatement sqlIterator,
43         LazyPreparedStatement sqlSize,
44         LazyPreparedStatement sqlContains)
45     {
46         this.storage = storage;
47         this.entryType = entryType;
48         this.sqlIterator = sqlIterator;
49         this.sqlSize = sqlSize;
50         this.sqlContains = sqlContains;
51     }
52
53     // implement AbstractSet
54
public Iterator iterator()
55     {
56         try {
57             return storage.getResultSetIterator(sqlIterator,null,entryType);
58         } catch (StorageException ex) {
59             throw new RuntimeStorageException(ex);
60         }
61     }
62
63     // override AbstractSet
64
public boolean contains(Object JavaDoc obj)
65     {
66         try {
67             int n = storage.getSingletonInt(
68                 sqlContains,new Object JavaDoc[]{obj});
69             return n > 0;
70         } catch (StorageException ex) {
71             throw new RuntimeStorageException(ex);
72         }
73     }
74
75     // implement AbstractSet
76
public int size()
77     {
78         try {
79             if (sqlSize != null) {
80                 return storage.getSingletonInt(sqlSize,null);
81             } else {
82                 // this could be used to compensate for a DBMS without
83
// COUNT(DISTINCT)
84
return storage.getResultSetCount(sqlIterator,null);
85             }
86         } catch (StorageException ex) {
87             throw new RuntimeStorageException(ex);
88         }
89     }
90 }
91
92 // End JdbcSet.java
93
Popular Tags