1 /*******************************************************************************
2  * Copyright (c) 2006, 2015 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  *     Matthew Hall - bug 237718
14  *     Stefan Xenos <sxenos@gmail.com> - Bug 335792
15  *******************************************************************************/
16 
17 package org.eclipse.core.databinding.observable.set;
18 
19 import java.util.Collection;
20 import java.util.Iterator;
21 import java.util.Set;
22 
23 import org.eclipse.core.databinding.observable.IObservableCollection;
24 
25 /**
26  * A set whose changes can be tracked by set change listeners.
27  *
28  * @param <E>
29  *            the type of the elements in this set
30  *
31  * @noimplement This interface is not intended to be implemented by clients.
32  *              Clients should instead subclass one of the classes that
33  *              implement this interface.
34  *              <p>
35  *              Authors of extensions to the databinding framework may extend
36  *              this interface and indirectly implement it, but if doing so must
37  *              also extend one of the framework classes. (Use an API problem
38  *              filter to suppress the resulting warning.)
39  *              <p>
40  *              Direct implementers of this interface outside of the framework
41  *              will be broken in future releases when methods are added to this
42  *              interface.
43  *
44  * @see AbstractObservableSet
45  * @see ObservableSet
46  *
47  * @since 1.0
48  *
49  */
50 public interface IObservableSet<E> extends Set<E>, IObservableCollection<E> {
51 
52 	/**
53 	 * @param listener the change listener to add; not <code>null</code>
54 	 */
addSetChangeListener(ISetChangeListener<? super E> listener)55 	public void addSetChangeListener(ISetChangeListener<? super E> listener);
56 
57 	/**
58 	 * @param listener the change listener to remove; not <code>null</code>
59 	 */
removeSetChangeListener(ISetChangeListener<? super E> listener)60 	public void removeSetChangeListener(ISetChangeListener<? super E> listener);
61 
62 	/**
63 	 * @return the element type or <code>null</code> if untyped
64 	 */
65 	@Override
getElementType()66 	public Object getElementType();
67 
68 	/**
69 	 * @TrackedGetter
70 	 */
71 	@Override
size()72 	int size();
73 
74 	/**
75 	 * @TrackedGetter
76 	 */
77 	@Override
isEmpty()78 	boolean isEmpty();
79 
80 	/**
81 	 * @TrackedGetter
82 	 */
83 	@Override
contains(Object o)84 	boolean contains(Object o);
85 
86 	/**
87 	 * @TrackedGetter
88 	 */
89 	@Override
iterator()90 	Iterator<E> iterator();
91 
92 	/**
93 	 * @TrackedGetter
94 	 */
95 	@Override
toArray()96 	Object[] toArray();
97 
98 	/**
99 	 * @TrackedGetter
100 	 */
101 	@Override
toArray(T a[])102 	<T> T[] toArray(T a[]);
103 
104 	// Modification Operations
105 
106 	/**
107 	 * @TrackedGetter
108 	 */
109 	@Override
add(E o)110 	boolean add(E o);
111 
112 	/**
113 	 * @TrackedGetter
114 	 */
115 	@Override
remove(Object o)116 	boolean remove(Object o);
117 
118 	// Bulk Operations
119 
120 	/**
121 	 * @TrackedGetter
122 	 */
123 	@Override
containsAll(Collection<?> c)124 	boolean containsAll(Collection<?> c);
125 
126 	/**
127 	 * @TrackedGetter
128 	 */
129 	@Override
addAll(Collection<? extends E> c)130 	boolean addAll(Collection<? extends E> c);
131 
132 	/**
133 	 * @TrackedGetter
134 	 */
135 	@Override
retainAll(Collection<?> c)136 	boolean retainAll(Collection<?> c);
137 
138 	/**
139 	 * @TrackedGetter
140 	 */
141 	@Override
removeAll(Collection<?> c)142 	boolean removeAll(Collection<?> c);
143 
144 	// Comparison and hashing
145 
146 	/**
147 	 * @TrackedGetter
148 	 */
149 	@Override
equals(Object o)150 	boolean equals(Object o);
151 
152 	/**
153 	 * @TrackedGetter
154 	 */
155 	@Override
hashCode()156 	int hashCode();
157 
158 }
159