Skip to content

Instantly share code, notes, and snippets.

@akihisa-shimada
Created August 24, 2023 10:45
Show Gist options
  • Save akihisa-shimada/cdfc37a784eb90d6d759c94c937f57db to your computer and use it in GitHub Desktop.
Save akihisa-shimada/cdfc37a784eb90d6d759c94c937f57db to your computer and use it in GitHub Desktop.
package com.example.proto.grpc.exception.message;
import com.google.protobuf.Message;
import java.util.HashSet;
import java.util.Set;
/**
* DetailMessageのためのユーティリティクラス
*/
public class DetailMessages {
/**
* protobufで定義されたMessageクラス用のBuilderクラスを生成します
*
* @return protobuf Messageクラス用のBuilderクラス
*/
public static RawMessageDetailMessageBuilder rawMessageBuilder() {
return new RawMessageDetailMessageBuilder();
}
/**
* LocalizedMessageのTemplateMessageクラス用のBuilderクラスを生成します
*
* @return LocalizedMessageのTemplateMessageクラス用のBuilderクラス
*/
public static LocalizedMessageDetailMessageBuilder localizedMessageBuilder() {
return new LocalizedMessageDetailMessageBuilder();
}
/**
* テンプレートメッセージを利用したDetailMessageを生成します。
* このメソッドは、{@link DetailMessages#localizedMessageBuilder()}のショートカットメソッドです。
*
* @param templateMessage テンプレートメッセージ
* @param parameters テンプレートにセットする変数
* @return 単一のLocalizedMessage
*/
public static Set<DetailMessage> localizedMessage(String templateMessage, Object... parameters) {
return localizedMessageBuilder()
.add(templateMessage, parameters)
.build();
}
public static class LocalizedMessageDetailMessageBuilder {
Set<DetailMessage> messages;
/**
* DetailMessagesを利用して生成するため、パッケージプライベートとします。
*/
LocalizedMessageDetailMessageBuilder() {
this.messages = new HashSet<>();
}
public LocalizedMessageDetailMessageBuilder add(String templateMessage, Object... parameters) {
messages.add(new DetailMessage.TemplateMessage.LocalizedMessageTemplateMessage(templateMessage, parameters));
return this;
}
public Set<DetailMessage> build() {
return messages;
}
}
public static class RawMessageDetailMessageBuilder {
Set<DetailMessage> messages;
/**
* DetailMessagesを利用して生成するため、パッケージプライベートとします。
*/
RawMessageDetailMessageBuilder() {
this.messages = new HashSet<>();
}
public RawMessageDetailMessageBuilder add(Message message) {
messages.add(new DetailMessage.TemplateMessage.RawMessage(message));
return this;
}
public Set<DetailMessage> build() {
return messages;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment