View | Details | Raw Unified | Return to bug 352916
Collapse All | Expand All

(-)src/org/eclipse/mylyn/internal/builds/ui/editor/ArtifactsPart.java (-7 / +78 lines)
Lines 11-21 Link Here
11
11
12
package org.eclipse.mylyn.internal.builds.ui.editor;
12
package org.eclipse.mylyn.internal.builds.ui.editor;
13
13
14
import java.text.MessageFormat;
14
import java.util.ArrayList;
15
import java.util.ArrayList;
16
import java.util.HashMap;
15
import java.util.List;
17
import java.util.List;
18
import java.util.Map;
16
19
20
import org.eclipse.jface.action.Action;
17
import org.eclipse.jface.action.MenuManager;
21
import org.eclipse.jface.action.MenuManager;
22
import org.eclipse.jface.action.ToolBarManager;
18
import org.eclipse.jface.layout.GridDataFactory;
23
import org.eclipse.jface.layout.GridDataFactory;
24
import org.eclipse.jface.viewers.AbstractTreeViewer;
19
import org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider;
25
import org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider;
20
import org.eclipse.jface.viewers.IOpenListener;
26
import org.eclipse.jface.viewers.IOpenListener;
21
import org.eclipse.jface.viewers.ISelectionChangedListener;
27
import org.eclipse.jface.viewers.ISelectionChangedListener;
Lines 25-32 Link Here
25
import org.eclipse.jface.viewers.SelectionChangedEvent;
31
import org.eclipse.jface.viewers.SelectionChangedEvent;
26
import org.eclipse.jface.viewers.TreeViewer;
32
import org.eclipse.jface.viewers.TreeViewer;
27
import org.eclipse.jface.viewers.Viewer;
33
import org.eclipse.jface.viewers.Viewer;
34
import org.eclipse.jface.viewers.ViewerSorter;
28
import org.eclipse.mylyn.builds.core.IArtifact;
35
import org.eclipse.mylyn.builds.core.IArtifact;
29
import org.eclipse.mylyn.builds.core.IBuild;
36
import org.eclipse.mylyn.builds.core.IBuild;
37
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
30
import org.eclipse.mylyn.internal.provisional.commons.ui.WorkbenchUtil;
38
import org.eclipse.mylyn.internal.provisional.commons.ui.WorkbenchUtil;
31
import org.eclipse.swt.SWT;
39
import org.eclipse.swt.SWT;
32
import org.eclipse.swt.layout.GridLayout;
40
import org.eclipse.swt.layout.GridLayout;
Lines 43-53 Link Here
43
51
44
	static class ArtifactFolder {
52
	static class ArtifactFolder {
45
53
46
		List<IArtifact> artifacts = new ArrayList<IArtifact>();
54
		final Map<String, ArtifactFolder> folders = new HashMap<String, ArtifactFolder>();
47
55
48
		List<ArtifactFolder> folders = new ArrayList<ArtifactsPart.ArtifactFolder>();
56
		final List<IArtifact> artifacts = new ArrayList<IArtifact>();
49
57
50
		String name;
58
		final String name;
51
59
52
		public ArtifactFolder(String name) {
60
		public ArtifactFolder(String name) {
53
			this.name = name;
61
			this.name = name;
Lines 56-62 Link Here
56
		protected Object[] getChildren() {
64
		protected Object[] getChildren() {
57
			List<Object> all = new ArrayList<Object>(artifacts.size() + folders.size());
65
			List<Object> all = new ArrayList<Object>(artifacts.size() + folders.size());
58
			all.addAll(artifacts);
66
			all.addAll(artifacts);
59
			all.addAll(folders);
67
			all.addAll(folders.values());
60
			return all.toArray();
68
			return all.toArray();
61
		}
69
		}
62
70
Lines 65-74 Link Here
65
		}
73
		}
66
74
67
		public String getName() {
75
		public String getName() {
68
			// ignore
76
			return name;
69
			return null;
70
		}
77
		}
71
78
79
		ArtifactFolder add(String path, IArtifact artifact) {
80
			int slash = path.indexOf('/');
81
			if (slash > 0 && slash + 1 < path.length()) {
82
				String name = path.substring(0, slash);
83
				ArtifactFolder folder = folders.get(name);
84
				if (folder == null) {
85
					folder = new ArtifactFolder(name);
86
					folders.put(name, folder);
87
				}
88
				path = path.substring(slash + 1);
89
				folder.add(path, artifact);
90
			} else {
91
				artifacts.add(artifact);
92
			}
93
			return this;
94
		}
95
96
		public ArtifactFolder add(IArtifact artifact) {
97
			return add(artifact.getRelativePath(), artifact);
98
		}
99
100
		public String toString() {
101
			return name;
102
		}
72
	}
103
	}
