/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.model.internal;
import java.util.HashMap;
import java.util.Map;
import de.rcenvironment.core.communication.common.NetworkGraphNode;
import de.rcenvironment.core.communication.common.InstanceNodeSessionId;
import de.rcenvironment.core.utils.common.StringUtils;
/**
* A disconnected representation of a network node, in the sense that changes to the actual, live network state will not automatically
* affect instances of this class. It is intended to provide stable "snapshot" representations of the actual network state.
*
* @author Robert Mischke
*/
public final class NetworkGraphNodeImpl implements NetworkGraphNode {
private final InstanceNodeSessionId nodeId;
private final Map<String, String> nodeProperties;
private volatile boolean isLocalNode = false; // volatile to ensure thread visibility
// private Map<String, String> nodeProperties;
public NetworkGraphNodeImpl(InstanceNodeSessionId nodeId, Map<String, String> nodeProperties) {
if (nodeId == null) {
throw new NullPointerException(StringUtils.format("%s / %s", nodeId, nodeProperties));
}
this.nodeId = nodeId;
this.nodeProperties = nodeProperties;
}
public NetworkGraphNodeImpl(InstanceNodeSessionId nodeId) {
this.nodeId = nodeId;
// implicit property map for unit test
this.nodeProperties = new HashMap<String, String>();
nodeProperties.put("displayName", "<" + nodeId.getInstanceNodeSessionIdString() + ">");
}
@Override
public InstanceNodeSessionId getNodeId() {
return nodeId;
}
@Override
public String getDisplayName() {
String result = null;
if (nodeProperties != null) {
nodeProperties.get("displayName"); // TODO use constant
}
if (result == null) {
result = "<unknown>";
}
return result;
}
@Override
public boolean isLocalNode() {
return isLocalNode;
}
public void setIsLocalNode(boolean isLocalNode) {
this.isLocalNode = isLocalNode;
}
// public Map<String, String> getNodeProperties() {
// return nodeProperties;
// }
//
// public void setNodeProperties(Map<String, String> nodeProperties) {
// this.nodeProperties = nodeProperties;
// }
@Override
public String toString() {
return StringUtils.format("%s ('%s')", nodeId.getInstanceNodeSessionIdString(), getDisplayName());
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof NetworkGraphNodeImpl)) {
return false;
}
return nodeId.equals(((NetworkGraphNodeImpl) obj).nodeId);
}
@Override
public int hashCode() {
return nodeId.hashCode();
}
}