1818import io .securecodebox .persistence .defectdojo .model .Model ;
1919import io .securecodebox .persistence .defectdojo .model .PaginatedResult ;
2020import lombok .Getter ;
21+ import lombok .NonNull ;
2122import lombok .extern .slf4j .Slf4j ;
2223import org .springframework .http .HttpEntity ;
2324import org .springframework .http .HttpHeaders ;
3536import java .net .URISyntaxException ;
3637import java .util .*;
3738
38- // FIXME: Should be package private bc implementation detail.
3939// TODO: Remove JsonProcessingException, URISyntaxException from public API and use a own runtime exception type bc these checked exceptions clutter the client coe.
4040@ Slf4j
41- public abstract class GenericDefectDojoService <T extends Model > {
41+ abstract class GenericDefectDojoService <T extends Model > implements DefectDojoService < T > {
4242 private static final String API_PREFIX = "/api/v2/" ;
4343 private static final long DEFECT_DOJO_OBJET_LIMIT = 100L ;
4444 protected Config config ;
@@ -49,7 +49,8 @@ public abstract class GenericDefectDojoService<T extends Model> {
4949 @ Getter
5050 protected RestTemplate restTemplate ;
5151
52- public GenericDefectDojoService (Config config ) {
52+ public GenericDefectDojoService (@ NonNull Config config ) {
53+ super ();
5354 this .config = config ;
5455
5556 this .objectMapper = new ObjectMapper ();
@@ -92,7 +93,8 @@ private RestTemplate setupRestTemplate() {
9293
9394 protected abstract PaginatedResult <T > deserializeList (String response ) throws JsonProcessingException ;
9495
95- public T get (long id ) {
96+ @ Override
97+ public final T get (long id ) {
9698 var restTemplate = this .getRestTemplate ();
9799 HttpEntity <String > payload = new HttpEntity <>(getDefectDojoAuthorizationHeaders ());
98100
@@ -136,7 +138,8 @@ protected PaginatedResult<T> internalSearch(Map<String, Object> queryParams, lon
136138 return deserializeList (responseString .getBody ());
137139 }
138140
139- public List <T > search (Map <String , Object > queryParams ) throws URISyntaxException , JsonProcessingException {
141+ @ Override
142+ public final List <T > search (Map <String , Object > queryParams ) throws URISyntaxException , JsonProcessingException {
140143 List <T > objects = new LinkedList <>();
141144
142145 boolean hasNext ;
@@ -154,12 +157,14 @@ public List<T> search(Map<String, Object> queryParams) throws URISyntaxException
154157 return objects ;
155158 }
156159
157- public List <T > search () throws URISyntaxException , JsonProcessingException {
160+ @ Override
161+ public final List <T > search () throws URISyntaxException , JsonProcessingException {
158162 return search (new LinkedHashMap <>());
159163 }
160164
165+ @ Override
161166 @ SuppressWarnings ("unchecked" )
162- public Optional <T > searchUnique (T searchObject ) throws URISyntaxException , JsonProcessingException {
167+ public final Optional <T > searchUnique (T searchObject ) throws URISyntaxException , JsonProcessingException {
163168 Map <String , Object > queryParams = searchStringMapper .convertValue (searchObject , Map .class );
164169
165170 var objects = search (queryParams );
@@ -169,30 +174,34 @@ public Optional<T> searchUnique(T searchObject) throws URISyntaxException, JsonP
169174 .findFirst ();
170175 }
171176
172- public Optional <T > searchUnique (Map <String , Object > queryParams ) throws URISyntaxException , JsonProcessingException {
177+ @ Override
178+ public final Optional <T > searchUnique (Map <String , Object > queryParams ) throws URISyntaxException , JsonProcessingException {
173179 var objects = search (queryParams );
174180
175181 return objects .stream ()
176182 .filter (object -> object .equalsQueryString (queryParams ))
177183 .findFirst ();
178184 }
179185
180- public T create (T object ) {
186+ @ Override
187+ public final T create (T object ) {
181188 var restTemplate = this .getRestTemplate ();
182189 HttpEntity <T > payload = new HttpEntity <>(object , getDefectDojoAuthorizationHeaders ());
183190
184191 ResponseEntity <T > response = restTemplate .exchange (this .config .getUrl () + API_PREFIX + getUrlPath () + "/" , HttpMethod .POST , payload , getModelClass ());
185192 return response .getBody ();
186193 }
187194
188- public void delete (long id ) {
195+ @ Override
196+ public final void delete (long id ) {
189197 var restTemplate = this .getRestTemplate ();
190198 HttpEntity <String > payload = new HttpEntity <>(getDefectDojoAuthorizationHeaders ());
191199
192200 restTemplate .exchange (this .config .getUrl () + API_PREFIX + getUrlPath () + "/" + id + "/" , HttpMethod .DELETE , payload , String .class );
193201 }
194202
195- public T update (T object , long objectId ) {
203+ @ Override
204+ public final T update (T object , long objectId ) {
196205 var restTemplate = this .getRestTemplate ();
197206 HttpEntity <T > payload = new HttpEntity <>(object , getDefectDojoAuthorizationHeaders ());
198207
0 commit comments