atomic-storage: remove type dependency at segment level I/O
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / databroker / actors / dds / FailedDataTreeModification.java
1 /*
2  * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.cluster.databroker.actors.dds;
9
10 import static java.util.Objects.requireNonNull;
11
12 import java.util.Optional;
13 import org.eclipse.jdt.annotation.NonNull;
14 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
15 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
16 import org.opendaylight.yangtools.yang.data.tree.api.CursorAwareDataTreeModification;
17 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModificationCursor;
18 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot;
19 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
20
21 /**
22  * A {@link CursorAwareDataTreeModification} which does not really do anything and throws an
23  * {@link FailedDataTreeModificationException} for most of its operations. Used in case we when
24  * {@link DataTreeSnapshot#newModification()} fails, see {@link LocalReadWriteProxyTransaction} for details. Surrounding
25  * code should guard against invocation of most of these methods.
26  */
27 record FailedDataTreeModification(
28         @NonNull EffectiveModelContext modelContext,
29         @NonNull Exception cause) implements CursorAwareDataTreeModification {
30
31     FailedDataTreeModification {
32         requireNonNull(modelContext);
33         requireNonNull(cause);
34     }
35
36     @Override
37     public void delete(final YangInstanceIdentifier path) {
38         throw ex();
39     }
40
41     @Override
42     public void merge(final YangInstanceIdentifier path, final NormalizedNode data) {
43         throw ex();
44     }
45
46     @Override
47     public void write(final YangInstanceIdentifier path, final NormalizedNode data) {
48         throw ex();
49     }
50
51     @Override
52     public void ready() {
53         // No-op
54     }
55
56     @Override
57     public void applyToCursor(final DataTreeModificationCursor cursor) {
58         throw ex();
59     }
60
61     @Override
62     public Optional<NormalizedNode> readNode(final YangInstanceIdentifier path) {
63         throw ex();
64     }
65
66     @Override
67     public CursorAwareDataTreeModification newModification() {
68         throw new UnsupportedOperationException();
69     }
70
71     @Override
72     public Optional<? extends DataTreeModificationCursor> openCursor(final YangInstanceIdentifier path) {
73         throw ex();
74     }
75
76     private @NonNull FailedDataTreeModificationException ex() {
77         return new FailedDataTreeModificationException(cause);
78     }
79 }