| package org.eclipse.emf.edapt.cdo.migration.execution; |
| |
| import java.io.IOException; |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.resource.ResourceSet; |
| import org.eclipse.emf.edapt.common.IResourceSetFactory; |
| import org.eclipse.emf.edapt.history.reconstruction.FinishedException; |
| import org.eclipse.emf.edapt.internal.migration.execution.IClassLoader; |
| import org.eclipse.emf.edapt.internal.migration.execution.ValidationLevel; |
| import org.eclipse.emf.edapt.internal.migration.execution.internal.MigrationReconstructor; |
| import org.eclipse.emf.edapt.spi.history.Release; |
| import org.eclipse.emf.edapt.spi.migration.Metamodel; |
| import org.eclipse.emf.edapt.spi.migration.MigrationFactory; |
| import org.eclipse.emf.edapt.spi.migration.Model; |
| |
| public class CDOMigrationReconstructor extends MigrationReconstructor { |
| |
| public CDOMigrationReconstructor(List<URI> modelURIs, |
| Release sourceRelease, Release targetRelease, |
| IProgressMonitor monitor, IClassLoader classLoader, |
| ValidationLevel level, IResourceSetFactory resourceSetFactory) { |
| super(modelURIs, sourceRelease, targetRelease, monitor, classLoader, |
| level, resourceSetFactory, null); |
| } |
| |
| /** Load the model before migration. */ |
| @Override |
| protected void loadRepository() { |
| final Metamodel metamodel = loadMetamodel(); |
| metamodel.refreshCaches(); |
| try { |
| final ResourceSet set = resourceSetFactory.createResourceSet(); |
| final Model model = CDOPersistency.loadModel(modelURIs, metamodel, set); |
| repository = MigrationFactory.eINSTANCE.createRepository(); |
| repository.setMetamodel(metamodel); |
| repository.setModel(model); |
| checkConformanceIfMoreThan(ValidationLevel.HISTORY); |
| } catch (final IOException e) { |
| throwWrappedMigrationException("Model could not be loaded", e); //$NON-NLS-1$ |
| } |
| } |
| |
| /** {@inheritDoc} */ |
| @Override |
| public void endRelease(Release originalRelease) { |
| if (originalRelease == targetRelease) { |
| disable(); |
| checkConformanceIfMoreThan(ValidationLevel.HISTORY); |
| throw new FinishedException(); |
| } else if (originalRelease == sourceRelease) { |
| enable(); |
| start(); |
| loadRepository(); |
| } else if (isEnabled()) { |
| checkConformanceIfMoreThan(ValidationLevel.RELEASE); |
| } |
| } |
| |
| } |