/*
* Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hazelcast.concurrent.lock;
import com.hazelcast.internal.cluster.Versions;
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.spi.DefaultObjectNamespace;
import com.hazelcast.spi.DistributedObjectNamespace;
import com.hazelcast.spi.ObjectNamespace;
import com.hazelcast.version.Version;
import java.io.IOException;
/**
* Serialization helper to serialize/deserialize {@link DistributedObjectNamespace}
* and {@link DefaultObjectNamespace} between 3.8 and 3.9 members compatibly.
* <p>
* This class is not needed for versions after 3.9.
*/
public final class ObjectNamespaceSerializationHelper {
private ObjectNamespaceSerializationHelper() {
}
public static void writeNamespaceCompatibly(ObjectNamespace namespace, ObjectDataOutput out) throws IOException {
Version version = out.getVersion();
assert !version.isUnknown();
if (version.isGreaterOrEqual(Versions.V3_9)) {
if (namespace.getClass() == DefaultObjectNamespace.class) {
out.writeObject(new DistributedObjectNamespace(namespace));
} else {
out.writeObject(namespace);
}
} else {
if (namespace.getClass() == DistributedObjectNamespace.class) {
out.writeObject(new DefaultObjectNamespace(namespace));
} else {
out.writeObject(namespace);
}
}
}
public static ObjectNamespace readNamespaceCompatibly(ObjectDataInput in) throws IOException {
ObjectNamespace namespace = in.readObject();
if (namespace.getClass() == DefaultObjectNamespace.class) {
namespace = new DistributedObjectNamespace(namespace);
}
return namespace;
}
}