package com.revolsys.ui.html.serializer; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import com.revolsys.record.io.format.xml.XmlWriter; import com.revolsys.ui.html.builder.HtmlUiBuilder; import com.revolsys.ui.html.serializer.key.AbstractKeySerializer; import com.revolsys.ui.html.serializer.type.TypeSerializer; /** * Serialize a value using a method on the {@link HtmlUiBuilder}. * * @author Paul Austin */ public class BuilderMethodSerializer extends AbstractKeySerializer implements TypeSerializer { /** The HTML UI Builder */ private HtmlUiBuilder<?> builder; /** The method on the builder */ private Method method; public BuilderMethodSerializer() { } /** * Construt a new HtmlUiBuilderMethodSerializer. * * @param builder The HTML UI Builder the method is on. * @param method The serializer method. */ public BuilderMethodSerializer(final String name, final HtmlUiBuilder<?> builder, final Method method) { super(name); this.builder = builder; this.method = method; } /** * Serialize the value to the XML writer. * * @param out The XML writer to serialize to. * @param value The object to get the value from. * @throws IOException If there was an I/O error serializing the value. */ @Override public void serialize(final XmlWriter out, final Object value) { try { this.method.invoke(this.builder, out, value); } catch (final IllegalAccessException e) { throw new RuntimeException(e.getMessage(), e); } catch (final InvocationTargetException e) { final Throwable cause = e.getCause(); if (cause instanceof RuntimeException) { throw (RuntimeException)cause; } else if (cause instanceof Error) { throw (Error)cause; } else { throw new RuntimeException(cause.getMessage(), cause); } } } }