Lines 269-287
Link Here
|
269 |
|
269 |
|
270 |
// private static final Comparator NATURAL_NAME_SORT = Collator.getInstance(); |
270 |
// private static final Comparator NATURAL_NAME_SORT = Collator.getInstance(); |
271 |
|
271 |
|
272 |
private enum Visibility {HIDE, LEAF, CATEGORY} |
|
|
273 |
private final class TemplateKey { |
272 |
private final class TemplateKey { |
274 |
final DataObject d; |
273 |
final DataObject d; |
275 |
final Visibility visibility; |
274 |
final boolean leaf; |
276 |
TemplateKey(DataObject d, Visibility visibility) { |
275 |
TemplateKey(DataObject d, boolean leaf) { |
277 |
this.d = d; |
276 |
this.d = d; |
278 |
this.visibility = visibility; |
277 |
this.leaf = leaf; |
279 |
} |
278 |
} |
280 |
@Override public boolean equals(Object o) { |
279 |
@Override public boolean equals(Object o) { |
281 |
if (!(o instanceof TemplateKey)) { |
280 |
if (!(o instanceof TemplateKey)) { |
282 |
return false; |
281 |
return false; |
283 |
} |
282 |
} |
284 |
return d == ((TemplateKey) o).d && visibility == ((TemplateKey) o).visibility; |
283 |
return d == ((TemplateKey) o).d && leaf == ((TemplateKey) o).leaf; |
285 |
} |
284 |
} |
286 |
@Override public int hashCode() { |
285 |
@Override public int hashCode() { |
287 |
return d.hashCode(); |
286 |
return d.hashCode(); |
Lines 304-340
Link Here
|
304 |
} |
303 |
} |
305 |
|
304 |
|
306 |
@Override protected boolean createKeys(List<TemplateKey> keys) { |
305 |
@Override protected boolean createKeys(List<TemplateKey> keys) { |
307 |
DataObject[] kids = folder.getChildren(); |
306 |
for (DataObject d : folder.getChildren()) { |
308 |
int alreadyAdded = keys.size(); |
307 |
if (isFolderOfTemplates(d)) { |
309 |
if (alreadyAdded >= kids.length) { |
308 |
boolean leaf = true; |
310 |
return true; |
309 |
for (DataObject child : ((DataFolder) d).getChildren()) { |
|
|
310 |
if (isFolderOfTemplates(child)) { |
311 |
leaf = false; |
312 |
break; |
313 |
} |
314 |
} |
315 |
keys.add(new TemplateKey(d, leaf)); |
316 |
} |
311 |
} |
317 |
} |
312 |
DataObject d = kids[alreadyAdded]; |
318 |
return true; |
313 |
Visibility v; |
|
|
314 |
if (isFolderOfTemplates(d)) { |
315 |
v = Visibility.LEAF; |
316 |
for (DataObject child : ((DataFolder) d).getChildren()) { |
317 |
if (isFolderOfTemplates(child)) { |
318 |
v = Visibility.CATEGORY; |
319 |
break; |
320 |
} |
321 |
} |
322 |
} else { |
323 |
v = Visibility.HIDE; |
324 |
} |
325 |
keys.add(new TemplateKey(d, v)); |
326 |
return false; |
327 |
} |
319 |
} |
328 |
|
320 |
|
329 |
@Override protected Node createNodeForKey(TemplateKey k) { |
321 |
@Override protected Node createNodeForKey(TemplateKey k) { |
330 |
switch (k.visibility) { |
322 |
return new FilterNode(k.d.getNodeDelegate(), k.leaf ? Children.LEAF : Children.create(new TemplateChildren((DataFolder) k.d), true)); |
331 |
case CATEGORY: |
|
|
332 |
return new FilterNode(k.d.getNodeDelegate(), Children.create(new TemplateChildren((DataFolder) k.d), true)); |
333 |
case LEAF: |
334 |
return new FilterNode(k.d.getNodeDelegate(), Children.LEAF); |
335 |
default: |
336 |
return null; |
337 |
} |
338 |
} |
323 |
} |
339 |
|
324 |
|
340 |
@Override public void actionPerformed (ActionEvent event) { |
325 |
@Override public void actionPerformed (ActionEvent event) { |
Lines 361-384
Link Here
|
361 |
|
346 |
|
362 |
} |
347 |
} |
363 |
|
348 |
|
364 |
private final class FileKey { |
349 |
private final class FileChildren extends ChildFactory<DataObject> { |
365 |
final DataObject d; |
|
|
366 |
final boolean visible; |
367 |
FileKey(DataObject d, boolean visible) { |
368 |
this.d = d; |
369 |
this.visible = visible; |
370 |
} |
371 |
@Override public boolean equals(Object o) { |
372 |
if (!(o instanceof FileKey)) { |
373 |
return false; |
374 |
} |
375 |
return d == ((FileKey) o).d && visible == ((FileKey) o).visible; |
376 |
} |
377 |
@Override public int hashCode() { |
378 |
return d.hashCode(); |
379 |
} |
380 |
} |
381 |
private final class FileChildren extends ChildFactory<FileKey> { |
382 |
|
350 |
|
383 |
private DataFolder root; |
351 |
private DataFolder root; |
384 |
|
352 |
|
Lines 387-412
Link Here
|
387 |
assert this.root != null : "Root can not be null"; //NOI18N |
355 |
assert this.root != null : "Root can not be null"; //NOI18N |
388 |
} |
356 |
} |
389 |
|
357 |
|
390 |
@Override protected boolean createKeys(List<FileKey> keys) { |
358 |
@Override protected boolean createKeys(List<DataObject> keys) { |
391 |
DataObject[] kids = root.getChildren(); |
359 |
for (DataObject dobj : root.getChildren()) { |
392 |
int alreadyAdded = keys.size(); |
360 |
if (isTemplate(dobj) && OpenProjectList.isRecommended(projectRecommendedTypes, dobj.getPrimaryFile())) { |
393 |
if (alreadyAdded >= kids.length) { |
361 |
if (dobj instanceof DataShadow) { |
394 |
return true; |
362 |
dobj = ((DataShadow) dobj).getOriginal(); |
|
|
363 |
} |
364 |
keys.add(dobj); |
365 |
} |
395 |
} |
366 |
} |
396 |
DataObject dobj = kids[alreadyAdded]; |
367 |
return true; |
397 |
if (isTemplate(dobj) && OpenProjectList.isRecommended(projectRecommendedTypes, dobj.getPrimaryFile())) { |
|
|
398 |
if (dobj instanceof DataShadow) { |
399 |
dobj = ((DataShadow) dobj).getOriginal(); |
400 |
} |
401 |
keys.add(new FileKey(dobj, true)); |
402 |
} else { |
403 |
keys.add(new FileKey(dobj, false)); |
404 |
} |
405 |
return false; |
406 |
} |
368 |
} |
407 |
|
369 |
|
408 |
@Override protected Node createNodeForKey(FileKey key) { |
370 |
@Override protected Node createNodeForKey(DataObject d) { |
409 |
return key.visible ? new FilterNode(key.d.getNodeDelegate(), Children.LEAF) : null; |
371 |
return new FilterNode(d.getNodeDelegate(), Children.LEAF); |
410 |
} |
372 |
} |
411 |
|
373 |
|
412 |
} |
374 |
} |