/*
* 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.config;
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.serialization.DataSerializable;
import com.hazelcast.nio.serialization.TypedDataSerializable;
import com.hazelcast.nio.serialization.BinaryInterface;
import javax.cache.configuration.CacheEntryListenerConfiguration;
import javax.cache.configuration.Factory;
import javax.cache.expiry.ExpiryPolicy;
import javax.cache.integration.CacheLoader;
import javax.cache.integration.CacheWriter;
import java.io.IOException;
import java.util.Set;
/**
* Contains all the configuration for the {@link com.hazelcast.cache.ICache} (used for backward compatibility).
*
* This class does not support disablePerEntryInvalidationEvents and has no eviction policy comparator support.
*
* @param <K> the key type.
* @param <V> the value type.
*/
@BinaryInterface
public class LegacyCacheConfig<K, V> implements DataSerializable, TypedDataSerializable {
private CacheConfig<K, V> config;
@SuppressWarnings("unused")
public LegacyCacheConfig() {
config = new CacheConfig<K, V>();
}
public LegacyCacheConfig(CacheConfig<K, V> config) {
this.config = config;
}
@Override
public void writeData(ObjectDataOutput out) throws IOException {
out.writeUTF(config.getName());
out.writeUTF(config.getManagerPrefix());
out.writeUTF(config.getUriString());
out.writeInt(config.getBackupCount());
out.writeInt(config.getAsyncBackupCount());
out.writeUTF(config.getInMemoryFormat().name());
out.writeObject(new LegacyCacheEvictionConfig(config.getEvictionConfig()));
out.writeObject(config.getWanReplicationRef());
// SUPER
out.writeObject(config.getKeyType());
out.writeObject(config.getValueType());
out.writeObject(config.getCacheLoaderFactory());
out.writeObject(config.getCacheWriterFactory());
out.writeObject(config.getExpiryPolicyFactory());
out.writeBoolean(config.isReadThrough());
out.writeBoolean(config.isWriteThrough());
out.writeBoolean(config.isStoreByValue());
out.writeBoolean(config.isManagementEnabled());
out.writeBoolean(config.isStatisticsEnabled());
out.writeBoolean(config.getHotRestartConfig().isEnabled());
out.writeBoolean(config.getHotRestartConfig().isFsync());
out.writeUTF(config.getQuorumName());
Set<CacheEntryListenerConfiguration<K, V>> cacheEntryListenerConfigurations =
(Set<CacheEntryListenerConfiguration<K, V>>) config.getCacheEntryListenerConfigurations();
boolean listNotEmpty = cacheEntryListenerConfigurations != null && !cacheEntryListenerConfigurations.isEmpty();
out.writeBoolean(listNotEmpty);
if (listNotEmpty) {
out.writeInt(cacheEntryListenerConfigurations.size());
for (CacheEntryListenerConfiguration<K, V> cc : cacheEntryListenerConfigurations) {
out.writeObject(cc);
}
}
out.writeUTF(config.getMergePolicy());
}
@Override
@SuppressWarnings("unchecked")
public void readData(ObjectDataInput in) throws IOException {
config.setName(in.readUTF());
config.setManagerPrefix(in.readUTF());
config.setUriString(in.readUTF());
config.setBackupCount(in.readInt());
config.setAsyncBackupCount(in.readInt());
String resultInMemoryFormat = in.readUTF();
config.setInMemoryFormat(InMemoryFormat.valueOf(resultInMemoryFormat));
LegacyCacheEvictionConfig legacyConfig = in.readObject(LegacyCacheEvictionConfig.class);
config.setEvictionConfig(legacyConfig.getConfig());
config.setWanReplicationRef((WanReplicationRef) in.readObject());
// SUPER
config.setKeyType((Class<K>) in.readObject());
config.setValueType((Class<V>) in.readObject());
config.setCacheLoaderFactory((Factory<? extends CacheLoader<K, V>>) in.readObject());
config.setCacheWriterFactory((Factory<? extends CacheWriter<? super K, ? super V>>) in.readObject());
config.setExpiryPolicyFactory((Factory<? extends ExpiryPolicy>) in.readObject());
config.setReadThrough(in.readBoolean());
config.setWriteThrough(in.readBoolean());
config.setStoreByValue(in.readBoolean());
config.setManagementEnabled(in.readBoolean());
config.setStatisticsEnabled(in.readBoolean());
config.getHotRestartConfig().setEnabled(in.readBoolean());
config.getHotRestartConfig().setFsync(in.readBoolean());
config.setQuorumName(in.readUTF());
final boolean listNotEmpty = in.readBoolean();
if (listNotEmpty) {
final int size = in.readInt();
config.setListenerConfigurations();
Set<CacheEntryListenerConfiguration<K, V>> listenerConfigurations =
(Set<CacheEntryListenerConfiguration<K, V>>) config.getCacheEntryListenerConfigurations();
for (int i = 0; i < size; i++) {
listenerConfigurations.add((CacheEntryListenerConfiguration<K, V>) in.readObject());
}
}
config.setMergePolicy(in.readUTF());
}
@Override
public Class getClassType() {
return CacheConfig.class;
}
public CacheConfig<K, V> getConfigAndReset() {
CacheConfig<K, V> actualConfig = config;
this.config = null;
return actualConfig;
}
}