/****************************************************************************** * Copyright (c) 2016 itemis AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Alexander Nyßen (itemis AG) - initial API and implementation * *******************************************************************************/ package org.eclipse.gef.common.collections; import java.util.Collection; import java.util.Collections; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import com.google.common.collect.Multimap; import com.google.common.collect.Multiset; import com.google.common.collect.Multisets; import com.google.common.collect.SetMultimap; import javafx.beans.InvalidationListener; /** * An unmodifiable {@link ObservableSetMultimap}, wrapping an * {@link ObservableSetMultimap}. * * @author anyssen * * @param <K> * The key type of the {@link ObservableSetMultimap}. * @param <V> * The value type of the {@link ObservableSetMultimap}. */ class UnmodifiableObservableSetMultimapWrapper<K, V> implements ObservableSetMultimap<K, V> { private ObservableSetMultimap<K, V> observableSetMultimap; /** * Creates a new {@link UnmodifiableObservableSetMultimapWrapper} for the * given {@link ObservableSetMultimap}. * * @param observableSetMultimap * The {@link ObservableSetMultimap} to wrap. */ public UnmodifiableObservableSetMultimapWrapper( ObservableSetMultimap<K, V> observableSetMultimap) { this.observableSetMultimap = observableSetMultimap; } @Override public void addListener(InvalidationListener listener) { observableSetMultimap.addListener(listener); } @Override public void addListener( SetMultimapChangeListener<? super K, ? super V> listener) { observableSetMultimap.addListener(listener); } @Override public Map<K, Collection<V>> asMap() { return Collections.unmodifiableMap(observableSetMultimap.asMap()); } @Override public void clear() { throw new UnsupportedOperationException(); } @Override public boolean containsEntry(Object key, Object value) { return observableSetMultimap.containsEntry(key, value); } @Override public boolean containsKey(Object key) { return observableSetMultimap.containsKey(key); } @Override public boolean containsValue(Object value) { return observableSetMultimap.containsValue(value); } @Override public Set<Entry<K, V>> entries() { return Collections.unmodifiableSet(observableSetMultimap.entries()); } @Override public boolean equals(Object obj) { return observableSetMultimap.equals(obj); } @Override public Set<V> get(K key) { return Collections.unmodifiableSet(observableSetMultimap.get(key)); }; @Override public int hashCode() { return observableSetMultimap.hashCode(); } @Override public boolean isEmpty() { return observableSetMultimap.isEmpty(); } @Override public Multiset<K> keys() { return Multisets.unmodifiableMultiset(observableSetMultimap.keys()); } @Override public Set<K> keySet() { return Collections.unmodifiableSet(observableSetMultimap.keySet()); } @Override public boolean put(K key, V value) { throw new UnsupportedOperationException(); } @Override public boolean putAll(K key, Iterable<? extends V> values) { throw new UnsupportedOperationException(); } @Override public boolean putAll(Multimap<? extends K, ? extends V> multimap) { throw new UnsupportedOperationException(); } @Override public boolean remove(Object key, Object value) { throw new UnsupportedOperationException(); } @Override public Set<V> removeAll(Object key) { throw new UnsupportedOperationException(); } @Override public void removeListener(InvalidationListener listener) { observableSetMultimap.removeListener(listener); } @Override public void removeListener( SetMultimapChangeListener<? super K, ? super V> listener) { observableSetMultimap.removeListener(listener); } @Override public boolean replaceAll( SetMultimap<? extends K, ? extends V> setMultimap) { throw new UnsupportedOperationException(); } @Override public Set<V> replaceValues(K key, Iterable<? extends V> values) { throw new UnsupportedOperationException(); } @Override public int size() { return observableSetMultimap.size(); } @Override public Collection<V> values() { return Collections .unmodifiableCollection(observableSetMultimap.values()); } }