All Downloads are FREE. Search and download functionalities are using the official Maven repository.

xapi.ui.html.impl.HtmlServiceDefault Maven / Gradle / Ivy

The newest version!
package xapi.ui.html.impl;

import xapi.annotation.inject.SingletonDefault;
import xapi.inject.X_Inject;
import xapi.ui.api.StyleService;
import xapi.ui.autoui.api.BeanValueProvider;
import xapi.ui.autoui.api.UserInterfaceFactory;
import xapi.ui.html.api.Css;
import xapi.ui.html.api.Html;
import xapi.ui.html.api.HtmlService;
import xapi.ui.html.api.HtmlSnippet;
import xapi.ui.html.api.Style;

@SingletonDefault(implFor=HtmlService.class)
public class HtmlServiceDefault implements HtmlService {

  @Override
  public  HtmlSnippet toSnippet(Class templateClass, Class cls, StyleService css) {
    /*
 We do not store a field or provider for UserInterfaceFactory,
 as this entire method needs to be swapped out by the compiler,
 so, forcing gwt to have a UserInterfaceFactory field
 will fail the compile by default.  You may manually set a gwt rebind rule
 or declare an implementor of UserInterfaceFactory annotated w/ @GwtPlatform,
 and annotated w/ @SingletonOverride to enable this method to work in Gwt *

     * you must enable a whole lot of reflection on objects for this to work,
 and will be very inefficient.  The preferred method of replacing this whole
 method with an auto-generated implementation requires no runtime reflection.
     */
    BeanValueProvider bean = X_Inject.singleton(UserInterfaceFactory.class).getBeanProvider(cls);
    return new HtmlSnippet<>(templateClass.getAnnotation(Html.class), bean, css);
  }

  @Override
  public void injectStyle(Class cls, StyleService context) {
    Style style = cls.getAnnotation(Style.class);
    if (style != null) {
      printStyle(style, context);
    }
    Css css = cls.getAnnotation(Css.class);
    if (css != null) {
      for (Style s : css.style()) {
        printStyle(s, context);
      }
    }
  }

  private void printStyle(Style style, StyleService context) {
    StringBuilder result = new StringBuilder();
    HtmlSnippet.appendTo(result, style);
    context.addCss(result.toString(), style.priority());
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy