diff options
author | Nicolas FAUVERGUE | 2019-04-15 14:20:03 +0000 |
---|---|---|
committer | Patrick Tessier | 2019-04-16 15:10:49 +0000 |
commit | 348f441043bf9d53ed6c2b31869bb1f0dfc9ce78 (patch) | |
tree | 2251ff1c5e47a4316347b17d018822368918bb5a /plugins | |
parent | e207da1a4cf93b8a033c3e003439f474222f2385 (diff) | |
download | org.eclipse.papyrus-348f441043bf9d53ed6c2b31869bb1f0dfc9ce78.tar.gz org.eclipse.papyrus-348f441043bf9d53ed6c2b31869bb1f0dfc9ce78.tar.xz org.eclipse.papyrus-348f441043bf9d53ed6c2b31869bb1f0dfc9ce78.zip |
Bug 546406: [Toolsmiths][Validation] Plug-ins to validate element types
plug-in must be implemented
- Validate the needed basic required plug-ins
Change-Id: Iea321578924e838abd405b00322abc3bdd1f7ba7
Signed-off-by: Nicolas FAUVERGUE <nicolas.fauvergue@cea.fr>
Diffstat (limited to 'plugins')
3 files changed, 130 insertions, 7 deletions
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.elementtypes/src/org/eclipse/papyrus/toolsmiths/validation/elementtypes/internal/checkers/ElementTypesDependenciesChecker.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.elementtypes/src/org/eclipse/papyrus/toolsmiths/validation/elementtypes/internal/checkers/ElementTypesDependenciesChecker.java new file mode 100644 index 00000000000..a5ecb8e217f --- /dev/null +++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.elementtypes/src/org/eclipse/papyrus/toolsmiths/validation/elementtypes/internal/checkers/ElementTypesDependenciesChecker.java @@ -0,0 +1,109 @@ +/***************************************************************************** + * Copyright (c) 2019 CEA LIST and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Initial API and implementation + * + *****************************************************************************/ + +package org.eclipse.papyrus.toolsmiths.validation.elementtypes.internal.checkers; + +import java.util.Collection; +import java.util.HashSet; +import java.util.List; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.osgi.service.resolver.BundleSpecification; +import org.eclipse.papyrus.toolsmiths.validation.common.checkers.IPluginChecker; +import org.eclipse.papyrus.toolsmiths.validation.common.utils.MarkersService; +import org.eclipse.papyrus.toolsmiths.validation.common.utils.ProjectManagementService; +import org.eclipse.papyrus.toolsmiths.validation.elementtypes.constants.ElementTypesPluginValidationConstants; + +/** + * This class allows to check that the plug-in has the correct dependencies depending to the external profile references. + */ +public class ElementTypesDependenciesChecker implements IPluginChecker { + + /** + * The needed required plug-ins for the element types management. + */ + @SuppressWarnings("serial") + private final Collection<String> NEEDED_REQUIRED_PLUGINS = new HashSet<String>() { + { + add("org.eclipse.papyrus.infra.types.core"); //$NON-NLS-1$ + add("org.eclipse.gmf.runtime.emf.type.core"); //$NON-NLS-1$ + add("org.eclipse.papyrus.uml.service.types"); //$NON-NLS-1$ + add("org.eclipse.papyrus.infra.services.edit"); //$NON-NLS-1$ + add("org.eclipse.papyrus.infra.types"); //$NON-NLS-1$ + add("org.eclipse.papyrus.uml.tools.utils"); //$NON-NLS-1$ + } + }; + + /** + * The current project resource. + */ + private final IProject project; + + /** + * Constructor. + * + * @param project + * The current project resource. + */ + public ElementTypesDependenciesChecker(final IProject project) { + this.project = project; + } + + /** + * This allows to check that the plug-in has the correct dependencies depending to the external profile references. + * {@inheritDoc} + * + * @see org.eclipse.papyrus.toolsmiths.validation.common.checkers.IPluginChecker#check(org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + public void check(final IProgressMonitor monitor) { + + if (null != monitor) { + monitor.subTask("Validate dependencies for element types."); //$NON-NLS-1$ + } + + // Manage a list of required plug-ins to check + final Collection<String> requiredPlugins = new HashSet<>(); + NEEDED_REQUIRED_PLUGINS.stream().forEach(needRequiredPlugin -> requiredPlugins.add(needRequiredPlugin)); + + // For each external reference, get its plug-in name and search its dependency in the plug-in + final Collection<String> existingRequiredPlugins = new HashSet<>(); + final List<BundleSpecification> dependencies = ProjectManagementService.getPluginDependencies(project); + if (null != dependencies && !dependencies.isEmpty()) { + dependencies.stream().forEach(dependency -> existingRequiredPlugins.add(dependency.getName())); + requiredPlugins.removeIf(requiredPlugin -> existingRequiredPlugins.contains(requiredPlugin)); + } + + // If requiredPlugins is not empty, that means, the dependency is not available in the profile plug-in + // So, create the warning markers + if (!requiredPlugins.isEmpty()) { + final IFile manifestFile = ProjectManagementService.getManifestFile(project); + + requiredPlugins.stream().forEach(requiredPlugin -> { + MarkersService.createMarker(manifestFile, + ElementTypesPluginValidationConstants.ELEMENTTYPES_PLUGIN_VALIDATION_TYPE, + "The plug-in '" + requiredPlugin + "' must be defined as required plug-in.", //$NON-NLS-1$ //$NON-NLS-2$ + IMarker.SEVERITY_WARNING); + }); + } + + if (null != monitor) { + monitor.worked(1); + } + } +} diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.elementtypes/src/org/eclipse/papyrus/toolsmiths/validation/elementtypes/internal/checkers/ElementTypesFileChecker.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.elementtypes/src/org/eclipse/papyrus/toolsmiths/validation/elementtypes/internal/checkers/ElementTypesFileChecker.java index acbc9640afa..4ae82ce0247 100644 --- a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.elementtypes/src/org/eclipse/papyrus/toolsmiths/validation/elementtypes/internal/checkers/ElementTypesFileChecker.java +++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.elementtypes/src/org/eclipse/papyrus/toolsmiths/validation/elementtypes/internal/checkers/ElementTypesFileChecker.java @@ -20,9 +20,7 @@ import org.eclipse.core.resources.IMarker; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.common.util.Diagnostic; -import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.util.Diagnostician; import org.eclipse.papyrus.toolsmiths.validation.common.checkers.IPluginChecker; import org.eclipse.papyrus.toolsmiths.validation.common.utils.MarkersService; @@ -39,13 +37,21 @@ public class ElementTypesFileChecker implements IPluginChecker { private final IFile elementTypesFile; /** + * The EMF resource of the element types file. + */ + private final Resource resource; + + /** * Constructor. * * @param elementTypesFile * The file defining the element types. + * @param resource + * The EMF resource of the element types file. */ - public ElementTypesFileChecker(final IFile elementTypesFile) { + public ElementTypesFileChecker(final IFile elementTypesFile, final Resource resource) { this.elementTypesFile = elementTypesFile; + this.resource = resource; } /** @@ -62,8 +68,6 @@ public class ElementTypesFileChecker implements IPluginChecker { } // Get the resource and validate it - final URI elementTypesFileURI = URI.createPlatformResourceURI(elementTypesFile.getFullPath().toOSString(), true); - final Resource resource = new ResourceSetImpl().getResource(elementTypesFileURI, true); final Diagnostic diagnostic = Diagnostician.INSTANCE.validate(resource.getContents().get(0)); // Create markers if the validation is not OK diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.elementtypes/src/org/eclipse/papyrus/toolsmiths/validation/elementtypes/internal/checkers/ElementTypesPluginChecker.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.elementtypes/src/org/eclipse/papyrus/toolsmiths/validation/elementtypes/internal/checkers/ElementTypesPluginChecker.java index ac515690563..96f665ffa6b 100644 --- a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.elementtypes/src/org/eclipse/papyrus/toolsmiths/validation/elementtypes/internal/checkers/ElementTypesPluginChecker.java +++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.elementtypes/src/org/eclipse/papyrus/toolsmiths/validation/elementtypes/internal/checkers/ElementTypesPluginChecker.java @@ -20,6 +20,9 @@ import java.util.Collection; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.papyrus.toolsmiths.validation.common.utils.MarkersService; import org.eclipse.papyrus.toolsmiths.validation.common.utils.PluginValidationService; @@ -58,11 +61,18 @@ public class ElementTypesPluginChecker { // Create the plug-in validation service final PluginValidationService pluginValidationService = new PluginValidationService(); + // First, check the dependencies needed + pluginValidationService.addPluginChecker(new ElementTypesDependenciesChecker(project)); + // For all element types files in the plug-in for (final IFile elementTypesFile : elementTypesFiles) { - // First, check the validation of the element types file - pluginValidationService.addPluginChecker(new ElementTypesFileChecker(elementTypesFile)); + // Get the resource + final URI elementTypesFileURI = URI.createPlatformResourceURI(elementTypesFile.getFullPath().toOSString(), true); + final Resource resource = new ResourceSetImpl().getResource(elementTypesFileURI, true); + + // Check the validation of the element types file + pluginValidationService.addPluginChecker(new ElementTypesFileChecker(elementTypesFile, resource)); // Check the extension point pluginValidationService.addPluginChecker(new ElementTypesExtensionsChecker(project, elementTypesFile)); |