/*******************************************************************************
* Copyright (c) 2013 INRIA.
* 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:
* Cau� Clasen - initial API and implementation
*******************************************************************************/
package fr.inria.atlanmod.emfviews.elements;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import fr.inria.atlanmod.emfviews.core.View;
import fr.inria.atlanmod.emfviews.rules.TranslationRule;
import fr.inria.atlanmod.emfviews.rules.VirtualModelList;
public class VirtualAssociation {
private EObject container;
private List<EObject> referencedElements;
private EStructuralFeature virtualFeature;
public VirtualAssociation(EObject container,
EStructuralFeature virtualFeature, EObject referenceElement) {
init(container, virtualFeature);
referencedElements = new ArrayList<EObject>();
referencedElements.add(referenceElement);
}
public VirtualAssociation(EObject container,
EStructuralFeature virtualFeature, List<EObject> referenceElements) {
init(container, virtualFeature);
this.referencedElements = referenceElements;
}
private void init(EObject container, EStructuralFeature virtualFeature) {
this.container = container;
this.virtualFeature = virtualFeature;
}
public EObject getContainingObject() {
return container;
}
@SuppressWarnings("unchecked")
public Object get(int index) {
if (virtualFeature.isMany()) {
if (index == TranslationRule.NO_INDEX) {
return new VirtualModelList<EObject>(container, virtualFeature,
referencedElements);
} else {
return ((View) container.eResource())
.translateToVirtualElement(referencedElements
.get(index));
}
} else {
return ((View) container.eResource())
.translateToVirtualElement(referencedElements.get(0));
}
}
public Object set(EObject target, int index) {
if (virtualFeature.isMany()) {
if (index == TranslationRule.NO_INDEX) {
referencedElements.add(target);
} else {
referencedElements.add(index, target);
}
} else {
this.referencedElements.clear();
this.referencedElements.add(target);
}
return null;
}
public void removeTargetElement(EObject target) {
this.referencedElements.remove(target);
}
}