/**
* Copyright (c) 2013-2016 Angelo ZERR and Genuitec LLC.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
* Piotr Tomiak <piotr@genuitec.com> - support for tern.js debugging
*/
package tern.eclipse.ide.server.nodejs.internal.core;
import java.io.File;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Preferences;
import tern.eclipse.ide.core.IIDETernRepository;
import tern.eclipse.ide.core.TernCorePlugin;
import tern.eclipse.ide.core.preferences.PreferencesSupport;
import tern.eclipse.ide.server.nodejs.core.INodejsInstall;
import tern.eclipse.ide.server.nodejs.core.TernNodejsCoreConstants;
import tern.eclipse.ide.server.nodejs.core.TernNodejsCorePlugin;
import tern.server.nodejs.NodejsTernHelper;
import tern.utils.StringUtils;
/**
* Support for tern core node.js preferences.
*
*/
@SuppressWarnings("deprecation")
public class TernNodejsCorePreferencesSupport {
private static final String NODES_QUALIFIER = TernNodejsCorePlugin.PLUGIN_ID;
private static final Preferences store = TernNodejsCorePlugin.getDefault()
.getPluginPreferences();
private PreferencesSupport preferencesSupport;
private TernNodejsCorePreferencesSupport() {
preferencesSupport = new PreferencesSupport(
TernNodejsCorePlugin.PLUGIN_ID, store);
}
private static TernNodejsCorePreferencesSupport instance = null;
public static TernNodejsCorePreferencesSupport getInstance() {
if (instance == null) {
instance = new TernNodejsCorePreferencesSupport();
}
return instance;
}
/**
* Returns the node install from the workspace preferences.
*
* @return
*/
public INodejsInstall getNodejsInstall() {
String id = preferencesSupport
.getWorkspacePreferencesValue(TernNodejsCoreConstants.NODEJS_INSTALL);
return TernNodejsCorePlugin.getNodejsInstallManager()
.findNodejsInstall(id);
}
/**
* returns the node.js install path.
*
* @return
*/
public File getInstallPath() {
INodejsInstall install = getNodejsInstall();
if (install != null) {
if (install.isNative()) {
String path = preferencesSupport
.getWorkspacePreferencesValue(TernNodejsCoreConstants.NODEJS_PATH);
if (!StringUtils.isEmpty(path)) {
return new File(path);
}
} else {
return install.getPath();
}
}
return new File("node");
}
/**
* Returns the timeout to use when node.js starts to retrieve the node.js
* port in {@link NodejsProcess#start(long, int)}
*
* @return
*/
public long getNodejsTimeout() {
String timeout = preferencesSupport
.getWorkspacePreferencesValue(TernNodejsCoreConstants.NODEJS_TIMEOUT);
try {
return Long.parseLong(timeout);
} catch (Throwable e) {
return NodejsTernHelper.DEFAULT_TIMEOUT;
}
}
/**
* Returns the test number to use when node.js starts to retrieve the
* node.js port in {@link NodejsProcess#start(long, int)}
*
* @return
*/
public int getNodejsTestNumber() {
String timeout = preferencesSupport
.getWorkspacePreferencesValue(TernNodejsCoreConstants.NODEJS_TEST_NUMBER);
try {
return Integer.parseInt(timeout);
} catch (Throwable e) {
return NodejsTernHelper.DEFAULT_TEST_NUMBER;
}
}
/**
* Return false if the server will shut itself down after five minutes of
* inactivity and true otherwise.
*
* @return false if the server will shut itself down after five minutes of
* inactivity and true otherwise.
*/
public boolean isNodejsPersistent() {
String persistent = preferencesSupport
.getWorkspacePreferencesValue(TernNodejsCoreConstants.NODEJS_PERSISTENT);
try {
return Boolean.parseBoolean(persistent);
} catch (Throwable e) {
return NodejsTernHelper.DEFAULT_PERSISTENT;
}
}
/**
* Returns true if node.js server is a remote node.js server (don't start an
* internal node.js process) and false otherwise.
*
* @return true if node.js server is a remote node.js server (don't start an
* internal node.js process) and false otherwise.
*/
public boolean isNodejsRemoteAccess() {
String persistent = preferencesSupport
.getWorkspacePreferencesValue(TernNodejsCoreConstants.NODEJS_REMOTE_ACCESS);
try {
return Boolean.parseBoolean(persistent);
} catch (Throwable e) {
return NodejsTernHelper.DEFAULT_REMOTE_ACCESS;
}
}
/**
* Returns the node.js port of the remote node.js server.
*
* @return the node.js port of the remote node.js server.
*/
public int getNodejsRemotePort() {
String timeout = preferencesSupport
.getWorkspacePreferencesValue(TernNodejsCoreConstants.NODEJS_REMOTE_PORT);
try {
return Integer.parseInt(timeout);
} catch (Throwable e) {
return NodejsTernHelper.DEFAULT_REMOTE_PORT;
}
}
public String getDebugger() {
return preferencesSupport
.getWorkspacePreferencesValue(TernNodejsCoreConstants.NODEJS_DEBUGGER);
}
public IFile getTernServerDebugFile() {
String repositoryName = preferencesSupport
.getWorkspacePreferencesValue(TernNodejsCoreConstants.NODEJS_TERN_REPOSITORY);
if (repositoryName != null) {
try {
IIDETernRepository repository = TernCorePlugin.getTernRepositoryManager().getRepository(repositoryName);
return repository != null ? repository.getTernServerFile() : null;
} catch (Exception e) {
// ignore
}
}
return null;
}
}