/*
* Copyright 2015 the original author or authors.
*
* 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 io.atomix.catalyst.serializer;
import io.atomix.catalyst.buffer.Buffer;
import io.atomix.catalyst.serializer.collection.ArrayListSerializer;
import io.atomix.catalyst.serializer.collection.HashMapSerializer;
import io.atomix.catalyst.serializer.collection.HashSetSerializer;
import io.atomix.catalyst.serializer.collection.MapEntrySerializer;
import io.atomix.catalyst.serializer.util.*;
import java.io.Externalizable;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
/**
* JDK utilities type resolver.
*
* @author <a href="http://github.com/kuujo">Jordan Halterman</a>
*/
public class JdkTypeResolver implements SerializableTypeResolver {
@SuppressWarnings("unchecked")
private static final Map<Class<?>, Class<? extends TypeSerializer<?>>> SERIALIZERS = new LinkedHashMap() {{
put(BigInteger.class, BigIntegerSerializer.class);
put(BigDecimal.class, BigDecimalSerializer.class);
put(Date.class, DateSerializer.class);
put(HashMap.class, HashMapSerializer.class);
put(HashSet.class, HashSetSerializer.class);
put(ArrayList.class, ArrayListSerializer.class);
}};
@SuppressWarnings("unchecked")
private static final Map<Class<?>, Class<? extends TypeSerializer<?>>> ABSTRACT_SERIALIZERS = new LinkedHashMap() {{
put(Buffer.class, BufferSerializer.class);
put(Calendar.class, CalendarSerializer.class);
put(TimeZone.class, TimeZoneSerializer.class);
put(Map.Entry.class, MapEntrySerializer.class);
put(Properties.class, PropertiesSerializer.class);
}};
@SuppressWarnings("unchecked")
private static final Map<Class<?>, Class<? extends TypeSerializer<?>>> DEFAULT_SERIALIZERS = new LinkedHashMap() {{
put(Serializable.class, JavaSerializableSerializer.class);
put(Externalizable.class, ExternalizableSerializer.class);
put(CatalystSerializable.class, CatalystSerializableSerializer.class);
}};
@Override
public void resolve(SerializerRegistry registry) {
int i = 176;
for (Map.Entry<Class<?>, Class<? extends TypeSerializer<?>>> entry : SERIALIZERS.entrySet()) {
registry.register(entry.getKey(), i++, entry.getValue());
}
i = 190;
for (Map.Entry<Class<?>, Class<? extends TypeSerializer<?>>> entry : ABSTRACT_SERIALIZERS.entrySet()) {
registry.registerAbstract(entry.getKey(), i++, entry.getValue());
}
for (Map.Entry<Class<?>, Class<? extends TypeSerializer<?>>> entry : DEFAULT_SERIALIZERS.entrySet()) {
registry.registerDefault(entry.getKey(), entry.getValue());
}
}
}