20 package org.vortex.FACE;
    23 import java.util.Collections;
    24 import java.util.HashMap;
    26 import java.util.logging.Level;
    28 import org.omg.dds.core.AlreadyClosedException;
    29 import org.omg.dds.core.IllegalOperationException;
    30 import org.omg.dds.core.NotEnabledException;
    31 import org.omg.dds.core.PreconditionNotMetException;
    32 import org.omg.dds.core.ServiceEnvironment;
    34 import FACE.CONNECTION_DIRECTION_TYPEHolder;
    35 import FACE.MESSAGING_PATTERN_TYPE;
    37 import FACE.RETURN_CODE_TYPEHolder;
    38 import FACE.TRANSPORT_CONNECTION_STATUS_TYPEHolder;
    41     private ServiceEnvironment env;
    42     private Map<String, ConnectionDescription> connectionDescriptions;
    43     private Map<Long, Connection<?>> connections;
    49             RETURN_CODE_TYPEHolder return_code) {
    51                 ServiceEnvironment.IMPLEMENTATION_CLASS_NAME_PROPERTY,
    52                 "org.opensplice.dds.core.OsplServiceEnvironment");
    53         this.env = ServiceEnvironment.createInstance(
TransportServices.class.getClassLoader());
    54         this.connectionDescriptions = Collections
    55                 .synchronizedMap(
new HashMap<String, ConnectionDescription>());
    56         this.connections = Collections
    58         if (return_code == null) {
    62         if (configuration == null) {
    67         File f = 
new File(configuration);
    68         if(f.exists() && !f.isDirectory()) {
    72                     connectionDescriptions.put(connection.getName(), connection);
    75             } 
catch (Exception e) {
    82             Logger.
getInstance().
log(
"Invalid argument configuration, configuration file (" + f.getAbsolutePath() + 
") does not exists", Level.SEVERE);
    89             String connection_name,
    90             MESSAGING_PATTERN_TYPE pattern,
    92             CONNECTION_DIRECTION_TYPEHolder connection_direction,
    95             RETURN_CODE_TYPEHolder return_code) {
    96         if (return_code == null) {
   100         if(connection_name == null ) {
   105         if(connection_id == null ) {
   110         if (connection_direction == null) {
   115         if (pattern != MESSAGING_PATTERN_TYPE.PUB_SUB) {
   120         synchronized (this.connections) {
   122             if (description == null) {
   128             if (connection != null) {
   130                 connection_id.value = description.
getId();
   131                 connection_direction.value = description.
getDirection();
   137                     connection_id.value = description.
getId();
   138                     connection_direction.value = description.
getDirection();
   140                     this.connections.put(connection_id.value, connection);
   143                 } 
catch (ClassNotFoundException e) {
   147                             + 
"'  for configured type_name could not be found. Please use fully qualified class name",
   150                 } 
catch (Exception e) {
   153                     return_code.value = this.getFACEReturnCodeFromException(e);
   190             RETURN_CODE_TYPEHolder return_code) {
   191         if (return_code == null) {
   195         synchronized (this.connections) {
   196             Connection<?> connection = this.connections.remove(connection_id);
   197             if (connection == null) {
   198                 Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id, Level.SEVERE);
   199                 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   204                 return_code.value = RETURN_CODE_TYPE.NO_ERROR;
   205             } 
catch (Exception e) {
   207                 return_code.value = RETURN_CODE_TYPE.INVALID_MODE;
   255     public <TYPE> 
void Receive_Message(
long connection_id, 
long timeout,
   257             int message_size, RETURN_CODE_TYPEHolder return_code) {
   258         if (return_code == null) {
   262         if (transaction_id == null) {
   266         if (message == null) {
   270         synchronized (this.connections) {
   272             if (connection == null) {
   273                 Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id, Level.SEVERE);
   274                 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   279                 return_code.value = RETURN_CODE_TYPE.INVALID_MODE;
   280                 Logger.
getInstance().
log(
"Invalid connection direction for Receive_Message function", Level.SEVERE);
   286             if (typedConnection == null) {
   287                 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   292             if (destConnection == null) {
   293                 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   297                     message_size, return_code);
   351     public <TYPE> 
void Send_Message(
long connection_id, 
long timeout,
   353             RETURN_CODE_TYPEHolder return_code) {
   354         if (return_code == null) {
   358         if (transaction_id == null) {
   360             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   363         if (message == null) {
   365             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   368         synchronized (this.connections) {
   371             if (connection == null) {
   372                 Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id, Level.SEVERE);
   373                 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   377             if (connection.
getDirection() == 
FACE.CONNECTION_DIRECTION_TYPE.DESTINATION) {
   378                 return_code.value = RETURN_CODE_TYPE.INVALID_MODE;
   379                 Logger.
getInstance().
log(
"Invalid connection direction for Send_Message function", Level.SEVERE);
   385             if (typedConnection == null) {
   386                 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   391             if (srcConnection == null) {
   392                 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   395             return_code.value = srcConnection.
sendMessage(message.
value, timeout,transaction_id);
   438     public <TYPE> 
void Register_Callback(
   442             int max_message_size,
   443             RETURN_CODE_TYPEHolder return_code) {
   444         if (return_code == null) {
   448         if (data_callback == null) {
   450             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   455         if (connection == null) {
   456             Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id, Level.SEVERE);
   457             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   461             return_code.value = RETURN_CODE_TYPE.INVALID_MODE;
   462             Logger.
getInstance().
log(
"Invalid connection direction for Register_Callback function", Level.SEVERE);
   468         if (typedConnection == null) {
   469             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   475         if (destConnection == null) {
   476             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   480             return_code.value = RETURN_CODE_TYPE.NO_ACTION;
   488     public <TYPE> 
void Unregister_Callback(
long connection_id,
   489             RETURN_CODE_TYPEHolder return_code) {
   490         if (return_code == null) {
   496         if (connection == null) {
   497             Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id, Level.SEVERE);
   498             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   503             return_code.value = RETURN_CODE_TYPE.INVALID_MODE;
   504             Logger.
getInstance().
log(
"Invalid connection direction for Unregister_Callback function", Level.SEVERE);
   510         if (typedConnection == null) {
   511             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   517         if (destConnection == null) {
   518             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   537             TRANSPORT_CONNECTION_STATUS_TYPEHolder connection_status,
   538             RETURN_CODE_TYPEHolder return_code) {
   539         if (return_code == null) {
   543         if (connection_name == null) {
   545             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   548         if (connection_id == null) {
   550             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   553         if (connection_status == null) {
   555             return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   558         synchronized (this.connections) {
   559             Connection<?> connection = connections.get(connection_id.value);
   561             if (connection == null) {
   562                 Logger.
getInstance().
log(
"Invalid argument connection_id could not find a connection for connection_id:" + connection_id.value, Level.SEVERE);
   563                 return_code.value = RETURN_CODE_TYPE.INVALID_PARAM;
   567             connection_status.value = connection.
getStatus();
   568             return_code.value = RETURN_CODE_TYPE.NO_ERROR;
   573     private RETURN_CODE_TYPE getFACEReturnCodeFromException(Exception e) {
   574         if (e instanceof AlreadyClosedException
   575                 || e instanceof java.util.concurrent.TimeoutException) {
   576             return RETURN_CODE_TYPE.NO_ACTION;
   577         } 
else if (e instanceof UnsupportedOperationException) {
   578             return RETURN_CODE_TYPE.NOT_AVAILABLE;
   579         } 
else if (e instanceof IllegalArgumentException) {
   580             return RETURN_CODE_TYPE.INVALID_PARAM;
   581         } 
else if (e instanceof NotEnabledException
   582                 || e instanceof PreconditionNotMetException
   583                 || e instanceof IllegalOperationException) {
   584             return RETURN_CODE_TYPE.INVALID_MODE;
   586         return RETURN_CODE_TYPE.INVALID_PARAM;
 
void log(String message, Level level)
DestinationConnection< TYPE > asDestination()
void Create_Connection(String connection_name, MESSAGING_PATTERN_TYPE pattern, us.opengroup.FACE.LongHolder connection_id, CONNECTION_DIRECTION_TYPEHolder connection_direction, us.opengroup.FACE.IntHolder max_message_size, long timeout, RETURN_CODE_TYPEHolder return_code)
abstract CONNECTION_DIRECTION_TYPE getDirection()
RETURN_CODE_TYPE registerCallback(Read_CallbackHolder< TYPE > callback, int maxMessageSize)
static Logger getInstance()
TRANSPORT_CONNECTION_STATUS_TYPE getStatus()
static< TYPE > Connection< TYPE > getConnection(ConnectionDescription description, Class< TYPE > dataType)
SourceConnection< TYPE > asSource()
void receiveMessage(long timeout, us.opengroup.FACE.LongHolder transaction_id, Holder< TYPE > message, int message_size, RETURN_CODE_TYPEHolder return_code)
RETURN_CODE_TYPE unregisterCallback()
void Initialize(String configuration, RETURN_CODE_TYPEHolder return_code)
RETURN_CODE_TYPE sendMessage(TYPE instanceData, long timeout, us.opengroup.FACE.LongHolder transaction_id)
This is a typed class which will be generated by idlpp. 
Read_Callback< TYPE > getCallback()
void Destroy_Connection(long connection_id, RETURN_CODE_TYPEHolder return_code)
For DDS, TS shall keep track of the DomainParticipant and Topic variables for deletion. 
CONNECTION_DIRECTION_TYPE getDirection()
void Get_Connection_Parameters(us.opengroup.FACE.StringHolder connection_name, us.opengroup.FACE.LongHolder connection_id, TRANSPORT_CONNECTION_STATUS_TYPEHolder connection_status, RETURN_CODE_TYPEHolder return_code)
HashSet< ConnectionDescription > getConfigurations()
ConnectionDescription getDescription()