@@ -115,6 +115,49 @@ private <T extends IdentifiableAttributes> Optional<Resource<T>> get(String targ
115
115
return resource ;
116
116
}
117
117
118
+ private Optional <ExtensionAttributes > getExtensionAttributes (String urlTemplate , Object ... uriVariables ) {
119
+ logGetExtensionAttributesUrl (urlTemplate , uriVariables );
120
+ Stopwatch stopwatch = Stopwatch .createStarted ();
121
+ Optional <ExtensionAttributes > extensionAttributes = restClient .getOneExtensionAttributes (urlTemplate , uriVariables );
122
+ stopwatch .stop ();
123
+ logGetExtensionAttributesTime (extensionAttributes .isPresent () ? 1 : 0 , stopwatch .elapsed (TimeUnit .MILLISECONDS ));
124
+
125
+ return extensionAttributes ;
126
+ }
127
+
128
+ private Map <String , ExtensionAttributes > getExtensionAttributesMap (String urlTemplate , Object ... uriVariables ) {
129
+ logGetExtensionAttributesUrl (urlTemplate , uriVariables );
130
+ Stopwatch stopwatch = Stopwatch .createStarted ();
131
+ Map <String , ExtensionAttributes > extensionAttributes = restClient .get (urlTemplate , new ParameterizedTypeReference <>() { }, uriVariables );
132
+ stopwatch .stop ();
133
+ logGetExtensionAttributesTime (extensionAttributes .size (), stopwatch .elapsed (TimeUnit .MILLISECONDS ));
134
+
135
+ return extensionAttributes ;
136
+ }
137
+
138
+ private Map <String , Map <String , ExtensionAttributes >> getExtensionAttributesNestedMap (String urlTemplate , Object ... uriVariables ) {
139
+ logGetExtensionAttributesUrl (urlTemplate , uriVariables );
140
+ Stopwatch stopwatch = Stopwatch .createStarted ();
141
+ Map <String , Map <String , ExtensionAttributes >> extensionAttributes = restClient .get (urlTemplate , new ParameterizedTypeReference <>() { }, uriVariables );
142
+ stopwatch .stop ();
143
+ long loadedAttributesCount = extensionAttributes .values ().stream ()
144
+ .mapToLong (innerMap -> innerMap .values ().size ())
145
+ .sum ();
146
+ logGetExtensionAttributesTime (loadedAttributesCount , stopwatch .elapsed (TimeUnit .MILLISECONDS ));
147
+
148
+ return extensionAttributes ;
149
+ }
150
+
151
+ private static void logGetExtensionAttributesUrl (String urlTemplate , Object ... uriVariables ) {
152
+ if (LOGGER .isInfoEnabled ()) {
153
+ LOGGER .info ("Loading extension attributes {}" , UriComponentsBuilder .fromUriString (urlTemplate ).build (uriVariables ));
154
+ }
155
+ }
156
+
157
+ private static void logGetExtensionAttributesTime (long loadedAttributesCount , long timeElapsed ) {
158
+ LOGGER .info ("{} extension attributes loaded in {} ms" , loadedAttributesCount , timeElapsed );
159
+ }
160
+
118
161
private <T extends IdentifiableAttributes > void updatePartition (String target , String url , AttributeFilter attributeFilter , List <Resource <T >> resources , Object [] uriVariables ) {
119
162
if (attributeFilter == null ) {
120
163
if (LOGGER .isInfoEnabled ()) {
@@ -848,4 +891,29 @@ public void updateGrounds(UUID networkUuid, List<Resource<GroundAttributes>> gro
848
891
AttributeFilter attributeFilter ) {
849
892
updateAll (STR_GROUND , "/networks/{networkUuid}/grounds" , groundResources , attributeFilter , networkUuid );
850
893
}
894
+
895
+ @ Override
896
+ public Optional <ExtensionAttributes > getExtensionAttributes (UUID networkUuid , int variantNum , ResourceType resourceType , String identifiableId , String extensionName ) {
897
+ return getExtensionAttributes ("/networks/{networkUuid}/{variantNum}/identifiables/{identifiableId}/extensions/{extensionName}" , networkUuid , variantNum , identifiableId , extensionName );
898
+ }
899
+
900
+ @ Override
901
+ public Map <String , ExtensionAttributes > getAllExtensionsAttributesByResourceTypeAndExtensionName (UUID networkUuid , int variantNum , ResourceType resourceType , String extensionName ) {
902
+ return getExtensionAttributesMap ("/networks/{networkUuid}/{variantNum}/types/{type}/extensions/{extensionName}" , networkUuid , variantNum , resourceType , extensionName );
903
+ }
904
+
905
+ @ Override
906
+ public Map <String , ExtensionAttributes > getAllExtensionsAttributesByIdentifiableId (UUID networkUuid , int variantNum , ResourceType resourceType , String identifiableId ) {
907
+ return getExtensionAttributesMap ("/networks/{networkUuid}/{variantNum}/identifiables/{identifiableId}/extensions" , networkUuid , variantNum , identifiableId );
908
+ }
909
+
910
+ @ Override
911
+ public Map <String , Map <String , ExtensionAttributes >> getAllExtensionsAttributesByResourceType (UUID networkUuid , int variantNum , ResourceType resourceType ) {
912
+ return getExtensionAttributesNestedMap ("/networks/{networkUuid}/{variantNum}/types/{resourceType}/extensions" , networkUuid , variantNum , resourceType );
913
+ }
914
+
915
+ @ Override
916
+ public void removeExtensionAttributes (UUID networkUuid , int variantNum , ResourceType resourceType , String identifiableId , String extensionName ) {
917
+ restClient .delete ("/networks/{networkUuid}/{variantNum}/identifiables/{identifiableId}/extensions/{extensionName}" , networkUuid , variantNum , identifiableId , extensionName );
918
+ }
851
919
}
0 commit comments