![JAR search and dependency download from the Maven repository](/logo.png)
net.sf.jrtps.builtin.SubscriptionDataMarshaller Maven / Gradle / Ivy
package net.sf.jrtps.builtin;
import java.util.Set;
import net.sf.jrtps.InconsistentPolicy;
import net.sf.jrtps.Marshaller;
import net.sf.jrtps.message.DataEncapsulation;
import net.sf.jrtps.message.ParameterListEncapsulation;
import net.sf.jrtps.message.parameter.BuiltinTopicKey;
import net.sf.jrtps.message.parameter.ContentFilterProperty;
import net.sf.jrtps.message.parameter.DataReaderPolicy;
import net.sf.jrtps.message.parameter.Parameter;
import net.sf.jrtps.message.parameter.ParameterList;
import net.sf.jrtps.message.parameter.QosPolicy;
import net.sf.jrtps.message.parameter.Sentinel;
import net.sf.jrtps.message.parameter.TopicName;
import net.sf.jrtps.message.parameter.TypeName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Marshaller for builtin data for topic DCPSSubscription. With jRTPS,
* instances of this topic is of type SubscriptionData.
*
* @author mcr70
*
*/
public class SubscriptionDataMarshaller implements Marshaller {
private static final Logger log = LoggerFactory.getLogger(SubscriptionDataMarshaller.class);
/**
* SubscriptionData has always a key.
*
* @return true
*/
@Override
public boolean hasKey() {
// Always false, KeyHash is optional and RTI Connext expects
// that KeyHash of builtin topics is not a MD5 sum
return true; // Always true. Key is PID_KEY_HASH.
}
/**
* Extracts the key from PublicationData. Guid of the reader represented
* by SubscriptionData is the key.
*
* @return Guid as byte array
*/
@Override
public byte[] extractKey(SubscriptionData data) {
return data.getBuiltinTopicKey().getBytes();
}
@Override
public SubscriptionData unmarshall(DataEncapsulation data) {
ParameterListEncapsulation plEnc = (ParameterListEncapsulation) data;
SubscriptionData rd = null;
try {
rd = new SubscriptionData(plEnc.getParameterList());
} catch (InconsistentPolicy e) {
log.error("Could not resolve inconsistent policies for ReaderData", e);
}
return rd;
}
@Override
public DataEncapsulation marshall(SubscriptionData rd) {
ParameterList payloadParams = new ParameterList();
payloadParams.add(new BuiltinTopicKey(rd.getBuiltinTopicKey()));
payloadParams.add(new TopicName(rd.getTopicName()));
payloadParams.add(new TypeName(rd.getTypeName()));
ContentFilterProperty contentFilter = rd.getContentFilter();
if (contentFilter != null) {
payloadParams.add(contentFilter);
}
addQoS(rd, payloadParams);
payloadParams.add(new Sentinel());
return new ParameterListEncapsulation(payloadParams);
}
private void addQoS(SubscriptionData rd, ParameterList payloadParams) {
Set policies = rd.getQualityOfService().getReaderPolicies();
for (QosPolicy> qp : policies) {
if (qp instanceof Parameter) {
payloadParams.add((Parameter) qp);
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy