Author: fbricon
Date: 2011-11-21 09:31:00 -0500 (Mon, 21 Nov 2011)
New Revision: 36491
Added:
trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/problems/
trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/problems/JBossRepositoriesMarkerResolution.java
trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/problems/MavenDependencyMarkerResolutionGenerator.java
Modified:
trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.xml
Log:
CODING IN PROGRESS - issue JBIDE-9921: Investigate if we can add quickfixes for missing
dependencies/packages based on JDT and M2E error markers
https://issues.jboss.org/browse/JBIDE-9921
Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.xml
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.xml 2011-11-21 13:48:13 UTC (rev
36490)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/plugin.xml 2011-11-21 14:31:00 UTC (rev
36491)
@@ -221,4 +221,14 @@
</newWizardShortcut>
</perspectiveExtension>
</extension>
+
+ <!-- TODO implement marker resolution as part of JBIDE-9921
+ <extension
+ point="org.eclipse.ui.ide.markerResolution">
+ <markerResolutionGenerator
+
class="org.jboss.tools.maven.ui.internal.problems.MavenDependencyMarkerResolutionGenerator"
+ markerType="org.eclipse.m2e.core.maven2Problem.dependency">
+ </markerResolutionGenerator>
+ </extension>
+ -->
</plugin>
Added:
trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/problems/JBossRepositoriesMarkerResolution.java
===================================================================
---
trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/problems/JBossRepositoriesMarkerResolution.java
(rev 0)
+++
trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/problems/JBossRepositoriesMarkerResolution.java 2011-11-21
14:31:00 UTC (rev 36491)
@@ -0,0 +1,72 @@
+/*************************************************************************************
+ * Copyright (c) 2009-2011 Red Hat, Inc. and others.
+ * 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:
+ * JBoss by Red Hat - Initial implementation.
+ ************************************************************************************/
+package org.jboss.tools.maven.ui.internal.problems;
+
+import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.performOnDOMDocument;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.internal.compiler.util.Util;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.m2e.core.MavenPlugin;
+import org.eclipse.m2e.core.ui.internal.editing.PomEdits.Operation;
+import org.eclipse.m2e.core.ui.internal.editing.PomEdits.OperationTuple;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.IMarkerResolution2;
+import org.w3c.dom.Document;
+
+public class JBossRepositoriesMarkerResolution implements IMarkerResolution,
+ IMarkerResolution2 {
+
+ public String getDescription() {
+ return getLabel();
+ }
+
+ public Image getImage() {
+ return null;
+ }
+
+ public String getLabel() {
+ // TODO Auto-generated method stub
+ return "Add missing JBoss repositories to settings.xml";
+ }
+
+ public void run(IMarker arg0) {
+ Operation addRepos = new AddRepositoriesOperation();
+ File settings = new File(MavenPlugin.getMavenConfiguration().getUserSettingsFile());
+ try {
+ String content = new String(Util.getFileCharContent(settings, null));
+ IDocument settingsDoc = new org.eclipse.jface.text.Document(content);
+ performOnDOMDocument(new OperationTuple(settingsDoc, addRepos));
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (CoreException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+
+ class AddRepositoriesOperation implements Operation {
+
+ public void process(Document document) {
+ document.createComment("Changing settings at "+new Date());
+ System.err.println("Resolving repository stuff");
+ }
+
+ }
+}
Added:
trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/problems/MavenDependencyMarkerResolutionGenerator.java
===================================================================
---
trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/problems/MavenDependencyMarkerResolutionGenerator.java
(rev 0)
+++
trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/internal/problems/MavenDependencyMarkerResolutionGenerator.java 2011-11-21
14:31:00 UTC (rev 36491)
@@ -0,0 +1,107 @@
+/*************************************************************************************
+ * Copyright (c) 2009-2011 Red Hat, Inc. and others.
+ * 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:
+ * JBoss by Red Hat - Initial implementation.
+ ************************************************************************************/
+package org.jboss.tools.maven.ui.internal.problems;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.m2e.core.embedder.ArtifactKey;
+import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.IMarkerResolutionGenerator2;
+
+@SuppressWarnings("nls")
+public class MavenDependencyMarkerResolutionGenerator implements
+ IMarkerResolutionGenerator2 {
+
+ private static final String MSG_PREFIX = "Missing artifact "; //$NON-NLS-1$
+
+ enum ResolutionType {
+ JBOSS_REPO, EAP_REPO, UNSUPPORTED
+ }
+
+
+ public MavenDependencyMarkerResolutionGenerator() {
+ }
+
+ public IMarkerResolution[] getResolutions(IMarker marker) {
+ ResolutionType type = getResolutionType(marker);
+ switch (type) {
+ case JBOSS_REPO:
+ return new IMarkerResolution[] {
+ new JBossRepositoriesMarkerResolution(),
+ new JBossRepositoriesMarkerResolution() {
+ @Override
+ public String getLabel() {
+ return "Add JBoss repositories to pom.xml";
+ }
+ } };
+ case EAP_REPO:
+ return new IMarkerResolution[] {
+ new JBossRepositoriesMarkerResolution() {
+ @Override
+ public String getLabel() {
+ return "Set up EAP repository";
+ }
+ } };
+ }
+ return new IMarkerResolution[0];
+ }
+
+ public boolean hasResolutions(IMarker marker) {
+ return ResolutionType.UNSUPPORTED != getResolutionType(marker);
+ }
+
+ private ResolutionType getResolutionType(IMarker marker) {
+ ArtifactKey key = getArtifactKey(marker);
+ if (key.getVersion().contains("-redhat")) {
+ return ResolutionType.EAP_REPO;
+ } else if (key.getGroupId().startsWith("org.jboss")) {
+ return ResolutionType.JBOSS_REPO;
+ }
+ return ResolutionType.UNSUPPORTED;
+ }
+
+ private ArtifactKey getArtifactKey(IMarker marker) {
+ ArtifactKey key = null;
+ try {
+ key = (ArtifactKey) marker.getAttribute("artifactKey");
+ if (key == null) {
+ String message = (String) marker.getAttribute("message", null);
+ key = parseMessage(message);
+ }
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ return key;
+ }
+
+ private ArtifactKey parseMessage(String message) {
+ ArtifactKey key = null;
+ if (message != null && message.startsWith(MSG_PREFIX)) {
+ String keyString = message.substring(MSG_PREFIX.length());
+ String[] keyAsArray = keyString.trim().split(":"); //$NON-NLS-1$
+ if (keyAsArray.length > 3) {
+ String artifactId = keyAsArray[0];
+ String groupId = keyAsArray[1];
+ String classifier = null;
+ String version;
+ if (keyAsArray.length > 4) {
+ classifier = keyAsArray[3];
+ version = keyAsArray[4];
+ } else {
+ version = keyAsArray[3];
+ }
+ key = new ArtifactKey(groupId, artifactId, version, classifier);
+ }
+ }
+ return key;
+ }
+
+}