/*******************************************************************************
* 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.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import fr.inria.atlanmod.emfviews.core.View;
import fr.inria.atlanmod.emfviews.core.ViewOperationException;
import fr.inria.atlanmod.emfviews.rules.MergeRule;
import fr.inria.atlanmod.emfviews.rules.VirtualModelList;
public class MergeElementImpl extends VirtualElement {
private EObject preferableElement;
private List<EObject> concreteElements = new ArrayList<EObject>();
private EClass mergeClass = null;
public MergeElementImpl(View vModel, List<EObject> concreteElements,
EObject preferableElement, String mergeClassName) {
super();
init(vModel, concreteElements, preferableElement, mergeClass);
}
public MergeElementImpl(View vModel, List<EObject> concreteElements,
EClass eClass, EObject preferableElement) {
super();
init(vModel, concreteElements, preferableElement, eClass);
}
private void init(View vModel, List<EObject> concreteElements,
EObject preferableElement, EClass eClass) {
this.eProperties().setEResource(vModel);
this.concreteElements = concreteElements;
setTranslationRule(MergeRule.INSTANCE);
this.eSetClass(eClass);
eSetStore(this.getTranslationRule());
setPreferableElement(preferableElement);
List<EClass> ecs = new ArrayList<EClass>();
for (EObject eo : concreteElements) {
try {
ecs.add(eo.eClass());
} catch (Exception e) {
e.printStackTrace();
}
}
}
public EObject getPreferableElement() {
return preferableElement;
}
public void setPreferableElement(EObject object) {
this.preferableElement = object;
}
public EObject getContainmentElement(EStructuralFeature concreteFeature) {
for (EObject obj : this.concreteElements) {
for (EStructuralFeature sf : obj.eClass()
.getEAllStructuralFeatures()) {
if (sf == concreteFeature) {
return obj;
}
}
}
throw new ViewOperationException("concrete element could not found");
}
@SuppressWarnings("unchecked")
public List<EObject> getMergedList(EStructuralFeature feature) {
EList<EObject>[] subLists = new EList[concreteElements.size()];
for (int i = 0; i < subLists.length; i++) {
}
return new VirtualModelList<EObject>(this, feature, subLists);
}
public List<EObject> getConcreteElements() {
return concreteElements;
}
}