Refactor
:my
=>
'code'
Codes
Refactorings
Popular
Best
Submit
Spam
Account
Logout
Login
JavaScript doesn't seem to be activated, expect things to be ugly and sloppy!
More Jobs
Recent
ActiveRecord object custom pagination
Think this needs a loop
sort_by_multiple
Prepare links - friendly URLs
Rails Active Record Time Summary
Experimental Prime Number Generator
Pythonify my code
DVD Directory Archiver
Raytracer in haskell
Cryptography with MD5
Popular
sort_by_multiple
Think this needs a loop
Prepare links - friendly URLs
Cryptography with MD5
Rails Active Record Time Summary
Raytracer in haskell
DVD Directory Archiver
Pythonify my code
Experimental Prime Number Generator
ActiveRecord object custom pagination
Pastable version of
Create a tree out of a collection of files
<div style="overflow:auto;border:solid 1px #ccc;background:#000;color:#F8F8F8"> <div class="section"> <span style="margin:0;padding:4px 6px;font-size:12px;float:right;">Code</span> <pre style="float:left;margin:0 10px;border-right:0;color:#666;">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96</pre> <pre class="sunburst"><span style="color:#99CF50;">public </span><span style="color:#89BDFF;">PreviewTreeModel</span>(<span style="color:#9B859D;">Collection</span><<span style="color:#99CF50;">FileDescription</span>> files) { <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> contains all files in the tree</span> <span style="color:#3E87E3;">this</span>.files = <span style="color:#E28964;">new</span> <span style="color:#9B859D;">ArrayList</span><span style="color:#E28964;"><</span><span style="color:#99CF50;">FileDescription</span><span style="color:#E28964;">></span>(files); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> add missing parents</span> <span style="color:#E28964;">for</span> (<span style="color:#99CF50;">FileDescription</span> description : files) { <span style="color:#99CF50;">FileDescription</span> parent = <span style="color:#E28964;">new</span> <span style="color:#99CF50;">FileDescription</span>(description.getFile().getParentFile(), <span style="color:#3387CC;">false</span>); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> add missing parents</span> <span style="color:#9B859D;">File</span> parentFile = parent.getFile(); <span style="color:#9B859D;">List</span><span style="color:#E28964;"><</span><span style="color:#99CF50;">FileDescription</span><span style="color:#E28964;">></span> parents = <span style="color:#E28964;">new</span> <span style="color:#9B859D;">Vector</span><span style="color:#E28964;"><</span><span style="color:#99CF50;">FileDescription</span><span style="color:#E28964;">></span>(); <span style="color:#E28964;">while</span> (parentFile <span style="color:#E28964;">!=</span> <span style="color:#3387CC;">null</span>) { <span style="color:#99CF50;">FileDescription</span> parentDescription = <span style="color:#E28964;">new</span> <span style="color:#99CF50;">FileDescription</span>(parentFile, <span style="color:#3387CC;">false</span>); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> connected to an existing file</span> <span style="color:#E28964;">if</span> (<span style="color:#3E87E3;">this</span>.files.contains(parentDescription)) { <span style="color:#3E87E3;">this</span>.files.addAll(parents); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> complete connection</span> <span style="color:#E28964;">break</span>; } parents.add(parentDescription); parentFile = parentFile.getParentFile(); } } <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> find roots</span> <span style="color:#3E87E3;">this</span>.roots = <span style="color:#3E87E3;">this</span>.findRoots(files); <span style="color:#AEAEAE;font-style:italic;"><span style="color:#AEAEAE;font-style:italic;">//</span> make sure all roots are folders</span> <span style="color:#E28964;">for</span> (<span style="color:#99CF50;">FileDescription</span> root : <span style="color:#3E87E3;">this</span>.roots) <span style="color:#E28964;">if</span> (root.isFile()) { <span style="color:#3E87E3;">this</span>.roots.remove(root); <span style="color:#3E87E3;">this</span>.roots.add(<span style="color:#E28964;">new</span> <span style="color:#99CF50;">FileDescription</span>(root.getFile().getParentFile(), <span style="color:#3387CC;">false</span>)); } } <span style="color:#99CF50;">private </span><span style="color:#99CF50;">Collection</span><span style="color:#99CF50;"><FileDescription></span> <span style="color:#89BDFF;">findRoots</span>(<span style="color:#9B859D;">Collection</span><<span style="color:#99CF50;">FileDescription</span>> descriptions) { logger.trace(<span style="color:#65B042;"><span style="color:#65B042;">"</span>findRoots(<span style="color:#65B042;">"</span></span> <span style="color:#E28964;">+</span> descriptions <span style="color:#E28964;">+</span> <span style="color:#65B042;"><span style="color:#65B042;">"</span>)<span style="color:#65B042;">"</span></span>); <span style="color:#9B859D;">Collection</span><span style="color:#E28964;"><</span><span style="color:#99CF50;">FileDescription</span><span style="color:#E28964;">></span> files; <span style="color:#9B859D;">Collection</span><span style="color:#E28964;"><</span><span style="color:#99CF50;">FileDescription</span><span style="color:#E28964;">></span> roots = descriptions; <span style="color:#E28964;">do</span> { files = <span style="color:#E28964;">new</span> <span style="color:#9B859D;">Vector</span><span style="color:#E28964;"><</span><span style="color:#99CF50;">FileDescription</span><span style="color:#E28964;">></span>(roots); roots = <span style="color:#E28964;">new</span> <span style="color:#9B859D;">Vector</span><span style="color:#E28964;"><</span><span style="color:#99CF50;">FileDescription</span><span style="color:#E28964;">></span>(); <span style="color:#E28964;">for</span> (<span style="color:#99CF50;">FileDescription</span> fileA : files) <span style="color:#E28964;">for</span> (<span style="color:#99CF50;">FileDescription</span> fileB : files) <span style="color:#E28964;">if</span> (<span style="color:#E28964;">!</span>fileA.equals(fileB)) { <span style="color:#99CF50;">FileDescription</span> ancestor = <span style="color:#3E87E3;">this</span>.findAncestor(fileA, fileB); <span style="color:#E28964;">if</span> (ancestor <span style="color:#E28964;">!=</span> <span style="color:#3387CC;">null</span> <span style="color:#E28964;">&&</span> <span style="color:#E28964;">!</span>roots.contains(ancestor)) roots.add(ancestor); } } <span style="color:#E28964;">while</span> (<span style="color:#E28964;">!</span>roots.isEmpty()); <span style="color:#E28964;">return</span> files; } <span style="color:#99CF50;">private </span><span style="color:#99CF50;">FileDescription</span> <span style="color:#89BDFF;">findAncestor</span>(<span style="color:#99CF50;">FileDescription</span> a, <span style="color:#99CF50;">FileDescription</span> b) { logger.trace(<span style="color:#65B042;"><span style="color:#65B042;">"</span>findAncestor(<span style="color:#65B042;">"</span></span> <span style="color:#E28964;">+</span> a <span style="color:#E28964;">+</span> <span style="color:#65B042;"><span style="color:#65B042;">"</span>,<span style="color:#65B042;">"</span></span> <span style="color:#E28964;">+</span> b <span style="color:#E28964;">+</span> <span style="color:#65B042;"><span style="color:#65B042;">"</span>)<span style="color:#65B042;">"</span></span>); <span style="color:#9B859D;">String</span>[] partsA = a.getFile().getAbsolutePath().split(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\\</span><span style="color:#DDF2A4;">\\</span><span style="color:#65B042;">"</span></span>); <span style="color:#9B859D;">String</span>[] partsB = b.getFile().getAbsolutePath().split(<span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\\</span><span style="color:#DDF2A4;">\\</span><span style="color:#65B042;">"</span></span>); <span style="color:#99CF50;">int</span> minLength = <span style="color:#9B859D;">Math</span>.min(partsA.length, partsB.length); <span style="color:#9B859D;">List</span><span style="color:#E28964;"><</span><span style="color:#9B859D;">String</span><span style="color:#E28964;">></span> ancestorParts = <span style="color:#E28964;">new</span> <span style="color:#9B859D;">Vector</span><span style="color:#E28964;"><</span><span style="color:#9B859D;">String</span><span style="color:#E28964;">></span>(); <span style="color:#E28964;">for</span> (<span style="color:#99CF50;">int</span> i = <span style="color:#3387CC;">0</span>; i <span style="color:#E28964;"><</span> minLength; i<span style="color:#E28964;">++</span>) <span style="color:#E28964;">if</span> (partsA[i].equals(partsB[i])) ancestorParts.add(partsA[i]); <span style="color:#E28964;">else</span> <span style="color:#E28964;">break</span>; <span style="color:#9B859D;">String</span> ancestor = <span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#65B042;">"</span></span>; <span style="color:#E28964;">for</span> (<span style="color:#9B859D;">String</span> part : ancestorParts) ancestor <span style="color:#E28964;">+</span>= part <span style="color:#E28964;">+</span> <span style="color:#65B042;"><span style="color:#65B042;">"</span><span style="color:#DDF2A4;">\\</span><span style="color:#65B042;">"</span></span>; <span style="color:#E28964;">if</span> (ancestor.isEmpty()) <span style="color:#E28964;">return</span> <span style="color:#3387CC;">null</span>; <span style="color:#E28964;">else</span> <span style="color:#E28964;">return</span> <span style="color:#E28964;">new</span> <span style="color:#99CF50;">FileDescription</span>(<span style="color:#E28964;">new</span> <span style="color:#9B859D;">File</span>(ancestor), <span style="color:#3387CC;">false</span>); } </pre> </div> </div> <a href="http://refactormycode.com/codes/247-create-a-tree-out-of-a-collection-of-files" style="color:#fff" title="As seen on RefactorMyCode.com"><img alt="Small_logo" src="http://refactormycode.com/images/small_logo.gif" style="border:0" /></a>