package origo.helpers;
import origo.fragments.FragmentLoader;
import play.modules.origo.core.ui.RenderingContext;
import play.modules.origo.core.ui.UIElement;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class DefaultDecorator {
private static final String FRAGMENT_PREFIX = "origo.core.";
public static String decorate(UIElement uiElement, RenderingContext renderingContext) {
if (UIElement.META.equalsIgnoreCase(uiElement.getType())) {
return decorateMeta(uiElement, renderingContext);
} else if (UIElement.SCRIPT.equalsIgnoreCase(uiElement.getType())) {
return decorateScript(uiElement, renderingContext);
} else if (UIElement.STYLE.equalsIgnoreCase(uiElement.getType())) {
return decorateStyle(uiElement, renderingContext);
} else if (UIElement.LINK.equalsIgnoreCase(uiElement.getType())) {
return decorateLink(uiElement, renderingContext);
} else if (UIElement.FORM.equalsIgnoreCase(uiElement.getType())) {
return decorateForm(uiElement, renderingContext);
} else if (UIElement.INPUT_TEXT.equalsIgnoreCase(uiElement.getType())) {
return decorateInputText(uiElement, renderingContext);
} else if (UIElement.LABEL.equalsIgnoreCase(uiElement.getType())) {
return decorateLabel(uiElement, renderingContext);
} else if (UIElement.INPUT_TEXTAREA.equalsIgnoreCase(uiElement.getType())) {
return decorateInputTextArea(uiElement, renderingContext);
} else if (UIElement.INPUT_HIDDEN.equalsIgnoreCase(uiElement.getType())) {
return decorateInputHidden(uiElement, renderingContext);
} else if (UIElement.INPUT_PASSWORD.equalsIgnoreCase(uiElement.getType())) {
return decorateInputPassword(uiElement, renderingContext);
} else if (UIElement.INPUT_FILE.equalsIgnoreCase(uiElement.getType())) {
return decorateInputFile(uiElement, renderingContext);
} else if (UIElement.INPUT_IMAGE.equalsIgnoreCase(uiElement.getType())) {
return decorateInputImage(uiElement, renderingContext);
} else if (UIElement.INPUT_RADIO_BUTTON.equalsIgnoreCase(uiElement.getType())) {
return decorateInputRadioButton(uiElement, renderingContext);
} else if (UIElement.INPUT_SELECT.equalsIgnoreCase(uiElement.getType())) {
return decorateInputSelect(uiElement, renderingContext);
} else if (UIElement.INPUT_SELECT_OPTION.equalsIgnoreCase(uiElement.getType())) {
return decorateInputSelectOption(uiElement, renderingContext);
} else if (UIElement.INPUT_BUTTON.equalsIgnoreCase(uiElement.getType())) {
return decorateInputButton(uiElement, renderingContext);
} else if (UIElement.INPUT_SUBMIT.equalsIgnoreCase(uiElement.getType())) {
return decorateInputSubmit(uiElement, renderingContext);
} else if (UIElement.INPUT_RESET.equalsIgnoreCase(uiElement.getType())) {
return decorateInputReset(uiElement, renderingContext);
} else if (UIElement.LIST_BULLET.equalsIgnoreCase(uiElement.getType())) {
return decorateListBulleted(uiElement, renderingContext);
} else if (UIElement.LIST_ORDERED.equalsIgnoreCase(uiElement.getType())) {
return decorateListNumbered(uiElement, renderingContext);
} else if (UIElement.LIST_ITEM.equalsIgnoreCase(uiElement.getType())) {
return decorateListItem(uiElement, renderingContext);
} else if (UIElement.ANCHOR.equalsIgnoreCase(uiElement.getType())) {
return decorateAnchor(uiElement, renderingContext);
} else if (UIElement.PANEL.equalsIgnoreCase(uiElement.getType())) {
return decoratePanel(uiElement, renderingContext);
} else if (UIElement.TEXT.equalsIgnoreCase(uiElement.getType())) {
return decorateText(uiElement, renderingContext);
} else if (UIElement.PARAGRAPH.equalsIgnoreCase(uiElement.getType())) {
return decorateParagraph(uiElement, renderingContext);
} else {
return decorateUnknownType(uiElement, renderingContext);
}
}
public static String decorateMeta(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "meta", uiElement, null);
}
public static String decorateLink(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "link", uiElement, null);
}
public static String decorateStyle(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "style", uiElement, uiElement.getBody());
}
public static String decorateScript(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "script", uiElement, uiElement.getBody());
}
public static String decorateForm(UIElement uiElement, RenderingContext renderingContext) {
String body = ThemeHelper.decorateChildren(uiElement, renderingContext);
return loadFragment(getFragmentPrefix(), "form", uiElement, body);
}
public static String decorateListBulleted(UIElement uiElement, RenderingContext renderingContext) {
String body = ThemeHelper.decorateChildren(uiElement, renderingContext);
return loadFragment(getFragmentPrefix(), "ul", uiElement, body);
}
public static String decorateListNumbered(UIElement uiElement, RenderingContext renderingContext) {
String body = ThemeHelper.decorateChildren(uiElement, renderingContext);
return loadFragment(getFragmentPrefix(), "ol", uiElement, body);
}
public static String decorateListItem(UIElement uiElement, RenderingContext renderingContext) {
String body = uiElement.getBody();
if (uiElement.hasChildren()) {
body = ThemeHelper.decorateChildren(uiElement, renderingContext);
}
return loadFragment(getFragmentPrefix(), "li", uiElement, body);
}
public static String decorateInputText(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "input", uiElement, null, Collections.singletonMap("type", "text"));
}
public static String decorateInputHidden(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "input", uiElement, null, Collections.singletonMap("type", "hidden"));
}
public static String decorateLabel(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "label", uiElement, uiElement.getBody());
}
public static String decorateInputTextArea(UIElement uiElement, RenderingContext renderingContext) {
String body = uiElement.getBody();
if (uiElement.hasChildren()) {
body = ThemeHelper.decorateChildren(uiElement, renderingContext);
}
return loadFragment(getFragmentPrefix(), "textarea", uiElement, body);
}
public static String decorateInputRadioButton(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "input", uiElement, null, Collections.singletonMap("type", "radiobutton"));
}
private static String decorateInputSelect(UIElement uiElement, RenderingContext renderingContext) {
String body = ThemeHelper.decorateChildren(uiElement, renderingContext);
return loadFragment(getFragmentPrefix(), "select", uiElement, body);
}
private static String decorateInputSelectOption(UIElement uiElement, RenderingContext renderingContext) {
String body = uiElement.getBody();
if (uiElement.hasChildren()) {
body = ThemeHelper.decorateChildren(uiElement, renderingContext);
}
return loadFragment(getFragmentPrefix(), "select_option", uiElement, body);
}
public static String decorateInputButton(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "input", uiElement, null, Collections.singletonMap("type", "button"));
}
public static String decorateInputSubmit(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "input", uiElement, null, Collections.singletonMap("type", "submit"));
}
public static String decorateInputReset(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "input", uiElement, null, Collections.singletonMap("type", "reset"));
}
public static String decorateInputImage(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "input", uiElement, null, Collections.singletonMap("type", "image"));
}
public static String decorateInputFile(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "input", uiElement, null, Collections.singletonMap("type", "file"));
}
public static String decorateInputPassword(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "input", uiElement, null, Collections.singletonMap("type", "password"));
}
public static String decoratePanel(UIElement uiElement, RenderingContext renderingContext) {
String body = ThemeHelper.decorateChildren(uiElement, renderingContext);
return loadFragment(getFragmentPrefix(), "panel", uiElement, body);
}
public static String decorateText(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "text", uiElement, uiElement.getBody(), Collections.<String, String>emptyMap());
}
public static String decorateParagraph(UIElement uiElement, RenderingContext renderingContext) {
return loadFragment(getFragmentPrefix(), "paragraph", uiElement, uiElement.getBody(), Collections.<String, String>emptyMap());
}
public static String decorateAnchor(UIElement uiElement, RenderingContext renderingContext) {
String body = uiElement.getBody();
if (uiElement.hasChildren()) {
body = ThemeHelper.decorateChildren(uiElement, renderingContext);
}
return loadFragment(getFragmentPrefix(), "anchor", uiElement, body);
}
public static String decorateUnknownType(UIElement uiElement, RenderingContext renderingContext) {
String body = uiElement.getBody();
if (uiElement.hasChildren()) {
body = ThemeHelper.decorateChildren(uiElement, renderingContext);
}
return loadFragment(getFragmentPrefix(), uiElement.getType(), uiElement, body, Collections.<String, String>emptyMap());
}
protected static String loadFragment(String prefix, String tagName, UIElement uiElement, String body) {
return loadFragment(prefix, tagName, uiElement, body, Collections.<String, String>emptyMap());
}
protected static String loadFragment(String prefix, String tagName, UIElement uiElement, String body, Map<String, String> additionalAttributes) {
Map<String, String> attributes = new HashMap<String, String>();
attributes.putAll(additionalAttributes);
attributes.putAll(uiElement.getAttributes());
return FragmentLoader.loadHtmlFragment(prefix + tagName, uiElement, attributes, body);
}
public static String getFragmentPrefix() {
return FRAGMENT_PREFIX;
}
}