blob: af8f5400d883814f267c282d4d1eee64f6b21e43 [file] [log] [blame]
/*
* Copyright (c) 2008-2012, 2015 Eike Stepper (Berlin, Germany) and others.
* 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.internal.migrator;
import org.eclipse.emf.cdo.internal.messages.Messages;
import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.DiagnosticException;
import org.eclipse.emf.common.util.Monitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.common.util.UniqueEList;
import org.eclipse.emf.converter.ConverterPlugin;
import org.eclipse.emf.converter.util.ConverterUtil;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.importer.ModelImporter;
import java.text.MessageFormat;
import java.util.List;
/**
* @author Eike Stepper
*/
public class CDOImporter extends ModelImporter
{
public static final String IMPORTER_ID = "org.eclipse.emf.importer.cdo"; //$NON-NLS-1$
public CDOImporter()
{
}
@Override
public String getID()
{
return IMPORTER_ID;
}
@Override
protected Diagnostic doComputeEPackages(Monitor monitor) throws Exception
{
Diagnostic diagnostic = Diagnostic.OK_INSTANCE;
List<URI> locationURIs = getModelLocationURIs();
if (locationURIs.isEmpty())
{
diagnostic = new BasicDiagnostic(Diagnostic.ERROR, "org.eclipse.emf.cdo.internal.migrator", 0, //$NON-NLS-1$
Messages.getString("CDOImporter_2"), null); //$NON-NLS-1$
}
else
{
monitor.beginTask("", 2); //$NON-NLS-1$
monitor.subTask(MessageFormat.format(Messages.getString("CDOImporter_4"), locationURIs)); //$NON-NLS-1$
ResourceSet ecoreResourceSet = createResourceSet();
for (URI ecoreModelLocation : locationURIs)
{
ecoreResourceSet.getResource(ecoreModelLocation, true);
}
EcoreUtil.resolveAll(ecoreResourceSet);
for (Resource resource : ecoreResourceSet.getResources())
{
getEPackages()
.addAll(EcoreUtil.<EPackage> getObjectsByType(resource.getContents(), EcorePackage.Literals.EPACKAGE));
}
BasicDiagnostic diagnosticChain = new BasicDiagnostic(ConverterPlugin.ID, ConverterUtil.ACTION_MESSAGE_NONE,
Messages.getString("CDOImporter_5"), null); //$NON-NLS-1$
for (EPackage ePackage : getEPackages())
{
Diagnostician.INSTANCE.validate(ePackage, diagnosticChain);
}
if (diagnosticChain.getSeverity() != Diagnostic.OK)
{
diagnostic = diagnosticChain;
}
}
return diagnostic;
}
@Override
public void addToResource(EPackage ePackage, ResourceSet resourceSet)
{
if (ePackage.eResource() != null && getGenModel().eResource() != null)
{
URI ePackageURI = ePackage.eResource().getURI();
URI genModelURI = getGenModel().eResource().getURI();
if (!ePackageURI.trimSegments(1).equals(genModelURI.trimSegments(1)))
{
ePackage.eResource().getContents().remove(ePackage);
}
}
super.addToResource(ePackage, resourceSet);
}
@Override
protected void adjustGenModel(Monitor monitor)
{
super.adjustGenModel(monitor);
GenModel genModel = getGenModel();
URI genModelURI = createFileURI(getGenModelPath().toString());
for (URI uri : getModelLocationURIs())
{
genModel.getForeignModel().add(makeRelative(uri, genModelURI).toString());
}
CDOMigratorUtil.adjustGenModel(genModel);
}
@Override
protected void handleOriginalGenModel() throws DiagnosticException
{
URI genModelURI = getOriginalGenModel().eResource().getURI();
StringBuffer text = new StringBuffer();
for (String value : getOriginalGenModel().getForeignModel())
{
if (value.endsWith(".ecore") || value.endsWith(".emof")) //$NON-NLS-1$ //$NON-NLS-2$
{
text.append(makeAbsolute(URI.createURI(value), genModelURI).toString());
text.append(" "); //$NON-NLS-1$
}
}
if (text.length() == 0)
{
List<URI> locations = new UniqueEList<URI>();
for (GenPackage genPackage : getOriginalGenModel().getGenPackages())
{
URI ecoreURI = genPackage.getEcorePackage().eResource().getURI();
if (locations.add(ecoreURI))
{
text.append(makeAbsolute(URI.createURI(ecoreURI.toString()), genModelURI).toString());
text.append(" "); //$NON-NLS-1$
}
}
}
setModelLocation(text.toString().trim());
}
}