package com.revolsys.swing.builder; import java.util.LinkedHashMap; import java.util.Map; public class UiBuilderRegistry { private static final StringUiBuilder DEFAULT_RENDERER = new StringUiBuilder(); private static UiBuilderRegistry INSTANCE = new UiBuilderRegistry(); public static UiBuilderRegistry getInstance() { return INSTANCE; } private final Map<Class<?>, UiBuilder> builders = new LinkedHashMap<>(); public void addBuilder(final Class<?> clazz, final UiBuilder builder) { this.builders.put(clazz, builder); builder.setRegistry(this); } public UiBuilder getBuilder(final Class<?> clazz) { final UiBuilder renderer = getBuilderPrivate(clazz); if (renderer != null) { return renderer; } else { return DEFAULT_RENDERER; } } private UiBuilder getBuilderPrivate(final Class<?> clazz) { if (clazz != null) { UiBuilder renderer = this.builders.get(clazz); if (renderer == null) { final Class<?> superClass = clazz.getSuperclass(); if (superClass != Object.class) { renderer = getBuilderPrivate(superClass); } final Class<?>[] interfaces = clazz.getInterfaces(); for (int i = 0; i < interfaces.length && renderer == null; i++) { final Class<?> interfaceClass = interfaces[i]; renderer = getBuilderPrivate(interfaceClass); } } return renderer; } else { return null; } } public String toHtml(final Object object) { if (object != null) { final Class<?> objectClass = object.getClass(); final UiBuilder renderer = getBuilder(objectClass); final String html = renderer.toHtml(object); return html; } else { return null; } } }