package org.eclipse.buckminster.model.common.util;
import java.util.Collection;
import org.eclipse.emf.common.notify.NotificationChain;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.FeatureMap.Internal;
import org.eclipse.emf.ecore.util.FeatureMapUtil.FeatureEList;
public abstract class DynamicFeatureEList<E> extends FeatureEList<E> {
public DynamicFeatureEList(EStructuralFeature feature, Internal featureMap) {
super(feature, featureMap);
}
@Override
public void add(int index, Object object) {
featureMap.add(getEStructuralFeature(object), index, object);
}
@Override
public boolean add(Object object) {
return featureMap.add(getEStructuralFeature(object), object);
}
@Override
public boolean addAll(Collection<? extends E> collection) {
boolean result = false;
for (E object : collection)
if (featureMap.add(getEStructuralFeature(object), object))
result = true;
return result;
}
@Override
public boolean addAll(int index, Collection<? extends E> collection) {
if (collection.isEmpty())
return false;
for (E object : collection)
featureMap.add(index++, getEStructuralFeature(object), object);
return true;
}
@Override
public boolean addAllUnique(Collection<? extends E> collection) {
if (collection.isEmpty())
return false;
for (E object : collection)
featureMap.addUnique(getEStructuralFeature(object), object);
return true;
}
@Override
public boolean addAllUnique(int index, Collection<? extends E> collection) {
if (collection.isEmpty())
return false;
for (E object : collection)
featureMap.addUnique(getEStructuralFeature(object), index++, object);
return true;
}
@Override
public void addUnique(int index, Object object) {
featureMap.addUnique(getEStructuralFeature(object), index, object);
}
@Override
public void addUnique(Object object) {
featureMap.addUnique(getEStructuralFeature(object), object);
}
@Override
public NotificationChain basicAdd(E object, NotificationChain notifications) {
return featureMap.basicAdd(getEStructuralFeature(object), object, notifications);
}
@Override
public boolean basicContains(Object object) {
return featureMap.basicContains(getEStructuralFeature(object), object);
}
@Override
public boolean basicContainsAll(Collection<?> collection) {
for (Object object : collection)
if (!featureMap.basicContains(getEStructuralFeature(object), object))
return false;
return true;
}
@Override
public int basicIndexOf(Object object) {
return featureMap.basicIndexOf(getEStructuralFeature(object), object);
}
@Override
public int basicLastIndexOf(Object object) {
return featureMap.basicLastIndexOf(getEStructuralFeature(object), object);
}
@Override
public NotificationChain basicRemove(Object object, NotificationChain notifications) {
return featureMap.basicRemove(getEStructuralFeature(object), object, notifications);
}
@Override
public boolean contains(Object object) {
return featureMap.contains(getEStructuralFeature(object), object);
}
@Override
public boolean containsAll(Collection<?> collection) {
for (Object object : collection)
if (!featureMap.contains(getEStructuralFeature(object), object))
return false;
return true;
}
@Override
public int indexOf(Object object) {
return featureMap.indexOf(getEStructuralFeature(object), object);
}
@Override
public int lastIndexOf(Object object) {
return featureMap.lastIndexOf(getEStructuralFeature(object), object);
}
@Override
@SuppressWarnings("unchecked")
public E move(int targetIndex, int sourceIndex) {
Object sourceObj = get(sourceIndex);
return (E) featureMap.move(getEStructuralFeature(sourceObj), targetIndex, sourceIndex);
}
@Override
public void move(int index, Object object) {
featureMap.move(getEStructuralFeature(object), index, object);
}
@Override
public boolean remove(Object object) {
return featureMap.remove(getEStructuralFeature(object), object);
}
@Override
public boolean removeAll(Collection<?> collection) {
boolean result = false;
for (Object object : collection)
if (featureMap.remove(getEStructuralFeature(object), object))
result = true;
return result;
}
@SuppressWarnings("unchecked")
@Override
public E set(int index, E object) {
return (E) featureMap.set(getEStructuralFeature(object), index, object);
}
@Override
@SuppressWarnings("unchecked")
public E setUnique(int index, E object) {
return (E) featureMap.setUnique(getEStructuralFeature(object), index, object);
}
protected abstract EStructuralFeature getEStructuralFeature(Object value);
}