blob: 5ac985b8a83254238c1ca72ff4f3d3d1fbd12e4c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.javascript.v8debug.api;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.netbeans.api.annotations.common.CheckForNull;
import org.netbeans.api.annotations.common.NullAllowed;
import org.netbeans.modules.javascript.v8debug.V8Debugger;
/**
* V8 debugger connector. Starts up a new debugging session.
*
* @author Martin Entlicher
*/
public final class Connector {
private Connector() {}
/**
* Connects debugger to a V8 JavaScript engine running in a debug mode.
* @param properties The connection properties
* @param finishCallback A runnable called when debugger finishes.
* Might do some cleanup, e.g. kill the V8 engine.
* Can be <code>null</code>.
* @throws IOException When the connection can not be established.
*/
public static void connect(Properties properties, @NullAllowed Runnable finishCallback) throws IOException {
V8Debugger.startSession(properties, finishCallback);
}
/**
* Debugger connection properties.
*/
public static final class Properties {
private final String hostName;
private final int port;
private final List<String> localPaths;
private final List<String> serverPaths;
private final Collection<String> localPathExclusionFilters;
/**
* Creates simple host and port connection properties.
* @param hostName The host name
* @param port The port number
*/
public Properties(@NullAllowed String hostName, int port) {
this(hostName, port, Collections.EMPTY_LIST, Collections.EMPTY_LIST, Collections.EMPTY_SET);
}
/**
* Creates properties with specification of local and server paths.
* <code>localPaths</code> limits the local paths that are used for breakpoints
* submissions. Only sources below <code>localPaths</code> are considered
* for debugging. There can be excluded some folders from these local paths
* via <code>localPathExclusionFilters</code>.
* <p>
* If connecting to a remote server, <code>serverPaths</code> should be
* defined and must contain the same number of entries as <code>localPaths</code>
* in the same order, representing a server location of the copy of local files.
* @param hostName The host name
* @param port The port number
* @param localPaths A list of local folders containing source files.
* @param serverPaths Expected to be empty for local connections.
* For remote connection it must have the same size
* as <code>localPaths</code> and contain the server
* location of folders corresponding to local source
* folders in the same order.
* @param localPathExclusionFilters List of folders that are to be excluded
* from sources.
*/
public Properties(@NullAllowed String hostName, int port,
List<String> localPaths, List<String> serverPaths,
Collection<String> localPathExclusionFilters) {
this.hostName = hostName;
this.port = port;
this.localPaths = localPaths;
this.serverPaths = serverPaths;
this.localPathExclusionFilters = localPathExclusionFilters;
if (!serverPaths.isEmpty() && localPaths.size() != serverPaths.size()) {
throw new IllegalArgumentException("Different size of localPaths and serverPaths: "+
"localPaths = "+localPaths+", serverPaths = "+serverPaths);
}
}
@CheckForNull
public String getHostName() {
return hostName;
}
public int getPort() {
return port;
}
public List<String> getLocalPaths() {
return localPaths;
}
public List<String> getServerPaths() {
return serverPaths;
}
public Collection<String> getLocalPathExclusionFilters() {
return localPathExclusionFilters;
}
}
}