package com.intrbiz.bergamot.notification.engine.slack.model;
import java.util.function.Function;
public class SlackText<T>
{
private final StringBuilder text = new StringBuilder();
private final Function<String, T> consumer;
public SlackText(Function<String, T> consumer)
{
super();
this.consumer = consumer;
}
private void appendPlain(String plainText)
{
if (plainText != null)
{
for (int i = 0; i < plainText.length(); i++)
{
char c = plainText.charAt(i);
switch (c)
{
case '&':
this.text.append("&");
break;
case '<':
this.text.append("<");
break;
case '>':
this.text.append(">");
break;
default:
this.text.append(c);
}
}
}
}
private void appendRaw(String text)
{
this.text.append(text);
}
private void appendRaw(char c)
{
this.text.append(c);
}
public SlackText<T> raw(String rawMessage)
{
this.appendRaw(rawMessage);
this.build();
return this;
}
public SlackText<T> text(String text)
{
this.appendPlain(text);
this.build();
return this;
}
public SlackText<T> link(String href, String display)
{
this.appendRaw('<');
this.appendRaw(href);
this.appendRaw('|');
this.appendPlain(display);
this.appendRaw('>');
this.build();
return this;
}
public T build()
{
return this.consumer.apply(this.text.toString());
}
@Override
public String toString()
{
return this.text.toString();
}
public static final class Simple extends SlackText<String>
{
public Simple()
{
super((t) -> { return t; });
}
}
}