From 37c5f6d6a1ea8900a707900b580ca49378d1eef5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Slov=C3=ADk?= <xslovik@fi.muni.cz>
Date: Wed, 5 Apr 2023 10:18:12 +0200
Subject: [PATCH] Removing generic facade implementation

---
 .../airplanetype/AirplaneTypeFacade.java      | 19 +++++-
 .../airplanetype/AirplaneTypeFacadeImpl.java  | 47 +++++++++++---
 .../pa165/core/facade/common/BaseFacade.java  | 27 --------
 .../core/facade/common/BaseFacadeImpl.java    | 65 -------------------
 .../core/rest/AirplaneTypeController.java     |  4 +-
 5 files changed, 57 insertions(+), 105 deletions(-)
 delete mode 100644 core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacade.java
 delete mode 100644 core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacadeImpl.java

diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/airplanetype/AirplaneTypeFacade.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/airplanetype/AirplaneTypeFacade.java
index 640f042..1b19ca6 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/facade/airplanetype/AirplaneTypeFacade.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/facade/airplanetype/AirplaneTypeFacade.java
@@ -1,9 +1,24 @@
 package cz.muni.fi.pa165.core.facade.airplanetype;
 
-import cz.muni.fi.pa165.core.facade.common.BaseFacade;
 import cz.muni.fi.pa165.core.model.AirplaneTypeDto;
 import cz.muni.fi.pa165.core.model.NewAirplaneTypeDtoRequest;
 
