1 24 package org.riotfamily.forms.resource; 25 26 import java.io.PrintWriter ; 27 import java.util.Collection ; 28 import java.util.Iterator ; 29 import java.util.LinkedHashSet ; 30 31 35 public class LoadingCodeGenerator implements ResourceVisitor { 36 37 private LinkedHashSet scripts = new LinkedHashSet (); 38 39 private LinkedHashSet stylesheets = new LinkedHashSet (); 40 41 private LoadingCodeGenerator() { 42 } 43 44 public static void renderLoadingCode(Collection resources, 45 PrintWriter writer) { 46 47 new LoadingCodeGenerator().render(resources, writer); 48 } 49 50 private void loadResources(Collection resources) { 51 if (resources == null) { 52 return; 53 } 54 Iterator it = resources.iterator(); 55 while (it.hasNext()) { 56 FormResource resource = (FormResource) it.next(); 57 if (resource != null) { 58 resource.accept(this); 59 } 60 } 61 } 62 63 public void visitScript(ScriptResource script) { 64 if (!scripts.contains(script)) { 65 loadResources(script.getDependencies()); 66 scripts.add(script); 67 } 68 } 69 70 public void visitStyleSheet(StylesheetResource stylesheet) { 71 if (!stylesheets.contains(stylesheet)) { 72 stylesheets.add(stylesheet); 73 } 74 } 75 76 private void render(Collection resources, PrintWriter writer) { 77 loadResources(resources); 78 Iterator it = stylesheets.iterator(); 79 while (it.hasNext()) { 80 StylesheetResource stylesheet = (StylesheetResource) it.next(); 81 writer.print("Resources.loadStyleSheet('"); 82 writer.print(stylesheet.getUrl()); 83 writer.print("');"); 84 } 85 86 if (!scripts.isEmpty()) { 87 writer.print("Resources.loadScriptSequence(["); 88 it = scripts.iterator(); 89 while (it.hasNext()) { 90 ScriptResource script = (ScriptResource) it.next(); 91 writer.print("{src:'"); 92 writer.print(script.getUrl()); 93 writer.print('\''); 94 if (script.getTest() != null) { 95 writer.print(", test:'"); 96 writer.print(script.getTest()); 97 writer.print('\''); 98 } 99 writer.print("}"); 100 if (it.hasNext()) { 101 writer.print(','); 102 } 103 } 104 writer.print("]);"); 105 } 106 } 107 108 } 109 | Popular Tags |