package cc.catalysts.structurizr.config; import cc.catalysts.structurizr.service.StructurizrService; import com.structurizr.Workspace; import com.structurizr.api.StructurizrClient; import com.structurizr.encryption.AesEncryptionStrategy; import com.structurizr.model.Model; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; /** * @author Klaus Lehner, Catalysts GmbH */ @Configuration @ComponentScan(basePackageClasses = StructurizrService.class) @EnableConfigurationProperties(value = {StructurizrProperties.class}) public class StructurizrAutoConfiguration { @Bean public StructurizrService structurizrService(StructurizrClient structurizrClient, Workspace workspace, StructurizrProperties properties) { return new StructurizrService(structurizrClient, workspace, properties); } @Bean public Model model(Workspace workspace) { return workspace.getModel(); } @Bean public Workspace workspace(StructurizrProperties config) { return new Workspace(config.getWorkspace().getName(), config.getWorkspace().getDescription()); } @Bean public StructurizrClient structurizrClient(StructurizrProperties config) { StructurizrClient structurizrClient = new StructurizrClient(config.getUrl(), config.getWorkspace().getKey(), config.getWorkspace().getSecret()); // Add client-side encryption if configured if (config.getWorkspace().getEncryptionPassphrase() != null) { structurizrClient.setEncryptionStrategy(new AesEncryptionStrategy(config.getWorkspace().getEncryptionPassphrase())); } structurizrClient.setWorkspaceArchiveLocation(config.getWorkspaceArchiveLocation()); return structurizrClient; } }