/** * Copyright (c) 2013-2016 Angelo ZERR. * 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 */ package tern.server.nodejs.process; import java.io.File; import java.io.IOException; import tern.utils.ZipUtils; public class PathHelper { private static final String NODE_VERSION = "4.2.4"; private PathHelper() { } /** * Returns nodejs base dir switch OS. * * @return */ public static File getNodejsBasedir() { /* * String s = "name: " + System.getProperty ("os.name"); s += * ", version: " + System.getProperty ("os.version"); s += ", arch: " + * System.getProperty ("os.arch"); System.out.println ("OS=" + s); */ String os = System.getProperty("osgi.os"); System.out.println("os " + os); String arch = System.getProperty("osgi.arch"); System.out.println("arch " + arch); String ws = System.getProperty("osgi.ws"); System.out.println("ws " + ws); if (os == null && arch == null && ws == null) { // JUnit are not executed with OSGi, set it for windows. os = "win32"; ws = "win32"; arch = "x86"; } unZipIfNecessary(os,ws,arch); File file; // TODO : manage the patch switch OS. // no "bin" subfolder for windows... if ("win32".equals(os)) { file = new File( "../../eclipse/embed/tern.eclipse.ide.server.nodejs.embed." + os + "." + ws + "." + arch + "/node-v" + NODE_VERSION + "-" + os + "-" + arch + "/node"); } else { // Linux, mac... file = new File( "../../eclipse/embed/tern.eclipse.ide.server.nodejs.embed." + os + "." + ws + "." + arch + "/node-v" + NODE_VERSION + "-" + os + "-" + arch + "/bin/node"); } System.out.println("file path " + file.getAbsolutePath()); System.out.println("file path exists ? " + file.exists()); return file; } private static void unZipIfNecessary(String os, String ws, String arch) { String folderName = "../../eclipse/embed/tern.eclipse.ide.server.nodejs.embed." + os + "." + ws + "." + arch + "/node-v" + NODE_VERSION + "-" + os + "-" + arch; File file = new File(folderName); if (!file.exists()) { File zipFile = new File(folderName+".zip"); try { ZipUtils.extract(zipFile,zipFile.getParentFile()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * Return tern base dir. * * @return */ public static File getNodejsTernBaseDir() { return new File(getTernRepositoryDir(), "node_modules/tern"); } /** * Return tern base dir. * * @return */ public static File getTernRepositoryDir() { return new File("../ternjs"); } }