xapi.ui.html.impl.HtmlRenderer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xapi-dev Show documentation
Show all versions of xapi-dev Show documentation
Everything needed to run a comprehensive dev environment.
Just type X_ and pick a service from autocomplete;
new dev modules will be added as they are built.
The only dev service not included in the uber jar is xapi-dev-maven,
as it includes all runtime dependencies of maven, adding ~4 seconds to build time,
and 6 megabytes to the final output jar size (without xapi-dev-maven, it's ~1MB).
The newest version!
package xapi.ui.html.impl;
import javax.inject.Provider;
import xapi.collect.X_Collect;
import xapi.collect.api.StringTo;
import xapi.ui.api.StyleService;
import xapi.ui.html.X_Html;
import xapi.ui.html.api.HtmlSnippet;
import xapi.util.api.ConvertsValue;
import xapi.util.impl.LazyProvider;
public class HtmlRenderer {
@SuppressWarnings("unchecked")
private StringTo> map = X_Collect.newStringMap(
Class.class.cast(ConvertsValue.class)
);
@SuppressWarnings("unchecked")
public ConvertsValue getRenderer(Class type, StyleService context) {
ConvertsValue converter = (ConvertsValue) map.get(type.getName());
if (converter == null) {
converter = buildConverter(type, context);
map.put(type.getName(), converter);
}
return converter;
}
protected ConvertsValue buildConverter(final Class type, final StyleService context) {
final Provider> snippet =
new LazyProvider<>(new Provider>() {
@Override
public HtmlSnippet get() {
return X_Html.toSnippet(type, context);
}
});
return new ConvertsValue(){
@Override
public String convert(T from) {
return snippet.get().convert(from);
}
};
}
}