diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/file/dummy/DummyOzgCloudFileService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/file/dummy/DummyOzgCloudFileService.java new file mode 100644 index 0000000000000000000000000000000000000000..2e617394ef1cce76819e336022e1b1b9d7b9cab9 --- /dev/null +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/file/dummy/DummyOzgCloudFileService.java @@ -0,0 +1,41 @@ +package de.ozgcloud.apilib.file.dummy; + +import java.io.IOException; +import java.io.OutputStream; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.stereotype.Service; + +import de.itvsh.kop.common.errorhandling.TechnicalException; +import de.ozgcloud.apilib.file.OzgCloudFile; +import de.ozgcloud.apilib.file.OzgCloudFileId; +import de.ozgcloud.apilib.file.OzgCloudFileService; + +@Service +@ConditionalOnMissingBean(OzgCloudFileService.class) +public class DummyOzgCloudFileService implements OzgCloudFileService { + + private static final byte[] TEST_DATA = "Hello World!".getBytes(); + + public static final OzgCloudFile DUMMY_FILE = OzgCloudFile.builder() + .id(OzgCloudFileId.from("42")) + .contentType("text/plain") + .size(TEST_DATA.length) + .name("helloWorld.txt") + .build(); + + @Override + public OzgCloudFile getFile(OzgCloudFileId id) { + return DUMMY_FILE; + } + + @Override + public void writeFileDataToStream(OzgCloudFileId id, OutputStream streamToWriteData) { + try { + streamToWriteData.write(TEST_DATA); + } catch (IOException e) { + throw new TechnicalException("Erro wrting dummy data.", e); + } + } + +} diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/GrpcOzgCloudFileService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/GrpcOzgCloudFileService.java index 3fc5f890bd55abd80f2a55c892fa52858d8f00ce..5d6b8adda071fba5e9ace16e0da8751b87ac2815 100644 --- a/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/GrpcOzgCloudFileService.java +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/GrpcOzgCloudFileService.java @@ -7,7 +7,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.logging.Level; -import org.springframework.beans.factory.annotation.Autowired; +import org.mapstruct.factory.Mappers; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; @@ -38,8 +38,7 @@ public class GrpcOzgCloudFileService implements OzgCloudFileService { @GrpcClient("file-manager") private final BinaryFileServiceStub asyncServiceStub; - @Autowired - private final OzgCloudFileMapper mapper; + private final OzgCloudFileMapper mapper = Mappers.getMapper(OzgCloudFileMapper.class); static final int CHUNK_SIZE = 255 * 1024; diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/OzgCloudFileMapper.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/OzgCloudFileMapper.java index f8e5c3bcefedd4a04709c6f5e843e0cd32ac7bf3..07c8706c9b3263d47235693fbf7d7202e9016fdb 100644 --- a/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/OzgCloudFileMapper.java +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/OzgCloudFileMapper.java @@ -11,5 +11,5 @@ public interface OzgCloudFileMapper { OzgCloudFile fromGrpc(GrpcOzgFile grpcFile); - OzgCloudFileId toOzgCloudFileId(String string); + OzgCloudFileId toOzgCloudFileId(String id); } diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/dummy/DummyVorgangService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/dummy/DummyVorgangService.java index 761d910ff63eb162e90cdc72f4233fe9fd30f9ce..449e1475777df73fb7defcdfa3abc950f15eaeb4 100644 --- a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/dummy/DummyVorgangService.java +++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/dummy/DummyVorgangService.java @@ -10,6 +10,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.stereotype.Service; import de.ozgcloud.apilib.errorhandling.NotFoundException; +import de.ozgcloud.apilib.file.dummy.DummyOzgCloudFileService; +import de.ozgcloud.apilib.vorgang.OzgCloudAntragsteller; import de.ozgcloud.apilib.vorgang.OzgCloudEingang; import de.ozgcloud.apilib.vorgang.OzgCloudVorgang; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangHeader; @@ -33,7 +35,10 @@ public class DummyVorgangService implements OzgCloudVorgangService { .createdAt(ZonedDateTime.now()) .aktenzeichen("ABC-123-04") .build(); - private static final OzgCloudEingang EINGANG_1 = OzgCloudEingang.builder().build(); + private static final OzgCloudEingang EINGANG_1 = OzgCloudEingang.builder() + .antragsteller(OzgCloudAntragsteller.builder().build()) + .representations(List.of(DummyOzgCloudFileService.DUMMY_FILE)) + .build(); private static final String VORGANG_NAME_2 = "Antrag auf Führung eines Kampfhamsters"; private static final String VORGANG_NR_2 = "5678"; diff --git a/api-lib-demo/src/main/java/de/ozgcloud/apilib/demo/DemoRunner.java b/api-lib-demo/src/main/java/de/ozgcloud/apilib/demo/DemoRunner.java index a140db583994a19250fb958b6cd6bbde827b61a1..ba3b61d6405f86022809914c195ae89359405f6d 100644 --- a/api-lib-demo/src/main/java/de/ozgcloud/apilib/demo/DemoRunner.java +++ b/api-lib-demo/src/main/java/de/ozgcloud/apilib/demo/DemoRunner.java @@ -5,6 +5,8 @@ import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; +import de.ozgcloud.apilib.file.OzgCloudFileId; +import de.ozgcloud.apilib.file.OzgCloudFileService; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService; @@ -13,10 +15,15 @@ class DemoRunner implements ApplicationListener<ContextRefreshedEvent> { @Autowired private OzgCloudVorgangService vorgangService; + @Autowired + private OzgCloudFileService fileService; @Override public void onApplicationEvent(ContextRefreshedEvent event) { System.out.println(vorgangService.getById(OzgCloudVorgangId.from("647885a50b105b1e4995378e"))); + + System.out.println(fileService.getFile(OzgCloudFileId.from("630363d5b5816c0d8efd6f19"))); + } } diff --git a/api-lib-demo/src/main/resources/application.yml b/api-lib-demo/src/main/resources/application.yml index fda4dffb65ab12dbad63b0ea9c1b4ce95ab5a736..0fd202184782d48873fad9a542fd074b2420a382 100644 --- a/api-lib-demo/src/main/resources/application.yml +++ b/api-lib-demo/src/main/resources/application.yml @@ -1,3 +1,7 @@ ozgcloud: vorgang-manager: - address: static://127.0.0.1:9090 \ No newline at end of file + address: static://127.0.0.1:9090 + negotiation-type: plaintext + file-manager: + address: ${ozgcloud.vorgang-manager.address} + negotiation-type: plaintext \ No newline at end of file diff --git a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java index b6a3b428687f48b5cac10127039301c0db4d62a5..b27610b6ea3d33f19b859342da96731281ff971b 100644 --- a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java +++ b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java @@ -1,38 +1,63 @@ package de.ozgcloud.client.autoconfigure; -import org.springframework.beans.factory.annotation.Value; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; +import de.ozgcloud.apilib.file.dummy.DummyOzgCloudFileService; +import de.ozgcloud.apilib.file.grpc.GrpcOzgCloudFileService; import de.ozgcloud.apilib.vorgang.dummy.DummyVorgangService; import de.ozgcloud.apilib.vorgang.grpc.GrpcVorgangService; import net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration; import net.devh.boot.grpc.client.config.GrpcChannelProperties; import net.devh.boot.grpc.client.config.GrpcChannelsProperties; -import net.devh.boot.grpc.client.config.NegotiationType; @AutoConfiguration(before = GrpcClientAutoConfiguration.class) -@Import({ GrpcVorgangService.class, DummyVorgangService.class }) +@ComponentScan("de.ozgcloud.client.autoconfigure") +@Import({ + GrpcVorgangService.class, DummyVorgangService.class, + GrpcOzgCloudFileService.class, DummyOzgCloudFileService.class +}) public class OzgCloudClientAutoConfiguration { private static final String CLIENT_NAME_VORGANG_MANAGER = "vorgang-manager"; + private static final String CLIENT_NAME_FILE_MANAGER = "file-manager"; - @Value("${ozgcloud.vorgang-manager.address:null}") - private String address; + @Autowired + private OzgCloudVorgangManagerProperties vorgangManagerProperties; + @Autowired + private OzgCloudFileManagerProperties fileManagerProperties; @Bean @ConditionalOnProperty("ozgcloud.vorgang-manager.address") GrpcChannelsProperties channelProperties() { var properties = new GrpcChannelsProperties(); + var clientMap = properties.getClient(); + + addVorgangManager(clientMap); + addFileManager(clientMap); + + return properties; + } + + private void addVorgangManager(Map<String, GrpcChannelProperties> clientMap) { var channelProps = new GrpcChannelProperties(); + channelProps.setAddress(vorgangManagerProperties.getAddress()); + channelProps.setNegotiationType(vorgangManagerProperties.getNegotiationType()); - properties.getClient().put(CLIENT_NAME_VORGANG_MANAGER, channelProps); + clientMap.put(CLIENT_NAME_VORGANG_MANAGER, channelProps); + } - channelProps.setAddress(address); - channelProps.setNegotiationType(NegotiationType.PLAINTEXT); + private void addFileManager(Map<String, GrpcChannelProperties> clientMap) { + var channelProps = new GrpcChannelProperties(); + channelProps.setAddress(fileManagerProperties.getAddress()); + channelProps.setNegotiationType(fileManagerProperties.getNegotiationType()); - return properties; + clientMap.put(CLIENT_NAME_FILE_MANAGER, channelProps); } } diff --git a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudFileManagerProperties.java b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudFileManagerProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..6023b4065e3bce2f49d4a156638dc0868982b79c --- /dev/null +++ b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudFileManagerProperties.java @@ -0,0 +1,24 @@ +package de.ozgcloud.client.autoconfigure; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import lombok.Getter; +import lombok.Setter; +import net.devh.boot.grpc.client.config.NegotiationType; + +@Getter +@Setter +@Configuration +@ConfigurationProperties("ozgcloud.file-manager") +public class OzgCloudFileManagerProperties { + /** + * Network-Address of the File-Manager instance, starting with resolving + * protocol. Example for local use: static://127.0.0.1:9090 + */ + private String address; + /** + * Negotiation Type for the gRPC connection - possible Values: PLAINTEXT, TLS + */ + private NegotiationType negotiationType = NegotiationType.valueOf("TLS"); +} diff --git a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudVorgangManagerProperties.java b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudVorgangManagerProperties.java index 734594f4a7abba36c00cf92f86db67653618b78c..a78870ba61311c9b163d43eb9b4a47762fc5fbfd 100644 --- a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudVorgangManagerProperties.java +++ b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudVorgangManagerProperties.java @@ -1,12 +1,15 @@ package de.ozgcloud.client.autoconfigure; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; import lombok.Getter; import lombok.Setter; +import net.devh.boot.grpc.client.config.NegotiationType; @Getter @Setter +@Configuration @ConfigurationProperties("ozgcloud.vorgang-manager") public class OzgCloudVorgangManagerProperties { /** @@ -17,5 +20,5 @@ public class OzgCloudVorgangManagerProperties { /** * Negotiation Type for the gRPC connection - possible Values: PLAINTEXT, TLS */ - private String negotiationType = "TLS"; + private NegotiationType negotiationType = NegotiationType.valueOf("TLS"); }