package de.hub.emffrag.fragmentation; import org.eclipse.emf.ecore.EStructuralFeature; import de.hub.emffrag.datastore.IDataMap; public class IndexedContainmentValueSetSemantics<K> extends IndexedValueSetSemantics<K> { private final FInternalObjectImpl container; private final EStructuralFeature feature; public IndexedContainmentValueSetSemantics(FragmentedModel model, IDataMap<K> index, FInternalObjectImpl container, EStructuralFeature feature) { super(model, index); this.container = container; this.feature = feature; } @Override public FInternalObjectImpl getValueForExactKey(K key) { if (index.exists(key)) { return (FInternalObjectImpl)model.resolveObjectURI(index.getURI(key).appendFragment("/")); } else { return null; } } @Override public void setValueForKey(K key, FInternalObjectImpl value) { index.set(key, ""); // TODO this will indirectly create a fragment, but what if there already is a fragment .. test it at least if (feature == null) { value.eBasicSetContainerForIndexClass(container, index.getURI(key)); } else { value.fragmentURIForContainerChange(index.getURI(key)); } } @Override public void removeValueForKey(K key, FInternalObjectImpl value) { super.removeValueForKey(key, value); } }