| /*******************************************************************************
|
| * Copyright (c) 2010, 2019 Mia-Software and others.
|
| * All rights reserved. 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
|
| * http://www.eclipse.org/legal/epl-v20.html
|
| *
|
| * Contributors:
|
| * Nicolas Bros (Mia-Software) - initial API and implementation
|
| *******************************************************************************/ |
| package org.eclipse.modisco.infra.common.core.internal.validation;
|
|
|
| import java.util.ArrayList;
|
| 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.resources.IResource;
|
| import org.eclipse.core.resources.IResourceVisitor;
|
| import org.eclipse.core.runtime.CoreException;
|
| import org.eclipse.modisco.infra.common.core.internal.CommonModiscoActivator;
|
| import org.eclipse.modisco.infra.common.core.internal.Messages;
|
| import org.eclipse.modisco.infra.common.core.internal.utils.BuildPropertiesUtils;
|
| import org.eclipse.modisco.infra.common.core.internal.utils.PluginUtils;
|
| import org.eclipse.modisco.infra.common.core.logging.MoDiscoLogger;
|
| import org.eclipse.osgi.util.NLS;
|
| import org.eclipse.pde.core.build.IBuildEntry;
|
|
|
| public final class ValidationUtils {
|
|
|
| private ValidationUtils() {
|
| // utilities class
|
| }
|
|
|
| /**
|
| * Check that all files with the given extension are registered in the
|
| * plugin.xml and build.properties.
|
| * <p>
|
| * Puts warning markers on the plugin.xml, build.properties, or directly on
|
| * the project if needed. Replaces previous markers of the same type.
|
| *
|
| * @param project
|
| * the project in which the element should be registered
|
| * @param extensionToCheck
|
| * the file extension of the elements that should be registered
|
| * @param markerType
|
| * the type of the marker that will be used
|
| * @param elementType
|
| * a name for the element type in the error message
|
| * @param extensionPoint
|
| * the extension point that is used to register elements of this
|
| * kind (elements must be declared with a "file" attribute)
|
| */
|
| public static void validateRegistered(final IProject project, final String extensionToCheck,
|
| final String markerType, final String elementType, final String extensionPoint) {
|
| final List<IFile> notDeclared = new ArrayList<IFile>();
|
| final List<IFile> notInBuild = new ArrayList<IFile>();
|
| try {
|
| project.accept(new IResourceVisitor() {
|
| public boolean visit(final IResource resource) throws CoreException {
|
| String fileExtension = resource.getFileExtension();
|
| if (resource.getType() == IResource.FILE && fileExtension != null
|
| && fileExtension.equals(extensionToCheck)) {
|
| IFile file = (IFile) resource;
|
| if (!PluginUtils.isRegistered(file, extensionPoint)) {
|
| notDeclared.add(file);
|
| }
|
| try {
|
| if (!BuildPropertiesUtils.isInBuild(file)) {
|
| notInBuild.add(file);
|
| }
|
| } catch (CoreException e) {
|
| MoDiscoLogger.logError(e, CommonModiscoActivator.getDefault());
|
| }
|
| }
|
| return true;
|
| }
|
| });
|
| } catch (CoreException e) {
|
| MoDiscoLogger.logError(e, CommonModiscoActivator.getDefault());
|
| }
|
|
|
| try {
|
| project.deleteMarkers(markerType, true, IResource.DEPTH_ONE);
|
| } catch (CoreException e) {
|
| MoDiscoLogger.logError(e, CommonModiscoActivator.getDefault());
|
| }
|
|
|
| IResource markersResource;
|
| IFile pluginXML = project.getFile("plugin.xml"); //$NON-NLS-1$
|
| if (pluginXML.exists()) {
|
| markersResource = pluginXML;
|
| try {
|
| pluginXML.deleteMarkers(markerType, true, IResource.DEPTH_ONE);
|
| } catch (CoreException e) {
|
| MoDiscoLogger.logError(e, CommonModiscoActivator.getDefault());
|
| }
|
| } else {
|
| markersResource = project;
|
| }
|
|
|
| IResource buildMarkersResource;
|
| IFile buildProperties = project.getFile("build.properties"); //$NON-NLS-1$
|
| if (buildProperties.exists()) {
|
| buildMarkersResource = buildProperties;
|
| try {
|
| buildProperties.deleteMarkers(markerType, true, IResource.DEPTH_ONE);
|
| } catch (CoreException e) {
|
| MoDiscoLogger.logError(e, CommonModiscoActivator.getDefault());
|
| }
|
| } else {
|
| buildMarkersResource = project;
|
| }
|
|
|
| for (IFile file : notDeclared) {
|
| try {
|
| String message = NLS.bind(Messages.ValidationUtils_shouldBeRegistered, elementType,
|
| file.getName());
|
| IMarker marker = markersResource.createMarker(markerType);
|
| marker.setAttribute(IMarker.MESSAGE, message);
|
| marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
|
| } catch (CoreException e) {
|
| MoDiscoLogger.logError(e, CommonModiscoActivator.getDefault());
|
| }
|
| }
|
|
|
| for (IFile file : notInBuild) {
|
| try {
|
| String message = NLS.bind(Messages.ValidationUtils_shouldBeInBin,
|
| new Object[] { IBuildEntry.BIN_INCLUDES, elementType, file.getName() });
|
| IMarker marker = buildMarkersResource.createMarker(markerType);
|
| marker.setAttribute(IMarker.MESSAGE, message);
|
| marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
|
| } catch (CoreException e) {
|
| MoDiscoLogger.logError(e, CommonModiscoActivator.getDefault());
|
| }
|
| }
|
| }
|
| }
|