/*
* Copyright 2016 ThoughtWorks, Inc.
*
* 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 com.thoughtworks.go.remote.work;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.go.domain.MaterialRevision;
import com.thoughtworks.go.domain.builder.Builder;
import com.thoughtworks.go.domain.JobPlan;
import com.thoughtworks.go.domain.MaterialRevisions;
import com.thoughtworks.go.domain.buildcause.BuildCause;
import com.thoughtworks.go.domain.materials.Modification;
import com.thoughtworks.go.util.command.EnvironmentVariableContext;
public class BuildAssignment implements Serializable {
private final File buildWorkingDirectory;
private final List<Builder> builders;
private final JobPlan plan;
private final EnvironmentVariableContext initialContext = new EnvironmentVariableContext();
private final MaterialRevisions materialRevisions = new MaterialRevisions();
private final String approver;
private BuildAssignment(BuildCause buildCause, File buildWorkingDirectory, List<Builder> builder, JobPlan plan) {
this.buildWorkingDirectory = buildWorkingDirectory;
this.builders = builder;
this.plan = plan;
for (MaterialRevision materialRevision : buildCause.getMaterialRevisions()) {
ArrayList<Modification> modifications = new ArrayList<>();
for (Modification modification : materialRevision.getModifications()) {
modifications.add(new Modification(modification, false));
}
materialRevisions.addRevision(new MaterialRevision(materialRevision.getMaterial(), materialRevision.isChanged(), modifications));
}
approver = buildCause.getApprover();
}
@Override
public String toString() {
return "BuildAssignment{" +
"plan=" + plan +
", materialRevisions=" + materialRevisions +
", approver='" + approver + '\'' +
'}';
}
public JobPlan getPlan() {
return plan;
}
public static BuildAssignment create(JobPlan plan, BuildCause buildCause, List<Builder> builder, File file) {
return new BuildAssignment(buildCause, file, builder, plan);
}
public MaterialRevisions materialRevisions() {
return materialRevisions;
}
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
BuildAssignment that = (BuildAssignment) o;
if (materialRevisions != null ? !materialRevisions.equals(that.materialRevisions) : that.materialRevisions != null) {
return false;
}
if (approver != null ? !approver.equals(that.approver) : that.approver != null) {
return false;
}
if (plan != null ? !plan.equals(that.plan) : that.plan != null) {
return false;
}
if (buildWorkingDirectory != null ? !buildWorkingDirectory.equals(
that.buildWorkingDirectory) : that.buildWorkingDirectory != null) {
return false;
}
return true;
}
public int hashCode() {
int result;
result = (plan != null ? plan.hashCode() : 0);
result = 31 * result + (buildWorkingDirectory != null ? buildWorkingDirectory.hashCode() : 0);
result = 31 * result + (materialRevisions != null ? materialRevisions.hashCode() : 0);
result = 31 * result + (approver != null ? approver.hashCode() : 0);
return result;
}
public File getWorkingDirectory() {
return buildWorkingDirectory;
}
public List<Builder> getBuilders() {
return builders;
}
public void enhanceEnvironmentVariables(EnvironmentVariableContext context) {
initialContext.addAll(context);
}
public EnvironmentVariableContext initialEnvironmentVariableContext() {
return initialContext;
}
public String getBuildApprover(){
return approver;
}
}