/*******************************************************************************
* 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.core;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import fr.inria.atlanmod.emfviews.elements.ReproduceElementImpl;
import fr.inria.atlanmod.emfviews.elements.VirtualElement;
import fr.inria.atlanmod.emfviews.virtualLinks.Association;
import fr.inria.atlanmod.emfviews.virtualLinks.VirtualLinks;
import fr.inria.atlanmod.emfviews.virtualLinks.VirtualLinksPackage;
public class VirtualLinkManager {
private View virtualModel;
private VirtualLinks correspondenceModel;
private Map<EObject, VirtualElement> virtualLinks = new HashMap<EObject, VirtualElement>();
public VirtualLinkManager(String correspondenceModelURI, View vModel)
throws MalformedURLException, IOException {
this.virtualModel = vModel;
VirtualLinksPackage vl = VirtualLinksPackage.eINSTANCE;
XMIResourceImpl correspondenceModel = new XMIResourceImpl();
IWorkspace workspace = ResourcesPlugin.getWorkspace();
java.net.URI uri = workspace.getRoot()
.findMember("/" + correspondenceModelURI).getLocationURI();
correspondenceModel.load(uri.toURL().openStream(),
new HashMap<Object, Object>());
VirtualLinks virtualLinks = (VirtualLinks) correspondenceModel
.getContents().get(0);
this.correspondenceModel = virtualLinks;
}
public void initialize() {
LinksProjector projector = new LinksProjector(virtualModel);
projector.load(correspondenceModel);
}
public void setVirtualLink(EObject concreteElement,
VirtualElement virtualElement) {
virtualLinks.put(concreteElement, virtualElement);
}
public Map<EObject, VirtualElement> getVirtualLinks() {
return virtualLinks;
}
public boolean isVirtuallyLinked(EObject concreteElement) {
return virtualLinks.containsKey(concreteElement);
}
public EObject getVirtualElement(EObject e) {
VirtualElement vElem = virtualLinks.get(e);
if (vElem == null) {
vElem = new ReproduceElementImpl(virtualModel, e);
virtualLinks.put(e, vElem);
}
return vElem;
}
public void save() {
LinksProjector projector = new LinksProjector(virtualModel);
projector.save(correspondenceModel);
}
}