/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* 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:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.environment.server.model;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* Describes how to build image for container creation.
*
* @author Alexander Garagatyi
*/
public class CheServiceBuildContextImpl {
private String context;
private String dockerfilePath;
private String dockerfileContent;
private Map<String,String> args;
public CheServiceBuildContextImpl() {}
public CheServiceBuildContextImpl(String context,
String dockerfilePath,
String dockerfileContent,
Map<String,String> args) {
this.context = context;
this.dockerfilePath = dockerfilePath;
this.dockerfileContent = dockerfileContent;
if (args != null) {
this.args = new HashMap<>(args);
}
}
public CheServiceBuildContextImpl(CheServiceBuildContextImpl buildContext) {
this(buildContext.getContext(),
buildContext.getDockerfilePath(),
buildContext.getDockerfileContent(),
buildContext.getArgs());
}
/**
* Build context.
*
* <p/>Can be git repository, url to Dockerfile.
*/
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
public CheServiceBuildContextImpl withContext(String context) {
this.context = context;
return this;
}
/**
* Path to alternate Dockerfile, including name.
*
* <p/> Needed if dockerfile has non-default name or is not placed in the root of build context.
* <br/> Mutually exclusive with {@code #getDockerfileContent()}.
*/
public String getDockerfilePath() {
return dockerfilePath;
}
public void setDockerfilePath(String dockerfilePath) {
this.dockerfilePath = dockerfilePath;
}
public CheServiceBuildContextImpl withDockerfilePath(String dockerfilePath) {
this.dockerfilePath = dockerfilePath;
return this;
}
/**
* Content of Dockerfile.
*
* <p/> Mutually exclusive with {@code #getDockerfilePath()}.
*/
public String getDockerfileContent() {
return dockerfileContent;
}
public void setDockerfileContent(String dockerfileContent) {
this.dockerfileContent = dockerfileContent;
}
public CheServiceBuildContextImpl withDockerfileContent(String dockerfileContent) {
this.dockerfileContent = dockerfileContent;
return this;
}
/**
* Args for Dockerfile build.
*/
public Map<String,String> getArgs() {
if (args == null) {
args = new HashMap<>();
}
return args;
}
public void setArgs(Map<String,String> args) {
this.args = args;
}
public CheServiceBuildContextImpl withArgs(Map<String,String> args) {
this.args = args;
return this;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof CheServiceBuildContextImpl)) return false;
CheServiceBuildContextImpl that = (CheServiceBuildContextImpl)o;
return Objects.equals(context, that.context) &&
Objects.equals(dockerfilePath, that.dockerfilePath) &&
Objects.equals(dockerfileContent, that.dockerfileContent) &&
Objects.equals(args, that.args);
}
@Override
public int hashCode() {
return Objects.hash(context, dockerfilePath, dockerfileContent, args);
}
@Override
public String toString() {
return "CheServiceBuildContextImpl{" +
"context='" + context + '\'' +
", dockerfilePath='" + dockerfilePath + '\'' +
", dockerfileContent='" + dockerfileContent + '\'' +
", args='" + args + '\'' +
'}';
}
}