/*
 * Licensed 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.ngrinder.script.handler;

import org.springframework.stereotype.Component;

import java.io.File;
import java.util.List;

import static java.lang.System.getenv;
import static org.apache.commons.lang.StringUtils.isNotEmpty;
import static org.ngrinder.common.util.AccessUtils.getSafe;

/**
 * Groovy Maven project {@link ScriptHandler}.
 *
 * @since 3.2
 */
@Component
public class GroovyMavenProjectScriptHandler extends GroovyProjectScriptHandler {

	public static final String MAVEN_HOME_ENV_NAME = "MAVEN_HOME";

	private String mavenPath;

	public GroovyMavenProjectScriptHandler() {
		super("groovy_maven", "", "Groovy Maven Project", "groovy", "pom.xml", false);

		mavenPath = getSafe(getenv(MAVEN_HOME_ENV_NAME), "");
		if (isNotEmpty(mavenPath)) {
			mavenPath += "/bin/";
		}
	}

	@Override
	protected String getCopyDependenciesCommand(File distDir) {
		String distDirPath = distDir.getAbsolutePath();
		return mavenPath + "mvn -f " + distDirPath + " dependency:copy-dependencies -DoutputDirectory=./lib " +
			"-DexcludeScope=provided -Dmaven.multiModuleProjectDirectory=" + distDirPath;
	}

	@Override
	protected boolean isSuccess(List<String> results) {
		if (results.isEmpty()) {
			return false;
		}
		return results.stream().noneMatch(str -> str.contains("[ERROR]"));
	}
}
