diff --git a/fda-container-service/services/src/main/java/at/tuwien/auth/PermissionEvaluatorImpl.java b/fda-container-service/services/src/main/java/at/tuwien/auth/PermissionEvaluatorImpl.java index 0bfbb375cfdf4690ffe7f825f1a1a6052ab04518..987774756e66456d02a9c47e78eb0c16d0fdd6ca 100644 --- a/fda-container-service/services/src/main/java/at/tuwien/auth/PermissionEvaluatorImpl.java +++ b/fda-container-service/services/src/main/java/at/tuwien/auth/PermissionEvaluatorImpl.java @@ -56,7 +56,7 @@ public class PermissionEvaluatorImpl implements PermissionEvaluator { log.error("Failed to grant permission {}", permission); log.debug("failed to grant permission {}, owner is not the current user", permission); return false; - } else if (container.getDatabases().size() > 0) { + } else if (container.getDatabase() != null) { log.error("Failed to grant permission {}", permission); log.debug("failed to grant permission {}, databases present in the container", permission); return false; diff --git a/fda-container-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java b/fda-container-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java index 6c3992111ddf19dfc598d515ede04b3fcda6d126..57104de0122ab93e82837291854de0ae8c7c1830 100644 --- a/fda-container-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java +++ b/fda-container-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java @@ -38,7 +38,7 @@ public interface ContainerMapper { @Mapping(source = "state", target = "state", qualifiedByName = "containerStateDto"), @Mapping(source = "id", target = "hash"), @Mapping(target = "id", ignore = true), - @Mapping(target = "databases", ignore = true), + @Mapping(target = "database", ignore = true), }) ContainerDto inspectContainerResponseToContainerDto(InspectContainerResponse data); diff --git a/fda-database-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java b/fda-database-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java index d48096e7d01285ae82ff670af3f8e8ab19c69988..b425a856b7b5852d0594059d507288336f05a9cf 100644 --- a/fda-database-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java +++ b/fda-database-service/services/src/main/java/at/tuwien/mapper/ContainerMapper.java @@ -11,7 +11,7 @@ public interface ContainerMapper { @Mappings({ @Mapping(target = "id", source = "id"), - @Mapping(target = "databases", source = "databases", ignore = true), + @Mapping(target = "database", source = "database", ignore = true), }) ContainerDto containerToContainerDto(Container data); diff --git a/fda-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java b/fda-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java index 2bf9fc672eb0983f151d785d1f0ab357091b0321..901fd7c3a65144b19924ac65c13c0a400af82109 100644 --- a/fda-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java +++ b/fda-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java @@ -124,7 +124,7 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe DatabaseMalformedException, AmqpException, ContainerConnectionException, UserNotFoundException, DatabaseNameExistsException, DatabaseConnectionException, QueryMalformedException { final Container container = containerService.find(containerId); - if (container.getDatabases().size() != 0) { + if (container.getDatabase() != null) { log.error("Currently we only support one database per container."); throw new DatabaseMalformedException("Currently only one database per container is supported"); } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java index fef1d04e42ff8ef4fd5b3c765e1b66268370ddad..cf9b72db858cf92a6696711ad8e8f31e1e9f80d3 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java @@ -42,9 +42,9 @@ public class ContainerDto { @Schema(example = "running") private ContainerStateDto state; - @ToString.Exclude @Schema - private List<DatabaseDto> databases; + @ToString.Exclude + private DatabaseDto database; @JsonProperty("ip_address") private String ipAddress; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java index 639213fb30e7d5c1e64f36dbeb61106dcc253099..22894af699620c8311884e1f7a7958108a3d8eb9 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java @@ -53,15 +53,19 @@ public class Container { @Column private Integer port; + @ToString.Exclude @org.springframework.data.annotation.Transient - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @OneToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) }) - private List<Database> databases; + private Database database; @org.springframework.data.annotation.Transient - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumns({ + @JoinColumn(name = "image_id", referencedColumnName = "id", insertable = false, updatable = false) + }) private ContainerImage image; @Column diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java index 084966a15ea0fb41a67376c1f33303db25ad6d10..3253c44e8590448359b4fba5d3c313be4d091835 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java @@ -64,7 +64,7 @@ public class ContainerImage { @ToString.Exclude @org.springframework.data.annotation.Transient - @OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.DETACH, CascadeType.MERGE}, mappedBy = "image") + @OneToMany(fetch = FetchType.LAZY, mappedBy = "image") private List<Container> containers; @Column(nullable = false, updatable = false) diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java index 94079ae737b961128fd58749afa1f2499107f870..bf2608fa413147575ded8394ced2e7555f630fc1 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java @@ -30,7 +30,7 @@ public class ContainerImageDate { @org.springframework.data.annotation.Transient @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "iid", insertable = false, updatable = false) private ContainerImage image; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java index 3bc8bf68aab3249cdccfc0d5c7cc24f944a94ffd..8aa33c9c62dbc119b366507055efd1650c7ed2db 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java @@ -42,7 +42,7 @@ public class ContainerImageEnvironmentItem { @ToString.Exclude @org.springframework.data.annotation.Transient - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "iid", referencedColumnName = "id", insertable = false, updatable = false) }) diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java index 2bd23359fe9c4ab7abfa2967e693271aadace938..3e6ad2ba8b4212678e709ea20b8366413701a5cf 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/Database.java @@ -42,9 +42,9 @@ public class Database { }) private User creator; - @org.springframework.data.annotation.Transient @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @org.springframework.data.annotation.Transient + @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) }) @@ -68,6 +68,7 @@ public class Database { }) private User contact; + @org.springframework.data.annotation.Transient @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @JoinColumns({ @JoinColumn(name = "tdbid", referencedColumnName = "id", insertable = false, updatable = false) diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java index 8355800a853ce2be20b450ee7a7db88c86241cf5..4dfc6e4df9a37e479b8cd3e5e9ef63b0100ea042 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java @@ -42,7 +42,7 @@ public class View { private User creator; @org.springframework.data.annotation.Transient - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "vdbid", insertable = false, updatable = false) private Database database; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java index c2622873d5845545f6c168844b891d8713468db7..65ec9e82e4598f9b5722fb68700e44de0d2d86cb 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java @@ -58,8 +58,7 @@ public class Table { private String description; @org.springframework.data.annotation.Transient - @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "tdbid", insertable = false, updatable = false) private Database database; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java index d88409c754addca516f66b2ba12c3cf8f2f13f77..91c0f05df0bb5505ab96e1dba0a668aebd10bb49 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java @@ -54,7 +54,7 @@ public class TableColumn implements Comparable<TableColumn> { @org.springframework.data.annotation.Transient @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "tid", referencedColumnName = "id", insertable = false, updatable = false), @JoinColumn(name = "cdbid", referencedColumnName = "tdbid", insertable = false, updatable = false) diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java index d60ae1e378c29043e0f5fc3e218ac646db958231..9d1777496c2202c96384f4226ddb0c8befeb2578 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java @@ -35,7 +35,7 @@ public class Concept { @org.springframework.data.annotation.Transient @ToString.Exclude - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) + @OneToMany(fetch = FetchType.LAZY) @JoinTable(name = "mdb_columns_concepts", joinColumns = @JoinColumn(name = "concept_id", referencedColumnName = "id", insertable = false, updatable = false), inverseJoinColumns = { diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java index 2458b10c1ad6774b7d708bd19e44ed72a92a73b6..6fea41a4261560bc1fe396df23cebff4cedd3802 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Creator.java @@ -42,7 +42,7 @@ public class Creator { @org.springframework.data.annotation.Transient @ToString.Exclude - @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "pid", referencedColumnName = "id", insertable = false, updatable = false) private Identifier identifier; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/user/TimeSecret.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/user/TimeSecret.java index e9d00759a1f42524e22391f150cf202e8ac68d94..dab6e3c3a413c47794b07b7711c991e5acbd3607 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/user/TimeSecret.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/user/TimeSecret.java @@ -39,7 +39,7 @@ public class TimeSecret { @org.springframework.data.annotation.Transient @ToString.Exclude - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "uid", referencedColumnName = "userid", insertable = false, updatable = false) }) diff --git a/fda-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java b/fda-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java index abbc84317db42441081f041e980bdcf5299e8ae5..7157c6f436fdddec5bde0ff22354034ff5c72bfd 100644 --- a/fda-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java +++ b/fda-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java @@ -4,6 +4,8 @@ import at.tuwien.BaseUnitTest; import at.tuwien.config.DockerConfig; import at.tuwien.config.IndexInitializer; import at.tuwien.config.ReadyConfig; +import at.tuwien.entities.container.Container; +import at.tuwien.entities.database.Database; import at.tuwien.entities.database.table.Table; import at.tuwien.exception.*; import at.tuwien.repository.jpa.*; @@ -22,10 +24,12 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit.jupiter.SpringExtension; +import javax.transaction.Transactional; import java.io.File; import java.security.Principal; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import static at.tuwien.config.DockerConfig.dockerClient; import static at.tuwien.config.DockerConfig.hostConfig; @@ -64,6 +68,9 @@ public class TableServiceIntegrationTest extends BaseUnitTest { @Autowired private UserRepository userRepository; + @Autowired + private ImageEnvironmentRepository imageEnvironmentRepository; + @BeforeAll public static void beforeAll() throws InterruptedException { afterAll(); @@ -127,15 +134,12 @@ public class TableServiceIntegrationTest extends BaseUnitTest { @BeforeEach public void beforeEach() { - userRepository.save(USER_1); - userRepository.save(USER_2); - imageRepository.save(IMAGE_1); - containerRepository.save(CONTAINER_1); - containerRepository.save(CONTAINER_2); - databaseRepository.save(DATABASE_1) /* public */; - databaseRepository.save(DATABASE_2) /* private */; - tableRepository.save(TABLE_1); - tableRepository.save(TABLE_2); + CONTAINER_1.setDatabase(DATABASE_1); + CONTAINER_2.setDatabase(DATABASE_2); + TABLE_1.setDatabase(DATABASE_1); + TABLE_2.setDatabase(DATABASE_2); + tableRepository.save(TABLE_1) /* public */; + tableRepository.save(TABLE_2) /* private */; } @Test diff --git a/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java b/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..c25e8577e29c929d1778ef407253e9970c74c04d --- /dev/null +++ b/fda-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java @@ -0,0 +1,11 @@ +package at.tuwien.repository.jpa; + +import at.tuwien.entities.container.image.ContainerImage; +import at.tuwien.entities.container.image.ContainerImageEnvironmentItem; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ImageEnvironmentRepository extends JpaRepository<ContainerImageEnvironmentItem, Long> { + +}