package jnpf.limsService.print;
|
|
import jnpf.exception.DataException;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import java.util.Collections;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* Spring 启动时收集所有 {@link PrintTemplateRenderer} 实现,按 templateId 索引。
|
* Controller 通过 {@link #get(String)} 路由到具体 renderer。
|
*/
|
@Component
|
public class PrintRendererRegistry {
|
|
private final Map<String, PrintTemplateRenderer> renderers;
|
|
@Autowired
|
public PrintRendererRegistry(List<PrintTemplateRenderer> rendererList) {
|
Map<String, PrintTemplateRenderer> map = new HashMap<>();
|
for (PrintTemplateRenderer r : rendererList) {
|
String key = r.getTemplateId();
|
if (key == null || key.isEmpty()) {
|
continue;
|
}
|
PrintTemplateRenderer existed = map.put(key, r);
|
if (existed != null) {
|
throw new IllegalStateException(
|
"重复的 PrintTemplateRenderer template_id=" + key
|
+ ",冲突类: " + existed.getClass().getName()
|
+ " vs " + r.getClass().getName());
|
}
|
}
|
this.renderers = Collections.unmodifiableMap(map);
|
}
|
|
public PrintTemplateRenderer get(String templateId) {
|
PrintTemplateRenderer r = renderers.get(templateId);
|
if (r == null) {
|
throw new DataException("找不到打印模板的渲染器: " + templateId);
|
}
|
return r;
|
}
|
}
|