Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Fedorenko2013-06-14 08:01:17 +0000
committerIgor Fedorenko2013-06-14 08:01:17 +0000
commit073ee9daf7613bd0ec83b00f5f0bfa615f796e0d (patch)
tree291be50381fbfb79ce824a3bb812a60fc6e082e8 /org.eclipse.m2e.core.ui
parenta04f6f45fd741929effaebc0a207ef467c3b45d9 (diff)
downloadm2e-core-073ee9daf7613bd0ec83b00f5f0bfa615f796e0d.tar.gz
m2e-core-073ee9daf7613bd0ec83b00f5f0bfa615f796e0d.tar.xz
m2e-core-073ee9daf7613bd0ec83b00f5f0bfa615f796e0d.zip
Reworked ParentGatherer and related pom.xml manipulations
Introduced ParentHierarchyEntry that encapsulates MavenProject and corresponding IMavenProjectFacade and reworked all clients of ParentGatherer to use ParentHierarchyEntry instead of brittle mapping between MavenProject and IMavenProjectFacade instances. Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
Diffstat (limited to 'org.eclipse.m2e.core.ui')
-rw-r--r--org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF2
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/components/PomHierarchyComposite.java130
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ParentGatherer.java28
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ParentHierarchyEntry.java69
4 files changed, 146 insertions, 83 deletions
diff --git a/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF b/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF
index 407d0f8d..011a427a 100644
--- a/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF
@@ -9,7 +9,7 @@ Bundle-Vendor: %Bundle-Vendor
Bundle-Localization: plugin
Export-Package: org.eclipse.m2e.core.ui.internal;x-internal:=true,
org.eclipse.m2e.core.ui.internal.actions;x-friends:="org.eclipse.m2e.editor,org.eclipse.m2e.editor.xml",
- org.eclipse.m2e.core.ui.internal.components;x-internal:=true,
+ org.eclipse.m2e.core.ui.internal.components;x-friends:="org.eclipse.m2e.editor,org.eclipse.m2e.editor.xml",
org.eclipse.m2e.core.ui.internal.console;x-internal:=true,
org.eclipse.m2e.core.ui.internal.dialogs;x-friends:="org.eclipse.m2e.editor",
org.eclipse.m2e.core.ui.internal.editing;x-friends:="org.eclipse.m2e.editor.xml,org.eclipse.m2e.editor,org.eclipse.m2e.refactoring",
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/components/PomHierarchyComposite.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/components/PomHierarchyComposite.java
index 1a880933..5f8d0caa 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/components/PomHierarchyComposite.java
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/components/PomHierarchyComposite.java
@@ -21,7 +21,6 @@ import org.slf4j.LoggerFactory;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IColorProvider;
@@ -43,12 +42,12 @@ import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
-import org.apache.maven.project.MavenProject;
+import org.apache.maven.model.Model;
-import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
import org.eclipse.m2e.core.ui.internal.MavenImages;
import org.eclipse.m2e.core.ui.internal.util.ParentGatherer;
+import org.eclipse.m2e.core.ui.internal.util.ParentHierarchyEntry;
public class PomHierarchyComposite extends Composite implements IInputSelectionProvider {
@@ -56,7 +55,7 @@ public class PomHierarchyComposite extends Composite implements IInputSelectionP
private TreeViewer pomsViewer;
- private List<MavenProject> hierarchy;
+ private List<ParentHierarchyEntry> hierarchy;
public PomHierarchyComposite(Composite parent, int style) {
super(parent, style);
@@ -77,65 +76,58 @@ public class PomHierarchyComposite extends Composite implements IInputSelectionP
public void computeHeirarchy(final IMavenProjectFacade project, IRunnableContext context) {
try {
- if(context != null) {
- context.run(false, true, new IRunnableWithProgress() {
- public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
- try {
- computeHeirarchy(project, monitor);
- } catch(CoreException e) {
- throw new InvocationTargetException(e);
- }
- }
- });
- } else {
- computeHeirarchy(project, new NullProgressMonitor());
+ if(context == null) {
+ context = PlatformUI.getWorkbench().getProgressService();
}
+ context.run(false, true, new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) throws InvocationTargetException {
+ try {
+ computeHeirarchy(project, monitor);
+ } catch(CoreException e) {
+ throw new InvocationTargetException(e);
+ }
+ }
+ });
} catch(Exception e) {
LOG.error("An error occurred building pom heirarchy", e); //$NON-NLS-1$
}
}
- private void computeHeirarchy(IMavenProjectFacade projectFacade, IProgressMonitor monitor) throws CoreException {
- LinkedList<MavenProject> hierarchy = new LinkedList<MavenProject>();
- hierarchy.addAll(new ParentGatherer(projectFacade.getMavenProject(monitor), projectFacade)
- .getParentHierarchy(monitor));
+ void computeHeirarchy(IMavenProjectFacade projectFacade, IProgressMonitor monitor) throws CoreException {
+ LinkedList<ParentHierarchyEntry> hierarchy = new LinkedList<ParentHierarchyEntry>();
+ hierarchy.addAll(new ParentGatherer(projectFacade).getParentHierarchy(monitor));
setHierarchy(hierarchy);
}
- public void setHierarchy(LinkedList<MavenProject> hierarchy) {
+ public void setHierarchy(List<ParentHierarchyEntry> hierarchy) {
this.hierarchy = hierarchy;
pomsViewer.setInput(hierarchy);
pomsViewer.expandAll();
}
public static class DepLabelProvider extends LabelProvider implements IColorProvider {
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
- */
@Override
public String getText(Object element) {
- MavenProject project = null;
- if(element instanceof MavenProject) {
- project = (MavenProject) element;
+ ParentHierarchyEntry project = null;
+ if(element instanceof ParentHierarchyEntry) {
+ project = (ParentHierarchyEntry) element;
} else if(element instanceof Object[]) {
- project = (MavenProject) ((Object[]) element)[0];
+ project = (ParentHierarchyEntry) ((Object[]) element)[0];
} else {
return ""; //$NON-NLS-1$
}
- StringBuffer buffer = new StringBuffer();
- buffer.append(project.getGroupId() + " : " + project.getArtifactId() + " : " + project.getVersion()); //$NON-NLS-1$ //$NON-NLS-2$
+ StringBuilder buffer = new StringBuilder();
+ Model model = project.getProject().getModel();
+ buffer.append(model.getGroupId()).append(" : ") //$NON-NLS-1$
+ .append(model.getArtifactId()).append(" : ") //$NON-NLS-2$
+ .append(model.getVersion());
return buffer.toString();
}
public Color getForeground(Object element) {
- if(element instanceof MavenProject) {
- MavenProject project = (MavenProject) element;
- IMavenProjectFacade search = MavenPlugin.getMavenProjectRegistry().getMavenProject(project.getGroupId(),
- project.getArtifactId(), project.getVersion());
- if(search == null) {
+ if(element instanceof ParentHierarchyEntry) {
+ ParentHierarchyEntry project = (ParentHierarchyEntry) element;
+ if(project.getFacade() == null) {
// This project is not in the workspace
return Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY);
}
@@ -148,31 +140,28 @@ public class PomHierarchyComposite extends Composite implements IInputSelectionP
}
public Image getImage(Object element) {
- if(element instanceof MavenProject) {
- MavenProject project = (MavenProject) element;
- IMavenProjectFacade search = MavenPlugin.getMavenProjectRegistry().getMavenProject(project.getGroupId(),
- project.getArtifactId(), project.getVersion());
- if(search == null) {
+ if(element instanceof ParentHierarchyEntry) {
+ ParentHierarchyEntry project = (ParentHierarchyEntry) element;
+ if(project.getFacade() == null) {
// This project is not in the workspace
return MavenImages.getOverlayImage(MavenImages.PATH_JAR, MavenImages.PATH_LOCK, IDecoration.BOTTOM_LEFT);
- } else {
- return PlatformUI.getWorkbench().getSharedImages().getImage(IDE.SharedImages.IMG_OBJ_PROJECT);
}
+ return PlatformUI.getWorkbench().getSharedImages().getImage(IDE.SharedImages.IMG_OBJ_PROJECT);
}
return null;
}
}
public static class PomHeirarchyContentProvider implements ITreeContentProvider {
- private LinkedList<MavenProject> projects;
+ private List<ParentHierarchyEntry> projects;
public PomHeirarchyContentProvider() {
}
@SuppressWarnings("unchecked")
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- if(newInput instanceof LinkedList) {
- this.projects = (LinkedList<MavenProject>) newInput;
+ if(newInput instanceof List) {
+ this.projects = (List<ParentHierarchyEntry>) newInput;
}
}
@@ -186,57 +175,52 @@ public class PomHierarchyComposite extends Composite implements IInputSelectionP
}
public Object getParent(Object element) {
- if(element instanceof MavenProject) {
- MavenProject project = (MavenProject) element;
- return project.getParent();
+ if(element instanceof ParentHierarchyEntry) {
+ for(int i = 1; i < projects.size(); i++ ) {
+ if(projects.get(i) == element) {
+ return projects.get(i - 1);
+ }
+ }
}
return null;
}
- /*
- * Return root element (non-Javadoc)
- *
- * @see
- * org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang
- * .Object)
- */
@SuppressWarnings("unchecked")
public Object[] getElements(Object inputElement) {
-
if(inputElement instanceof LinkedList) {
- LinkedList<MavenProject> projects = (LinkedList<MavenProject>) inputElement;
+ List<ParentHierarchyEntry> projects = (List<ParentHierarchyEntry>) inputElement;
if(projects.isEmpty()) {
return new Object[0];
}
- return new Object[] {projects.getLast()};
+ return new Object[] {projects.get(projects.size() - 1)};
}
return new Object[0];
}
public Object[] getChildren(Object parentElement) {
- if(parentElement instanceof MavenProject) {
+ if(parentElement instanceof ParentHierarchyEntry) {
/*
* Walk the hierarchy list until we find the parentElement and
* return the previous element, which is the child.
*/
- MavenProject parent = (MavenProject) parentElement;
+ ParentHierarchyEntry parent = (ParentHierarchyEntry) parentElement;
if(projects.size() == 1) {
// No parent exists, only one element in the tree
return new Object[0];
}
- if(projects.getFirst().equals(parent)) {
+ if(projects.get(0).equals(parent)) {
// We are the final child
return new Object[0];
}
- ListIterator<MavenProject> iter = projects.listIterator();
+ ListIterator<ParentHierarchyEntry> iter = projects.listIterator();
while(iter.hasNext()) {
- MavenProject next = iter.next();
+ ParentHierarchyEntry next = iter.next();
if(next.equals(parent)) {
iter.previous();
- MavenProject previous = iter.previous();
+ ParentHierarchyEntry previous = iter.previous();
return new Object[] {previous};
}
}
@@ -265,18 +249,22 @@ public class PomHierarchyComposite extends Composite implements IInputSelectionP
pomsViewer.setSelection(selection);
}
- public List<MavenProject> getHierarchy() {
+ public List<ParentHierarchyEntry> getHierarchy() {
return hierarchy;
}
- public MavenProject fromSelection() {
+ public ParentHierarchyEntry fromSelection() {
ISelection selection = pomsViewer.getSelection();
if(selection instanceof IStructuredSelection) {
Object obj = ((IStructuredSelection) selection).getFirstElement();
- if(obj instanceof MavenProject) {
- return (MavenProject) obj;
+ if(obj instanceof ParentHierarchyEntry) {
+ return (ParentHierarchyEntry) obj;
}
}
return null;
}
+
+ public ParentHierarchyEntry getProject() {
+ return hierarchy.get(hierarchy.size() - 1);
+ }
}
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ParentGatherer.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ParentGatherer.java
index ee184222..17644233 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ParentGatherer.java
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ParentGatherer.java
@@ -11,8 +11,10 @@
package org.eclipse.m2e.core.ui.internal.util;
-import java.util.LinkedList;
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -22,6 +24,7 @@ import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.embedder.ICallable;
import org.eclipse.m2e.core.embedder.IMaven;
import org.eclipse.m2e.core.embedder.IMavenExecutionContext;
+import org.eclipse.m2e.core.internal.M2EUtils;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
import org.eclipse.m2e.core.project.IMavenProjectRegistry;
@@ -29,13 +32,11 @@ import org.eclipse.m2e.core.project.IMavenProjectRegistry;
/**
* Helper class to get the parent chain given a pom
*/
+@SuppressWarnings("restriction")
public class ParentGatherer {
- final MavenProject mavenProject;
-
final IMavenProjectFacade projectFacade;
- public ParentGatherer(MavenProject leafProject, IMavenProjectFacade facade) {
- this.mavenProject = leafProject;
+ public ParentGatherer(IMavenProjectFacade facade) {
this.projectFacade = facade;
}
@@ -47,13 +48,15 @@ public class ParentGatherer {
* pom, the last one the ultimate parent.
* @throws CoreException
*/
- public LinkedList<MavenProject> getParentHierarchy(final IProgressMonitor monitor) throws CoreException {
- final LinkedList<MavenProject> hierarchy = new LinkedList<MavenProject>();
- final IMaven maven = MavenPlugin.getMaven();
+ public List<ParentHierarchyEntry> getParentHierarchy(final IProgressMonitor monitor) throws CoreException {
+ final List<ParentHierarchyEntry> hierarchy = new ArrayList<ParentHierarchyEntry>();
IMavenProjectRegistry projectManager = MavenPlugin.getMavenProjectRegistry();
- maven.detachFromSession(mavenProject);
- hierarchy.add(mavenProject);
+ final IMaven maven = MavenPlugin.getMaven();
+
+ final MavenProject mavenProject = projectFacade.getMavenProject(monitor);
+
+ hierarchy.add(new ParentHierarchyEntry(mavenProject, projectFacade));
projectManager.execute(projectFacade, new ICallable<Void>() {
public Void call(IMavenExecutionContext context, IProgressMonitor monitor) throws CoreException {
@@ -63,7 +66,10 @@ public class ParentGatherer {
return null;
}
project = maven.resolveParentProject(project, monitor);
- hierarchy.add(project);
+ IFile resource = M2EUtils.getPomFile(project); // resource is null if parent is not coming from workspace
+ IMavenProjectFacade facade = resource != null ? MavenPlugin.getMavenProjectRegistry().getProject(
+ resource.getProject()) : null;
+ hierarchy.add(new ParentHierarchyEntry(project, facade));
}
return null;
}
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ParentHierarchyEntry.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ParentHierarchyEntry.java
new file mode 100644
index 00000000..9758082e
--- /dev/null
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/util/ParentHierarchyEntry.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Igor Fedorenko
+ * 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:
+ * Igor Fedorenko - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.m2e.core.ui.internal.util;
+
+import java.io.File;
+
+import org.eclipse.core.resources.IFile;
+
+import org.apache.maven.project.MavenProject;
+
+import org.eclipse.m2e.core.project.IMavenProjectFacade;
+
+
+/**
+ * Represents single MavenProject in project parent hierarchy.
+ *
+ * @since 1.5
+ */
+public class ParentHierarchyEntry {
+
+ private final MavenProject project;
+
+ private final IMavenProjectFacade facade;
+
+ ParentHierarchyEntry(MavenProject project, IMavenProjectFacade facade) {
+ this.project = project;
+ this.facade = facade;
+ }
+
+ /**
+ * Returns MavenProject of this parent hierarchy entry. Never {@code null}.
+ */
+ public MavenProject getProject() {
+ return project;
+ }
+
+ /**
+ * Returns pom.xml file this parent hierarchy entry was read from. Shortcut for {@code getProject().getFile()}. Never
+ * {@code null}.
+ */
+ public File getFile() {
+ return project.getFile();
+ }
+
+ /**
+ * Returns IMavenProjectFacade that corresponds to this parent hierarchy entry. Returns {@code null} if the entry was
+ * resolved from a Maven repository and not from Eclipse workspace project.
+ */
+ public IMavenProjectFacade getFacade() {
+ return facade;
+ }
+
+ /**
+ * Returns IFile this parent hierarchy entry was read from. Returns {@code null} if the entry was resolved from a
+ * Maven repository and not from Eclipse workspace project.
+ */
+ public IFile getResource() {
+ return facade != null ? facade.getPom() : null;
+ }
+}

Back to the top