/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.common;
/**
* Represents a qualified logical part or aspect of an instance. A logical node may be either temporary/transient, or stable; the latter
* case is used for situations where recognizing that part or aspect across restarts of the instance is relevant. There is always a default
* logical node for each instance, using the {@link CommonIdBase#DEFAULT_LOGICAL_NODE_PART} logical node part.
* <p>
* In a {@link LogicalNodeId}, it is guaranteed that the "instance id" and the "logical node" parts are both defined (ie not null) and of
* valid lengths ({@link CommonIdBase#INSTANCE_PART_LENGTH} and {@link CommonIdBase#SESSION_PART_LENGTH}, respectively), while the session
* part is always null.
*
* @author Robert Mischke
*/
public interface LogicalNodeId extends CommonIdBase, ResolvableNodeId {
/**
* @return the string form of the session id part; see the main {@link CommonIdBase} JavaDoc for its description
*/
String getSessionIdPart();
/**
* @return the string form of the logical node part; see the main {@link CommonIdBase} JavaDoc for its description
*/
String getLogicalNodePart();
/**
* @return the string form representing this {@link LogicalNodeId}
*/
String getLogicalNodeIdString();
/**
* @return the string portion of the logical node part intended for recognizing logical nodes across instance restarts, if present;
* null, if this is a default or a transient logical node id.
*/
String getLogicalNodeRecognitionPart();
/**
* @return the default logical node id for this id's instance; effectively, this substitutes the logical node part with the default
* value.
*/
LogicalNodeId convertToDefaultLogicalNodeId();
/**
* Integrates the session information from an {@link InstanceNodeSessionId} into this {@link LogicalNodeId} to create a
* {@link LogicalNodeSessionId}.
*
* @param instanceSessionId the instance session object to take the session part from; note that the instance parts must be equal
* @return the combined id object
*/
LogicalNodeSessionId combineWithInstanceNodeSessionId(InstanceNodeSessionId instanceSessionId);
/**
* @return true if this id is "transient", ie not expected to be recognizable after a restart; typically, transient logical node ids do
* not have individually assigned display names
*/
boolean isTransientLogicalNode();
}