Package org.nodeclipse.debug.model

Source Code of org.nodeclipse.debug.model.ResourceManager

package org.nodeclipse.debug.model;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.chromium.debug.core.model.ChromiumLineBreakpoint;
import org.chromium.debug.core.model.VmResourceId;
import org.chromium.sdk.Script;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.debug.core.model.ILineBreakpoint;
import org.nodeclipse.debug.util.NodeResourceUtil;
import org.nodeclipse.ui.Activator;
import org.osgi.framework.Bundle;

public class ResourceManager extends
    org.chromium.debug.core.model.ResourceManager {
  private IProject debugProject = null;

  public ResourceManager(IProject debugProject) {
    super(debugProject);
    this.debugProject = debugProject;
  }

  public synchronized void addScript(Script newScript) {
    VmResourceId id = VmResourceId.forScript(newScript);
    try {
      VmResourceInfo info = resourceIdToInfo.get(id);
      ScriptSet scriptSet;
      if (info == null) {
        scriptSet = new ScriptSet();
        info = createAndRegisterResourceFile(id, scriptSet);
      } else {
        // TODO(peter.rybin): support adding scripts to one resource at
        // once not to rewrite file
        // every time.
        scriptSet = (ScriptSet) info.getMetadata();
        ;
      }
      scriptSet.add(newScript);
      writeScriptSource(scriptSet.asCollection(), info.getFile());
      addCromiumBreakpointFromJs(id.getName(), info.getFile());
    } catch (RuntimeException e) {
      throw new RuntimeException("Failed to add script " + id, e);
    }
  }

  private void addCromiumBreakpointFromJs(String jsFilename,
      IResource cromiumFile) {
    NodeResourceUtil.register(jsFilename, cromiumFile);
    IBreakpoint[] breakpoins = DebugPlugin.getDefault()
        .getBreakpointManager()
        .getBreakpoints(VProjectWorkspaceBridge.DEBUG_MODEL_ID);
    for (IBreakpoint b : breakpoins) {
      try {
        if (machFile(jsFilename, b.getMarker().getResource())) {
          addChromiumBreakpoint(cromiumFile.getName(), ((ILineBreakpoint)b).getLineNumber());
        }
      } catch(Exception ex) {
        new RuntimeException("Failed to add script " + jsFilename, ex);
      }
    }
  }

  private boolean machFile(String jsFilename, IResource breakpointResource) throws CoreException {
    if (jsFilename == null || breakpointResource == null) {
      return false;
    }
    if (jsFilename.equals(breakpointResource.getName())) {
      return true;
    }
    String path = breakpointResource.getFullPath().toOSString();
    if (jsFilename.equals(path)) {
      return true;
    }
    path = breakpointResource.getLocationURI().getPath();
    if(jsFilename.equals(path)) {
      return true;
    }
    path = path.replace('/', '\\');
    if(path.startsWith("\\")) {
      path = path.substring(1);
    }
    if(jsFilename.equals(path)) {
      return true;
    }
   
    return false;
  }
 
  private void addChromiumBreakpoint(String filename, int lineNumber) throws CoreException {
    IResource resource = debugProject.getFile(filename);
       ChromiumLineBreakpoint lineBreakpoint =
        new ChromiumLineBreakpoint(resource, lineNumber, VProjectWorkspaceBridge.DEBUG_MODEL_ID);
       DebugPlugin.getDefault().getBreakpointManager().addBreakpoint(lineBreakpoint);
  }
}
TOP

Related Classes of org.nodeclipse.debug.model.ResourceManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.