KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sleepycat > collections > StoredEntrySet


1 /*-
2  * See the file LICENSE for redistribution information.
3  *
4  * Copyright (c) 2000,2006 Oracle. All rights reserved.
5  *
6  * $Id: StoredEntrySet.java,v 1.30 2006/10/30 21:14:10 bostic Exp $
7  */

8
9 package com.sleepycat.collections;
10
11 import java.util.Map JavaDoc;
12 import java.util.Set JavaDoc;
13
14 import com.sleepycat.je.DatabaseEntry;
15 import com.sleepycat.je.DatabaseException;
16 import com.sleepycat.je.OperationStatus;
17 import com.sleepycat.util.RuntimeExceptionWrapper;
18
19 /**
20  * The Set returned by Map.entrySet(). This class may not be instantiated
21  * directly. Contrary to what is stated by {@link Map#entrySet} this class
22  * does support the {@link #add} and {@link #addAll} methods.
23  *
24  * <p>The {@link java.util.Map.Entry#setValue} method of the Map.Entry objects
25  * that are returned by this class and its iterators behaves just as the {@link
26  * StoredIterator#set} method does.</p>
27  *
28  * @author Mark Hayes
29  */

30 public class StoredEntrySet extends StoredCollection implements Set JavaDoc {
31
32     StoredEntrySet(DataView mapView) {
33
34         super(mapView);
35     }
36
37     /**
38      * Adds the specified element to this set if it is not already present
39      * (optional operation).
40      * This method conforms to the {@link Set#add} interface.
41      *
42      * @param mapEntry must be a {@link java.util.Map.Entry} instance.
43      *
44      * @return true if the key-value pair was added to the set (and was not
45      * previously present).
46      *
47      * @throws UnsupportedOperationException if the collection is read-only.
48      *
49      * @throws ClassCastException if the mapEntry is not a {@link
50      * java.util.Map.Entry} instance.
51      *
52      * @throws RuntimeExceptionWrapper if a {@link DatabaseException} is thrown.
53      */

54     public boolean add(Object JavaDoc mapEntry) {
55
56         Map.Entry JavaDoc entry = (Map.Entry JavaDoc) mapEntry; // allow ClassCastException
57
return add(entry.getKey(), entry.getValue());
58     }
59
60     /**
61      * Removes the specified element from this set if it is present (optional
62      * operation).
63      * This method conforms to the {@link Set#remove} interface.
64      *
65      * @param mapEntry is a {@link java.util.Map.Entry} instance to be removed.
66      *
67      * @return true if the key-value pair was removed from the set, or false if
68      * the mapEntry is not a {@link java.util.Map.Entry} instance or is not
69      * present in the set.
70      *
71      * @throws UnsupportedOperationException if the collection is read-only.
72      *
73      * @throws RuntimeExceptionWrapper if a {@link DatabaseException} is thrown.
74      */

75     public boolean remove(Object JavaDoc mapEntry) {
76
77         if (!(mapEntry instanceof Map.Entry JavaDoc)) {
78             return false;
79         }
80         Map.Entry JavaDoc entry = (Map.Entry JavaDoc) mapEntry;
81         DataCursor cursor = null;
82         boolean doAutoCommit = beginAutoCommit();
83         try {
84             cursor = new DataCursor(view, true);
85             OperationStatus status =
86                 cursor.findBoth(entry.getKey(), entry.getValue(), true);
87             if (status == OperationStatus.SUCCESS) {
88                 cursor.delete();
89             }
90             closeCursor(cursor);
91             commitAutoCommit(doAutoCommit);
92             return (status == OperationStatus.SUCCESS);
93         } catch (Exception JavaDoc e) {
94             closeCursor(cursor);
95             throw handleException(e, doAutoCommit);
96         }
97     }
98
99     /**
100      * Returns true if this set contains the specified element.
101      * This method conforms to the {@link Set#contains} interface.
102      *
103      * @param mapEntry is a {@link java.util.Map.Entry} instance to be checked.
104      *
105      * @return true if the key-value pair is present in the set, or false if
106      * the mapEntry is not a {@link java.util.Map.Entry} instance or is not
107      * present in the set.
108      *
109      * @throws RuntimeExceptionWrapper if a {@link DatabaseException} is thrown.
110      */

111     public boolean contains(Object JavaDoc mapEntry) {
112
113         if (!(mapEntry instanceof Map.Entry JavaDoc)) {
114             return false;
115         }
116         Map.Entry JavaDoc entry = (Map.Entry JavaDoc) mapEntry;
117         DataCursor cursor = null;
118         try {
119             cursor = new DataCursor(view, false);
120             OperationStatus status =
121                 cursor.findBoth(entry.getKey(), entry.getValue(), false);
122             return (status == OperationStatus.SUCCESS);
123         } catch (Exception JavaDoc e) {
124             throw StoredContainer.convertException(e);
125         } finally {
126             closeCursor(cursor);
127         }
128     }
129
130     // javadoc is inherited
131
public String JavaDoc toString() {
132     StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
133     buf.append("[");
134     StoredIterator i = storedIterator();
135         try {
136             while (i.hasNext()) {
137                 Map.Entry JavaDoc entry = (Map.Entry JavaDoc) i.next();
138                 if (buf.length() > 1) buf.append(',');
139                 Object JavaDoc key = entry.getKey();
140                 Object JavaDoc val = entry.getValue();
141                 if (key != null) buf.append(key.toString());
142                 buf.append('=');
143                 if (val != null) buf.append(val.toString());
144             }
145             buf.append(']');
146             return buf.toString();
147         }
148         finally {
149             i.close();
150         }
151     }
152
153     Object JavaDoc makeIteratorData(BaseIterator iterator,
154                             DatabaseEntry keyEntry,
155                             DatabaseEntry priKeyEntry,
156                             DatabaseEntry valueEntry) {
157
158         return new StoredMapEntry(view.makeKey(keyEntry, priKeyEntry),
159                                   view.makeValue(priKeyEntry, valueEntry),
160                                   this, iterator);
161     }
162
163     boolean hasValues() {
164
165         return true;
166     }
167 }
168
Popular Tags