Add another Child to a Fragment that has already at least one Child
[cps.git] / cps-ri / src / main / java / org / onap / cps / spi / repository / FragmentRepository.java
index ba83f15..6fc956c 100755 (executable)
@@ -1,6 +1,7 @@
 /*-\r
  * ============LICENSE_START=======================================================\r
  *  Copyright (C) 2020 Nordix Foundation. All rights reserved.\r
+ *  Modifications Copyright (C) 2020 Bell Canada. All rights reserved.\r
  * ================================================================================\r
  * Licensed under the Apache License, Version 2.0 (the "License");\r
  * you may not use this file except in compliance with the License.\r
 \r
 package org.onap.cps.spi.repository;\r
 \r
-import org.onap.cps.spi.entities.Fragment;\r
+import java.util.Collection;\r
+import java.util.Optional;\r
+import javax.validation.constraints.NotNull;\r
+import org.checkerframework.checker.nullness.qual.NonNull;\r
+import org.onap.cps.spi.entities.AnchorEntity;\r
+import org.onap.cps.spi.entities.DataspaceEntity;\r
+import org.onap.cps.spi.entities.FragmentEntity;\r
+import org.onap.cps.spi.exceptions.NotFoundInDataspaceException;\r
 import org.springframework.data.jpa.repository.JpaRepository;\r
+import org.springframework.data.jpa.repository.Modifying;\r
+import org.springframework.data.jpa.repository.Query;\r
+import org.springframework.data.repository.query.Param;\r
 import org.springframework.stereotype.Repository;\r
 \r
 @Repository\r
-public interface FragmentRepository extends JpaRepository<Fragment, Integer> {\r
+public interface FragmentRepository extends JpaRepository<FragmentEntity, Long> {\r
+\r
+    Optional<FragmentEntity> findByDataspaceAndAnchorAndXpath(@NonNull DataspaceEntity dataspaceEntity,\r
+        @NonNull AnchorEntity anchorEntity, @NonNull String xpath);\r
+\r
+    default FragmentEntity getByDataspaceAndAnchorAndXpath(@NonNull DataspaceEntity dataspaceEntity,\r
+        @NonNull AnchorEntity anchorEntity, @NonNull String xpath) {\r
+        return findByDataspaceAndAnchorAndXpath(dataspaceEntity, anchorEntity, xpath)\r
+            .orElseThrow(() -> new NotFoundInDataspaceException(dataspaceEntity.getName(), xpath));\r
+    }\r
+\r
+    @Modifying\r
+    @Query("DELETE FROM FragmentEntity fe WHERE fe.anchor IN (:anchors)")\r
+    void deleteByAnchorIn(@NotNull @Param("anchors") Collection<AnchorEntity> anchorEntities);\r
+\r
 }
\ No newline at end of file