Merge branch 'DEVELOP' of ssh://git.eclipse.org:29418/openk-usermodules/org.eclipse.openk-usermodules.gridFailureInformation.backend into SI-381_get_adresses
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/AddressController.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/AddressController.java
index 5be2f77..b804b79 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/AddressController.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/controller/AddressController.java
@@ -19,11 +19,15 @@
 import io.swagger.annotations.ApiResponses;
 import lombok.extern.log4j.Log4j2;
 import org.eclipse.openk.gridfailureinformation.service.AddressService;
+import org.eclipse.openk.gridfailureinformation.viewmodel.AddressDto;
+import org.eclipse.openk.gridfailureinformation.viewmodel.HousenumberUuidDto;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Optional;
+import java.util.UUID;
 
 @Log4j2
 @RestController
@@ -33,6 +37,16 @@
     @Autowired
     private AddressService addressService;
 
+    @GetMapping("/{uuid}")
+    @ApiOperation(value = "Anzeigen einer bestimmten Adresse")
+    @ApiResponses(value = { @ApiResponse(code = 200, message = "Erfolgreich durchgeführt"),
+            @ApiResponse(code = 404, message = "Adresse wurde nicht gefunden")})
+    @ResponseStatus(HttpStatus.OK)
+    public AddressDto readAddress(
+            @PathVariable UUID uuid) {
+        return addressService.getAdressByUuid(uuid);
+    }
+
     //@Secured({"ROLE_GRID-FAILURE-ADMIN", "ROLE_GRID-FAILURE-CREATOR", "ROLE_GRID-FAILURE-QUALIFIER", "ROLE_GRID-FAILURE-PUBLISHER"})
     @ApiOperation(value = "Anzeige aller PLZs")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
@@ -77,7 +91,7 @@
     @ApiOperation(value = "Anzeige Strassen nach Postleitzahl und Ort und Strasse")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
     @GetMapping("/housenumbers")
-    public List<String> findHousenumbers(
+    public List<HousenumberUuidDto> findHousenumbers(
             @RequestParam ("postcode") String postcode,
             @RequestParam ("community") String community,
             @RequestParam ("street") String street
@@ -86,8 +100,4 @@
     }
 
 
-
-
-
-
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/AddressRepository.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/AddressRepository.java
index 6377faf..720d093 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/AddressRepository.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/repository/AddressRepository.java
@@ -47,7 +47,6 @@
     @Query("select distinct a.street from TblAddress a where postcode = :postcode and community = :community and district = :district")
     List<String> findStreetsByPostcodeAndCommunityAndDistrict(@Param("postcode") String postcode, @Param("community") String community, @Param("district") String district);
 
-    @Query("select distinct a.housenumber from TblAddress a where postcode = :postcode and community = :community and street = :street")
-    List<String> findHousenumbersByPostcodeAndCommunityAndStreet(@Param("postcode") String postcode, @Param("community") String community, @Param("street") String street);
+    List<TblAddress> findByPostcodeAndCommunityAndStreet(String postcode, String community, String street);
 
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/AddressService.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/AddressService.java
index 86073a4..30bd331 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/AddressService.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/service/AddressService.java
@@ -14,16 +14,21 @@
 */
 package org.eclipse.openk.gridfailureinformation.service;
 
+import org.eclipse.openk.gridfailureinformation.exceptions.NotFoundException;
 import org.eclipse.openk.gridfailureinformation.mapper.AddressMapper;
+import org.eclipse.openk.gridfailureinformation.model.TblAddress;
 import org.eclipse.openk.gridfailureinformation.repository.AddressRepository;
 import org.eclipse.openk.gridfailureinformation.viewmodel.AddressDto;
+import org.eclipse.openk.gridfailureinformation.viewmodel.HousenumberUuidDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
+import static java.util.stream.Collectors.collectingAndThen;
+import static java.util.stream.Collectors.toCollection;
+
 @Service
 public class AddressService {
 
@@ -33,6 +38,13 @@
     @Autowired
     private AddressMapper addressMapper;
 
+    private static HousenumberUuidDto toHousenumberUuid(TblAddress tblAddress) {
+        HousenumberUuidDto housenumberUuidDto =  new HousenumberUuidDto();
+        housenumberUuidDto.setHousenumber(tblAddress.getHousenumber());
+        housenumberUuidDto.setUuid(tblAddress.getUuid());
+        return housenumberUuidDto;
+    }
+
     public List<AddressDto> getAddresses() {
 
         return addressRepository.findAll().stream()
@@ -40,6 +52,12 @@
                 .collect(Collectors.toList());
     }
 
+    public AddressDto getAdressByUuid(UUID uuid) {
+        TblAddress tblAddress = addressRepository.findByUuid(uuid)
+                .orElseThrow(NotFoundException::new);
+        return addressMapper.toAddressDto(tblAddress);
+    }
+
     public List<String> getPostcodes(){
         return addressRepository.findAllPostcodes();
     }
@@ -62,11 +80,15 @@
         }
     }
 
