ReportRendererExtension.java
package com.taxonomy.extension.api.report;
import com.taxonomy.dto.ArchitectureReport;
import com.taxonomy.shared.extension.ExtensionKind;
import com.taxonomy.shared.extension.TaxonomyExtension;
/**
* Spring-free extension contract for rendering one report family in one format.
*
* <p>Renderers are addressed by the pair {@code reportTypeId + formatId}. Existing
* architecture renderers remain source-compatible because the default report type and
* model are {@code architecture} and {@link ArchitectureReport}.</p>
*/
public interface ReportRendererExtension extends TaxonomyExtension {
String DEFAULT_REPORT_TYPE_ID = "architecture";
/** Stable identifier of the report family rendered by this extension. */
default String reportTypeId() {
return DEFAULT_REPORT_TYPE_ID;
}
/** Runtime model type accepted by this renderer. */
default Class<?> reportModelType() {
return ArchitectureReport.class;
}
@Override
default String id() {
String formatId = descriptor().id();
if (DEFAULT_REPORT_TYPE_ID.equals(reportTypeId())) {
return formatId;
}
return reportTypeId() + ":" + formatId;
}
@Override
default String displayName() {
return descriptor().displayName();
}
@Override
default String description() {
return "Renders %s reports as %s".formatted(
reportTypeId(), descriptor().displayName());
}
@Override
default ExtensionKind kind() {
return ExtensionKind.REPORT_RENDERER;
}
ReportFormatDescriptor descriptor();
ReportRenderResult render(ReportRenderContext context);
}