Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 package org.ros.internal.message.field;
00018
00019 import org.jboss.netty.buffer.ChannelBuffer;
00020 import org.ros.internal.message.DefaultMessageDeserializer;
00021 import org.ros.internal.message.DefaultMessageSerializer;
00022 import org.ros.internal.message.Message;
00023 import org.ros.message.MessageDeserializer;
00024 import org.ros.message.MessageFactory;
00025 import org.ros.message.MessageIdentifier;
00026 import org.ros.message.MessageSerializer;
00027
00028
00032 public class MessageFieldType implements FieldType {
00033
00034 private final MessageIdentifier messageIdentifier;
00035 private final MessageFactory messageFactory;
00036 private final MessageSerializer<Message> serializer;
00037 private final MessageDeserializer<Message> deserializer;
00038
00039 public MessageFieldType(MessageIdentifier messageIdentifier, MessageFactory messageFactory) {
00040 this.messageIdentifier = messageIdentifier;
00041 this.messageFactory = messageFactory;
00042 serializer = new DefaultMessageSerializer();
00043 deserializer = new DefaultMessageDeserializer<Message>(messageIdentifier, messageFactory);
00044 }
00045
00046 public MessageFactory getMessageFactory() {
00047 return messageFactory;
00048 }
00049
00050 @Override
00051 public Field newVariableValue(String name) {
00052 return ValueField.newVariable(this, name);
00053 }
00054
00055 @Override
00056 public <T> Field newConstantValue(String name, T value) {
00057 throw new UnsupportedOperationException();
00058 }
00059
00060 @Override
00061 public Field newVariableList(String name, int size) {
00062 return ListField.newVariable(this, name);
00063 }
00064
00065 @Override
00066 public <T> T getDefaultValue() {
00067 return getMessageFactory().newFromType(messageIdentifier.getType());
00068 }
00069
00070 @Override
00071 public String getMd5String() {
00072 return null;
00073 }
00074
00075 @Override
00076 public String getJavaTypeName() {
00077 return String.format("%s.%s", messageIdentifier.getPackage(), messageIdentifier.getName());
00078 }
00079
00080 @Override
00081 public int getSerializedSize() {
00082 throw new UnsupportedOperationException();
00083 }
00084
00085 @Override
00086 public String getName() {
00087 return messageIdentifier.getType();
00088 }
00089
00090 @Override
00091 public <T> void serialize(T value, ChannelBuffer buffer) {
00092 serializer.serialize((Message) value, buffer);
00093 }
00094
00095 @SuppressWarnings("unchecked")
00096 @Override
00097 public Message deserialize(ChannelBuffer buffer) {
00098 return deserializer.deserialize(buffer);
00099 }
00100
00101 @SuppressWarnings("unchecked")
00102 @Override
00103 public Void parseFromString(String value) {
00104 throw new UnsupportedOperationException();
00105 }
00106
00107 @Override
00108 public String toString() {
00109 return "MessageField<" + messageIdentifier + ">";
00110 }
00111
00112 @Override
00113 public int hashCode() {
00114 final int prime = 31;
00115 int result = 1;
00116 result = prime * result + ((messageIdentifier == null) ? 0 : messageIdentifier.hashCode());
00117 return result;
00118 }
00119
00120 @Override
00121 public boolean equals(Object obj) {
00122 if (this == obj)
00123 return true;
00124 if (obj == null)
00125 return false;
00126 if (getClass() != obj.getClass())
00127 return false;
00128 MessageFieldType other = (MessageFieldType) obj;
00129 if (messageIdentifier == null) {
00130 if (other.messageIdentifier != null)
00131 return false;
00132 } else if (!messageIdentifier.equals(other.messageIdentifier))
00133 return false;
00134 return true;
00135 }
00136 }