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 |
} |