/*******************************************************************************
* Copyright (c) 2016 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.windup.ui.internal.explorer;
import static org.jboss.tools.windup.model.domain.WindupMarker.ELEMENT_ID;
import static org.jboss.tools.windup.model.domain.WindupMarker.WINDUP_CLASSIFICATION_MARKER_ID;
import static org.jboss.tools.windup.model.domain.WindupMarker.WINDUP_HINT_MARKER_ID;
import static org.jboss.tools.windup.model.domain.WindupMarker.WINDUP_QUICKFIX_ID;
import java.util.List;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.osgi.util.NLS;
import org.jboss.tools.windup.ui.WindupUIPlugin;
import org.jboss.tools.windup.ui.internal.Messages;
import org.jboss.tools.windup.ui.internal.explorer.IssueConstants.Severity;
import com.google.common.collect.Lists;
/**
* Utility for working with resource markers.
*/
public class MarkerUtil {
public static List<IMarker> collectWindupIssueMarkers() {
List<IMarker> markers = Lists.newArrayList();
for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
if (project.exists() && project.isAccessible()) {
markers.addAll(getMarkers(
WINDUP_HINT_MARKER_ID,
project,
IResource.DEPTH_INFINITE));
markers.addAll(getMarkers(
WINDUP_CLASSIFICATION_MARKER_ID,
project,
IResource.DEPTH_INFINITE));
}
}
return markers;
}
public static List<IMarker> collectAllWindupMarkers() {
List<IMarker> markers = Lists.newArrayList();
for (IProject project : ResourcesPlugin.getWorkspace().getRoot().getProjects()) {
if (project.exists() && project.isAccessible()) {
markers.addAll(getMarkers(
WINDUP_HINT_MARKER_ID,
project,
IResource.DEPTH_INFINITE));
markers.addAll(getMarkers(
WINDUP_CLASSIFICATION_MARKER_ID,
project,
IResource.DEPTH_INFINITE));
markers.addAll(getMarkers(
WINDUP_QUICKFIX_ID,
project,
IResource.DEPTH_INFINITE));
}
}
return markers;
}
public static List<IMarker> getMarkers(String type, IResource resource, int depth) {
if (resource.getType() == IResource.PROJECT) {
if (!resource.isAccessible()) {
return Lists.newArrayList();
}
}
try {
return Lists.newArrayList(resource.findMarkers(type, true, depth));
} catch (CoreException e) {
WindupUIPlugin.logError(NLS.bind(Messages.markerError_findingMarkers, resource.getName()), e);
}
return Lists.newArrayList();
}
public static IJavaElement findJavaElementForMarker(IMarker marker) {
try {
Object elementId = marker.getAttribute(ELEMENT_ID);
if (elementId instanceof String) {
return JavaCore.create((String) elementId);
}
} catch (CoreException e) {
WindupUIPlugin.logError(Messages.markerError_findingJavaId, e);
return null;
}
return null;
}
public static int convertSeverity(String severity) {
if (severity == null) {
return IMarker.SEVERITY_WARNING;
}
if (severity.equals(Severity.MANDATORY.toString())) {
return IMarker.SEVERITY_ERROR;
}
else if (severity.equals(Severity.OPTIONAL.toString())) {
return IMarker.SEVERITY_INFO;
}
else if (severity.equals(Severity.POTENTIAL.toString())) {
return IMarker.SEVERITY_WARNING;
}
else {
return IMarker.SEVERITY_ERROR;
}
}
}