/**
* Copyright 2016-2017 Sixt GmbH & Co. Autovermietung KG
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain a
* copy of the License at http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.sixt.service.framework.kafka.messaging;
import java.lang.reflect.Type;
/**
* Value object to represent the type of a (protobuf) message.
* Used to specify the type of the inner message in the messaging envelope.
* <p>
* Conventions:
* - The type name is the Java Type.getTypeName() of the generated protobuf message.
* <p>
* - In the defining proto file
* -- specify option java_multiple_files = true; to avoid the OuterClass that nests the message types.
* -- use package com.sixt.service.{SERVICENAME}.api; as default namespace/package for the asynchronous messaging contract
* -- there is no need for the option java_package directive
*/
public final class MessageType {
private final String type;
MessageType(String typeName) {
type = typeName;
}
static MessageType of(com.google.protobuf.Message protoMessage) {
return new MessageType(protoMessage.getClass().getTypeName());
}
@Override
public String toString() {
return type;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MessageType that = (MessageType) o;
return type != null ? type.equals(that.type) : that.type == null;
}
@Override
public int hashCode() {
return type != null ? type.hashCode() : 0;
}
public static MessageType of(Type t) {
return new MessageType(t.getTypeName());
}
}