/*
* Copyright (c) 2017 the original author or authors.
* 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
*/
package org.eclipse.buildship.core.configuration.internal;
import java.io.File;
import java.util.List;
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import com.gradleware.tooling.toolingclient.GradleDistribution;
import com.gradleware.tooling.toolingmodel.repository.FixedRequestAttributes;
import org.eclipse.buildship.core.CorePlugin;
import org.eclipse.buildship.core.configuration.BuildConfiguration;
import org.eclipse.buildship.core.configuration.RunConfiguration;
import org.eclipse.buildship.core.configuration.WorkspaceConfiguration;
/**
* Default implementation for {@link RunConfiguration}.
*/
public class DefaultRunConfiguration implements RunConfiguration {
private final BuildConfiguration buildConfiguration;
private final RunConfigurationProperties properties;
public DefaultRunConfiguration(WorkspaceConfiguration workspaceConfiguration, BuildConfigurationProperties buildProperties, RunConfigurationProperties properties) {
this.buildConfiguration = new DefaultBuildConfiguration(buildProperties, workspaceConfiguration);
this.properties = properties;
}
@Override
public BuildConfiguration getBuildConfiguration() {
return this.buildConfiguration;
}
@Override
public List<String> getTasks() {
return this.properties.getTasks();
}
@Override
public GradleDistribution getGradleDistribution() {
if (this.properties.isOverrideBuildSettings()) {
return this.properties.getGradleDistribution();
} else {
return this.buildConfiguration.getGradleDistribution();
}
}
@Override
public File getJavaHome() {
return this.properties.getJavaHome();
}
@Override
public List<String> getJvmArguments() {
List<String> result = Lists.newArrayList(this.properties.getJvmArguments());
if (isBuildScansEnabled()) {
result.add("-Dscan");
}
return result;
}
private boolean isBuildScansEnabled() {
if (this.properties.isOverrideBuildSettings()) {
return this.properties.isBuildScansEnabled();
} else {
return this.buildConfiguration.isBuildScansEnabled();
}
}
@Override
public List<String> getArguments() {
List<String> result = Lists.newArrayList(this.properties.getArguments());
if (isOfflineMode()) {
result.add("--offline");
}
result.addAll(CorePlugin.invocationCustomizer().getExtraArguments());
return result;
}
private boolean isOfflineMode() {
if (this.properties.isOverrideBuildSettings()) {
return this.properties.isOfflineMode();
} else {
return this.buildConfiguration.isOfflineMode();
}
}
@Override
public boolean isShowExecutionView() {
return this.properties.isShowExecutionView();
}
@Override
public boolean isShowConsoleView() {
return this.properties.isShowConsoleView();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof DefaultRunConfiguration) {
DefaultRunConfiguration other = (DefaultRunConfiguration) obj;
return Objects.equal(this.buildConfiguration, other.buildConfiguration)
&& Objects.equal(this.properties, other.properties);
}
return false;
}
@Override
public FixedRequestAttributes toRequestAttributes() {
return new FixedRequestAttributes(this.buildConfiguration.getRootProjectDirectory(),
this.buildConfiguration.getWorkspaceConfiguration().getGradleUserHome(),
getGradleDistribution(),
getJavaHome(),
getJvmArguments(),
getArguments());
}
@Override
public int hashCode() {
return Objects.hashCode(this.buildConfiguration, this.properties);
}
}