From 86c36aa09e356985c4d6e70705d0929bc4ff38ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Tue, 1 Sep 2009 11:30:02 +0200 Subject: [PATCH] ItEr24S08CUAsignacionGrupoRecursosAPlanificacionItEr23S10: Adding context path to urls. --- .../ganttz/util/script/ScriptsComponent.java | 68 +++++++++++++++---- 1 file changed, 54 insertions(+), 14 deletions(-) diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/util/script/ScriptsComponent.java b/ganttzk/src/main/java/org/zkoss/ganttz/util/script/ScriptsComponent.java index 3c4cd4971..5e286aecc 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/util/script/ScriptsComponent.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/util/script/ScriptsComponent.java @@ -1,35 +1,75 @@ package org.zkoss.ganttz.util.script; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.zkoss.ganttz.util.OnZKDesktopRegistry; +import org.zkoss.zk.ui.Execution; +import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.HtmlMacroComponent; public class ScriptsComponent extends HtmlMacroComponent { - private ScriptDependenciesSorter dependenciesSorter; + private List current = Collections.emptyList(); public ScriptsComponent() { OnZKDesktopRegistry singleton = getScriptsRegister(); - dependenciesSorter = new ScriptDependenciesSorter(); - singleton.store(new IScriptsRegister() { - - @Override - public void register(Class klassContainingScripts) - throws IllegalArgumentException { - dependenciesSorter.register(klassContainingScripts); - recreate(); - } - }); + ScriptRegister register; + if (singleton.isRegistered()) { + register = (ScriptRegister) singleton.retrieve(); + } else { + register = new ScriptRegister(); + singleton.store(register); + } + register.addDependant(this); } private OnZKDesktopRegistry getScriptsRegister() { - return OnZKDesktopRegistry - .getLocatorFor(IScriptsRegister.class); + return OnZKDesktopRegistry.getLocatorFor(IScriptsRegister.class); } public List getScriptDependencies() { - return dependenciesSorter.getScriptDependenciesOrderered(); + return current; + } + + void setDependencies(List current) { + this.current = current; + recreate(); } } + +class ScriptRegister implements IScriptsRegister { + private ScriptDependenciesSorter dependenciesSorter = new ScriptDependenciesSorter(); + + private List dependant = new ArrayList(); + + void addDependant(ScriptsComponent component) { + dependant.add(component); + } + + @Override + public void register(Class klassContainingScripts) + throws IllegalArgumentException { + dependenciesSorter.register(klassContainingScripts); + notifyDependant(encodeURLs(dependenciesSorter + .getScriptDependenciesOrderered())); + } + + private List encodeURLs( + List scriptDependenciesOrderered) { + List result = new ArrayList(); + Execution execution = Executions.getCurrent(); + for (ScriptDependency s : scriptDependenciesOrderered) { + result.add(new ScriptDependency(execution.encodeURL(s.getURL()))); + } + return result; + } + + private void notifyDependant(List current) { + for (ScriptsComponent d : dependant) { + d.setDependencies(current); + } + } +}