/*******************************************************************************
 * Copyright (c) 2016 IBM Corporation. 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * 	Contributors:
 * 	    IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.jsdt.js.node.runtime;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;

import org.eclipse.wst.jsdt.core.runtime.IJSRuntimeInstall;
import org.eclipse.wst.jsdt.core.runtime.IJSRuntimeInstallProvider;
import org.eclipse.wst.jsdt.core.runtime.IJSRuntimeType;
import org.eclipse.wst.jsdt.js.node.internal.NodeUtil;

/**
 * @author "Adalberto Lopez Venegas (adalbert)"
 */
public class NodeJSRuntimeProvider implements IJSRuntimeInstallProvider {
	@Override
	public Collection<IJSRuntimeInstall> getJSRuntimeInstallContributions(IJSRuntimeType runtimeType) {
		ArrayList<IJSRuntimeInstall> array = new ArrayList<IJSRuntimeInstall>();
		File nodeSystemPath = NodeUtil.findNodeSystemPath();
		// Return a system path install if there is one, otherwise return nothing
		if (nodeSystemPath != null) {
			IJSRuntimeInstall contributedRuntimeInstall = runtimeType.createRuntimeInstall("GlobalNodeJsRuntime");
			contributedRuntimeInstall.setName ("Global Node.js");
			contributedRuntimeInstall.setInstallLocation(nodeSystemPath);
			array.add(contributedRuntimeInstall);
		}
		return array;
	}
}
