blob: 03af5c5621800c7df83a61447fb3be2d1585d456 [file] [log] [blame]
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);
}
}
}