diff options
-rw-r--r-- | org.eclipse.mylyn.builds.ui/src/org/eclipse/mylyn/internal/builds/ui/editor/ArtifactsPart.java | 87 |
1 files changed, 80 insertions, 7 deletions
diff --git a/org.eclipse.mylyn.builds.ui/src/org/eclipse/mylyn/internal/builds/ui/editor/ArtifactsPart.java b/org.eclipse.mylyn.builds.ui/src/org/eclipse/mylyn/internal/builds/ui/editor/ArtifactsPart.java index 31547a13..a3c6d8a8 100644 --- a/org.eclipse.mylyn.builds.ui/src/org/eclipse/mylyn/internal/builds/ui/editor/ArtifactsPart.java +++ b/org.eclipse.mylyn.builds.ui/src/org/eclipse/mylyn/internal/builds/ui/editor/ArtifactsPart.java @@ -7,15 +7,22 @@ * * Contributors: * Tasktop Technologies - initial API and implementation + * GitHub - fixes for bug 352916 *******************************************************************************/ package org.eclipse.mylyn.internal.builds.ui.editor; +import java.text.MessageFormat; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import org.eclipse.jface.action.Action; import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider; import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.ISelectionChangedListener; @@ -25,8 +32,10 @@ import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.mylyn.builds.core.IArtifact; import org.eclipse.mylyn.builds.core.IBuild; +import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; import org.eclipse.mylyn.internal.provisional.commons.ui.WorkbenchUtil; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; @@ -38,16 +47,17 @@ import org.eclipse.ui.forms.widgets.FormToolkit; /** * @author Steffen Pingel + * @author Kevin Sawicki */ public class ArtifactsPart extends AbstractBuildEditorPart { static class ArtifactFolder { - List<IArtifact> artifacts = new ArrayList<IArtifact>(); + final Map<String, ArtifactFolder> folders = new HashMap<String, ArtifactFolder>(); - List<ArtifactFolder> folders = new ArrayList<ArtifactsPart.ArtifactFolder>(); + final List<IArtifact> artifacts = new ArrayList<IArtifact>(); - String name; + final String name; public ArtifactFolder(String name) { this.name = name; @@ -56,7 +66,7 @@ public class ArtifactsPart extends AbstractBuildEditorPart { protected Object[] getChildren() { List<Object> all = new ArrayList<Object>(artifacts.size() + folders.size()); all.addAll(artifacts); - all.addAll(folders); + all.addAll(folders.values()); return all.toArray(); } @@ -65,10 +75,33 @@ public class ArtifactsPart extends AbstractBuildEditorPart { } public String getName() { - // ignore - return null; + return name; + } + + ArtifactFolder add(String path, IArtifact artifact) { + int slash = path.indexOf('/'); + if (slash > 0 && slash + 1 < path.length()) { + String name = path.substring(0, slash); + ArtifactFolder folder = folders.get(name); + if (folder == null) { + folder = new ArtifactFolder(name); + folders.put(name, folder); + } + path = path.substring(slash + 1); + folder.add(path, artifact); + } else { + artifacts.add(artifact); + } + return this; } + public ArtifactFolder add(IArtifact artifact) { + return add(artifact.getRelativePath(), artifact); + } + + public String toString() { + return name; + } } static class ArtifactsContentProvider implements ITreeContentProvider { @@ -136,6 +169,7 @@ public class ArtifactsPart extends AbstractBuildEditorPart { composite.setLayout(new GridLayout(1, false)); viewer = new TreeViewer(toolkit.createTree(composite, SWT.NONE)); + viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS); GridDataFactory.fillDefaults().hint(300, 100).grab(true, true).applyTo(viewer.getControl()); viewer.setContentProvider(new ArtifactsContentProvider()); viewer.setLabelProvider(new DecoratingStyledCellLabelProvider(new ArtifactsLabelProvider(), null, null)); @@ -155,6 +189,29 @@ public class ArtifactsPart extends AbstractBuildEditorPart { } } }); + viewer.setSorter(new ViewerSorter() { + + @Override + public int compare(Viewer viewer, Object e1, Object e2) { + String name1 = null; + String name2 = null; + if (e1 instanceof IArtifact) { + name1 = ((IArtifact) e1).getName(); + } else if (e1 instanceof ArtifactFolder) { + name1 = ((ArtifactFolder) e1).getName(); + } + if (e2 instanceof IArtifact) { + name2 = ((IArtifact) e2).getName(); + } else if (e1 instanceof ArtifactFolder) { + name2 = ((ArtifactFolder) e2).getName(); + } + if (name1 != null && name2 != null) { + return name1.compareToIgnoreCase(name2); + } + return super.compare(viewer, e1, e2); + } + + }); menuManager = new MenuManager(); menuManager.setRemoveAllWhenShown(true); @@ -169,14 +226,30 @@ public class ArtifactsPart extends AbstractBuildEditorPart { viewer.setInput("No artifacts."); } + final int numArtifacts = getInput(IBuild.class).getArtifacts().size(); + getSection().setText(MessageFormat.format("Artifacts ({0})", numArtifacts)); + toolkit.paintBordersFor(composite); return composite; } private ArtifactFolder getRootFolder() { ArtifactFolder root = new ArtifactFolder("Root"); - root.artifacts.addAll(getInput(IBuild.class).getArtifacts()); + for (IArtifact artifact : getInput(IBuild.class).getArtifacts()) { + root.add(artifact); + } return root; } + @Override + protected void fillToolBar(ToolBarManager toolBarManager) { + super.fillToolBar(toolBarManager); + + toolBarManager.add(new Action("Collapse All", CommonImages.COLLAPSE_ALL) { + + public void run() { + viewer.collapseAll(); + } + }); + } } |