/*******************************************************************************
* Copyright (c) 2015, 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.adapt;
import java.util.Map;
import org.eclipse.gef.common.adapt.inject.InjectAdapters;
import com.google.common.reflect.TypeToken;
import javafx.beans.property.ReadOnlyMapProperty;
import javafx.collections.ObservableMap;
/**
* An {@link AdapterStore} is a basic {@link IAdaptable} implementation that can
* be used standalone.
*
* @author anyssen
*/
public class AdapterStore implements IAdaptable {
private AdaptableSupport<AdapterStore> ads = new AdaptableSupport<>(this);
/**
* Creates a new {@link AdapterStore} with no initial adapters.
*/
public AdapterStore() {
}
/**
* Creates a new AdapterStore with the single given initial adapter, using
* the 'default' role.
*
* @param <T>
* The adapter type.
* @param adapter
* The adapter to be registered.
*
*/
public <T> AdapterStore(T adapter) {
setAdapter(adapter, AdapterKey.DEFAULT_ROLE);
}
/**
* Creates a new AdapterStore with the single given initial adapter, using
* the 'default' role.
*
* @param <T>
* The adapter type.
* @param adapterType
* The runtime type of the adapter to be registered.
* @param adapter
* The adapter to be registered.
*
*/
public <T> AdapterStore(TypeToken<T> adapterType, T adapter) {
setAdapter(adapterType, adapter, AdapterKey.DEFAULT_ROLE);
}
/**
* Creates a new AdapterStore with the single given initial adapter.
*
* @param <T>
* The adapter type.
* @param adapterType
* The runtime type of the adapter to be registered.
* @param adapter
* The adapter to be registered.
* @param role
* The role under which the adapter is to be registered.
*/
public <T> AdapterStore(TypeToken<T> adapterType, T adapter, String role) {
setAdapter(adapterType, adapter, role);
}
@Override
public ReadOnlyMapProperty<AdapterKey<?>, Object> adaptersProperty() {
return ads.adaptersProperty();
}
/**
* Removes all registered adapters from this {@link AdapterStore}.
*/
public void clear() {
for (Object adapter : ads.getAdapters().values()) {
ads.unsetAdapter(adapter);
}
}
@Override
public <T> T getAdapter(AdapterKey<T> key) {
return ads.getAdapter(key);
}
@Override
public <T> T getAdapter(Class<T> key) {
return ads.getAdapter(key);
}
@Override
public <T> T getAdapter(TypeToken<T> key) {
return ads.getAdapter(key);
}
@Override
public <T> AdapterKey<T> getAdapterKey(T adapter) {
return ads.getAdapterKey(adapter);
}
@Override
public ObservableMap<AdapterKey<?>, Object> getAdapters() {
return ads.getAdapters();
}
@Override
public <T> Map<AdapterKey<? extends T>, T> getAdapters(
Class<? super T> key) {
return ads.getAdapters(key);
}
@Override
public <T> Map<AdapterKey<? extends T>, T> getAdapters(
TypeToken<? super T> key) {
return ads.getAdapters(key);
}
@Override
public <T> void setAdapter(T adapter) {
ads.setAdapter(adapter);
}
@Override
public <T> void setAdapter(T adapter, String role) {
ads.setAdapter(adapter, role);
}
@Override
public <T> void setAdapter(TypeToken<T> adapterType, T adapter) {
ads.setAdapter(adapterType, adapter);
}
@InjectAdapters
@Override
public <T> void setAdapter(TypeToken<T> adapterType, T adapter,
String role) {
ads.setAdapter(adapterType, adapter, role);
}
@Override
public <T> void unsetAdapter(T adapter) {
ads.unsetAdapter(adapter);
}
}