/*******************************************************************************
* 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.Machine;
import org.eclipse.che.api.core.model.machine.MachineConfig;
import org.eclipse.che.api.core.model.machine.MachineRuntimeInfo;
import org.eclipse.che.api.core.model.machine.MachineStatus;
import java.util.Objects;
/**
* Data object for {@link Machine}.
*
* @author Eugene Voevodin
* @author Alexander Garagatyi
*/
public class MachineImpl implements Machine {
public static MachineImplBuilder builder() {
return new MachineImplBuilder();
}
private final MachineConfigImpl machineConfig;
private final MachineRuntimeInfoImpl machineRuntime;
private final String workspace;
private final String envName;
private final String owner;
private MachineStatus status;
private String id;
public MachineImpl(MachineConfig machineConfig,
String id,
String workspace,
String envName,
String owner,
MachineStatus status,
MachineRuntimeInfo machineRuntime) {
this.workspace = workspace;
this.envName = envName;
this.owner = owner;
this.machineConfig = new MachineConfigImpl(machineConfig);
this.id = id;
this.status = status;
this.machineRuntime = machineRuntime != null ? new MachineRuntimeInfoImpl(machineRuntime) : null;
}
public MachineImpl(Machine machine) {
this(machine.getConfig(),
machine.getId(),
machine.getWorkspaceId(),
machine.getEnvName(),
machine.getOwner(),
machine.getStatus(),
machine.getRuntime());
}
@Override
public MachineConfigImpl getConfig() {
return machineConfig;
}
@Override
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String getWorkspaceId() {
return workspace;
}
@Override
public String getEnvName() {
return envName;
}
@Override
public String getOwner() {
return owner;
}
@Override
public MachineStatus getStatus() {
return status;
}
@Override
public MachineRuntimeInfoImpl getRuntime() {
return machineRuntime;
}
public void setStatus(MachineStatus status) {
this.status = status;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof MachineImpl)) return false;
MachineImpl machine = (MachineImpl)o;
return Objects.equals(machineConfig, machine.machineConfig) &&
Objects.equals(id, machine.id) &&
Objects.equals(machineRuntime, machine.machineRuntime) &&
Objects.equals(workspace, machine.workspace) &&
Objects.equals(envName, machine.envName) &&
Objects.equals(owner, machine.owner) &&
status == machine.status;
}
@Override
public int hashCode() {
return Objects.hash(machineConfig, id, machineRuntime, workspace, envName, owner, status);
}
/**
* Helps to build complex {@link MachineImpl machine impl}.
*
* @see MachineImpl#builder()
*/
public static class MachineImplBuilder {
private MachineConfig machineConfig;
private String id;
private String envName;
private String owner;
private String workspaceId;
private MachineStatus machineStatus;
private MachineRuntimeInfo machineRuntime;
public MachineImpl build() {
return new MachineImpl(machineConfig,
id,
workspaceId,
envName,
owner,
machineStatus,
machineRuntime);
}
public MachineImplBuilder fromMachine(Machine machine) {
this.envName = machine.getEnvName();
this.id = machine.getId();
this.machineConfig = machine.getConfig();
this.machineRuntime = machine.getRuntime();
this.machineStatus = machine.getStatus();
this.owner = machine.getOwner();
this.workspaceId = machine.getWorkspaceId();
return this;
}
public MachineImplBuilder setConfig(MachineConfig machineConfig) {
this.machineConfig = machineConfig;
return this;
}
public MachineImplBuilder setId(String id) {
this.id = id;
return this;
}
public MachineImplBuilder setStatus(MachineStatus status) {
this.machineStatus = status;
return this;
}
public MachineImplBuilder setEnvName(String envName) {
this.envName = envName;
return this;
}
public MachineImplBuilder setOwner(String owner) {
this.owner = owner;
return this;
}
public MachineImplBuilder setWorkspaceId(String workspaceId) {
this.workspaceId = workspaceId;
return this;
}
public MachineImplBuilder setRuntime(MachineRuntimeInfo machineRuntime) {
this.machineRuntime = machineRuntime;
return this;
}
}
}