2424import org .springframework .web .client .RestTemplate ;
2525
2626import java .io .IOException ;
27+ import java .lang .reflect .Type ;
2728import java .net .URI ;
2829import java .util .HashMap ;
2930import java .util .List ;
3738public class RemoteManage implements Manage {
3839
3940 private static final Log LOG = LogFactory .getLog (RemoteManage .class );
41+ private static final ParameterizedTypeReference <Map <String , Object >> PARAMETERIZED_TYPE_REFERENCE = new ParameterizedTypeReference <>() {
42+ };
4043
4144 //Because of the custom error handling, we need to use Buffering
4245 private final Map <Environment , RestTemplate > restTemplates ;
@@ -113,14 +116,9 @@ public Map<String, Object> saveIdentityProvider(Organization organization) {
113116
114117 RestTemplate restTemplate = environmentRestTemplate (Environment .PROD );
115118 String url = environmentUrl (Environment .PROD );
116- ResponseEntity <Map > responseEntity = restTemplate .exchange (String .format ("%s/manage/api/internal/metadata" , url ),
117- HttpMethod .PUT , new HttpEntity <>(provider ), Map .class );
118- Map body = responseEntity .getBody ();
119- if (ResilientErrorHandler .ignoreError (body )) {
120- //See ResilientErrorHandler#handleError. Any no-data-changed error is thrown there
121- return provider ;
122- }
123- return body ;
119+ ResponseEntity <Map <String , Object >> responseEntity = restTemplate .exchange (String .format ("%s/manage/api/internal/metadata" , url ),
120+ HttpMethod .PUT , new HttpEntity <>(provider ), PARAMETERIZED_TYPE_REFERENCE );
121+ return checkNoChangeResponse (responseEntity , provider );
124122 }
125123
126124 @ SneakyThrows
@@ -136,14 +134,9 @@ public Map<String, Object> saveProvider(Connection connection) {
136134 RestTemplate restTemplate = environmentRestTemplate (connection .getEnvironment ());
137135 String url = environmentUrl (connection .getEnvironment ());
138136 HttpMethod httpMethod = StringUtils .hasText (connection .getManageIdentifier ()) ? HttpMethod .PUT : HttpMethod .POST ;
139- ResponseEntity <Map > responseEntity = restTemplate .exchange (String .format ("%s/manage/api/internal/metadata" , url ),
140- httpMethod , new HttpEntity <>(provider ), Map .class );
141- Map body = responseEntity .getBody ();
142- if (ResilientErrorHandler .ignoreError (body )) {
143- //See ResilientErrorHandler#handleError. Any no-data-changed error is thrown there
144- return provider ;
145- }
146- return body ;
137+ ResponseEntity <Map <String ,Object >> responseEntity = restTemplate .exchange (String .format ("%s/manage/api/internal/metadata" , url ),
138+ httpMethod , new HttpEntity <>(provider ), PARAMETERIZED_TYPE_REFERENCE );
139+ return checkNoChangeResponse (responseEntity , provider );
147140 }
148141
149142 @ Override
@@ -179,8 +172,7 @@ public Map<String, Object> createChangeRequest(Environment environment, ChangeRe
179172 String url = String .format ("%s/manage/api/internal/change-requests" , environmentUrl (environment ));
180173 HttpEntity <ChangeRequest > requestEntity = new HttpEntity <>(changeRequest );
181174 ResponseEntity <Map <String , Object >> responseEntity = restTemplate .exchange (url , HttpMethod .POST , requestEntity ,
182- new ParameterizedTypeReference <>() {
183- });
175+ PARAMETERIZED_TYPE_REFERENCE );
184176 return responseEntity .getBody ();
185177 }
186178
@@ -399,7 +391,8 @@ public Map<String, Object> updatePolicy(Map<String, Object> policy) {
399391 RestTemplate restTemplate = environmentRestTemplate (Environment .PROD );
400392 String url = String .format ("%s/manage/api/internal/metadata" ,
401393 environmentUrl (Environment .PROD ));
402- return restTemplate .exchange (url , HttpMethod .PUT , new HttpEntity <>(policy ), Map .class ).getBody ();
394+ ResponseEntity <Map <String , Object >> responseEntity = restTemplate .exchange (url , HttpMethod .PUT , new HttpEntity <>(policy ), PARAMETERIZED_TYPE_REFERENCE );
395+ return checkNoChangeResponse (responseEntity , policy );
403396 }
404397
405398 @ Override
@@ -466,5 +459,14 @@ private RestTemplate environmentRestTemplate(Environment environment) {
466459 return restTemplates .get (environment );
467460 }
468461
462+ private Map <String , Object > checkNoChangeResponse (ResponseEntity <Map <String , Object >> responseEntity , Map <String , Object > provider ) {
463+ Map <String , Object > body = responseEntity .getBody ();
464+ if (body == null || ResilientErrorHandler .ignoreError (body )) {
465+ //See ResilientErrorHandler#handleError. Any no-data-changed error is thrown there
466+ return provider ;
467+ }
468+ return body ;
469+
470+ }
469471
470472}
0 commit comments