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 / datastore / persisted / MetadataShardDataTreeSnapshot.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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.datastore.persisted;
9
10 import static java.util.Objects.requireNonNull;
11
12 import com.google.common.annotations.Beta;
13 import com.google.common.base.MoreObjects;
14 import com.google.common.collect.ImmutableMap;
15 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
16 import java.io.Serializable;
17 import java.util.Map;
18 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
19
20 /**
21  * An {@link AbstractVersionedShardDataTreeSnapshot} which contains additional metadata.
22  *
23  * @author Robert Varga
24  */
25 @Beta
26 public final class MetadataShardDataTreeSnapshot extends AbstractVersionedShardDataTreeSnapshot
27         implements Serializable {
28     @java.io.Serial
29     private static final long serialVersionUID = 1L;
30
31     @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "This field is not Serializable but this class "
32             + "implements writeReplace to delegate serialization to a Proxy class and thus instances of this class "
33             + "aren't serialized. FindBugs does not recognize this.")
34     private final Map<Class<? extends ShardDataTreeSnapshotMetadata<?>>, ShardDataTreeSnapshotMetadata<?>> metadata;
35
36     @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "See above justification.")
37     private final NormalizedNode rootNode;
38
39     public MetadataShardDataTreeSnapshot(final NormalizedNode rootNode) {
40         this(rootNode, ImmutableMap.of());
41     }
42
43     public MetadataShardDataTreeSnapshot(final NormalizedNode rootNode,
44             final Map<Class<? extends ShardDataTreeSnapshotMetadata<?>>, ShardDataTreeSnapshotMetadata<?>> metadata) {
45         this.rootNode = requireNonNull(rootNode);
46         this.metadata = ImmutableMap.copyOf(metadata);
47     }
48
49     public Map<Class<? extends ShardDataTreeSnapshotMetadata<?>>, ShardDataTreeSnapshotMetadata<?>> getMetadata() {
50         return metadata;
51     }
52
53     @Override
54     NormalizedNode rootNode() {
55         return rootNode;
56     }
57
58     @Override
59     PayloadVersion version() {
60         return PayloadVersion.POTASSIUM;
61     }
62
63     @java.io.Serial
64     private Object writeReplace() {
65         return new MS(this);
66     }
67
68     @Override
69     public String toString() {
70         return MoreObjects.toStringHelper(this).add("metadata", metadata).toString();
71     }
72 }