-public interface AirplaneTypeFacade extends BaseFacade<NewAirplaneTypeDtoRequest, AirplaneTypeDto, Long> {
+import java.util.List;
+import java.util.Optional;
 
+/**
+ * @param <K> Key
+ * @author martinslovik
+ */
+public interface AirplaneTypeFacade<K> {
+
+    AirplaneTypeDto save(NewAirplaneTypeDtoRequest newAirplaneTypeDtoRequest);
+
+    Optional<AirplaneTypeDto> findById(K id);
+
+    List<AirplaneTypeDto> findAll();
+
+    void deleteById(K id);
+
+    void deleteAll();
 }
\ No newline at end of file
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/airplanetype/AirplaneTypeFacadeImpl.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/airplanetype/AirplaneTypeFacadeImpl.java
index cba30da..8d57aef 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/facade/airplanetype/AirplaneTypeFacadeImpl.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/facade/airplanetype/AirplaneTypeFacadeImpl.java
@@ -1,7 +1,6 @@
 package cz.muni.fi.pa165.core.facade.airplanetype;
 
 import cz.muni.fi.pa165.core.data.domain.AirplaneType;
-import cz.muni.fi.pa165.core.facade.common.BaseFacadeImpl;
 import cz.muni.fi.pa165.core.model.AirplaneTypeDto;
 import cz.muni.fi.pa165.core.model.NewAirplaneTypeDtoRequest;
 import cz.muni.fi.pa165.core.service.airplanetype.AirplaneTypeService;
@@ -9,19 +8,49 @@ import org.modelmapper.ModelMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Optional;
+
 @Service
-public class AirplaneTypeFacadeImpl extends BaseFacadeImpl<NewAirplaneTypeDtoRequest, AirplaneTypeDto, AirplaneType, Long>
-        implements AirplaneTypeFacade {
+public class AirplaneTypeFacadeImpl implements AirplaneTypeFacade<Long> {
 
-    private final ModelMapper airplaneTypeMapper;
     private final AirplaneTypeService airplaneTypeService;
+    private final ModelMapper modelMapper;
 
     @Autowired
-    public AirplaneTypeFacadeImpl(AirplaneTypeService airplaneTypeService, ModelMapper airplaneTypeMapper) {
-        super(airplaneTypeService, airplaneTypeMapper);
+    public AirplaneTypeFacadeImpl(AirplaneTypeService airplaneTypeService, ModelMapper modelMapper) {
         this.airplaneTypeService = airplaneTypeService;
-        this.airplaneTypeMapper = airplaneTypeMapper;
-        super.setDtoClass(AirplaneTypeDto.class);
-        super.setEntityClass(AirplaneType.class);
+        this.modelMapper = modelMapper;
+    }
+
+    @Override
+    public AirplaneTypeDto save(NewAirplaneTypeDtoRequest newAirplaneTypeDtoRequest) {
+        var entityToSave = modelMapper.map(newAirplaneTypeDtoRequest, AirplaneType.class);
+        var savedEntity = airplaneTypeService.save(entityToSave);
+        return modelMapper.map(savedEntity, AirplaneTypeDto.class);
+    }
+
+    @Override
+    public Optional<AirplaneTypeDto> findById(Long id) {
+        var foundEntity = airplaneTypeService.findById(id);
+        return foundEntity.map(e -> modelMapper.map(e, AirplaneTypeDto.class));
+    }
+
+    @Override
+    public List<AirplaneTypeDto> findAll() {
+        var entities = airplaneTypeService.findAll();
+        return entities.stream()
+                .map(entity -> modelMapper.map(entity, AirplaneTypeDto.class))
+                .toList();
+    }
+
+    @Override
+    public void deleteById(Long id) {
+        airplaneTypeService.deleteById(id);
+    }
+
+    @Override
+    public void deleteAll() {
+        airplaneTypeService.deleteAll();
     }
 }
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacade.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacade.java
deleted file mode 100644
index 4ec4a63..0000000
--- a/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacade.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package cz.muni.fi.pa165.core.facade.common;
-
-import cz.muni.fi.pa165.core.model.DomainEntityDto;
-
-import java.util.List;
-import java.util.Optional;
-
-/**
- * BaseFacade for common CRUD operations
- *
- * @param <N> NewRequestDto
- * @param <D> Dto
- * @param <K> Entity
- * @author martinslovik
- */
-public interface BaseFacade<N, D extends DomainEntityDto, K> {
-
-    D save(N newDtoRequest);
-
-    Optional<D> findById(K id);
-
-    List<D> findAll();
-
-    void deleteById(K id);
-
-    void deleteAll();
-}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacadeImpl.java b/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacadeImpl.java
deleted file mode 100644
index cd1f3ec..0000000
--- a/core/src/main/java/cz/muni/fi/pa165/core/facade/common/BaseFacadeImpl.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package cz.muni.fi.pa165.core.facade.common;
-
-import cz.muni.fi.pa165.core.data.domain.common.DomainEntity;
-import cz.muni.fi.pa165.core.model.DomainEntityDto;
-import cz.muni.fi.pa165.core.service.common.BaseService;
-import org.modelmapper.ModelMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Optional;
-
-@Service
-public abstract class BaseFacadeImpl<N, D extends DomainEntityDto, E extends DomainEntity, K> implements BaseFacade<N, D, K> {
-
-    private final BaseService<E, K> service;
-    private Class<D> dtoClass;
-    private Class<E> entityClass;
-    private final ModelMapper modelMapper;
-
-    @Autowired
-    protected BaseFacadeImpl(BaseService<E, K> service, ModelMapper modelMapper) {
-        this.service = service;
-        this.modelMapper = modelMapper;
-    }
-
-    public void setDtoClass(Class<D> dtoClass) {
-        this.dtoClass = dtoClass;
-    }
-
-    public void setEntityClass(Class<E> entityClass) {
-        this.entityClass = entityClass;
-    }
-
-    @Override
-    public D save(N newDtoRequest) {
-        var entity = modelMapper.map(newDtoRequest, entityClass);
-        var savedEntity = service.save(entity);
-        return modelMapper.map(savedEntity, dtoClass);
-    }
-
-    @Override
-    public Optional<D> findById(K id) {
-        var entityOptional = service.findById(id);
-        return entityOptional.map(e -> modelMapper.map(e, dtoClass));
-    }
-
-    @Override
-    public List<D> findAll() {
-        var entities = service.findAll();
-        return entities.stream()
-                .map(entity -> modelMapper.map(entity, dtoClass))
-                .toList();
-    }
-
-    @Override
-    public void deleteById(K id) {
-        service.deleteById(id);
-    }
-
-    @Override
-    public void deleteAll() {
-        service.deleteAll();
-    }
-}
diff --git a/core/src/main/java/cz/muni/fi/pa165/core/rest/AirplaneTypeController.java b/core/src/main/java/cz/muni/fi/pa165/core/rest/AirplaneTypeController.java
index 110a892..ab624b4 100644
--- a/core/src/main/java/cz/muni/fi/pa165/core/rest/AirplaneTypeController.java
+++ b/core/src/main/java/cz/muni/fi/pa165/core/rest/AirplaneTypeController.java
@@ -14,10 +14,10 @@ import java.util.List;
 @RestController
 public class AirplaneTypeController implements AirplaneTypeApiDelegate {
 
-    private final AirplaneTypeFacade airplaneTypeFacade;
+    private final AirplaneTypeFacade<Long> airplaneTypeFacade;
 
     @Autowired
-    public AirplaneTypeController(AirplaneTypeFacade airplaneTypeFacade) {
+    public AirplaneTypeController(AirplaneTypeFacade<Long> airplaneTypeFacade) {
         this.airplaneTypeFacade = airplaneTypeFacade;
     }
 
-- 
GitLab