VisioExportExtension.java

package com.taxonomy.export.service;

import com.taxonomy.export.VisioDiagramService;
import com.taxonomy.export.VisioPackageBuilder;
import com.taxonomy.export.spi.ExportContext;
import com.taxonomy.export.spi.ExportFormatDescriptor;
import com.taxonomy.export.spi.ExportFormatExtension;
import com.taxonomy.export.spi.ExportResult;
import com.taxonomy.visio.VisioDocument;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.io.UncheckedIOException;

/** Spring adapter for Visio VSDX output. */
@Component
public class VisioExportExtension implements ExportFormatExtension {

    public static final String FORMAT_ID = "visio";

    private static final ExportFormatDescriptor DESCRIPTOR = new ExportFormatDescriptor(
            FORMAT_ID,
            "Visio",
            "vsdx",
            "application/vnd.ms-visio.drawing",
            true);

    private final VisioDiagramService visioDiagramService;
    private final VisioPackageBuilder visioPackageBuilder;

    public VisioExportExtension(VisioDiagramService visioDiagramService,
                                VisioPackageBuilder visioPackageBuilder) {
        this.visioDiagramService = visioDiagramService;
        this.visioPackageBuilder = visioPackageBuilder;
    }

    @Override
    public ExportFormatDescriptor descriptor() {
        return DESCRIPTOR;
    }

    @Override
    public ExportResult export(ExportContext context) {
        VisioDocument document = visioDiagramService.convert(context.diagram());
        try {
            return new ExportResult(visioPackageBuilder.build(document));
        } catch (IOException e) {
            throw new UncheckedIOException("Visio export failed", e);
        }
    }
}