*/
package org.opendaylight.controller.cluster.access.concepts;
+import static java.util.Objects.requireNonNull;
+
import com.google.common.annotations.Beta;
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Preconditions;
+import java.io.DataInput;
+import java.io.DataOutput;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Objects;
-import org.opendaylight.yangtools.concepts.Identifier;
+import org.opendaylight.yangtools.concepts.WritableIdentifier;
/**
* A cluster-wide unique identifier of a frontend type located at a cluster member.
* @author Robert Varga
*/
@Beta
-public final class FrontendIdentifier<T extends FrontendType> implements Identifier {
- private static final class Proxy<T extends FrontendType> implements Externalizable {
+public final class FrontendIdentifier implements WritableIdentifier {
+ private static final class Proxy implements Externalizable {
private static final long serialVersionUID = 1L;
private MemberName memberName;
- private T clientType;
+ private FrontendType clientType;
+ // checkstyle flags the public modifier as redundant however it is explicitly needed for Java serialization to
+ // be able to create instances via reflection.
+ @SuppressWarnings("checkstyle:RedundantModifier")
public Proxy() {
// Needed for Externalizable
}
- Proxy(final MemberName memberName, final T clientType) {
- this.memberName = Preconditions.checkNotNull(memberName);
- this.clientType = Preconditions.checkNotNull(clientType);
+ Proxy(final MemberName memberName, final FrontendType clientType) {
+ this.memberName = requireNonNull(memberName);
+ this.clientType = requireNonNull(clientType);
}
@Override
- public void writeExternal(ObjectOutput out) throws IOException {
- out.writeObject(memberName);
- out.writeObject(clientType);
+ public void writeExternal(final ObjectOutput out) throws IOException {
+ memberName.writeTo(out);
+ clientType.writeTo(out);
}
- @SuppressWarnings("unchecked")
@Override
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- memberName = (MemberName) in.readObject();
- clientType = (T) in.readObject();
+ public void readExternal(final ObjectInput in) throws IOException {
+ memberName = MemberName.readFrom(in);
+ clientType = FrontendType.readFrom(in);
}
private Object readResolve() {
- return new FrontendIdentifier<>(memberName, clientType);
+ return new FrontendIdentifier(memberName, clientType);
}
}
private static final long serialVersionUID = 1L;
private final MemberName memberName;
- private final T clientType;
+ private final FrontendType clientType;
+
+ FrontendIdentifier(final MemberName memberName, final FrontendType clientType) {
+ this.clientType = requireNonNull(clientType);
+ this.memberName = requireNonNull(memberName);
+ }
+
+ public static FrontendIdentifier create(final MemberName memberName, final FrontendType clientType) {
+ return new FrontendIdentifier(memberName, clientType);
+ }
- FrontendIdentifier(final MemberName memberName, final T clientType) {
- this.clientType = Preconditions.checkNotNull(clientType);
- this.memberName = Preconditions.checkNotNull(memberName);
+ public static FrontendIdentifier readFrom(final DataInput in) throws IOException {
+ final MemberName memberName = MemberName.readFrom(in);
+ final FrontendType clientType = FrontendType.readFrom(in);
+ return new FrontendIdentifier(memberName, clientType);
}
- public static <T extends FrontendType> FrontendIdentifier<T> create(MemberName memberName, final T clientType) {
- return new FrontendIdentifier<>(memberName, clientType);
+ @Override
+ public void writeTo(final DataOutput out) throws IOException {
+ memberName.writeTo(out);
+ clientType.writeTo(out);
}
- public T getClientType() {
+ public FrontendType getClientType() {
return clientType;
}
}
@Override
- public boolean equals(final Object o) {
- if (this == o) {
+ public boolean equals(final Object obj) {
+ if (this == obj) {
return true;
}
- if (!(o instanceof FrontendIdentifier)) {
+ if (!(obj instanceof FrontendIdentifier)) {
return false;
}
- final FrontendIdentifier<?> other = (FrontendIdentifier<?>) o;
+ final FrontendIdentifier other = (FrontendIdentifier) obj;
return memberName.equals(other.memberName) && clientType.equals(other.clientType);
}
+ public String toPersistentId() {
+ return memberName.getName() + "-frontend-" + clientType.getName();
+ }
+
@Override
public String toString() {
- return MoreObjects.toStringHelper(FrontendIdentifier.class).add("member", memberName)
- .add("clientType", clientType).toString();
+ return toPersistentId();
}
private Object writeReplace() {
- return new Proxy<>(memberName, clientType);
+ return new Proxy(memberName, clientType);
}
}