blob: 1ec6c238a42055af2edc9325948755d94f0ca2e2 [file] [log] [blame]
/**
* Copyright (c) 2009-2010 Thales Corporate Services S.A.S.
* 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:
* Thales Corporate Services S.A.S - initial API and implementation
*/
package org.eclipse.egf.model.fcore.provider;
import java.util.Collection;
import java.util.List;
import org.eclipse.egf.model.edit.EGFModelEditPlugin;
import org.eclipse.egf.model.fcore.util.FcoreResourceImpl;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.common.util.ResourceLocator;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.provider.IChildCreationExtender;
import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
/**
* @author Xavier Maysonnave
*
*/
public class FcoreResourceItemProviderAdapterFactory extends ResourceItemProviderAdapterFactory implements IResourceChildCreationExtender {
/**
* The fcore resource URI.
*/
public static String FCORE_URI = "org.eclipse.egf.model.fcore.util"; //$NON-NLS-1$
protected static Package fcoreResourceImplPackage = FcoreResourceImpl.class.getPackage();
protected FcoreResourceItemProvider _fcoreResourceItemProvider;
/**
* This helps manage the child creation extenders.
*/
protected ResourceChildCreationExtenderManager resourceChildCreationExtenderManager = new ResourceChildCreationExtenderManager(EGFModelEditPlugin.INSTANCE, FCORE_URI);
@Override
public Adapter createAdapter(Notifier target) {
if (target instanceof FcoreResourceImpl) {
return createFcoreResourceAdapter();
}
return createResourceSetAdapter();
}
/**
* Returns whether this factory is applicable for the type of the object.
* <!-- begin-user-doc -->
* This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
* <!-- end-user-doc -->
*
* @return whether this factory is applicable for the type of the object.
*/
@Override
public boolean isFactoryForType(Object type) {
return type == fcoreResourceImplPackage || type instanceof FcoreResourceImpl || type instanceof ResourceSet || supportedTypes.contains(type);
}
/**
* This creates an adapter for a {@link org.eclipse.emf.ecore.resource.FcoreResourceImpl}.
*/
public Adapter createFcoreResourceAdapter() {
if (_fcoreResourceItemProvider == null) {
_fcoreResourceItemProvider = new FcoreResourceItemProvider(this, resourceChildCreationExtenderManager);
}
return _fcoreResourceItemProvider;
}
public ResourceChildCreationExtenderManager getResourceChildCreationExtenderManager() {
return resourceChildCreationExtenderManager;
}
public List<IChildCreationExtender> getChildCreationExtenders() {
return resourceChildCreationExtenderManager.getChildCreationExtenders();
}
public Collection<?> getNewChildDescriptors(Object object, EditingDomain editingDomain) {
return resourceChildCreationExtenderManager.getNewChildDescriptors(object, editingDomain);
}
public ResourceLocator getResourceLocator() {
return resourceChildCreationExtenderManager;
}
public Collection<EClass> getRoots() {
if (_fcoreResourceItemProvider == null) {
createFcoreResourceAdapter();
}
return _fcoreResourceItemProvider.getRoots();
}
}