blob: dc324b19d05a429c76c659a6500fe2662d99a13f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2018 Borland Software Corporation and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Borland Software Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.m2m.internal.qvt.oml.emf.util.ui;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory.Descriptor;
/**
* @author vrepeshko
*/
public class ExtendedEMFUtil {
public static Collection<AdapterFactory> getAdapterFactories(EPackage ePackage, Class<?>[] requiredClasses) {
Set<AdapterFactory> adapterFactories = new LinkedHashSet<AdapterFactory>();
for (int i = 0; i < requiredClasses.length; i++) {
List<Object> types = new ArrayList<Object>();
types.add(ePackage);
types.add(requiredClasses[i]);
Descriptor descriptor = ComposedAdapterFactory.Descriptor.Registry.INSTANCE.getDescriptor(types);
if (descriptor == null) {
continue;
}
AdapterFactory adapterFactory = descriptor.createAdapterFactory();
if (adapterFactory == null) {
continue;
}
adapterFactories.add(adapterFactory);
}
return Collections.unmodifiableSet(adapterFactories);
}
/**
* Returns the {@link ComposedAdapterFactory composed adapter factory} built using specified adapter factories
* and {@link ReflectiveItemProviderAdapterFactory reflective adapter factory}.
*
* @param adapterFactories the list of adapter factories
* @return the {@link ComposedAdapterFactory composed adapter factory} built using specified adapter factories
* and {@link ReflectiveItemProviderAdapterFactory reflective adapter factory}
*/
public static ComposedAdapterFactory createComposedAdapterFactory(Collection<AdapterFactory> adapterFactories) {
List<AdapterFactory> factories = new ArrayList<AdapterFactory>(adapterFactories);
factories.add(new ReflectiveItemProviderAdapterFactory());
return new ComposedAdapterFactory(factories);
}
}