Lines 43-50
Link Here
|
43 |
|
43 |
|
44 |
import java.awt.Component; |
44 |
import java.awt.Component; |
45 |
import java.io.File; |
45 |
import java.io.File; |
|
|
46 |
import java.util.ArrayList; |
47 |
import java.util.Collection; |
48 |
import java.util.Collections; |
46 |
import java.util.HashSet; |
49 |
import java.util.HashSet; |
|
|
50 |
import java.util.List; |
47 |
import java.util.Set; |
51 |
import java.util.Set; |
|
|
52 |
import java.util.concurrent.atomic.AtomicBoolean; |
48 |
import javax.swing.DefaultListModel; |
53 |
import javax.swing.DefaultListModel; |
49 |
import javax.swing.DefaultListCellRenderer; |
54 |
import javax.swing.DefaultListCellRenderer; |
50 |
import javax.swing.JFileChooser; |
55 |
import javax.swing.JFileChooser; |
Lines 52-62
Link Here
|
52 |
import javax.swing.event.ListSelectionListener; |
57 |
import javax.swing.event.ListSelectionListener; |
53 |
import javax.swing.event.ListSelectionEvent; |
58 |
import javax.swing.event.ListSelectionEvent; |
54 |
import org.netbeans.api.java.project.JavaProjectConstants; |
59 |
import org.netbeans.api.java.project.JavaProjectConstants; |
|
|
60 |
import org.netbeans.api.progress.ProgressUtils; |
55 |
import org.netbeans.api.project.FileOwnerQuery; |
61 |
import org.netbeans.api.project.FileOwnerQuery; |
56 |
import org.netbeans.api.project.Project; |
62 |
import org.netbeans.api.project.Project; |
57 |
import org.netbeans.api.project.SourceGroup; |
63 |
import org.netbeans.api.project.SourceGroup; |
58 |
import org.netbeans.api.project.Sources; |
64 |
import org.netbeans.api.project.Sources; |
59 |
import org.netbeans.modules.java.api.common.project.ui.customizer.SourceRootsUi; |
65 |
import org.netbeans.modules.java.api.common.project.ui.customizer.SourceRootsUi; |
|
|
66 |
import org.netbeans.spi.java.project.support.JavadocAndSourceRootDetection; |
60 |
import org.openide.filesystems.FileObject; |
67 |
import org.openide.filesystems.FileObject; |
61 |
import org.openide.filesystems.FileUtil; |
68 |
import org.openide.filesystems.FileUtil; |
62 |
import org.openide.util.NbBundle; |
69 |
import org.openide.util.NbBundle; |
Lines 229-252
Link Here
|
229 |
chooser.setMultiSelectionEnabled(true); |
236 |
chooser.setMultiSelectionEnabled(true); |
230 |
if (this.lastUsedFolder != null && this.lastUsedFolder.isDirectory()) { |
237 |
if (this.lastUsedFolder != null && this.lastUsedFolder.isDirectory()) { |
231 |
chooser.setCurrentDirectory (this.lastUsedFolder); |
238 |
chooser.setCurrentDirectory (this.lastUsedFolder); |
232 |
} |
239 |
} |
233 |
else if (this.projectFolder != null && this.projectFolder.isDirectory()) { |
240 |
else if (this.projectFolder != null && this.projectFolder.isDirectory()) { |
234 |
chooser.setCurrentDirectory (this.projectFolder); |
241 |
chooser.setCurrentDirectory (this.projectFolder); |
235 |
} |
242 |
} |
236 |
if (chooser.showOpenDialog(this)== JFileChooser.APPROVE_OPTION) { |
243 |
if (chooser.showOpenDialog(this)== JFileChooser.APPROVE_OPTION) { |
237 |
File[] files = chooser.getSelectedFiles(); |
244 |
final AtomicBoolean cancel = new AtomicBoolean(); |
238 |
int[] indecesToSelect = new int[files.length]; |
245 |
final File[] files = normalizeFiles(chooser.getSelectedFiles()); |
|
|
246 |
final List<File> toAdd = Collections.synchronizedList(new ArrayList<File>()); |
247 |
final Runnable task = new Runnable() { |
248 |
public void run() { |
249 |
for (File file : files) { |
250 |
if (cancel.get()) { |
251 |
return; |
252 |
} |
253 |
final Collection<? extends FileObject> detectedRoots = JavadocAndSourceRootDetection.findSourceRoots(FileUtil.toFileObject(file),cancel); |
254 |
if (detectedRoots.isEmpty()) { |
255 |
toAdd.add(file); |
256 |
} |
257 |
else { |
258 |
for (FileObject detectedRoot : detectedRoots) { |
259 |
toAdd.add (FileUtil.toFile(detectedRoot)); |
260 |
} |
261 |
} |
262 |
} |
263 |
} |
264 |
}; |
265 |
ProgressUtils.runOffEventDispatchThread(task, NbBundle.getMessage(FolderList.class, "TXT_SearchingSourceRoots"), cancel, true); |
266 |
File[] toAddArr; |
267 |
synchronized (toAdd) { |
268 |
toAddArr = cancel.get() ? files : toAdd.toArray(new File[toAdd.size()]); |
269 |
} |
270 |
int[] indecesToSelect = new int[toAdd.size()]; |
239 |
DefaultListModel model = (DefaultListModel)this.roots.getModel(); |
271 |
DefaultListModel model = (DefaultListModel)this.roots.getModel(); |
240 |
Set<File> invalidRoots = new HashSet<File>(); |
272 |
Set<File> invalidRoots = new HashSet<File>(); |
241 |
File[] relatedFolders = this.relatedFolderList == null ? |
273 |
File[] relatedFolders = this.relatedFolderList == null ? |
242 |
new File[0] : this.relatedFolderList.getFiles(); |
274 |
new File[0] : this.relatedFolderList.getFiles(); |
243 |
for (int i=0, index=model.size(); i<files.length; i++, index++) { |
275 |
for (int i=0, index=model.size(); i<toAddArr.length; i++, index++) { |
244 |
File normalizedFile = FileUtil.normalizeFile(files[i]); |
276 |
File normalizedFile = toAddArr[i]; |
245 |
if (!isValidRoot(normalizedFile, relatedFolders, this.projectFolder)) { |
277 |
if (!isValidRoot(normalizedFile, relatedFolders, this.projectFolder)) { |
246 |
invalidRoots.add (normalizedFile); |
278 |
invalidRoots.add (normalizedFile); |
247 |
} |
279 |
} |
248 |
else { |
280 |
else { |
249 |
int pos = model.indexOf (normalizedFile); |
281 |
int pos = model.indexOf (normalizedFile); |
250 |
if (pos == -1) { |
282 |
if (pos == -1) { |
251 |
model.addElement (normalizedFile); |
283 |
model.addElement (normalizedFile); |
252 |
indecesToSelect[i] = index; |
284 |
indecesToSelect[i] = index; |
Lines 267-273
Link Here
|
267 |
} |
299 |
} |
268 |
} |
300 |
} |
269 |
}//GEN-LAST:event_addButtonActionPerformed |
301 |
}//GEN-LAST:event_addButtonActionPerformed |
270 |
|
302 |
|
|
|
303 |
private static File[] normalizeFiles(final File... files) { |
304 |
for (int i=0; i< files.length; i++) { |
305 |
files[i] = FileUtil.normalizeFile(files[i]); |
306 |
} |
307 |
return files; |
308 |
} |
309 |
|
271 |
public static boolean isValidRoot (File file, File[] relatedRoots, File projectFolder) { |
310 |
public static boolean isValidRoot (File file, File[] relatedRoots, File projectFolder) { |
272 |
Project p; |
311 |
Project p; |
273 |
if ((p = FileOwnerQuery.getOwner(file.toURI()))!=null |
312 |
if ((p = FileOwnerQuery.getOwner(file.toURI()))!=null |