package com.sap.ap.cts.monet.deepcopy; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.ResourceSet; import com.sap.ide.treeprovider.GenericRefObjectNode; /** * Provides a Runlet specific deep copy strategy for {@link GenericRefObjectNode} and * EObject. But only if the respective objects originate from the NgpmPackage. * * @author D049157 */ public final class RunletModelCopyAdapterFactory implements IAdapterFactory { @SuppressWarnings("unchecked") public Object getAdapter(Object adaptableObject, Class adapterType) { EObject refAdaptable = null; if (adaptableObject instanceof GenericRefObjectNode) { GenericRefObjectNode node = (GenericRefObjectNode) adaptableObject; refAdaptable = node.getValue(); } else if (adaptableObject instanceof EObject) { refAdaptable = (EObject) adaptableObject; } if (refAdaptable != null) { ResourceSet co = refAdaptable.get___Connection(); EPackage outmostPkg = refAdaptable.refOutermostPackage().refMetaObject(); EPackage rootPkg = co.getPackage(NgpmPackage.PACKAGE_DESCRIPTOR); if (co.getJmiHelper().findRefPackageByQualifiedName(outmostPkg.getQualifiedName(), rootPkg) == null) { // The outmost package of refAdaptable does not belong to the // NgpmPackage return null; } if (IModelTransferExtender.class == adapterType) { return new RunletModelCopyStrategy(); } if (IModelTransferTarget.class == adapterType) { return new RunletModelCopyStrategy(); } } return null; } @SuppressWarnings("unchecked") public Class[] getAdapterList() { return new Class[] { IModelTransferExtender.class, IModelTransferTarget.class }; } }