Do not access model context multiple times 12/101012/2
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 9 May 2022 09:20:42 +0000 (11:20 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 9 May 2022 09:25:42 +0000 (11:25 +0200)
InstanceIdentifierContext has a capture of the model context, use it
from there instead of accessing it multiple times.

Change-Id: Ia29bf5a3e80d164c08ef338649080cb4f48ce4a5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java

index f038ad07b5e0d7305c68cf9e7f23690370082be3..8257b6394e0cc986552805cadb9b8211ff8e2582 100644 (file)
@@ -42,7 +42,6 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteOperations;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 import org.opendaylight.mdsal.dom.api.DOMMountPointService;
-import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
@@ -224,12 +223,8 @@ public class RestconfDataServiceImpl implements RestconfDataService {
         validTopLevelNodeName(iid.getInstanceIdentifier(), payload);
         validateListKeysEqualityInPayloadAndUri(payload);
 
-        final DOMMountPoint mountPoint = payload.getInstanceIdentifierContext().getMountPoint();
-        final EffectiveModelContext ref = mountPoint == null
-                ? schemaContextHandler.get() : modelContext(mountPoint);
-
-        final RestconfStrategy strategy = getRestconfStrategy(mountPoint);
-        return PutDataTransactionUtil.putData(payload, ref, strategy, params);
+        final RestconfStrategy strategy = getRestconfStrategy(iid.getMountPoint());
+        return PutDataTransactionUtil.putData(payload, iid.getSchemaContext(), strategy, params);
     }
 
     @Override
@@ -240,14 +235,14 @@ public class RestconfDataServiceImpl implements RestconfDataService {
     @Override
     public Response postData(final NormalizedNodePayload payload, final UriInfo uriInfo) {
         requireNonNull(payload);
-        if (payload.getInstanceIdentifierContext().getSchemaNode() instanceof ActionDefinition) {
+        final InstanceIdentifierContext iid = payload.getInstanceIdentifierContext();
+        if (iid.getSchemaNode() instanceof ActionDefinition) {
             return invokeAction(payload);
         }
 
         final WriteDataParams params = QueryParams.newWriteDataParams(uriInfo);
-        final DOMMountPoint mountPoint = payload.getInstanceIdentifierContext().getMountPoint();
-        final RestconfStrategy strategy = getRestconfStrategy(mountPoint);
-        return PostDataTransactionUtil.postData(uriInfo, payload, strategy, getSchemaContext(mountPoint), params);
+        final RestconfStrategy strategy = getRestconfStrategy(iid.getMountPoint());
+        return PostDataTransactionUtil.postData(uriInfo, payload, strategy, iid.getSchemaContext(), params);
     }
 
     @Override
@@ -267,11 +262,11 @@ public class RestconfDataServiceImpl implements RestconfDataService {
 
     @Override
     public PatchStatusContext patchData(final PatchContext context, final UriInfo uriInfo) {
-        final DOMMountPoint mountPoint = RestconfDocumentedException.throwIfNull(context,
+        final InstanceIdentifierContext iid = RestconfDocumentedException.throwIfNull(context,
             ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE, "No patch documented provided")
-            .getInstanceIdentifierContext().getMountPoint();
-        final RestconfStrategy strategy = getRestconfStrategy(mountPoint);
-        return PatchDataTransactionUtil.patchData(context, strategy, getSchemaContext(mountPoint));
+            .getInstanceIdentifierContext();
+        final RestconfStrategy strategy = getRestconfStrategy(iid.getMountPoint());
+        return PatchDataTransactionUtil.patchData(context, strategy, iid.getSchemaContext());
     }
 
     @Override
@@ -283,16 +278,8 @@ public class RestconfDataServiceImpl implements RestconfDataService {
         validTopLevelNodeName(iid.getInstanceIdentifier(), payload);
         validateListKeysEqualityInPayloadAndUri(payload);
 
-        final DOMMountPoint mountPoint = payload.getInstanceIdentifierContext().getMountPoint();
-        final EffectiveModelContext ref = mountPoint == null
-                ? schemaContextHandler.get() : modelContext(mountPoint);
-        final RestconfStrategy strategy = getRestconfStrategy(mountPoint);
-
-        return PlainPatchDataTransactionUtil.patchData(payload, strategy, ref);
-    }
-
-    private EffectiveModelContext getSchemaContext(final DOMMountPoint mountPoint) {
-        return mountPoint == null ? schemaContextHandler.get() : modelContext(mountPoint);
+        final RestconfStrategy strategy = getRestconfStrategy(iid.getMountPoint());
+        return PlainPatchDataTransactionUtil.patchData(payload, strategy, iid.getSchemaContext());
     }
 
     // FIXME: why is this synchronized?
@@ -490,10 +477,4 @@ public class RestconfDataServiceImpl implements RestconfDataService {
             }
         }
     }
-
-    private static EffectiveModelContext modelContext(final DOMMountPoint mountPoint) {
-        return mountPoint.getService(DOMSchemaService.class)
-            .flatMap(svc -> Optional.ofNullable(svc.getGlobalContext()))
-            .orElse(null);
-    }
 }