73
104
74
	static class ArtifactsContentProvider implements ITreeContentProvider {
105
	static class ArtifactsContentProvider implements ITreeContentProvider {
Lines 136-141 Link Here
136
		composite.setLayout(new GridLayout(1, false));
167
		composite.setLayout(new GridLayout(1, false));
137
168
138
		viewer = new TreeViewer(toolkit.createTree(composite, SWT.NONE));
169
		viewer = new TreeViewer(toolkit.createTree(composite, SWT.NONE));
170
		viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
139
		GridDataFactory.fillDefaults().hint(300, 100).grab(true, true).applyTo(viewer.getControl());
171
		GridDataFactory.fillDefaults().hint(300, 100).grab(true, true).applyTo(viewer.getControl());
140
		viewer.setContentProvider(new ArtifactsContentProvider());
172
		viewer.setContentProvider(new ArtifactsContentProvider());
141
		viewer.setLabelProvider(new DecoratingStyledCellLabelProvider(new ArtifactsLabelProvider(), null, null));
173
		viewer.setLabelProvider(new DecoratingStyledCellLabelProvider(new ArtifactsLabelProvider(), null, null));
Lines 152-159 Link Here
152
					if (artifact.getUrl() != null) {
184
					if (artifact.getUrl() != null) {
153
						WorkbenchUtil.openUrl(artifact.getUrl());
185
						WorkbenchUtil.openUrl(artifact.getUrl());
154
					}
186
					}
187
				}
188
			}
189
		});
190
		viewer.setSorter(new ViewerSorter() {
191
192
			@Override
193
			public int compare(Viewer viewer, Object e1, Object e2) {
194
				String name1 = null;
195
				String name2 = null;
196
				if (e1 instanceof IArtifact) {
197
					name1 = ((IArtifact) e1).getName();
198
				} else if (e1 instanceof ArtifactFolder) {
199
					name1 = ((ArtifactFolder) e1).getName();
200
				}
201
				if (e2 instanceof IArtifact) {
202
					name2 = ((IArtifact) e2).getName();
203
				} else if (e1 instanceof ArtifactFolder) {
204
					name2 = ((ArtifactFolder) e2).getName();
205
				}
206
				if (name1 != null && name2 != null) {
207
					return name1.compareToIgnoreCase(name2);
155
				}
208
				}
209
				return super.compare(viewer, e1, e2);
156
			}
210
			}
211
157
		});
212
		});
158
213
159
		menuManager = new MenuManager();
214
		menuManager = new MenuManager();
Lines 168-173 Link Here
168
		} else {
223
		} else {
169
			viewer.setInput("No artifacts.");
224
			viewer.setInput("No artifacts.");
170
		}
225
		}
226
227
		final int numArtifacts = getInput(IBuild.class).getArtifacts().size();
228
		getSection().setText(MessageFormat.format("Artifacts ({0})", numArtifacts));
171
229
172
		toolkit.paintBordersFor(composite);
230
		toolkit.paintBordersFor(composite);
173
		return composite;
231
		return composite;
Lines 175-182 Link Here
175
233
176
	private ArtifactFolder getRootFolder() {
234
	private ArtifactFolder getRootFolder() {
177
		ArtifactFolder root = new ArtifactFolder("Root");
235
		ArtifactFolder root = new ArtifactFolder("Root");
178
		root.artifacts.addAll(getInput(IBuild.class).getArtifacts());
236
		for (IArtifact artifact : getInput(IBuild.class).getArtifacts()) {
237
			root.add(artifact);
238
		}
179
		return root;
239
		return root;
180
	}
240
	}
241
242
	@Override
243
	protected void fillToolBar(ToolBarManager toolBarManager) {
244
		super.fillToolBar(toolBarManager);
245
246
		toolBarManager.add(new Action("Collapse All", CommonImages.COLLAPSE_ALL) {
181
247
248
			public void run() {
249
				viewer.collapseAll();
250
			}
251
		});
252
	}
182
}
253
}

Return to bug 352916