Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.contactBaseData.backend into KON_14-Kontakte-Modulzuordnung
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java b/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java
index 3641442..1a29808 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/ContactController.java
@@ -49,11 +49,16 @@
@RequestParam( "contactType") Optional<String> contactType,
@RequestParam( "personTypeId" ) Optional<UUID> personTypeUuid,
@RequestParam( "searchText" ) Optional<String> searchText,
+ @RequestParam( "moduleName") Optional<String> moduleName,
+ @RequestParam( "withoutAssignedModule") Optional<Boolean> withoutAssignedModule,
@PageableDefault( sort = {"name"}, size = 20, direction = ASC) Pageable pageable ) {
return contactService.findDetailedContacts(
contactType.orElse(null),
personTypeUuid.orElse(null),
- searchText.orElse( null), pageable);
+ searchText.orElse( null),
+ moduleName.orElse(null),
+ withoutAssignedModule.orElse(Boolean.FALSE),
+ pageable);
}
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/model/TblAssignmentModulContact.java b/src/main/java/org/eclipse/openk/contactbasedata/model/TblAssignmentModulContact.java
index 850468f..472dfdd 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/model/TblAssignmentModulContact.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/model/TblAssignmentModulContact.java
@@ -40,6 +40,4 @@
@JoinColumn( name = "fk_contact_id")
private TblContact tblContact;
-
-
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/model/TblContact.java b/src/main/java/org/eclipse/openk/contactbasedata/model/TblContact.java
index f3ef0ec..f5cd6fe 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/model/TblContact.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/model/TblContact.java
@@ -40,6 +40,9 @@
@OneToMany(cascade=CascadeType.ALL, mappedBy="tblContact", orphanRemoval = true)
private List<TblCommunication> communications = new ArrayList<>();
+ @OneToMany(cascade=CascadeType.ALL, mappedBy="tblContact", orphanRemoval = true)
+ private List<TblAssignmentModulContact> assignments = new ArrayList<>();
+
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/model/VwDetailedContact.java b/src/main/java/org/eclipse/openk/contactbasedata/model/VwDetailedContact.java
index 7dc279e..e514d96 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/model/VwDetailedContact.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/model/VwDetailedContact.java
@@ -17,8 +17,12 @@
import lombok.Data;
import org.springframework.data.annotation.Immutable;
+import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import java.util.ArrayList;
+import java.util.List;
import java.util.UUID;
@Data
@@ -47,4 +51,5 @@
private String community;
private String email;
private String searchfield;
+
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/repository/ContactRepository.java b/src/main/java/org/eclipse/openk/contactbasedata/repository/ContactRepository.java
index bacbe7f..f63d8c1 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/repository/ContactRepository.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/repository/ContactRepository.java
@@ -15,11 +15,21 @@
package org.eclipse.openk.contactbasedata.repository;
import org.eclipse.openk.contactbasedata.model.TblContact;
+import org.eclipse.openk.contactbasedata.model.VwDetailedContact;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
import java.util.Optional;
import java.util.UUID;
public interface ContactRepository extends JpaRepository<TblContact, Long > {
public Optional<TblContact> findByUuid( UUID uuid );
+ @Query( "select c from TblContact c join c.assignments a where"
+ + "(COALESCE(:modulName) is null or COALESCE(:modulName) is not null AND a.modulName =:modulName)")
+ Page<TblContact> findByModulName(@Param("modulName")String modulName, Pageable pageable);
+
}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java b/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java
index 821d897..a3000e9 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/repository/DetailedContactRepository.java
@@ -26,13 +26,20 @@
public interface DetailedContactRepository extends PagingAndSortingRepository<VwDetailedContact, Long> {
Page<VwDetailedContact> findAll(Pageable pageable);
-
- @Query( "select dc from VwDetailedContact dc where"
- + "(COALESCE(:contactType) is null or COALESCE(:contactType) is not null AND dc.contactType=:contactType)"
+ @Query( "select dc from VwDetailedContact dc "
+ + "left outer join TblAssignmentModulContact ass on"
+ + " ass.tblContact.id = dc.fkContactId"
+ + " where (COALESCE(:contactType) is null or COALESCE(:contactType) is not null AND dc.contactType=:contactType)"
+ " and (COALESCE(:personType) is null or COALESCE(:personType) is not null AND dc.personTypeUuid=:personType)"
- + " and (COALESCE(:searchText) is null or COALESCE(:searchText) is not null AND dc.searchfield like %:searchText%)")
+ + " and (COALESCE(:searchText) is null or COALESCE(:searchText) is not null AND dc.searchfield like %:searchText%)"
+ + " and (COALESCE(:moduleName) is null or COALESCE(:moduleName) is not null AND ass.modulName = :moduleName)"
+ + " and (COALESCE(:withoutModule) = false or COALESCE(:withoutModule) = true AND ass is null)"
+ )
Page<VwDetailedContact> findByFilter(@Param("contactType")String contactType,
@Param("personType") UUID personType,
@Param("searchText") String searchText,
+ @Param("moduleName") String moduleName,
+ @Param("withoutModule") boolean withoutModule,
Pageable pageable);
}
+
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java
index 4ade8d3..de09d97 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/ContactService.java
@@ -15,7 +15,9 @@
package org.eclipse.openk.contactbasedata.service;
import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.contactbasedata.mapper.ContactMapper;
import org.eclipse.openk.contactbasedata.model.VwDetailedContact;
+import org.eclipse.openk.contactbasedata.repository.ContactRepository;
import org.eclipse.openk.contactbasedata.repository.DetailedContactRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
@@ -29,20 +31,33 @@
public class ContactService {
@Autowired
private DetailedContactRepository detailedContactRepository;
+ @Autowired
+ private ContactRepository contactRepository;
+ @Autowired
+ private ContactMapper contactMapper;
public Page<VwDetailedContact> findDetailedContacts(String contactType,
UUID personTypeUuid,
- String searchText, Pageable pageable) {
+ String searchText,
+ String moduleName,
+ boolean withoutModule,
+ Pageable pageable) {
- if( contactType == null && personTypeUuid == null && searchText == null) {
+ if( contactType == null &&
+ personTypeUuid == null &&
+ searchText == null &&
+ moduleName == null &&
+ !withoutModule) {
return detailedContactRepository.findAll(pageable);
}
else {
return detailedContactRepository.findByFilter( contactType,
personTypeUuid,
searchText != null ? searchText.toUpperCase() : null,
+ moduleName,
+ withoutModule,
pageable);
}
-
}
+
}
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java b/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java
index 1b79c1d..c27791b 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/controller/ContactControllerTest.java
@@ -30,8 +30,7 @@
import org.springframework.test.web.servlet.MockMvc;
import static org.hamcrest.Matchers.is;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@@ -55,7 +54,7 @@
Page<VwDetailedContact> retPage = MockDataHelper.mockVDetailedContactPage();
when(contactService.findDetailedContacts(
- isNull(), isNull(), isNull(), any(Pageable.class))).thenReturn(retPage);
+ isNull(), isNull(), isNull(), isNull(), anyBoolean(), any(Pageable.class))).thenReturn(retPage);
mockMvc.perform(get("/contacts"))
.andExpect(status().is2xxSuccessful())
diff --git a/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java b/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java
index 91788ba..544867a 100644
--- a/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java
+++ b/src/test/java/org/eclipse/openk/contactbasedata/service/ContactServiceTest.java
@@ -49,7 +49,7 @@
Page<VwDetailedContact> mockPaged = MockDataHelper.mockVDetailedContactPage();
when(detailedContactRepository.findAll(any(Pageable.class))).thenReturn(mockPaged);
Page<VwDetailedContact> retPage = contactService.findDetailedContacts(
- null, null, null, PageRequest.of(0, 20));
+ null, null, null, null, false, PageRequest.of(0, 20));
assertEquals(mockPaged.getTotalElements(), retPage.getTotalElements());
}