/******************************************************************************* * Copyright (c) 2010 Martin Schnabel <mb0@mb0.org>. * 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 ******************************************************************************/ package org.axdt.avm.access; import java.io.IOException; import java.io.InputStream; import java.util.Map; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.impl.ResourceImpl; import org.eclipse.xtext.resource.IFragmentProvider; public class AvmResource extends ResourceImpl { private AvmMirror mirror; public static interface Fallback extends IFragmentProvider.Fallback { String getFragment(EObject obj); EObject getEObject(String fragment); TreeIterator<EObject> getAllContents(); EList<EObject> getContents(); } private Fallback fallback = new Fallback() { public String getFragment(EObject obj) { return AvmResource.super.getURIFragment(obj); } public EObject getEObject(String fragment) { return AvmResource.super.getEObject(fragment); } public TreeIterator<EObject> getAllContents() { return AvmResource.super.getAllContents(); } public EList<EObject> getContents() { return AvmResource.super.getContents(); } }; public Fallback getFallback() { return fallback; } public AvmResource() { super(); } public AvmResource(URI uri) { super(uri); } @Override public EObject getEObject(String uriFragment) { if (mirror != null) { EObject result = mirror.getEObject(this, uriFragment, fallback); return result; } return super.getEObject(uriFragment); } @Override public String getURIFragment(EObject eObject) { if (mirror != null) { return mirror.getFragment(eObject, fallback); } return super.getURIFragment(eObject); } public void setMirror(AvmMirror mirror) { this.mirror = mirror; } public AvmMirror getMirror() { return mirror; } @Override public void load(Map<?, ?> options) throws IOException { if (!isLoaded) { load(null, options); } } @Override public void save(Map<?, ?> options) throws IOException { throw new UnsupportedOperationException(); } @Override protected void doLoad(InputStream inputStream, Map<?, ?> options) throws IOException { if (getURI() != null && mirror != null) { mirror.initialize(this); } } @Override public EList<EObject> getContents() { if (mirror != null) { return mirror.getContents(fallback); } return super.getContents(); } @Override public TreeIterator<EObject> getAllContents() { if (mirror != null) { return mirror.getAllContents(fallback); } return super.getAllContents(); } }