1/*
2 * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package sun.util;
27
28import java.util.Enumeration;
29import java.util.Iterator;
30import java.util.NoSuchElementException;
31import java.util.Set;
32
33/**
34 * Implements an Enumeration that combines elements from a Set and
35 * an Enumeration. Used by ListResourceBundle and PropertyResourceBundle.
36 */
37public class ResourceBundleEnumeration implements Enumeration<String> {
38
39    Set<String> set;
40    Iterator<String> iterator;
41    Enumeration<String> enumeration; // may remain null
42
43    /**
44     * Constructs a resource bundle enumeration.
45     * @param set an set providing some elements of the enumeration
46     * @param enumeration an enumeration providing more elements of the enumeration.
47     *        enumeration may be null.
48     */
49    public ResourceBundleEnumeration(Set<String> set, Enumeration<String> enumeration) {
50        this.set = set;
51        this.iterator = set.iterator();
52        this.enumeration = enumeration;
53    }
54
55    String next = null;
56
57    public boolean hasMoreElements() {
58        if (next == null) {
59            if (iterator.hasNext()) {
60                next = iterator.next();
61            } else if (enumeration != null) {
62                while (next == null && enumeration.hasMoreElements()) {
63                    next = enumeration.nextElement();
64                    if (set.contains(next)) {
65                        next = null;
66                    }
67                }
68            }
69        }
70        return next != null;
71    }
72
73    public String nextElement() {
74        if (hasMoreElements()) {
75            String result = next;
76            next = null;
77            return result;
78        } else {
79            throw new NoSuchElementException();
80        }
81    }
82}
83