package fr.inria.atlanmod.emfviews.ui.linkingview.action; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; /******************************************************************************* * Copyright (c) 2013 INRIA. * 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: * Juan David Villa Calle - initial API and implementation *******************************************************************************/ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Composite; import fr.inria.atlanmod.emfviews.core.EView; import fr.inria.atlanmod.emfviews.ui.common.EmfViewsUiUtil; import fr.inria.atlanmod.emfviews.ui.linkingview.view.IEditorDelegate; import fr.inria.atlanmod.emfviews.ui.linkingview.view.LinksView; import fr.inria.atlanmod.emfviews.ui.linkingview.view.ModelSelectionDialog; import fr.inria.atlanmod.emfviews.ui.linkingview.view.ModelToLinkDialog; public class AddLinkAction extends Action { private LinksView linksView; private Composite parent; public AddLinkAction(LinksView linksView, Composite parent) { this.linksView = linksView; this.parent = parent; } public void run() { if (linksView.viewSelected()) { IExtension matchingExtension = EmfViewsUiUtil .getCurrentEditorDelegate(); if (matchingExtension != null) { IConfigurationElement[] matchingConfigElements = matchingExtension .getConfigurationElements(); IEditorDelegate editorDelegate; try { editorDelegate = (IEditorDelegate) matchingConfigElements[0] .createExecutableExtension("class"); EObject selectedElement = editorDelegate .getSelectedElement(); if (selectedElement != null) { Set<String> modelTypes=new LinkedHashSet<String>(); for (Resource contributingModel : linksView.getCurrentView().getContributingModels()) { modelTypes.add(contributingModel.getContents().get(0).eClass().getEPackage().getNsPrefix()); } ModelToLinkDialog modelToLinkDialog = new ModelToLinkDialog( parent.getShell(),modelTypes); modelToLinkDialog.create(); int returnCodeT = modelToLinkDialog.open(); if (returnCodeT == Dialog.OK) { String buttonSelected = modelToLinkDialog .getSelectedButton(); EView currentView = linksView.getCurrentView(); List<Resource> viewInputModels = currentView .getContributingModels(); boolean modelFound = false; Resource lookedForResource = null; for (int i = 0; i < viewInputModels.size() && !modelFound; i++) { Resource resource = viewInputModels.get(i); EObject rootElem = resource.getContents() .get(0); if (rootElem.eClass().getEPackage().getNsURI() .contains(buttonSelected.toLowerCase()) || rootElem.eClass().getEPackage() .getNsURI() .contains(buttonSelected)|| rootElem.eClass().getEPackage() .getNsURI() .contains(buttonSelected.toUpperCase())) { lookedForResource = resource; modelFound = true; } } if (lookedForResource != null) { ModelSelectionDialog modelSelectionDialog = new ModelSelectionDialog( parent.getShell(), lookedForResource .getContents().get(0), currentView); modelSelectionDialog .setSelectedElement(selectedElement); modelSelectionDialog.create(); int returnCode = modelSelectionDialog.open(); if (returnCode == Window.OK) { MessageDialog.openInformation( parent.getShell(), "Link created", "A link has been created"); } } } else { // TODO The user canceled the selection of the link // end element } } else { MessageDialog.openInformation(parent.getShell(), "Select element to link", "You should first select an element to link"); } } catch (CoreException e) { e.printStackTrace(); } } else { MessageDialog.openInformation(parent.getShell(), "Editor not yet supported by Emf Views", "Editor not yet supported by Emf Views"); } } else { MessageDialog.openInformation(parent.getShell(), "No view selected", "Select a view first"); } } }