1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.eclipse.common.wiget;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import org.eclipse.core.resources.IContainer;
22 import org.eclipse.core.resources.IResource;
23 import org.eclipse.core.resources.ResourcesPlugin;
24 import org.eclipse.core.runtime.CoreException;
25 import org.eclipse.jface.resource.ImageDescriptor;
26 import org.eclipse.jface.viewers.ILabelProvider;
27 import org.eclipse.jface.viewers.ITreeContentProvider;
28 import org.eclipse.jface.viewers.LabelProvider;
29 import org.eclipse.jface.viewers.Viewer;
30 import org.eclipse.swt.graphics.Image;
31 import org.eclipse.swt.widgets.Shell;
32 import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
33 import org.eclipse.ui.model.IWorkbenchAdapter;
34 import org.seasar.eclipse.common.util.LogUtil;
35
36
37
38
39
40 public class ResourceTreeSelectionDialog extends ElementTreeSelectionDialog {
41
42
43
44
45
46
47 public ResourceTreeSelectionDialog(final Shell parent,
48 final IContainer root, final int flags) {
49 super(parent, new ResourceLabelProvider(),
50 new ResourceTreeContentProvider(flags));
51 setInput(root);
52 }
53
54 private static class ResourceLabelProvider extends LabelProvider implements
55 ILabelProvider {
56 @Override
57 public Image getImage(final Object element) {
58 Image result = null;
59 if (element instanceof IResource) {
60 IResource r = (IResource) element;
61 IWorkbenchAdapter adapter = (IWorkbenchAdapter) r
62 .getAdapter(IWorkbenchAdapter.class);
63 if (adapter != null) {
64 ImageDescriptor desc = adapter.getImageDescriptor(r);
65 if (desc != null) {
66 result = desc.createImage();
67 }
68 }
69 }
70 return result;
71 }
72
73 @Override
74 public String getText(final Object element) {
75 if (element instanceof IResource) {
76 IResource r = (IResource) element;
77 return r.getName();
78 }
79 return super.getText(element);
80 }
81 }
82
83 private static class ResourceTreeContentProvider implements
84 ITreeContentProvider {
85 private int flags = IResource.NONE;
86
87 public ResourceTreeContentProvider(final int flags) {
88 this.flags = flags;
89 }
90
91
92
93
94
95
96 public Object[] getChildren(final Object parentElement) {
97 if (parentElement instanceof IContainer) {
98 IContainer c = (IContainer) parentElement;
99 return members(c);
100 }
101 return null;
102 }
103
104
105
106
107
108
109 public Object getParent(final Object element) {
110 if (element instanceof IResource) {
111 IResource r = (IResource) element;
112 return r.getParent();
113 }
114 return null;
115 }
116
117
118
119
120
121
122 public boolean hasChildren(final Object element) {
123 if (element instanceof IResource) {
124 IResource r = (IResource) element;
125 return r.getType() == IResource.PROJECT
126 || r.getType() == IResource.FOLDER;
127 }
128 return false;
129 }
130
131
132
133
134
135
136 public void dispose() {
137 }
138
139
140
141
142
143
144
145 public void inputChanged(final Viewer viewer, final Object oldInput,
146 final Object newInput) {
147 }
148
149
150
151
152
153
154 public Object[] getElements(final Object inputElement) {
155 if (inputElement instanceof IContainer) {
156 IContainer c = (IContainer) inputElement;
157 return members(c);
158 }
159 return null;
160 }
161
162 private Object[] members(final IContainer c) {
163 final List<IResource> result = new ArrayList<IResource>();
164 try {
165 for (IResource resource : c.members()) {
166 if ((resource.getType() & flags) != 0) {
167 result.add(resource);
168 }
169 }
170 } catch (CoreException e) {
171 LogUtil.log(ResourcesPlugin.getPlugin(), e);
172 }
173 return result.toArray(new IResource[result.size()]);
174 }
175 }
176 }