Bump yangtools to 7.0.3
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / config / PrefixShardConfiguration.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.config;
9
10 import static java.util.Objects.requireNonNull;
11
12 import com.google.common.collect.ImmutableSet;
13 import java.io.Externalizable;
14 import java.io.IOException;
15 import java.io.ObjectInput;
16 import java.io.ObjectOutput;
17 import java.io.Serializable;
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import org.opendaylight.controller.cluster.access.concepts.MemberName;
21 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
22
23 /**
24  * Configuration for prefix based shards.
25  */
26 public class PrefixShardConfiguration implements Serializable {
27     private static final class Proxy implements Externalizable {
28         private static final long serialVersionUID = 1L;
29
30         private PrefixShardConfiguration prefixShardConfiguration;
31
32         // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't
33         // redundant. It is explicitly needed for Java serialization to be able to create instances via reflection.
34         @SuppressWarnings("checkstyle:RedundantModifier")
35         public Proxy() {
36         }
37
38         Proxy(final PrefixShardConfiguration prefixShardConfiguration) {
39             this.prefixShardConfiguration = prefixShardConfiguration;
40         }
41
42         @Override
43         public void writeExternal(final ObjectOutput objectOutput) throws IOException {
44             objectOutput.writeObject(prefixShardConfiguration.getPrefix());
45             objectOutput.writeObject(prefixShardConfiguration.getShardStrategyName());
46
47             objectOutput.writeInt(prefixShardConfiguration.getShardMemberNames().size());
48             for (MemberName name : prefixShardConfiguration.getShardMemberNames()) {
49                 name.writeTo(objectOutput);
50             }
51         }
52
53         @Override
54         public void readExternal(final ObjectInput objectInput) throws IOException, ClassNotFoundException {
55             final DOMDataTreeIdentifier localPrefix = (DOMDataTreeIdentifier) objectInput.readObject();
56             final String localStrategyName = (String) objectInput.readObject();
57
58             final int size = objectInput.readInt();
59             final Collection<MemberName> localShardMemberNames = new ArrayList<>(size);
60             for (int i = 0; i < size; i++) {
61                 localShardMemberNames.add(MemberName.readFrom(objectInput));
62             }
63
64             prefixShardConfiguration = new PrefixShardConfiguration(localPrefix, localStrategyName,
65                     localShardMemberNames);
66         }
67
68         private Object readResolve() {
69             return prefixShardConfiguration;
70         }
71     }
72
73     private static final long serialVersionUID = 1L;
74
75     private final DOMDataTreeIdentifier prefix;
76     private final String shardStrategyName;
77     private final Collection<MemberName> shardMemberNames;
78
79     public PrefixShardConfiguration(final DOMDataTreeIdentifier prefix,
80                                     final String shardStrategyName,
81                                     final Collection<MemberName> shardMemberNames) {
82         this.prefix = requireNonNull(prefix);
83         this.shardStrategyName = requireNonNull(shardStrategyName);
84         this.shardMemberNames = ImmutableSet.copyOf(shardMemberNames);
85     }
86
87     public DOMDataTreeIdentifier getPrefix() {
88         return prefix;
89     }
90
91     public String getShardStrategyName() {
92         return shardStrategyName;
93     }
94
95     public Collection<MemberName> getShardMemberNames() {
96         return shardMemberNames;
97     }
98
99     @Override
100     public String toString() {
101         return "PrefixShardConfiguration{"
102                 + "prefix=" + prefix
103                 + ", shardStrategyName='"
104                 + shardStrategyName + '\''
105                 + ", shardMemberNames=" + shardMemberNames
106                 + '}';
107     }
108
109     private Object writeReplace() {
110         return new Proxy(this);
111     }
112 }