package com.github.sdbg.integration.jdt.gwt.build; import com.github.sdbg.debug.core.model.IDOMResourceReference; import com.github.sdbg.debug.core.model.IDOMResourceTracker; import com.github.sdbg.debug.core.model.IDOMResources; import java.io.IOException; import java.io.Reader; import java.net.MalformedURLException; import java.util.Collection; import java.util.HashSet; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.json.JSONException; public class GWTSDMDOMResourceTracker implements IDOMResourceTracker { private static Collection<GWTSDMDOMResourceTracker> trackers = new HashSet<GWTSDMDOMResourceTracker>(); private IProject project; private IDOMResources domResources; public static Collection<GWTSDMDOMResourceTracker> getInitialized() { return new HashSet<GWTSDMDOMResourceTracker>(trackers); } public GWTSDMDOMResourceTracker() { } @Override public void dispose() { project = null; domResources = null; trackers.remove(this); } public IProject getProject() { return project; } @Override public void initialize(IProject project, IDOMResources domResources) { this.project = project; this.domResources = domResources; trackers.add(this); } public void uploadLatestScript(GWTSDMProperties properties, GWTSDMCodeServerAPI codeServerAPI) throws MalformedURLException, IOException, JSONException, CoreException { String modulePath = codeServerAPI.getModule() + "-0.js"; for (IDOMResourceReference ref : domResources.getResources()) { if (ref.getType() == IDOMResourceReference.Type.SCRIPT && ref.getUrl().equals(modulePath)) { switch (properties.getHotCodeReplacePolicy()) { case DISABLED: // Do nothing break; case RELOAD_PAGE: domResources.reload(); break; case CHROME_LIVE_EDIT: { Reader script = codeServerAPI.getCompiledScript(); if (script != null) { try { domResources.uploadNewSource(ref, script); } finally { script.close(); } } break; } default: throw new IllegalArgumentException("Unknown hot code replace policy: " + properties.getHotCodeReplacePolicy()); } } } } }