/**
* Copyright (c) 2004-2007 IBM Corporation 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:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.mapping.ecore2ecore.presentation;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.command.BasicCommandStack;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CommandStack;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.plugin.EcorePlugin;
import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.edit.command.InitializeCopyCommand;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
import org.eclipse.emf.mapping.MappingRoot;
import org.eclipse.emf.mapping.command.InitializeCopyOverrideCommand;
import org.eclipse.emf.mapping.domain.AdapterFactoryMappingDomain;
import org.eclipse.emf.mapping.domain.MappingDomain;
import org.eclipse.emf.mapping.domain.PluginAdapterFactoryMappingDomain;
import org.eclipse.emf.mapping.ecore2ecore.Ecore2EcoreFactory;
import org.eclipse.emf.mapping.ecore2ecore.provider.Ecore2EcoreItemProviderAdapterFactory;
import org.eclipse.emf.mapping.presentation.MappingEditor;
import org.eclipse.emf.mapping.provider.MappingItemProviderAdapterFactory;
import org.eclipse.ui.part.FileEditorInput;
/**
* This is an example of a Ecore2Ecore model editor.
* @generated NOT
*/
public class Ecore2EcoreEditor extends MappingEditor
{
public Ecore2EcoreEditor()
{
topLabel = Ecore2EcoreEditorPlugin.INSTANCE.getString("_UI_InputEcore_label"); //$NON-NLS-1$
bottomLabel = Ecore2EcoreEditorPlugin.INSTANCE.getString("_UI_OutputEcore_label"); //$NON-NLS-1$
}
public static class Ecore2EcoreInitializeCopyOverrideCommand extends InitializeCopyOverrideCommand
{
public Ecore2EcoreInitializeCopyOverrideCommand(MappingDomain domain, InitializeCopyCommand initializeCommand)
{
super(domain, initializeCommand);
}
@Override
public void execute()
{
super.execute();
}
}
public static class Ecore2EcoreMappingDomain extends PluginAdapterFactoryMappingDomain
{
public Ecore2EcoreMappingDomain(
AdapterFactory mappingDomainAdapterFactory,
AdapterFactory topDomainAdapterFactory,
AdapterFactory bottomDomainAdapterFactory,
CommandStack commandStack,
String mappingDomainKey)
{
super(mappingDomainAdapterFactory, topDomainAdapterFactory, bottomDomainAdapterFactory, commandStack, mappingDomainKey);
setMappingEnablementFlags(MappingDomain.ENABLE_ALL);
}
@Override
protected Command createInitializeCopyOverrideCommand(InitializeCopyCommand initializeCopyCommand)
{
if (!isSameEditingDomainAdapterFactory)
{
return new Ecore2EcoreInitializeCopyOverrideCommand(this, initializeCopyCommand);
}
return null;
}
}
@Override
protected AdapterFactoryMappingDomain createMappingDomain()
{
AdapterFactory mappingAdapterFactory = new ComposedAdapterFactory(new AdapterFactory[]
{
new ResourceItemProviderAdapterFactory(),
new MappingItemProviderAdapterFactory(),
new Ecore2EcoreItemProviderAdapterFactory()
});
AdapterFactory ecoreAdapterFactory = new EcoreItemProviderAdapterFactory();
AdapterFactoryMappingDomain result = new Ecore2EcoreMappingDomain(mappingAdapterFactory, ecoreAdapterFactory, ecoreAdapterFactory, new BasicCommandStack(), null);
result.getResourceSet().getURIConverter().getURIMap().putAll(EcorePlugin.computePlatformURIMap());
return result;
}
@Override
protected void handleMissingModelFile()
{
try
{
IFile mappingModelFile = modelFile.getFile().getParent().getFile(
new Path(new Path(modelFile.getName()).removeFileExtension().toOSString() + ".mapper")); //$NON-NLS-1$
MappingRoot originalRootObject = (MappingRoot)(mappingDomain.getResourceSet().getResources().iterator().next()).getContents().get(0);
modelFile = new FileEditorInput(mappingModelFile);
Resource mappingModelResource = null;
if (mappingModelFile.exists())
{
mappingRoot = (MappingRoot)mappingDomain.loadResource(getURIFromFile(modelFile.getFile())).getContents().get(0);
}
else
{
mappingModelResource = mappingDomain.getResourceSet().createResource(
URI.createFileURI(modelFile.getFile().getFullPath().toString()));
mappingRoot = Ecore2EcoreFactory.eINSTANCE.createEcore2EcoreMappingRoot();
mappingModelResource.getContents().add(mappingRoot);
mappingDomain.getResourceSet().getResources().add(mappingModelResource);
mappingRoot.getInputs().add(originalRootObject);
IFile outputModelFile = modelFile.getFile().getParent().getFile(
new Path(new Path(modelFile.getName()).removeFileExtension().toOSString() + "_mapper_result.classside")); //$NON-NLS-1$
Resource outputResource = null;
if (outputModelFile.exists())
{
outputResource = mappingDomain.loadResource(getURIFromFile(outputModelFile));
}
else
{
outputResource = mappingDomain.getResourceSet().createResource(URI.createURI(getURIFromFile(outputModelFile)));
outputResource.getContents().add(Ecore2EcoreFactory.eINSTANCE.createEcore2EcoreMappingRoot());
mappingRoot.getOutputs().addAll(outputResource.getContents());
}
doSave(null);
}
mappingRoot.setDomain(mappingDomain);
mappingRoot.setTopToBottom(true);
}
catch (Exception e)
{
e.printStackTrace(System.err);
}
}
}