/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.gradle.plugins.node; import com.liferay.gradle.plugins.node.internal.util.GradleUtil; import com.liferay.gradle.util.OSDetector; import com.liferay.gradle.util.Validator; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; import org.gradle.api.Project; import org.gradle.util.GUtil; /** * @author Andrea Di Giorgi */ public class NodeExtension { public NodeExtension(final Project project) { _download = GradleUtil.getProperty(project, "nodeDownload", true); _nodeDir = new Callable<File>() { @Override public File call() throws Exception { Project curProject = project; if (isGlobal()) { curProject = curProject.getRootProject(); } return new File(curProject.getBuildDir(), "node"); } }; _nodeExeUrl = new Callable<String>() { @Override public String call() throws Exception { String nodeVersion = getNodeVersion(); if (Validator.isNull(nodeVersion)) { return null; } StringBuilder sb = new StringBuilder(); sb.append("http://nodejs.org/dist/v"); sb.append(nodeVersion); sb.append('/'); String bitmode = OSDetector.getBitmode(); if (bitmode.equals("64")) { if (nodeVersion.charAt(0) != '0') { sb.append("win-x64"); } else { sb.append("x64"); } } else if (nodeVersion.charAt(0) != '0') { sb.append("win-x86"); } sb.append("/node.exe"); return sb.toString(); } }; _nodeUrl = new Callable<String>() { @Override public String call() throws Exception { String nodeVersion = getNodeVersion(); if (Validator.isNull(nodeVersion)) { return null; } StringBuilder sb = new StringBuilder(); sb.append("http://nodejs.org/dist/v"); sb.append(nodeVersion); sb.append("/node-v"); sb.append(nodeVersion); sb.append('-'); String os = "linux"; if (OSDetector.isApple()) { os = "darwin"; } sb.append(os); sb.append("-x"); String bitmode = OSDetector.getBitmode(); if (bitmode.equals("32") || OSDetector.isWindows()) { bitmode = "86"; } sb.append(bitmode); sb.append(".tar.gz"); return sb.toString(); } }; _npmUrl = new Callable<String>() { @Override public String call() throws Exception { String npmVersion = getNpmVersion(); if (Validator.isNull(npmVersion)) { return null; } return "https://registry.npmjs.org/npm/-/npm-" + npmVersion + ".tgz"; } }; _project = project; } public File getNodeDir() { return GradleUtil.toFile(_project, _nodeDir); } public String getNodeExeUrl() { return GradleUtil.toString(_nodeExeUrl); } public String getNodeUrl() { return GradleUtil.toString(_nodeUrl); } public String getNodeVersion() { return GradleUtil.toString(_nodeVersion); } public List<String> getNpmArgs() { return GradleUtil.toStringList(_npmArgs); } public String getNpmUrl() { return GradleUtil.toString(_npmUrl); } public String getNpmVersion() { return GradleUtil.toString(_npmVersion); } public boolean isDownload() { return _download; } public boolean isGlobal() { return _global; } public NodeExtension npmArgs(Iterable<?> npmArgs) { GUtil.addToCollection(_npmArgs, npmArgs); return this; } public NodeExtension npmArgs(Object... npmArgs) { return npmArgs(Arrays.asList(npmArgs)); } public void setDownload(boolean download) { _download = download; } public void setGlobal(boolean global) { _global = global; } public void setNodeDir(Object nodeDir) { _nodeDir = nodeDir; } public void setNodeExeUrl(Object nodeExeUrl) { _nodeExeUrl = nodeExeUrl; } public void setNodeUrl(Object nodeUrl) { _nodeUrl = nodeUrl; } public void setNodeVersion(Object nodeVersion) { _nodeVersion = nodeVersion; } public void setNpmArgs(Iterable<?> npmArgs) { _npmArgs.clear(); npmArgs(npmArgs); } public void setNpmArgs(Object... npmArgs) { setNpmArgs(Arrays.asList(npmArgs)); } public void setNpmUrl(Object npmUrl) { _npmUrl = npmUrl; } public void setNpmVersion(Object npmVersion) { _npmVersion = npmVersion; } private boolean _download; private boolean _global; private Object _nodeDir; private Object _nodeExeUrl; private Object _nodeUrl; private Object _nodeVersion = "5.5.0"; private final List<Object> _npmArgs = new ArrayList<>(); private Object _npmUrl; private Object _npmVersion; private final Project _project; }