/** | |
* Copyright (c) 2009-2010 Thales Corporate Services S.A.S. | |
* This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v2.0 | |
* which accompanies this distribution, and is available at | |
* https://www.eclipse.org/legal/epl-v2.0 | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
* Contributors: | |
* Thales Corporate Services S.A.S - initial API and implementation | |
*/ | |
package org.eclipse.emf.importer.ui; | |
import java.util.List; | |
import org.eclipse.core.resources.IFile; | |
import org.eclipse.egf.core.EGFCorePlugin; | |
import org.eclipse.egf.emf.importer.l10n.TargetPlatformEMFImporterMessages; | |
import org.eclipse.emf.codegen.ecore.genmodel.GenModel; | |
import org.eclipse.emf.common.util.URI; | |
import org.eclipse.emf.ecore.resource.Resource; | |
import org.eclipse.emf.ecore.resource.ResourceSet; | |
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; | |
import org.eclipse.emf.importer.ui.contribution.ModelImporterDescriptor; | |
import org.eclipse.emf.importer.ui.contribution.ModelImporterManager; | |
/** | |
* @author Xavier Maysonnave | |
* | |
*/ | |
public class TargetPlatformEMFModelWizard extends EMFModelWizard { | |
public TargetPlatformEMFModelWizard() { | |
super(); | |
setWindowTitle(TargetPlatformEMFImporterMessages._UI_EMFWizardModel_title); | |
} | |
public TargetPlatformEMFModelWizard(IFile reloadFile) { | |
super(reloadFile); | |
setWindowTitle(TargetPlatformEMFImporterMessages._UI_ReloadWizard_title); | |
} | |
@Override | |
protected ModelImporterDescriptor computeSuggestedDescriptor() { | |
ModelImporterDescriptor descriptor = null; | |
if (defaultDescriptorID != null) { | |
descriptor = ModelImporterManager.INSTANCE.getModelImporterDescriptor(defaultDescriptorID); | |
if (descriptor != null) { | |
return descriptor; | |
} | |
} | |
if (reloadFile != null) { | |
URI reloadURI = URI.createPlatformResourceURI(reloadFile.getFullPath().toString(), true); | |
ResourceSet resourceSet = new ResourceSetImpl(); | |
resourceSet.setURIConverter(EGFCorePlugin.getTargetPlatformURIConverter()); | |
Resource reloadResource = null; | |
try { | |
reloadResource = resourceSet.getResource(reloadURI, true); | |
} catch (RuntimeException e) { | |
reloadResource = resourceSet.getResource(reloadURI, false); | |
} | |
if (reloadResource != null && !reloadResource.getContents().isEmpty()) { | |
Object content = reloadResource.getContents().get(0); | |
if (content instanceof GenModel) { | |
GenModel genModel = (GenModel) content; | |
if (genModel.getImporterID() != null) { | |
descriptor = ModelImporterManager.INSTANCE.getModelImporterDescriptor(genModel.getImporterID()); | |
} else if (!genModel.getForeignModel().isEmpty()) { | |
String foreignModel = genModel.getForeignModel().get(0); | |
if (foreignModel.endsWith(".mdl")) { //$NON-NLS-1$ | |
descriptor = ModelImporterManager.INSTANCE.getModelImporterDescriptor("org.eclipse.emf.importer.rose"); //$NON-NLS-1$ | |
} else if (foreignModel.endsWith(".xsd") || foreignModel.endsWith(".wsdl")) { //$NON-NLS-1$ //$NON-NLS-2$ | |
descriptor = ModelImporterManager.INSTANCE.getModelImporterDescriptor("org.eclipse.xsd.ecore.importer"); //$NON-NLS-1$ | |
} else if (foreignModel.endsWith("@model")) { //$NON-NLS-1$ | |
descriptor = ModelImporterManager.INSTANCE.getModelImporterDescriptor("org.eclipse.emf.importer.java"); //$NON-NLS-1$ | |
} else if (foreignModel.endsWith(".ecore") || foreignModel.endsWith(".emof")) { //$NON-NLS-1$ //$NON-NLS-2$ | |
descriptor = ModelImporterManager.INSTANCE.getModelImporterDescriptor("org.eclipse.emf.importer.ecore"); //$NON-NLS-1$ | |
} | |
} | |
} | |
} | |
} | |
if (descriptor == null) { | |
if (selection != null && !selection.isEmpty()) { | |
Object element = selection.getFirstElement(); | |
if (element instanceof IFile) { | |
String fileExtension = ((IFile) element).getFileExtension(); | |
descriptor = ModelImporterManager.INSTANCE.getModelImporterDescriptor(selectionPage.getLastModelConverterDescriptorId()); | |
if (descriptor == null || !descriptor.getExtensions().contains(fileExtension)) { | |
List<ModelImporterDescriptor> descriptors = ModelImporterManager.INSTANCE.filterModelImporterDescriptors(fileExtension); | |
if (!descriptors.isEmpty()) { | |
descriptor = descriptors.get(0); | |
} | |
} | |
if (descriptor != null) { | |
modelFile = ((IFile) element); | |
} | |
} | |
} | |
} | |
return descriptor; | |
} | |
} |