Archived
0

refactoring Text

This commit is contained in:
2018-06-13 15:46:29 +03:00
parent 3553dff6f3
commit 76bfafe7d6

View File

@@ -4,132 +4,212 @@
*/
package mc.core.text;
import com.google.common.collect.ImmutableList;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringJoiner;
@Getter
@EqualsAndHashCode
public class Text {
@Setter
private String string;
@Setter
private TextColor color;
@Setter
private TextStyle style;
private List<Text> childs;
private static final Text EMPTY = new Text();
private static final Text NEW_LINE = new Text("\n", null, null, null);
private Text() { }
private final String content;
private final TextColor color;
private final TextStyle style;
private final ImmutableList<Text> children;
public Builder toBuilder() {
return new Builder(this);
private Text() {
content = "";
color = null;
style = null;
children = null;
}
public static Text of(String string) {
return of(string, null, null);
}
public static Text of(Object... objects) {
Text text = new Text();
for(Object obj : objects) {
if (obj instanceof String) {
if (text.string == null) {
text.string = (String) obj;
} else {
text.string = text.string.concat((String) obj);
}
} else if (obj instanceof TextStyle) {
if (text.style == null) {
text.style = (TextStyle) obj;
} else {
text.style.concat((TextStyle) obj);
}
} else if (obj instanceof TextColor) {
text.color = (TextColor) obj;
}
}
return text;
}
public static Builder builder() {
return new Builder();
}
public static Builder builder(String string) {
return new Builder(string);
}
public static Builder builder(Object... objects) {
return new Builder(objects);
}
public static class Builder {
private Text text;
private Builder() {
this.text = new Text();
}
private Builder(String string) {
this.text = new Text();
this.text.string = string;
}
private Builder(Object... objects) {
this.text = Text.of(objects);
}
public Builder color(TextColor color) {
this.text.color = color;
return this;
}
public Builder style(TextStyle style) {
if (this.text.style == null) {
this.text.style = new TextStyle(null,null,null,null,null);
}
this.text.style.concat(style);
return this;
}
public Builder append(Text text) {
if (this.text.childs == null) {
this.text.childs = new ArrayList<>();
}
this.text.childs.add(text);
return this;
}
public Text build() {
return this.text;
}
private Text(String content, TextColor color, TextStyle style, ImmutableList<Text> children) {
this.content = content;
this.color = color;
this.style = style;
this.children = children;
}
public boolean isEmpty() {
boolean result = string.isEmpty();
boolean result = content.isEmpty();
if (childs != null) {
for(Text child : childs) {
result = child.isEmpty();
if (children != null && !children.isEmpty()) {
for (Text child : children) {
result = result && child.isEmpty();
}
}
return result;
}
public String toPlainText() {
if (childs != null) {
public String toPlain() {
if (children != null && !children.isEmpty()) {
final StringJoiner sj = new StringJoiner("");
sj.add(string);
childs.forEach(child -> sj.add(child.toPlainText()));
children.forEach(child -> sj.add(child.toPlain()));
return sj.toString();
} else {
return string;
return content;
}
}
public static class Builder {
@Getter
private String content;
@Getter
private TextColor color;
@Getter
private TextStyle style;
private List<Text> children;
public Builder() {
this("");
}
public Builder(String content) {
this.content = content;
this.color = null;
this.style = null;
this.children = new ArrayList<>();
}
public Builder(Object... objects) {
for(Object obj : objects) {
if (obj instanceof String) {
if (this.content == null) {
this.content = (String) obj;
} else {
this.content = this.content.concat((String) obj);
}
} else if (obj instanceof TextStyle) {
if (this.style == null) {
this.style = new TextStyle(null,null,null,null,null);
} else {
this.style.merge((TextStyle) obj);
}
} else if (obj instanceof TextColor) {
this.color = (TextColor) obj;
}
}
this.children = new ArrayList<>();
}
public List<Text> getChildren() {
return Collections.unmodifiableList(children);
}
public Builder color(TextColor color) {
this.color = color;
return this;
}
public Builder style(TextStyle style) {
if (this.style == null) {
this.style = new TextStyle(null,null,null,null,null);;
} else {
this.style.merge(style);
}
return this;
}
public Builder style(TextStyle... styles) {
if (this.style == null) {
this.style = new TextStyle(null, null, null, null, null);
}
for(TextStyle style : styles) {
this.style.merge(style);
}
return this;
}
public Builder append(Text child) {
this.children.add(child);
return this;
}
public Builder append(Text... children) {
Collections.addAll(this.children, children);
return this;
}
public Text build() {
if (children.isEmpty()) {
return Text.EMPTY;
}
return new Text(
content,
color,
style,
ImmutableList.copyOf(children)
);
}
}
public static Builder builder() {
return new Builder();
}
public static Builder builder(String content) {
return new Builder(content);
}
public static Builder builder(Object... objects) {
return new Builder(objects);
}
public static Text of() {
return EMPTY;
}
public static Text of(String string) {
if (string == null || string.isEmpty()) {
return EMPTY;
} else if (string.equals("\n")) {
return NEW_LINE;
} else {
return new Text(string, null, null, null);
}
}
public static Text of(Object... objects) {
TextColor color = null;
TextStyle style = null;
String content = null;
for(Object obj : objects) {
if (obj instanceof String) {
if (content == null) {
content = (String) obj;
} else {
content = content.concat((String) obj);
}
} else if (obj instanceof TextStyle) {
if (style == null) {
style = (TextStyle) obj;
} else {
style.merge((TextStyle) obj);
}
} else if (obj instanceof TextColor) {
color = (TextColor) obj;
}
}
if (content == null || content.isEmpty()) {
return EMPTY;
} else {
return new Text(content, color, style, null);
}
}
}