/******************************************************************************* * Copyright (c) 2006 CEA List. * 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: * CEA List - initial API and implementation *******************************************************************************/ package org.eclipse.papyrus.uml.extensionpoints.library; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.papyrus.uml.extensionpoints.Activator; import org.eclipse.papyrus.uml.extensionpoints.profile.RegisteredProfile; import org.eclipse.papyrus.uml.extensionpoints.standard.ExtensionLabelProvider; import org.eclipse.papyrus.uml.extensionpoints.utils.Util; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.eclipse.uml2.uml.Element; import org.eclipse.uml2.uml.Package; import org.eclipse.uml2.uml.PackageImport; import org.eclipse.uml2.uml.UMLFactory; /** * */ public class RegisteredProfileAsLibrarySelectionDialog extends ElementListSelectionDialog { /** * */ private EList importedProfiles; /** * */ private List<String> importedProfilesNames; /** * */ private RegisteredProfile[] regProfiles; /** * */ private Package currentPackage; /** * * * @param umlPackage * @param parent */ public RegisteredProfileAsLibrarySelectionDialog(Composite parent, Package umlPackage) { super(parent.getShell(), new ExtensionLabelProvider()); currentPackage = umlPackage; importedProfiles = umlPackage.getPackageImports(); importedProfilesNames = getImportedProfileNames(importedProfiles); // Retrieve registered profiles regProfiles = RegisteredProfile.getRegisteredProfiles(); // remove already applied profiles from the list regProfiles = removeAlreadyImportedFromSelection(); this.setTitle("Apply profiles from Papyrus repository :"); this.setElements(regProfiles); } /** * * * @return */ public boolean run() { this.open(); return this.treatSelection(); } /** * * * @param appliedProfiles * * @return */ private List<String> getImportedProfileNames(EList appliedProfiles) { List<String> Libraries = new ArrayList<String>(); Iterator importedIt = importedProfiles.iterator(); while(importedIt.hasNext()) { org.eclipse.uml2.uml.PackageImport currentImport = (org.eclipse.uml2.uml.PackageImport)importedIt.next(); String currentName = currentImport.getImportedPackage().getName(); Libraries.add(currentName); } return Libraries; } /** * * * @return */ private RegisteredProfile[] removeAlreadyImportedFromSelection() { List<RegisteredProfile> profiles = new ArrayList<RegisteredProfile>(); for(int i = 0; i < regProfiles.length; i++) { String currentName = regProfiles[i].name; if(!importedProfilesNames.contains(currentName)) { profiles.add(regProfiles[i]); } } RegisteredProfile[] cleandList; cleandList = profiles.toArray(new RegisteredProfile[profiles.size()]); return cleandList; } /** * * * @return */ private boolean treatSelection() { // User selection Object[] selection = this.getResult(); boolean hasChanged = false; if(selection == null) { // Cancel was selected return hasChanged; } for(int i = 0; i < selection.length; i++) { RegisteredProfile currentProfile = (RegisteredProfile)(selection[i]); URI modelUri = currentProfile.uri; PackageImport pi = getModelLibraryImportFromURI(modelUri); if(pi != null) { currentPackage.getPackageImports().add(pi); } } return hasChanged; } /** * * * @param uri * * @return */ public PackageImport getModelLibraryImportFromURI(URI uri) { ResourceSet resourceSet = Util.getResourceSet(currentPackage); Resource modelResource = resourceSet.getResource(uri, true); if(modelResource.getContents().size() <= 0) { Activator.getDefault().getLog().log( new Status(IStatus.ERROR, Activator.PLUGIN_ID, "No element found in model from URI " + uri.toString())); return null; } // Try to reach model Element root = (Element)modelResource.getContents().get(0); if(root instanceof Package) { // Import model library Package libToImport = (Package)(modelResource.getContents().get(0)); // create import package PackageImport modelLibImport = UMLFactory.eINSTANCE.createPackageImport(); modelLibImport.setImportedPackage(libToImport); return modelLibImport; } Activator.getDefault().getLog().log( new Status(IStatus.ERROR, Activator.PLUGIN_ID, "The selected uri (" + uri.toString() + ") does not contain any model library !")); return null; } }