/*******************************************************************************
* 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.ide.api.machine;
import com.google.common.base.Strings;
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 org.eclipse.che.api.core.model.machine.Server;
import org.eclipse.che.api.core.rest.shared.dto.Hyperlinks;
import org.eclipse.che.api.core.rest.shared.dto.Link;
import org.eclipse.che.api.machine.shared.Constants;
import org.eclipse.che.ide.util.loging.Log;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author Vitalii Parfonov
*/
public class MachineEntityImpl implements MachineEntity {
protected final Machine machineDescriptor;
protected final MachineConfig machineConfig;
protected final Map<String, MachineServer> servers;
protected final Map<String, String> runtimeProperties;
protected final Map<String, String> envVariables;
protected final List<Link> machineLinks;
public MachineEntityImpl(@NotNull Machine machineDescriptor) {
this.machineDescriptor = machineDescriptor;
this.machineConfig = machineDescriptor != null ? machineDescriptor.getConfig() : null;
this.machineLinks = machineDescriptor instanceof Hyperlinks ? ((Hyperlinks)machineDescriptor).getLinks() : null;
if (machineDescriptor == null || machineDescriptor.getRuntime() == null) {
servers = null;
runtimeProperties = null;
envVariables = null;
} else {
MachineRuntimeInfo machineRuntime = machineDescriptor.getRuntime();
Map<String, ? extends Server> serverDtoMap = machineRuntime.getServers();
servers = new HashMap<>(serverDtoMap.size());
for (String s : serverDtoMap.keySet()) {
servers.put(s, new MachineServer(serverDtoMap.get(s)));
}
runtimeProperties = machineRuntime.getProperties();
envVariables = machineRuntime.getEnvVariables();
}
}
public String getWorkspace() {
return machineDescriptor.getWorkspaceId();
}
@Override
public MachineConfig getConfig() {
return machineConfig;
}
public String getId() {
return machineDescriptor.getId();
}
@Override
public String getWorkspaceId() {
return machineDescriptor.getWorkspaceId();
}
@Override
public String getEnvName() {
return machineDescriptor.getEnvName();
}
@Override
public String getOwner() {
return machineDescriptor.getOwner();
}
@Override
public MachineStatus getStatus() {
return machineDescriptor.getStatus();
}
@Override
public MachineRuntimeInfo getRuntime() {
return machineDescriptor.getRuntime();
}
@Override
public boolean isDev() {
return machineDescriptor.getConfig().isDev();
}
@Override
public String getType() {
return machineConfig.getType();
}
@Override
public String getDisplayName() {
return machineConfig.getName();
}
@Override
public Map<String, String> getProperties() {
return runtimeProperties;
}
public String getTerminalUrl() {
for (Link link : machineLinks) {
if (Constants.TERMINAL_REFERENCE.equals(link.getRel())) {
return link.getHref();
}
}
//should not be
final String message = "Reference " + Constants.TERMINAL_REFERENCE + " not found in " + machineConfig.getName() + " description";
Log.error(getClass(), message);
throw new RuntimeException(message);
}
public String getExecAgentUrl() {
for (Link link :machineLinks) {
if (Constants.EXEC_AGENT_REFERENCE.equals(link.getRel())) {
return link.getHref();
}
}
//should not be
final String message = "Reference " + Constants.EXEC_AGENT_REFERENCE + " not found in " + machineConfig.getName() + " description";
Log.error(getClass(), message);
throw new RuntimeException(message);
}
@Override
public Map<String, MachineServer> getServers() {
return servers;
}
@Override
public MachineServer getServer(String reference) {
if (!Strings.isNullOrEmpty(reference)) {
for (MachineServer server : servers.values()) {
if (reference.equals(server.getRef())) {
return server;
}
}
}
return null;
}
@Override
public List<Link> getMachineLinks() {
return machineLinks;
}
@Override
public Link getMachineLink(String ref) {
if (!Strings.isNullOrEmpty(ref)) {
for (Link link : machineLinks) {
if (ref.equals(link.getRel())) {
return link;
}
}
}
return null;
}
@Override
public Map<String, String> getEnvVariables() {
return envVariables;
}
/** Returns {@link Machine descriptor} of the Workspace Agent. */
@Override
public Machine getDescriptor() {
return machineDescriptor;
}
@Override
public boolean equals(Object other) {
if (this == other) return true;
if (other == null || getClass() != other.getClass()) return false;
MachineEntityImpl otherMachine = (MachineEntityImpl)other;
return Objects.equals(getId(), otherMachine.getId());
}
@Override
public int hashCode() {
return Objects.hashCode(getId());
}
}