package org.skyscreamer.yoga.listener; import java.io.IOException; import org.skyscreamer.yoga.metadata.MetaDataRegistry; import org.skyscreamer.yoga.model.MapHierarchicalModel; public class MetadataLinkListener implements RenderingListener { private MetaDataRegistry _metaDataRegistry; public MetadataLinkListener() { } public MetadataLinkListener( MetaDataRegistry metaDataRegistry ) { this._metaDataRegistry = metaDataRegistry; } public void setMetaDataRegistry( MetaDataRegistry metaDataRegistry ) { this._metaDataRegistry = metaDataRegistry; } @Override public <T> void eventOccurred( RenderingEvent<T> event ) throws IOException { if (event.getType() != RenderingEventType.POJO_CHILD || event.getSelector().isInfluencedExternally()) { return; } Class<?> type = event.getValueType(); String urlSuffix = event.getRequestContext().getUrlSuffix(); String url = _metaDataRegistry.getMetadataHref( type, urlSuffix ); if (url != null) { MapHierarchicalModel<?> mapHierarchicalModel = (MapHierarchicalModel<?>) event.getModel(); MapHierarchicalModel<?> childMap = mapHierarchicalModel.createChildMap( "metadata" ); childMap.addProperty( "href", url ); childMap.finished(); } } }