-    public List<String> getHousenumbers(String postcode, String community, String street) {
-        return addressRepository.findHousenumbersByPostcodeAndCommunityAndStreet(postcode, community, street);
+    public List<HousenumberUuidDto> getHousenumbers(String postcode, String community, String street) {
+
+        return addressRepository.findByPostcodeAndCommunityAndStreet(postcode, community, street)
+                .stream()
+                .map(AddressService::toHousenumberUuid)
+                .collect(collectingAndThen(toCollection(() -> new TreeSet<>(Comparator.comparing(HousenumberUuidDto::getHousenumber))),
+                        ArrayList::new));
+
     }
 
 
-
-
 }
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/HousenumberUuidDto.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/HousenumberUuidDto.java
new file mode 100644
index 0000000..51e8777
--- /dev/null
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/viewmodel/HousenumberUuidDto.java
@@ -0,0 +1,26 @@
+/**
+******************************************************************************
+* Copyright © 2017-2018 PTA GmbH.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* 
+*     http://www.eclipse.org/legal/epl-v10.html
+* 
+******************************************************************************
+*/
+package org.eclipse.openk.gridfailureinformation.viewmodel;
+
+import lombok.Data;
+import lombok.RequiredArgsConstructor;
+
+import java.util.UUID;
+
+@Data
+@RequiredArgsConstructor
+public class HousenumberUuidDto {
+
+    private UUID uuid;
+    private String housenumber;
+
+}
\ No newline at end of file
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/AddressControllerTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/AddressControllerTest.java
index e7e2e24..75a8287 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/AddressControllerTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/controller/AddressControllerTest.java
@@ -17,6 +17,7 @@
 import org.eclipse.openk.gridfailureinformation.GridFailureInformationApplication;
 import org.eclipse.openk.gridfailureinformation.service.AddressService;
 import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
+import org.eclipse.openk.gridfailureinformation.viewmodel.HousenumberUuidDto;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
@@ -114,8 +115,8 @@
         String postcode = "71111";
         String community = "com1";
         String street = "street1";
-        List<String> strings = MockDataHelper.mockStringList();
-        when(addressService.getHousenumbers(postcode, community, street)).thenReturn(strings);
+        List<HousenumberUuidDto> housenumberUuidDtos = MockDataHelper.mockHousnumberUuidList();
+        when(addressService.getHousenumbers(postcode, community, street)).thenReturn(housenumberUuidDtos);
 
         mockMvc.perform(
                 get("/addresses/housenumbers")
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/AddressServiceTest.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/AddressServiceTest.java
index f2f0fd6..7cdd870 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/AddressServiceTest.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/service/AddressServiceTest.java
@@ -19,6 +19,7 @@
 import org.eclipse.openk.gridfailureinformation.repository.AddressRepository;
 import org.eclipse.openk.gridfailureinformation.support.MockDataHelper;
 import org.eclipse.openk.gridfailureinformation.viewmodel.AddressDto;
+import org.eclipse.openk.gridfailureinformation.viewmodel.HousenumberUuidDto;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -95,13 +96,16 @@
         String postcode = "12345";
         String community = "com1";
         String street = "street1";
-        List<String> strings = MockDataHelper.mockStringList();
-        when(addressRepository.findHousenumbersByPostcodeAndCommunityAndStreet(postcode, community, street)).thenReturn(strings);
-        List<String> housenumbers = addressService.getHousenumbers(postcode, community, street);
+        List<HousenumberUuidDto> housenumberUuids = MockDataHelper.mockHousnumberUuidList();
+        List<TblAddress> tblAddresses = MockDataHelper.mockAddressList();
 
-        assertEquals(housenumbers.size(), strings.size());
+        when(addressRepository.findByPostcodeAndCommunityAndStreet(postcode, community, street)).thenReturn(tblAddresses);
+
+        List<HousenumberUuidDto> housenumbers = addressService.getHousenumbers(postcode, community, street);
+
+        assertEquals(housenumbers.size(), housenumberUuids.size());
         assertEquals(2, housenumbers.size());
-        assertEquals(housenumbers.get(1), strings.get(1));
+        assertEquals(housenumbers.get(1).getHousenumber(), housenumberUuids.get(1).getHousenumber());
     }
 
     @Test
diff --git a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
index 34b1c86..9707030 100644
--- a/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
+++ b/gfsBackendService/src/test/java/org/eclipse/openk/gridfailureinformation/support/MockDataHelper.java
@@ -890,16 +890,34 @@
         address1.setUuid(UUID.randomUUID());
         address1.setStreet("stree1");
         address1.setPostcode("23443");
+        address1.setHousenumber("44");
         address1.setLongitude(BigDecimal.valueOf(443443));
 
         TblAddress address2 = new TblAddress();
         address2.setUuid(UUID.randomUUID());
         address2.setStreet("stree1");
         address2.setPostcode("45465");
+        address2.setHousenumber("93g");
         address2.setLongitude(BigDecimal.valueOf(546765));
 
         addressList.add(address1);
         addressList.add(address2);
         return addressList;
     }
+
+    public static List<HousenumberUuidDto> mockHousnumberUuidList() {
+        List<HousenumberUuidDto> housenumberUuidDtoList = new ArrayList<>();
+
+        HousenumberUuidDto housenumberUuidDto1 = new HousenumberUuidDto();
+        housenumberUuidDto1.setHousenumber("44");
+        housenumberUuidDto1.setUuid(UUID.randomUUID());
+
+        HousenumberUuidDto housenumberUuidDto2 = new HousenumberUuidDto();
+        housenumberUuidDto2.setHousenumber("93g");
+        housenumberUuidDto2.setUuid(UUID.randomUUID());
+
+        housenumberUuidDtoList.add(housenumberUuidDto1);
+        housenumberUuidDtoList.add(housenumberUuidDto2);
+        return housenumberUuidDtoList;
+    }
 }