/**
 * Copyright (c) 2011 committers of YAKINDU and others.
 * 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:
 * 	committers of YAKINDU - initial API and implementation
 * 
 */
package org.yakindu.sct.model.sgraph.resource;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.xtext.linking.lazy.LazyLinker;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.nodemodel.impl.CompositeNodeWithSemanticElement;

/**
 * @author andreas muelder
 * 
 */
public class SCTLinker extends LazyLinker {

	@Override
	protected void clearReference(EObject obj, EReference ref) {
		// If the CompositeNodeWithSemanticElement adapter exists, we know that
		// this is an Xtext model element.
		if (EcoreUtil.getAdapter(obj.eAdapters(),
				CompositeNodeWithSemanticElement.class) != null) {
			try {
				obj.eSetDeliver(false);
				super.clearReference(obj, ref);
			} finally {
				obj.eSetDeliver(true);
			}
		}
	}

	protected void createAndSetProxy(EObject obj, INode node, EReference eRef) {
		try {
			obj.eSetDeliver(false);
			super.createAndSetProxy(obj, node, eRef);
		} finally {
			obj.eSetDeliver(true);
		}
	}
}
