/**
* 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 com.google.common.base.Strings;
import javax.validation.constraints.NotNull;
/**
* Naming scheme for messaging:
* <p>
* topic = "inbox" ["_" inbox_name ] "-" service_name
* service_name = kafka_topic_char
* inbox_name = kafka_topic_char
* <p>
* kafka_topic_char = "[a-zA-Z0-9\\._\\-]" // letters, numbers, ".", "_", "-"
*/
public final class Topic {
private final String topic;
public Topic(@NotNull String topicName) {
this.topic = topicName;
}
public static Topic defaultServiceInbox(@NotNull String serviceName) {
return serviceInbox(serviceName, "");
}
public static Topic serviceInbox(@NotNull String serviceName, String inboxName) {
StringBuilder topic = new StringBuilder();
topic.append("inbox");
if (!Strings.isNullOrEmpty(inboxName)) {
topic.append("_");
topic.append(inboxName);
}
if (Strings.isNullOrEmpty(serviceName)) {
throw new IllegalArgumentException("service name must not be null or empty");
}
topic.append("-");
topic.append(serviceName);
return new Topic(topic.toString());
}
public boolean isEmpty() {
return Strings.isNullOrEmpty(topic);
}
@Override
public String toString() {
return topic;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Topic topic1 = (Topic) o;
return topic != null ? topic.equals(topic1.topic) : topic1.topic == null;
}
@Override
public int hashCode() {
return topic != null ? topic.hashCode() : 0;
}
}