/*******************************************************************************
* 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.machine.server.model.impl;
import org.eclipse.che.api.core.model.machine.MachineConfig;
import org.eclipse.che.api.core.model.machine.MachineLimits;
import org.eclipse.che.api.core.model.machine.MachineSource;
import org.eclipse.che.api.core.model.machine.ServerConf;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* Data object for {@link MachineConfig}.
*
* @author Eugene Voevodin
*/
public class MachineConfigImpl implements MachineConfig {
public static MachineConfigImplBuilder builder() {
return new MachineConfigImplBuilder();
}
private boolean dev;
private String name;
private String type;
private MachineSourceImpl source;
private MachineLimitsImpl limits;
private List<ServerConfImpl> servers;
private Map<String, String> envVariables;
public MachineConfigImpl() {
}
public MachineConfigImpl(boolean dev,
String name,
String type,
MachineSource source,
MachineLimits machineLimits,
List<? extends ServerConf> servers,
Map<String, String> envVariables) {
this.dev = dev;
this.name = name;
this.type = type;
this.envVariables = envVariables;
if (servers != null) {
this.servers = servers.stream()
.map(ServerConfImpl::new)
.collect(Collectors.toList());
}
if (source != null) {
this.source = new MachineSourceImpl(source);
}
this.limits = new MachineLimitsImpl(machineLimits);
}
public MachineConfigImpl(MachineConfig machineCfg) {
this(machineCfg.isDev(),
machineCfg.getName(),
machineCfg.getType(),
machineCfg.getSource(),
machineCfg.getLimits(),
machineCfg.getServers(),
machineCfg.getEnvVariables());
}
@Override
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public MachineSourceImpl getSource() {
return source;
}
public void setSource(MachineSourceImpl machineSource) {
this.source = machineSource;
}
@Override
public boolean isDev() {
return dev;
}
public void setDev(boolean dev) {
this.dev = dev;
}
@Override
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public MachineLimitsImpl getLimits() {
return limits;
}
public void setLimits(MachineLimits machineLimits) {
this.limits = new MachineLimitsImpl(machineLimits);
}
@Override
public List<ServerConfImpl> getServers() {
if (servers == null) {
servers = new ArrayList<>();
}
return servers;
}
public void setServers(List<ServerConfImpl> servers) {
this.servers = servers;
}
@Override
public Map<String, String> getEnvVariables() {
if (envVariables == null) {
envVariables = new HashMap<>();
}
return envVariables;
}
public void setEnvVariables(Map<String, String> envVariables) {
this.envVariables = envVariables;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof MachineConfigImpl)) return false;
final MachineConfigImpl other = (MachineConfigImpl)obj;
return dev == other.dev &&
Objects.equals(name, other.name) &&
Objects.equals(source, other.source) &&
Objects.equals(limits, other.limits) &&
Objects.equals(type, other.type) &&
Objects.equals(getServers(), other.getServers()) &&
Objects.equals(getEnvVariables(), other.getEnvVariables());
}
@Override
public int hashCode() {
int hash = 7;
hash = hash * 31 + Boolean.hashCode(dev);
hash = hash * 31 + Objects.hashCode(name);
hash = hash * 31 + Objects.hashCode(type);
hash = hash * 31 + Objects.hashCode(source);
hash = hash * 31 + Objects.hashCode(limits);
hash = hash * 31 + Objects.hashCode(getServers());
hash = hash * 31 + Objects.hashCode(getEnvVariables());
return hash;
}
@Override
public String toString() {
return "MachineConfigImpl{" +
"dev=" + dev +
", name='" + name + '\'' +
", type='" + type + '\'' +
", source=" + source +
", machineLimits=" + limits +
", servers=" + getServers() +
", envVariables=" + getEnvVariables() +
'}';
}
/**
* Helps to build complex {@link MachineConfigImpl machine config impl}.
*
* @see MachineConfigImpl#builder()
*/
public static class MachineConfigImplBuilder {
private boolean dev;
private String name;
private String type;
private MachineSource source;
private MachineLimits machineLimits;
private List<? extends ServerConf> servers;
private Map<String, String> envVariables;
public MachineConfigImpl build() {
return new MachineConfigImpl(dev,
name,
type,
source,
machineLimits,
servers,
envVariables);
}
public MachineConfigImplBuilder fromConfig(MachineConfig machineConfig) {
dev = machineConfig.isDev();
name = machineConfig.getName();
type = machineConfig.getType();
source = machineConfig.getSource();
machineLimits = machineConfig.getLimits();
servers = machineConfig.getServers();
envVariables = machineConfig.getEnvVariables();
return this;
}
public MachineConfigImplBuilder setDev(boolean dev) {
this.dev = dev;
return this;
}
public MachineConfigImplBuilder setName(String name) {
this.name = name;
return this;
}
public MachineConfigImplBuilder setType(String type) {
this.type = type;
return this;
}
public MachineConfigImplBuilder setSource(MachineSource machineSource) {
this.source = machineSource;
return this;
}
public MachineConfigImplBuilder setLimits(MachineLimits machineLimits) {
this.machineLimits = machineLimits;
return this;
}
public MachineConfigImplBuilder setServers(List<? extends ServerConf> servers) {
this.servers = servers;
return this;
}
public MachineConfigImplBuilder setEnvVariables(Map<String, String> envVariables) {
this.envVariables = envVariables;
return this;
}
}
}