package org.infinispan.marshall.core;
import java.util.Set;
import org.infinispan.atomic.DeltaCompositeKey;
import org.infinispan.atomic.impl.AtomicHashMap;
import org.infinispan.atomic.impl.AtomicHashMapDelta;
import org.infinispan.atomic.impl.ClearOperation;
import org.infinispan.atomic.impl.PutOperation;
import org.infinispan.atomic.impl.RemoveOperation;
import org.infinispan.commands.RemoteCommandsFactory;
import org.infinispan.commons.hash.MurmurHash3;
import org.infinispan.commons.io.ByteBufferImpl;
import org.infinispan.commons.marshall.AdvancedExternalizer;
import org.infinispan.commons.marshall.MarshallableFunctionExternalizers;
import org.infinispan.commons.marshall.WrappedByteArray;
import org.infinispan.commons.marshall.exts.EquivalenceExternalizer;
import org.infinispan.commons.util.Immutables;
import org.infinispan.compat.ConverterKeyMapper;
import org.infinispan.compat.ConverterValueMapper;
import org.infinispan.compat.ConverterEntryMapper;
import org.infinispan.container.entries.ImmortalCacheEntry;
import org.infinispan.container.entries.ImmortalCacheValue;
import org.infinispan.container.entries.MortalCacheEntry;
import org.infinispan.container.entries.MortalCacheValue;
import org.infinispan.container.entries.TransientCacheEntry;
import org.infinispan.container.entries.TransientCacheValue;
import org.infinispan.container.entries.TransientMortalCacheEntry;
import org.infinispan.container.entries.TransientMortalCacheValue;
import org.infinispan.container.entries.metadata.MetadataImmortalCacheEntry;
import org.infinispan.container.entries.metadata.MetadataImmortalCacheValue;
import org.infinispan.container.entries.metadata.MetadataMortalCacheEntry;
import org.infinispan.container.entries.metadata.MetadataMortalCacheValue;
import org.infinispan.container.entries.metadata.MetadataTransientCacheEntry;
import org.infinispan.container.entries.metadata.MetadataTransientCacheValue;
import org.infinispan.container.entries.metadata.MetadataTransientMortalCacheEntry;
import org.infinispan.container.entries.metadata.MetadataTransientMortalCacheValue;
import org.infinispan.container.versioning.FunctionalEntryVersionAdapter;
import org.infinispan.container.versioning.NumericVersion;
import org.infinispan.container.versioning.SimpleClusteredVersion;
import org.infinispan.context.Flag;
import org.infinispan.distribution.ch.impl.DefaultConsistentHash;
import org.infinispan.distribution.ch.impl.DefaultConsistentHashFactory;
import org.infinispan.distribution.ch.impl.ReplicatedConsistentHash;
import org.infinispan.distribution.ch.impl.ReplicatedConsistentHashFactory;
import org.infinispan.distribution.ch.impl.SyncConsistentHashFactory;
import org.infinispan.distribution.ch.impl.SyncReplicatedConsistentHashFactory;
import org.infinispan.distribution.ch.impl.TopologyAwareConsistentHashFactory;
import org.infinispan.distribution.ch.impl.TopologyAwareSyncConsistentHashFactory;
import org.infinispan.factories.GlobalComponentRegistry;
import org.infinispan.filter.AcceptAllKeyValueFilter;
import org.infinispan.filter.CacheFilters;
import org.infinispan.filter.CollectionKeyFilter;
import org.infinispan.filter.CompositeKeyFilter;
import org.infinispan.filter.CompositeKeyValueFilter;
import org.infinispan.filter.KeyFilterAsKeyValueFilter;
import org.infinispan.filter.KeyValueFilterAsKeyFilter;
import org.infinispan.functional.impl.EntryViews;
import org.infinispan.functional.impl.MetaParams;
import org.infinispan.functional.impl.MetaParamsInternalMetadata;
import org.infinispan.interceptors.distribution.VersionedResult;
import org.infinispan.interceptors.distribution.VersionedResults;
import org.infinispan.marshall.exts.CacheRpcCommandExternalizer;
import org.infinispan.marshall.exts.CollectionExternalizer;
import org.infinispan.marshall.exts.DoubleSummaryStatisticsExternalizer;
import org.infinispan.marshall.exts.EnumSetExternalizer;
import org.infinispan.marshall.exts.IntSummaryStatisticsExternalizer;
import org.infinispan.marshall.exts.LongSummaryStatisticsExternalizer;
import org.infinispan.marshall.exts.MapExternalizer;
import org.infinispan.marshall.exts.MetaParamExternalizers;
import org.infinispan.marshall.exts.OptionalExternalizer;
import org.infinispan.marshall.exts.ReplicableCommandExternalizer;
import org.infinispan.marshall.exts.TriangleAckExternalizer;
import org.infinispan.marshall.exts.UuidExternalizer;
import org.infinispan.metadata.EmbeddedMetadata;
import org.infinispan.metadata.impl.InternalMetadataImpl;
import org.infinispan.notifications.cachelistener.cluster.ClusterEvent;
import org.infinispan.notifications.cachelistener.cluster.ClusterEventCallable;
import org.infinispan.notifications.cachelistener.cluster.ClusterListenerRemoveCallable;
import org.infinispan.notifications.cachelistener.cluster.ClusterListenerReplicateCallable;
import org.infinispan.notifications.cachelistener.cluster.MultiClusterEventCallable;
import org.infinispan.notifications.cachelistener.filter.CacheEventConverterAsConverter;
import org.infinispan.notifications.cachelistener.filter.CacheEventFilterAsKeyValueFilter;
import org.infinispan.notifications.cachelistener.filter.CacheEventFilterConverterAsKeyValueFilterConverter;
import org.infinispan.notifications.cachelistener.filter.KeyFilterAsCacheEventFilter;
import org.infinispan.notifications.cachelistener.filter.KeyValueFilterAsCacheEventFilter;
import org.infinispan.partitionhandling.AvailabilityMode;
import org.infinispan.remoting.MIMECacheEntry;
import org.infinispan.remoting.responses.CacheNotFoundResponse;
import org.infinispan.remoting.responses.ExceptionResponse;
import org.infinispan.remoting.responses.SuccessfulResponse;
import org.infinispan.remoting.responses.UnsuccessfulResponse;
import org.infinispan.remoting.responses.UnsureResponse;
import org.infinispan.remoting.transport.jgroups.JGroupsAddress;
import org.infinispan.remoting.transport.jgroups.JGroupsTopologyAwareAddress;
import org.infinispan.statetransfer.StateChunk;
import org.infinispan.statetransfer.TransactionInfo;
import org.infinispan.stream.StreamMarshalling;
import org.infinispan.stream.impl.intops.IntermediateOperationExternalizer;
import org.infinispan.stream.impl.termop.TerminalOperationExternalizer;
import org.infinispan.topology.CacheJoinInfo;
import org.infinispan.topology.CacheStatusResponse;
import org.infinispan.topology.CacheTopology;
import org.infinispan.topology.ManagerStatusResponse;
import org.infinispan.topology.PersistentUUID;
import org.infinispan.transaction.xa.DldGlobalTransaction;
import org.infinispan.transaction.xa.GlobalTransaction;
import org.infinispan.transaction.xa.recovery.InDoubtTxInfoImpl;
import org.infinispan.transaction.xa.recovery.RecoveryAwareDldGlobalTransaction;
import org.infinispan.transaction.xa.recovery.RecoveryAwareGlobalTransaction;
import org.infinispan.transaction.xa.recovery.SerializableXid;
import org.infinispan.util.KeyValuePair;
import org.infinispan.xsite.statetransfer.XSiteState;
final class InternalExternalizers {
private InternalExternalizers() {
}
static ClassToExternalizerMap load(
GlobalMarshaller marshaller, GlobalComponentRegistry gcr,
RemoteCommandsFactory cmdFactory) {
// TODO Add initial value and load factor
ClassToExternalizerMap exts = new ClassToExternalizerMap(512, 0.6f);
// Add the stateful externalizer first
ReplicableCommandExternalizer ext = new ReplicableCommandExternalizer(cmdFactory, gcr);
addInternalExternalizer(ext, exts);
// Add the rest of stateless externalizers
addInternalExternalizer(new AcceptAllKeyValueFilter.Externalizer(), exts);
addInternalExternalizer(new AtomicHashMap.Externalizer(), exts);
addInternalExternalizer(new AtomicHashMapDelta.Externalizer(), exts);
addInternalExternalizer(new AvailabilityMode.Externalizer(), exts);
addInternalExternalizer(new ByteBufferImpl.Externalizer(), exts);
addInternalExternalizer(new CacheEventConverterAsConverter.Externalizer(), exts);
addInternalExternalizer(new CacheEventFilterAsKeyValueFilter.Externalizer(), exts);
addInternalExternalizer(new CacheEventFilterConverterAsKeyValueFilterConverter.Externalizer(), exts);
addInternalExternalizer(new CacheFilters.CacheFiltersExternalizer(), exts);
addInternalExternalizer(new CacheJoinInfo.Externalizer(), exts);
addInternalExternalizer(new CacheNotFoundResponse.Externalizer(), exts);
addInternalExternalizer(new CacheRpcCommandExternalizer(gcr, ext), exts);
addInternalExternalizer(new CacheStatusResponse.Externalizer(), exts);
addInternalExternalizer(new CacheTopology.Externalizer(), exts);
addInternalExternalizer(new ClearOperation.Externalizer(), exts);
addInternalExternalizer(new ClusterEvent.Externalizer(), exts);
addInternalExternalizer(new ClusterEventCallable.Externalizer(), exts);
addInternalExternalizer(new ClusterListenerRemoveCallable.Externalizer(), exts);
addInternalExternalizer(new ClusterListenerReplicateCallable.Externalizer(), exts);
addInternalExternalizer(new CollectionExternalizer(), exts);
addInternalExternalizer(new CollectionKeyFilter.Externalizer(), exts);
addInternalExternalizer(new ConverterKeyMapper.Externalizer(), exts);
addInternalExternalizer(new ConverterEntryMapper.Externalizer(), exts);
addInternalExternalizer(new ConverterValueMapper.Externalizer(), exts);
addInternalExternalizer(new CompositeKeyFilter.Externalizer(), exts); // TODO: Untested in core
addInternalExternalizer(new CompositeKeyValueFilter.Externalizer(), exts); // TODO: Untested in core
addInternalExternalizer(new DefaultConsistentHash.Externalizer(), exts);
addInternalExternalizer(new DefaultConsistentHashFactory.Externalizer(), exts); // TODO: Untested in core
addInternalExternalizer(new DeltaCompositeKey.DeltaCompositeKeyExternalizer(), exts);
addInternalExternalizer(new DldGlobalTransaction.Externalizer(), exts);
addInternalExternalizer(new DoubleSummaryStatisticsExternalizer(), exts);
addInternalExternalizer(new EmbeddedMetadata.Externalizer(), exts);
addInternalExternalizer(new EntryViews.NoValueReadOnlyViewExternalizer(), exts);
addInternalExternalizer(new EntryViews.ReadWriteSnapshotViewExternalizer(), exts);
addInternalExternalizer(new EntryViews.ReadOnlySnapshotViewExternalizer(), exts);
addInternalExternalizer(new EnumSetExternalizer(), exts);
addInternalExternalizer(new EquivalenceExternalizer(), exts);
addInternalExternalizer(new ExceptionResponse.Externalizer(), exts);
addInternalExternalizer(new Flag.Externalizer(), exts);
addInternalExternalizer(new FunctionalEntryVersionAdapter.Externalizer(), exts);
addInternalExternalizer(new GlobalTransaction.Externalizer(), exts);
addInternalExternalizer(new KeyFilterAsCacheEventFilter.Externalizer(), exts);
addInternalExternalizer(new KeyFilterAsKeyValueFilter.Externalizer(), exts);
addInternalExternalizer(new KeyValueFilterAsCacheEventFilter.Externalizer(), exts);
addInternalExternalizer(new KeyValueFilterAsKeyFilter.Externalizer(), exts); // TODO: Untested in core
addInternalExternalizer(new ImmortalCacheEntry.Externalizer(), exts);
addInternalExternalizer(new ImmortalCacheValue.Externalizer(), exts);
addInternalExternalizer(new Immutables.ImmutableMapWrapperExternalizer(), exts);
addInternalExternalizer(new Immutables.ImmutableSetWrapperExternalizer(), exts);
addInternalExternalizer(new InDoubtTxInfoImpl.Externalizer(), exts);
addInternalExternalizer(new IntermediateOperationExternalizer(), exts);
addInternalExternalizer(new InternalMetadataImpl.Externalizer(), exts);
addInternalExternalizer(new IntSummaryStatisticsExternalizer(), exts);
addInternalExternalizer(new JGroupsAddress.Externalizer(), exts);
addInternalExternalizer(new JGroupsTopologyAwareAddress.Externalizer(), exts);
addInternalExternalizer(new LongSummaryStatisticsExternalizer(), exts);
addInternalExternalizer(new KeyValuePair.Externalizer(), exts);
addInternalExternalizer(new ManagerStatusResponse.Externalizer(), exts);
addInternalExternalizer(new MapExternalizer(), exts);
addInternalExternalizer(new MarshallableFunctionExternalizers.ConstantLambdaExternalizer(), exts);
addInternalExternalizer(new MarshallableFunctionExternalizers.LambdaWithMetasExternalizer(), exts);
addInternalExternalizer(new MarshallableFunctionExternalizers.SetValueIfEqualsReturnBooleanExternalizer(), exts);
addInternalExternalizer(new MarshalledEntryImpl.Externalizer(marshaller), exts);
addInternalExternalizer(new MetadataImmortalCacheEntry.Externalizer(), exts);
addInternalExternalizer(new MetadataImmortalCacheValue.Externalizer(), exts);
addInternalExternalizer(new MetadataMortalCacheEntry.Externalizer(), exts);
addInternalExternalizer(new MetadataMortalCacheValue.Externalizer(), exts);
addInternalExternalizer(new MetadataTransientCacheEntry.Externalizer(), exts); // TODO: Untested in core
addInternalExternalizer(new MetadataTransientCacheValue.Externalizer(), exts); // TODO: Untested in core
addInternalExternalizer(new MetadataTransientMortalCacheEntry.Externalizer(), exts);
addInternalExternalizer(new MetadataTransientMortalCacheValue.Externalizer(), exts); // TODO: Untested in core
addInternalExternalizer(new MetaParamExternalizers.LifespanExternalizer(), exts);
addInternalExternalizer(new MetaParamExternalizers.EntryVersionParamExternalizer(), exts);
addInternalExternalizer(new MetaParamExternalizers.NumericEntryVersionExternalizer(), exts);
addInternalExternalizer(new MetaParams.Externalizer(), exts);
addInternalExternalizer(new MetaParamsInternalMetadata.Externalizer(), exts);
addInternalExternalizer(new MIMECacheEntry.Externalizer(), exts); // new
addInternalExternalizer(new MortalCacheEntry.Externalizer(), exts);
addInternalExternalizer(new MortalCacheValue.Externalizer(), exts);
addInternalExternalizer(new MultiClusterEventCallable.Externalizer(), exts);
addInternalExternalizer(new MurmurHash3.Externalizer(), exts);
addInternalExternalizer(new NumericVersion.Externalizer(), exts);
addInternalExternalizer(new OptionalExternalizer(), exts);
addInternalExternalizer(new PersistentUUID.Externalizer(), exts);
addInternalExternalizer(new PutOperation.Externalizer(), exts);
addInternalExternalizer(new RecoveryAwareDldGlobalTransaction.Externalizer(), exts);
addInternalExternalizer(new RecoveryAwareGlobalTransaction.Externalizer(), exts);
addInternalExternalizer(new RemoveOperation.Externalizer(), exts);
addInternalExternalizer(new ReplicatedConsistentHash.Externalizer(), exts);
addInternalExternalizer(new ReplicatedConsistentHashFactory.Externalizer(), exts); // TODO: Untested in core
addInternalExternalizer(new SerializableXid.XidExternalizer(), exts);
addInternalExternalizer(new SimpleClusteredVersion.Externalizer(), exts);
addInternalExternalizer(new StateChunk.Externalizer(), exts);
addInternalExternalizer(new StreamMarshalling.StreamMarshallingExternalizer(), exts);
addInternalExternalizer(new SuccessfulResponse.Externalizer(), exts);
addInternalExternalizer(new SyncConsistentHashFactory.Externalizer(), exts);
addInternalExternalizer(new SyncReplicatedConsistentHashFactory.Externalizer(), exts);
addInternalExternalizer(new TerminalOperationExternalizer(), exts);
addInternalExternalizer(new TopologyAwareConsistentHashFactory.Externalizer(), exts); // TODO: Untested in core
addInternalExternalizer(new TopologyAwareSyncConsistentHashFactory.Externalizer(), exts);
addInternalExternalizer(new TransactionInfo.Externalizer(), exts);
addInternalExternalizer(new TransientCacheEntry.Externalizer(), exts);
addInternalExternalizer(new TransientCacheValue.Externalizer(), exts);
addInternalExternalizer(new TransientMortalCacheEntry.Externalizer(), exts);
addInternalExternalizer(new TransientMortalCacheValue.Externalizer(), exts);
addInternalExternalizer(new UnsuccessfulResponse.Externalizer(), exts);
addInternalExternalizer(new UnsureResponse.Externalizer(), exts);
addInternalExternalizer(new UuidExternalizer(), exts);
addInternalExternalizer(new VersionedResult.Externalizer(), exts);
addInternalExternalizer(new VersionedResults.Externalizer(), exts);
addInternalExternalizer(new WrappedByteArray.Externalizer(), exts);
addInternalExternalizer(new XSiteState.XSiteStateExternalizer(), exts);
addInternalExternalizer(new TriangleAckExternalizer(), exts);
return exts;
}
private static void addInternalExternalizer(
AdvancedExternalizer ext, ClassToExternalizerMap exts) {
Set<Class<?>> subTypes = ext.getTypeClasses();
for (Class<?> subType : subTypes)
exts.put(subType, ext);
}
}