package de.lessvoid.nifty.html;
import de.lessvoid.nifty.builder.EffectBuilder;
import de.lessvoid.nifty.builder.ElementBuilder.Align;
import de.lessvoid.nifty.builder.ImageBuilder;
import de.lessvoid.nifty.builder.PanelBuilder;
import de.lessvoid.nifty.builder.TextBuilder;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.logging.Logger;
public class NiftyBuilderFactory {
private final Logger log = Logger.getLogger(NiftyBuilderFactory.class.getName());
public PanelBuilder createBodyPanelBuilder() {
PanelBuilder builder = createPanelBuilder();
builder.width("100%");
builder.height("100%");
builder.childLayoutVertical();
return builder;
}
public PanelBuilder createParagraphPanelBuilder() {
PanelBuilder builder = createPanelBuilder();
builder.width("100%");
builder.childLayoutVertical();
return builder;
}
public TextBuilder createTextBuilder(@Nonnull final String text, @Nonnull final String defaultFontName, @Nullable final String color) {
TextBuilder textBuilder = createTextBuilder();
textBuilder.text(text);
textBuilder.wrap(true);
textBuilder.alignLeft();
textBuilder.valignTop();
textBuilder.textHAlignLeft();
textBuilder.textVAlignTop();
textBuilder.font(defaultFontName);
textBuilder.width("100%");
if (color != null) {
textBuilder.color(color);
}
return textBuilder;
}
public ImageBuilder createImageBuilder(@Nonnull final String src, @Nullable final String align, @Nullable final String width, @Nullable final String height, @Nullable final String bgcolor, @Nullable final String vspace) {
ImageBuilder imageBuilder = createImageBuilder();
imageBuilder.filename(src);
if (align != null) {
imageBuilder.align(translateAlign(align));
}
if (width != null) {
imageBuilder.width(width);
}
if (height != null) {
imageBuilder.height(height);
}
if (bgcolor != null) {
imageBuilder.backgroundColor(bgcolor);
}
if (vspace != null) {
imageBuilder.padding(vspace);
}
return imageBuilder;
}
public PanelBuilder createBreakPanelBuilder(@Nonnull final String height) {
PanelBuilder result = createPanelBuilder();
result.height(height);
return result;
}
public PanelBuilder createTableTagPanelBuilder(final String width, final String bgcolor, final String border, final String bordercolor) {
PanelBuilder result = createPanelBuilder();
result.childLayoutVertical();
addTableGeneralAttributes(width, bgcolor, border, bordercolor, result);
return result;
}
public PanelBuilder createTableRowPanelBuilder(final String width, final String bgcolor, final String border, final String bordercolor) {
PanelBuilder result = createPanelBuilder();
result.childLayoutHorizontal();
addTableGeneralAttributes(width, bgcolor, border, bordercolor, result);
return result;
}
public PanelBuilder createTableDataPanelBuilder(final String width, final String bgcolor, final String border, final String bordercolor) {
PanelBuilder result = createPanelBuilder();
result.childLayoutVertical();
addTableGeneralAttributes(width, bgcolor, border, bordercolor, result);
return result;
}
PanelBuilder createPanelBuilder() {
return new PanelBuilder();
}
TextBuilder createTextBuilder() {
return new TextBuilder();
}
ImageBuilder createImageBuilder() {
return new ImageBuilder();
}
@Nonnull
private Align translateAlign(final String align) {
if ("left".equalsIgnoreCase(align)) {
return Align.Left;
} else if ("right".equalsIgnoreCase(align)) {
return Align.Right;
} else if ("middle".equalsIgnoreCase(align)) {
return Align.Center;
} else {
// default to left
log.warning("Unknown align type [" + align + "] detected. Will default to Align.LEFT");
return Align.Left;
}
}
private void addTableGeneralAttributes(
@Nullable final String width,
@Nullable final String bgcolor,
@Nullable final String border,
@Nullable final String bordercolor,
@Nonnull PanelBuilder result) {
if (width != null) {
result.width(width);
}
if (bgcolor != null) {
result.backgroundColor(bgcolor);
}
if (border != null) {
result.onActiveEffect(new EffectBuilder("border") {{
effectParameter("border", border);
if (bordercolor != null) {
effectParameter("color", bordercolor);
}
}});
}
}
}