blob: d0b0ca8d48484c8008cab6844c39fe1d754149cd [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2008-2010 See4sys 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
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
* See4sys - Initial API and implementation
*
* </copyright>
*/
package org.eclipse.sphinx.emf.workspace.internal;
import java.util.Collection;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.domain.IEditingDomainProvider;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.sphinx.emf.domain.IContainerEditingDomainProvider;
import org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor;
import org.eclipse.sphinx.emf.saving.IResourceSaveIndicator;
import org.eclipse.sphinx.emf.workspace.domain.WorkspaceEditingDomainManager;
import org.eclipse.sphinx.emf.workspace.domain.mapping.IWorkspaceEditingDomainMapping;
/**
* Adapter Factory for Editing Domain that supports the following adapter types:
* <ul>
* <li>{@link IEditingDomainProvider} that can adapt a meta-model version descriptor or a file;</li>
* <li>{@link IResourceSaveIndicator} that can adapt a transactional editing domain.</li>
* </ul>
*
* @see IAdapterFactory
*/
public class EditingDomainAdapterFactory implements IAdapterFactory {
/*
* @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
*/
@Override
public Object getAdapter(final Object adaptableObject, @SuppressWarnings("rawtypes") Class adapterType) {
// The workspace editing domain mapping
final IWorkspaceEditingDomainMapping mapping = WorkspaceEditingDomainManager.INSTANCE.getEditingDomainMapping();
if (adapterType.equals(IEditingDomainProvider.class)) {
// IEditingDomainProvider adapter for IFile?
if (adaptableObject instanceof IFile) {
return new IEditingDomainProvider() {
@Override
public EditingDomain getEditingDomain() {
return mapping.getEditingDomain((IFile) adaptableObject);
}
};
}
} else if (adapterType.equals(IContainerEditingDomainProvider.class)) {
// IContainerEditingDomainProvider adapter for IContainer?
if (adaptableObject instanceof IContainer) {
return new IContainerEditingDomainProvider() {
@Override
public Collection<TransactionalEditingDomain> getEditingDomains() {
return mapping.getEditingDomains((IContainer) adaptableObject);
}
@Override
public TransactionalEditingDomain getEditingDomain(IMetaModelDescriptor mmDescriptor) {
return mapping.getEditingDomain((IContainer) adaptableObject, mmDescriptor);
}
};
}
} else if (adapterType.equals(IResourceSaveIndicator.class)) {
// IResourceSaveIndicator adapter for TransactionalEditingDomain?
if (adaptableObject instanceof TransactionalEditingDomain) {
return mapping.getResourceSaveIndicator((TransactionalEditingDomain) adaptableObject);
}
}
return null;
}
/*
* @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
*/
@Override
@SuppressWarnings("rawtypes")
public Class[] getAdapterList() {
return new Class<?>[] { IEditingDomainProvider.class, IContainerEditingDomainProvider.class, IResourceSaveIndicator.class };
}
}