blob: 07289fc53c4347ff4e1efa71e4e1c650ad4ffdfd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 Boeing.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.osee.ote.messaging.dds.entity;
import java.util.Collection;
import org.eclipse.osee.ote.messaging.dds.Data;
import org.eclipse.osee.ote.messaging.dds.DataSample;
import org.eclipse.osee.ote.messaging.dds.DataStoreItem;
import org.eclipse.osee.ote.messaging.dds.IDestination;
import org.eclipse.osee.ote.messaging.dds.ISource;
import org.eclipse.osee.ote.messaging.dds.InstanceHandle;
import org.eclipse.osee.ote.messaging.dds.NotImplementedException;
import org.eclipse.osee.ote.messaging.dds.ReturnCode;
import org.eclipse.osee.ote.messaging.dds.StatusKind;
import org.eclipse.osee.ote.messaging.dds.Time;
import org.eclipse.osee.ote.messaging.dds.listener.DataWriterListener;
import org.eclipse.osee.ote.messaging.dds.listener.TopicListener;
import org.eclipse.osee.ote.messaging.dds.status.LivelinessLostStatus;
import org.eclipse.osee.ote.messaging.dds.status.OfferedDeadlineMissedStatus;
import org.eclipse.osee.ote.messaging.dds.status.OfferedIncompatibleQosStatus;
import org.eclipse.osee.ote.messaging.dds.status.PublicationMatchStatus;
/**
* The base class which all application specific data writers must extend. Access to write
* information in the DDS system is all made possible by this class.
*
* This class is partially implemented.
*
* @author Robert A. Fisher
* @author David Diepenbrock
*/
public class DataWriter extends DomainEntity {
private Topic topic;
private Publisher publisher;
private boolean deleted;
private boolean publishBackToLocalDDSReaders = true;
/**
* Creates a reader with all of the necessary information. This constructor is only visible to the DDS system, applications
* should use {@link DomainParticipant#createTopic(String, String, TopicListener)} to create a Topic.
*/
public DataWriter(Topic topic, Publisher publisher, Boolean enabled, DataWriterListener listener, EntityFactory parentFactory) {
super(enabled.booleanValue(), listener, parentFactory);
this.topic = topic;
this.publisher = publisher;
this.deleted = false;
topic.addDataWriter(this);
}
/**
* Provides access to the deletion flag for this <code>DataReader</code>.
*
* @return <b>true</b> iff this has been marked as deleted.
*/
boolean isDeleted() { // package scope since this is system-level code
return deleted;
}
/**
* Set this item as deleted. This should only be called on the item by the factory
* which created this reader, and when the <code>deleteWriter()</code> method is called.
*/
void markAsDeleted() { // package scope so that factories of this item can mark it as deleted
topic.removeDataWriter(this);
deleted = true;
}
/**
* Retrieve access to the listener assigned to this <code>DataWriter</code>. The writer
* is not guaranteed to have a listener, so this method may return <b>null</b>, and the
* user of this method should handle that appropriately.
*/
public DataWriterListener getListener() {
return (DataWriterListener) super.getBaseListener();
}
/**
* Set the listener for this <code>DataWriter</code>. If another listener was already assigned
* then it will be overridden with out any error. Additionally, <b>null</b> may be passed as the
* listener to remove the current listener from this writer.
*
* @param listener - The listener to invoke when events occur.
* @param mask - Not implemented, <b>null</b> is acceptable.
*
* @return {@link ReturnCode#OK}
*/
public ReturnCode setListener(DataWriterListener listener, StatusKind mask) {
return super.setBaseListener(listener, mask);
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public InstanceHandle register(Data data) {
// DONT_NEED This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
return null;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public InstanceHandle registerWithTimestamp(Data data, Time timestamp) {
// DONT_NEED This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
return null;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public InstanceHandle unregister(Data data, InstanceHandle handle) {
// DONT_NEED This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
return null;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public InstanceHandle unregisterWithTimestamp(Data data, InstanceHandle handle, Time timestamp) {
// DONT_NEED This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
return null;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public ReturnCode getKeyValue(Data keyHolder, InstanceHandle handle) {
// UNSURE This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
// Check that the Entity is enabled before proceeding (See description of enable on the Entity object in the DDS spec)
if (!isEnabled())
return ReturnCode.NOT_ENABLED;
return ReturnCode.ERROR;
}
// PARTIAL InstanceHandle is not used
/**
* Method for writing data to the DDS system. This should be overridden to provide
* type-specific methods for writing data to the system.
* @param destination TODO
* @param source TODO
*
* @return <ul>
* <li>{@link ReturnCode#NOT_ENABLED} if this writer is not enabled.
* <li>{@link ReturnCode#OK} otherwise.
* </ul>
*/
public ReturnCode write(IDestination destination, ISource source, Data data, InstanceHandle handle) {
// Check that the Entity is enabled before proceeding (See description of enable on the Entity object in the DDS spec)
if (!isEnabled())
return ReturnCode.NOT_ENABLED;
//TUNE find a way to reuse the DataSample and DataStoreItem objects instead new'ing them everytime
DataSample dataSample = new DataSample(data, new SampleInfo ());
publisher.publishData(destination, source, new DataStoreItem(dataSample, topic, this));
return ReturnCode.OK;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public ReturnCode writeWithTimestamp(Data data, InstanceHandle handle, Time timestamp) {
// DONT_NEED This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
// Check that the Entity is enabled before proceeding (See description of enable on the Entity object in the DDS spec)
if (!isEnabled())
return ReturnCode.NOT_ENABLED;
return ReturnCode.ERROR;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public ReturnCode dispose(Data data, InstanceHandle handle) {
// UNSURE This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
// Check that the Entity is enabled before proceeding (See description of enable on the Entity object in the DDS spec)
if (!isEnabled())
return ReturnCode.NOT_ENABLED;
return ReturnCode.ERROR;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public ReturnCode diposeWithTimestamp(Data data, InstanceHandle handle, Time timestamp) {
// DONT_NEED This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
// Check that the Entity is enabled before proceeding (See description of enable on the Entity object in the DDS spec)
if (!isEnabled())
return ReturnCode.NOT_ENABLED;
return ReturnCode.ERROR;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public LivelinessLostStatus getLivelinessLostStatus() {
// DONT_NEED This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
return null;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public OfferedDeadlineMissedStatus getOfferedDeadlineMissedStatus() {
// DONT_NEED This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
return null;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public OfferedIncompatibleQosStatus getOfferedIncompatibleQosStatus() {
// DONT_NEED This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
return null;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public PublicationMatchStatus getPublicationMatchStatus() {
// DONT_NEED This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
return null;
}
/**
* @return Returns the topic.
*/
public Topic getTopic() {
return topic;
}
/**
* @return Returns the publisher.
*/
public Publisher getPublisher() {
return publisher;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public void assertLiveliness() {
// UNSURE This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public ReturnCode getMatchedSubscriptionData(SubscriptionBuiltinTopicData subscriptionData, InstanceHandle subscriptionHandle) {
// UNSURE This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
// Check that the Entity is enabled before proceeding (See description of enable on the Entity object in the DDS spec)
if (!isEnabled())
return ReturnCode.NOT_ENABLED;
return ReturnCode.ERROR;
}
/**
* This method is here for future functionality that is described in the DDS specification
* but has not been implemented or used.
*/
public ReturnCode getMatchedSubscriptions(Collection<?> subscriptionHandles) {
// UNSURE This method has not been implemented, but is called out in the spec
if (true) throw new NotImplementedException();
// Check that the Entity is enabled before proceeding (See description of enable on the Entity object in the DDS spec)
if (!isEnabled())
return ReturnCode.NOT_ENABLED;
return ReturnCode.ERROR;
}
/**
* @return the publishBackToLocalDDSReaders
*/
public boolean isPublishBackToLocalDDSReaders() {
return publishBackToLocalDDSReaders;
}
/**
* @param publishBackToLocalDDSReaders the publishBackToLocalDDSReaders to set
*/
public void setPublishBackToLocalDDSReaders(boolean publishBackToLocalDDSReaders) {
this.publishBackToLocalDDSReaders = publishBackToLocalDDSReaders;
}
}