/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.common;
/**
* An identifier representing a session (an uninterrupted run maintaining its internal state) of a logical node (see {@link LogicalNodeId}).
* <p>
* For a {@link LogicalNodeSessionId}, all three id parts (instance, logical node, and session) are guaranteed to be defined. The instance
* and session parts are {@link CommonIdBase#INSTANCE_PART_LENGTH} and {@link CommonIdBase#SESSION_PART_LENGTH} characters long,
* respectively. The logical node part can be at most {@link CommonIdBase#MAXIMUM_LOGICAL_NODE_PART_LENGTH} characters long; note that
* {@link CommonIdBase#DEFAULT_LOGICAL_NODE_PART} has a special meaning, and must not be used accidentally.
* <p>
* Note that currently, all session parts of an instance's ids are guaranteed to be equal to allow simple conversion between id types. This
* concept may be changed or expanded in the future to allow logical nodes to logically "restart" without the actual instance restarting.
*
* @author Robert Mischke
*/
public interface LogicalNodeSessionId 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 portion of the logical node part intended for recognizing logical nodes across instance restarts, if present;
* null, if this session id belongs to a default or a transient logical node id.
*/
String getLogicalNodeRecognitionPart();
/**
* @return the string form representing this {@link LogicalNodeSessionId}
*/
String getLogicalNodeSessionIdString();
/**
* @return the {@link InstanceNodeSessionId} this {@link LogicalNodeSessionId} is running "within" - this relies on the fact, that
* currently all session id parts of an instance's is are guaranteed to be equal, which makes this conversion possible without
* any kind of resolution
*/
InstanceNodeSessionId convertToInstanceNodeSessionId();
/**
* @return the {@link LogicalNodeId} of this {@link LogicalNodeSessionId}
*/
LogicalNodeId convertToLogicalNodeId();
/**
* @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();
/**
* @param otherId the id to compare with; currently only supports {@link InstanceNodeSessionId}, but may be expanded as needed
* @return true if this id refers to the same instance session (same instance and session id parts) as the provided id
*/
boolean isSameInstanceNodeSessionAs(InstanceNodeSessionId otherId);
/**
* @return the string form of related logical node; equivalent to {@link LogicalNodeId#getFullIdString()}
*/
// TODO implement once actually needed
// String getLogicalNodeIdString();
}