/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.communication.model.impl; import de.rcenvironment.core.communication.common.InstanceNodeSessionId; import de.rcenvironment.core.communication.common.NodeIdentifierUtils; import de.rcenvironment.core.communication.model.InitialNodeInformation; import de.rcenvironment.core.utils.common.StringUtils; /** * Default {@link InitialNodeInformation} implementation. * * @author Robert Mischke */ public class InitialNodeInformationImpl implements InitialNodeInformation { // note: this object is only deserialized *after* protocol version checking, so the serialization is safe private static final long serialVersionUID = 6729868652469869965L; private transient InstanceNodeSessionId instanceSessionIdObject; private String instanceSessionId; private String displayName; /** * Default constructor for bean-style construction. */ public InitialNodeInformationImpl() { // NOP } /** * Convenience constructor. * * @param localInstanceSessionId */ public InitialNodeInformationImpl(InstanceNodeSessionId localInstanceSessionId) { this.instanceSessionIdObject = localInstanceSessionId; this.instanceSessionId = localInstanceSessionId.getInstanceNodeSessionIdString(); } public InitialNodeInformationImpl(String id) { this.instanceSessionId = id; } @Override public String getInstanceNodeSessionIdString() { return instanceSessionId; } // setter for bean-style construction public void setNodeId(String nodeId) { this.instanceSessionId = nodeId; } @Override public String getDisplayName() { return displayName; } public void setDisplayName(String displayName) { this.displayName = displayName; } @Override public synchronized InstanceNodeSessionId getInstanceNodeSessionId() { // create the wrapped object on-the-fly to support bean-style construction if (instanceSessionIdObject == null) { instanceSessionIdObject = NodeIdentifierUtils.parseInstanceNodeSessionIdStringWithExceptionWrapping(instanceSessionId); } return instanceSessionIdObject; } @Override public String getLogDescription() { String name = displayName; if (displayName == null) { displayName = "<unnamed>"; } return StringUtils.format("%s [%s]", name, instanceSessionId); } // NOTE: only intended for use in unit tests; not for production use! private String getInternalFingerprint() { return StringUtils.format("%s#%s", instanceSessionId, displayName); } @Override public String toString() { return StringUtils.format("%s/%s", instanceSessionId, displayName); } @Override // NOTE: only intended for unit tests; not for production use! public boolean equals(Object obj) { if (!(obj instanceof InitialNodeInformationImpl)) { return false; } return getInternalFingerprint().equals(((InitialNodeInformationImpl) obj).getInternalFingerprint()); } @Override // NOTE: only intended for unit tests; not for production use! public int hashCode() { return getInternalFingerprint().hashCode(); } }