/** * Copyright (c) 2012 Cloudsmith Inc. and other contributors, as listed below. * 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: * Cloudsmith * */ package org.cloudsmith.geppetto.pp.dsl.adapters; import java.util.Collections; import java.util.List; import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtext.resource.IEObjectDescription; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; /** * The ResourcePropertiesAdapter associates an {@link IEObjectDescription} to an EObject. * A list is maintained to help when a resolution is ambiguous. * */ public class CrossReferenceAdapter extends AdapterImpl { public static void clear(EObject o) { if(o != null) // can't be more cleared than that... CrossReferenceAdapterFactory.eINSTANCE.adapt(o).clear(); } public static List<IEObjectDescription> get(EObject o) { return CrossReferenceAdapterFactory.eINSTANCE.get(o); } /** * Convenience method to adapt and set the value in the adapter. * * @param o * @param description */ public static void set(EObject o, IEObjectDescription description) { CrossReferenceAdapterFactory.eINSTANCE.adapt(o).set(description); } public static void set(EObject o, Iterable<IEObjectDescription> descriptions) { CrossReferenceAdapterFactory.eINSTANCE.adapt(o).set(descriptions); } private List<IEObjectDescription> referenced; private static List<IEObjectDescription> emptyReferenced = Collections.emptyList(); public CrossReferenceAdapter() { referenced = emptyReferenced; } public void clear() { referenced = emptyReferenced; } public List<IEObjectDescription> get() { return referenced; } @Override public boolean isAdapterForType(Object type) { return type == CrossReferenceAdapter.class; } public void set(IEObjectDescription o) { referenced = Collections.unmodifiableList(Lists.newArrayList(o)); } public void set(Iterable<IEObjectDescription> descriptions) { List<IEObjectDescription> result = Lists.newArrayList(); Iterables.addAll(result, descriptions); referenced = Collections.unmodifiableList(result); } }