/*******************************************************************************
* Copyright (c) 2010, 2014 Willink Transformations 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:
* E.D.Willink - initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.pivot.internal.utilities;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.ocl.pivot.utilities.ClassUtil;
/**
* An AliasAdapter extends a Resource to provide a set of aliases for elements,
* typically packages, contained within that Resource. Use of an alias as the moniker
* for a package simplifies the moniker and avoids prefix variation for monikers
* computed for alternate domains.
*/
public class AliasAdapter extends AdapterImpl
{
public static interface Creator
{
Map<EObject, String> computeAliasMap(Resource resource);
void refreshAliases(Resource resource);
void refreshAliases(Collection<? extends Resource> resources);
String getAlias(EObject eObject);
EObject getAliasTarget(EObject eObject);
}
public static AliasAdapter findAdapter(Resource resource) {
if (resource == null) {
return null;
}
return ClassUtil.getAdapter(AliasAdapter.class, resource);
}
public static AliasAdapter getAdapter(Resource resource) {
if (resource == null) {
return null;
}
List<Adapter> eAdapters = ClassUtil.nonNullEMF(resource.eAdapters());
AliasAdapter adapter = ClassUtil.getAdapter(AliasAdapter.class, eAdapters);
if (adapter == null) {
adapter = new AliasAdapter();
eAdapters.add(adapter);
}
return adapter;
}
public static String getAlias(EObject eElement) {
String alias = null;
AliasAdapter adapter = AliasAdapter.findAdapter(eElement.eResource());
if (adapter != null) {
alias = adapter.getAliasMap().get(eElement);
}
return alias;
}
private Map<EObject, String> aliasMap = new HashMap<EObject, String>();
public Map<EObject, String> getAliasMap() {
return aliasMap;
}
@Override
public boolean isAdapterForType(Object type) {
return type == AliasAdapter.class;
}
}