ExportFacade.java
package com.taxonomy.export.service;
import com.taxonomy.analysis.service.LlmService;
import com.taxonomy.analysis.service.SavedAnalysisService;
import com.taxonomy.archimate.ArchiMateModel;
import com.taxonomy.architecture.service.RequirementArchitectureViewService;
import com.taxonomy.diagram.DiagramModel;
import com.taxonomy.dto.AnalysisResult;
import com.taxonomy.dto.RequirementArchitectureView;
import com.taxonomy.dto.SavedAnalysis;
import com.taxonomy.export.ArchiMateDiagramService;
import com.taxonomy.archimate.exchange.ArchiMateXmlExporter;
import com.taxonomy.export.DiagramProjectionService;
import com.taxonomy.export.MermaidExportService;
import com.taxonomy.export.MermaidLabels;
import com.taxonomy.export.StructurizrExportService;
import com.taxonomy.export.VisioDiagramService;
import com.taxonomy.export.VisioPackageBuilder;
import com.taxonomy.export.spi.ExportFormatExtension;
import com.taxonomy.visio.VisioDocument;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/** High-level application facade for analysis-driven exports and score exchange. */
@Service
public class ExportFacade {
private final LlmService llmService;
private final RequirementArchitectureViewService architectureViewService;
private final DiagramProjectionService diagramProjectionService;
private final VisioDiagramService visioDiagramService;
private final VisioPackageBuilder visioPackageBuilder;
private final ArchiMateDiagramService archiMateDiagramService;
private final ArchiMateXmlExporter archiMateXmlExporter;
private final MermaidExportService mermaidExportService;
private final StructurizrExportService structurizrExportService;
private final SavedAnalysisService savedAnalysisService;
public ExportFacade(LlmService llmService,
RequirementArchitectureViewService architectureViewService,
DiagramProjectionService diagramProjectionService,
VisioDiagramService visioDiagramService,
VisioPackageBuilder visioPackageBuilder,
ArchiMateDiagramService archiMateDiagramService,
ArchiMateXmlExporter archiMateXmlExporter,
MermaidExportService mermaidExportService,
StructurizrExportService structurizrExportService,
SavedAnalysisService savedAnalysisService) {
this.llmService = llmService;
this.architectureViewService = architectureViewService;
this.diagramProjectionService = diagramProjectionService;
this.visioDiagramService = visioDiagramService;
this.visioPackageBuilder = visioPackageBuilder;
this.archiMateDiagramService = archiMateDiagramService;
this.archiMateXmlExporter = archiMateXmlExporter;
this.mermaidExportService = mermaidExportService;
this.structurizrExportService = structurizrExportService;
this.savedAnalysisService = savedAnalysisService;
}
public byte[] exportAsVisio(String businessText) throws IOException {
DiagramModel diagram = analyzeAndProject(businessText);
VisioDocument visioDocument = visioDiagramService.convert(diagram);
return visioPackageBuilder.build(visioDocument);
}
public byte[] exportAsArchiMate(String businessText) {
DiagramModel diagram = analyzeAndProject(businessText);
ArchiMateModel model = archiMateDiagramService.convert(diagram);
return archiMateXmlExporter.export(model);
}
public String exportAsMermaid(String businessText) {
return mermaidExportService.export(analyzeAndProject(businessText));
}
public String exportAsMermaid(String businessText, MermaidLabels labels) {
return mermaidExportService.export(analyzeAndProject(businessText), labels);
}
public String exportAsStructurizrDsl(String businessText) {
return structurizrExportService.export(analyzeAndProject(businessText));
}
public SavedAnalysis buildExport(String requirement,
Map<String, Integer> scores,
Map<String, String> reasons,
String provider) {
return savedAnalysisService.buildExport(requirement, scores, reasons, provider);
}
public SavedAnalysis importFromJson(String jsonBody) throws IOException {
return savedAnalysisService.importFromJson(jsonBody);
}
public List<String> findUnknownCodes(SavedAnalysis saved) {
return savedAnalysisService.findUnknownCodes(saved);
}
public String getActiveProviderName() {
return llmService.getActiveProviderName();
}
/**
* Builds the format-neutral diagram consumed by an {@link ExportFormatExtension}.
*/
public DiagramModel buildDiagram(String businessText) {
return analyzeAndProject(businessText);
}
private DiagramModel analyzeAndProject(String businessText) {
AnalysisResult result = llmService.analyzeWithBudget(businessText);
RequirementArchitectureView view = architectureViewService.build(
result.getScores(), businessText, 20);
String title = businessText.length() > 60
? businessText.substring(0, 57) + "..."
: businessText;
return diagramProjectionService.project(view, title);
}
}