/*
* Copyright 2009 Aleksandar Seovic
*
* 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 test;
import com.seovic.core.factory.LinkedHashSetFactory;
import com.seovic.pof.DateMode;
import com.seovic.pof.annotations.Portable;
import com.seovic.pof.annotations.PortableArray;
import com.seovic.pof.annotations.PortableDate;
import com.seovic.pof.annotations.PortableList;
import com.seovic.pof.annotations.PortableMap;
import com.seovic.pof.annotations.PortableSet;
import com.seovic.pof.annotations.PortableType;
import com.tangosol.util.Binary;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/**
* @author Aleksandar Seovic 2012.06.04
*/
@SuppressWarnings("unchecked")
@PortableType(id = 1)
public class AllTypes
implements DateTypes {
// primitives
@Portable private boolean m_boolean = true;
@Portable private byte m_byte = Byte.MAX_VALUE;
@Portable private char m_char = Character.MAX_VALUE;
@Portable private short m_short = Short.MAX_VALUE;
@Portable private int m_int = Integer.MAX_VALUE;
@Portable private long m_long = Long.MAX_VALUE;
@Portable private float m_float = Float.MAX_VALUE;
@Portable private double m_double = Double.MAX_VALUE;
// wrapper types
@Portable private Boolean m_Boolean = true;
@Portable private Byte m_Byte = Byte.MAX_VALUE;
@Portable private Character m_Char = Character.MAX_VALUE;
@Portable private Short m_Short = Short.MAX_VALUE;
@Portable private Integer m_Int = Integer.MAX_VALUE;
@Portable private Long m_Long = Long.MAX_VALUE;
@Portable private Float m_Float = Float.MAX_VALUE;
@Portable private Double m_Double = Double.MAX_VALUE;
// arrays of primitives
@Portable private boolean[] m_booleanArray = new boolean[] {true, false};
@Portable private byte[] m_byteArray = new byte[] {Byte.MIN_VALUE, Byte.MAX_VALUE};
@Portable private char[] m_charArray = new char[] {Character.MIN_VALUE, Character.MAX_VALUE};
@Portable private short[] m_shortArray = new short[] {Short.MIN_VALUE, Short.MAX_VALUE};
@Portable private int[] m_intArray = new int[] {Integer.MIN_VALUE, Integer.MAX_VALUE};
@Portable private long[] m_longArray = new long[] {Long.MIN_VALUE, Long.MAX_VALUE};
@Portable private float[] m_floatArray = new float[] {Float.MIN_VALUE, Float.MAX_VALUE};
@Portable private double[] m_doubleArray = new double[] {Double.MIN_VALUE, Double.MAX_VALUE};
// natively supported object types
@Portable private String m_string = "test string";
@Portable private BigInteger m_bigInteger = BigInteger.ONE;
@Portable private BigDecimal m_bigDecimal = BigDecimal.ONE;
@Portable private Binary m_binary = new Binary(new byte[] {1,2,3,4,5,6,7,8,9});
@Portable private Object m_object = "as good as any...";
@Portable private Color m_color = Color.GRAY;
// dates
@PortableDate
private Date m_dateTime = new Date();
@PortableDate(includeTimezone = true)
private Date m_dateTimeWithZone = new Date();
@PortableDate(mode = DateMode.DATE)
private Date m_date = new Date(74, 7, 24);
@PortableDate(mode = DateMode.TIME)
private Date m_time = new Date(m_dateTime.getYear(), m_dateTime.getMonth(), m_dateTime.getDate(), 3, 10, 56);
@PortableDate(mode = DateMode.TIME, includeTimezone = true)
private Date m_timeWithZone = new Date(m_dateTime.getYear(), m_dateTime.getMonth(), m_dateTime.getDate(), 3, 10, 56);
// object arrays
@PortableArray(elementClass = String.class)
private String[] m_stringArray = new String[] {"one", "two", "three"};
@PortableArray
private Object[] m_objectArray = new Object[] {"one", 2, 3L};
// collections
@PortableSet
private Set m_setOfObjects = new HashSet(Arrays.asList(m_objectArray));
@PortableSet(elementClass = String.class, factory = LinkedHashSetFactory.class)
private LinkedHashSet<String> m_setOfStrings = new LinkedHashSet<String>(Arrays.asList(m_stringArray));
@PortableList
private List m_listOfObjects = new ArrayList(Arrays.asList(m_objectArray));
@PortableList(elementClass = String.class)
private List<String> m_listOfStrings = new ArrayList<String>(Arrays.asList(m_stringArray));
@PortableMap
private Map m_map = createMap();
@PortableMap(keyClass = Integer.class)
private Map<Integer, Number> m_uniformKeysMap = createUniformKeysMap();
@PortableMap(keyClass = Integer.class, valueClass = String.class, clazz = TreeMap.class)
private Map<Integer, String> m_uniformMap = createUniformMap();
private static Map createMap() {
Map map = new HashMap();
map.put(1, "one");
map.put("two", 2L);
map.put(3, 3.0);
return map;
}
private static Map<Integer, Number> createUniformKeysMap() {
Map<Integer, Number> map = new HashMap<Integer, Number>();
map.put(1, 1);
map.put(2, 2L);
map.put(3, 3.0);
return map;
}
private static Map<Integer, String> createUniformMap() {
Map<Integer, String> map = new TreeMap<Integer, String>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
return map;
}
@Override
public Date getDate() {
return m_date;
}
@Override
public Date getTime() {
return m_time;
}
@Override
public Date getTimeWithZone() {
return m_timeWithZone;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof AllTypes)) return false;
AllTypes allTypes = (AllTypes) o;
if (m_boolean != allTypes.m_boolean) return false;
if (m_byte != allTypes.m_byte) return false;
if (m_char != allTypes.m_char) return false;
if (Double.compare(allTypes.m_double, m_double) != 0) return false;
if (Float.compare(allTypes.m_float, m_float) != 0) return false;
if (m_int != allTypes.m_int) return false;
if (m_long != allTypes.m_long) return false;
if (m_short != allTypes.m_short) return false;
if (m_Boolean != null ? !m_Boolean.equals(allTypes.m_Boolean) : allTypes.m_Boolean != null) return false;
if (m_Byte != null ? !m_Byte.equals(allTypes.m_Byte) : allTypes.m_Byte != null) return false;
if (m_Char != null ? !m_Char.equals(allTypes.m_Char) : allTypes.m_Char != null) return false;
if (m_Double != null ? !m_Double.equals(allTypes.m_Double) : allTypes.m_Double != null) return false;
if (m_Float != null ? !m_Float.equals(allTypes.m_Float) : allTypes.m_Float != null) return false;
if (m_Int != null ? !m_Int.equals(allTypes.m_Int) : allTypes.m_Int != null) return false;
if (m_Long != null ? !m_Long.equals(allTypes.m_Long) : allTypes.m_Long != null) return false;
if (m_Short != null ? !m_Short.equals(allTypes.m_Short) : allTypes.m_Short != null) return false;
if (m_bigDecimal != null ? !m_bigDecimal.equals(allTypes.m_bigDecimal) : allTypes.m_bigDecimal != null)
return false;
if (m_bigInteger != null ? !m_bigInteger.equals(allTypes.m_bigInteger) : allTypes.m_bigInteger != null)
return false;
if (m_binary != null ? !m_binary.equals(allTypes.m_binary) : allTypes.m_binary != null) return false;
if (!Arrays.equals(m_booleanArray, allTypes.m_booleanArray)) return false;
if (!Arrays.equals(m_byteArray, allTypes.m_byteArray)) return false;
if (!Arrays.equals(m_charArray, allTypes.m_charArray)) return false;
if (m_color != allTypes.m_color) return false;
if (m_dateTime != null ? !m_dateTime.equals(allTypes.m_dateTime) : allTypes.m_dateTime != null) return false;
if (m_dateTimeWithZone != null ? !m_dateTimeWithZone.equals(allTypes.m_dateTimeWithZone) : allTypes.m_dateTimeWithZone != null)
return false;
if (!Arrays.equals(m_doubleArray, allTypes.m_doubleArray)) return false;
if (!Arrays.equals(m_floatArray, allTypes.m_floatArray)) return false;
if (!Arrays.equals(m_intArray, allTypes.m_intArray)) return false;
if (m_listOfObjects != null ? !m_listOfObjects.equals(allTypes.m_listOfObjects) : allTypes.m_listOfObjects != null)
return false;
if (m_listOfStrings != null ? !m_listOfStrings.equals(allTypes.m_listOfStrings) : allTypes.m_listOfStrings != null)
return false;
if (!Arrays.equals(m_longArray, allTypes.m_longArray)) return false;
if (m_map != null ? !m_map.equals(allTypes.m_map) : allTypes.m_map != null) return false;
if (m_object != null ? !m_object.equals(allTypes.m_object) : allTypes.m_object != null) return false;
// Probably incorrect - comparing Object[] arrays with Arrays.equals
if (!Arrays.equals(m_objectArray, allTypes.m_objectArray)) return false;
if (m_setOfObjects != null ? !m_setOfObjects.equals(allTypes.m_setOfObjects) : allTypes.m_setOfObjects != null)
return false;
if (m_setOfStrings != null ? !m_setOfStrings.equals(allTypes.m_setOfStrings) : allTypes.m_setOfStrings != null)
return false;
if (!Arrays.equals(m_shortArray, allTypes.m_shortArray)) return false;
if (m_string != null ? !m_string.equals(allTypes.m_string) : allTypes.m_string != null) return false;
if (!Arrays.equals(m_stringArray, allTypes.m_stringArray)) return false;
if (m_uniformKeysMap != null ? !m_uniformKeysMap.equals(allTypes.m_uniformKeysMap) : allTypes.m_uniformKeysMap != null)
return false;
if (m_uniformMap != null ? !m_uniformMap.equals(allTypes.m_uniformMap) : allTypes.m_uniformMap != null)
return false;
return true;
}
@Override
public int hashCode() {
int result;
long temp;
result = (m_boolean ? 1 : 0);
result = 31 * result + (int) m_byte;
result = 31 * result + (int) m_char;
result = 31 * result + (int) m_short;
result = 31 * result + m_int;
result = 31 * result + (int) (m_long ^ (m_long >>> 32));
result = 31 * result + (m_float != +0.0f ? Float.floatToIntBits(m_float) : 0);
temp = m_double != +0.0d ? Double.doubleToLongBits(m_double) : 0L;
result = 31 * result + (int) (temp ^ (temp >>> 32));
result = 31 * result + (m_Boolean != null ? m_Boolean.hashCode() : 0);
result = 31 * result + (m_Byte != null ? m_Byte.hashCode() : 0);
result = 31 * result + (m_Char != null ? m_Char.hashCode() : 0);
result = 31 * result + (m_Short != null ? m_Short.hashCode() : 0);
result = 31 * result + (m_Int != null ? m_Int.hashCode() : 0);
result = 31 * result + (m_Long != null ? m_Long.hashCode() : 0);
result = 31 * result + (m_Float != null ? m_Float.hashCode() : 0);
result = 31 * result + (m_Double != null ? m_Double.hashCode() : 0);
result = 31 * result + (m_booleanArray != null ? Arrays.hashCode(m_booleanArray) : 0);
result = 31 * result + (m_byteArray != null ? Arrays.hashCode(m_byteArray) : 0);
result = 31 * result + (m_charArray != null ? Arrays.hashCode(m_charArray) : 0);
result = 31 * result + (m_shortArray != null ? Arrays.hashCode(m_shortArray) : 0);
result = 31 * result + (m_intArray != null ? Arrays.hashCode(m_intArray) : 0);
result = 31 * result + (m_longArray != null ? Arrays.hashCode(m_longArray) : 0);
result = 31 * result + (m_floatArray != null ? Arrays.hashCode(m_floatArray) : 0);
result = 31 * result + (m_doubleArray != null ? Arrays.hashCode(m_doubleArray) : 0);
result = 31 * result + (m_string != null ? m_string.hashCode() : 0);
result = 31 * result + (m_bigInteger != null ? m_bigInteger.hashCode() : 0);
result = 31 * result + (m_bigDecimal != null ? m_bigDecimal.hashCode() : 0);
result = 31 * result + (m_binary != null ? m_binary.hashCode() : 0);
result = 31 * result + (m_object != null ? m_object.hashCode() : 0);
result = 31 * result + (m_color != null ? m_color.hashCode() : 0);
result = 31 * result + (m_dateTime != null ? m_dateTime.hashCode() : 0);
result = 31 * result + (m_dateTimeWithZone != null ? m_dateTimeWithZone.hashCode() : 0);
result = 31 * result + (m_stringArray != null ? Arrays.hashCode(m_stringArray) : 0);
result = 31 * result + (m_objectArray != null ? Arrays.hashCode(m_objectArray) : 0);
result = 31 * result + (m_setOfObjects != null ? m_setOfObjects.hashCode() : 0);
result = 31 * result + (m_setOfStrings != null ? m_setOfStrings.hashCode() : 0);
result = 31 * result + (m_listOfObjects != null ? m_listOfObjects.hashCode() : 0);
result = 31 * result + (m_listOfStrings != null ? m_listOfStrings.hashCode() : 0);
result = 31 * result + (m_map != null ? m_map.hashCode() : 0);
result = 31 * result + (m_uniformKeysMap != null ? m_uniformKeysMap.hashCode() : 0);
result = 31 * result + (m_uniformMap != null ? m_uniformMap.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "AllTypes{" +
"m_dateTime=" + m_dateTime +
", m_dateTimeWithZone=" + m_dateTimeWithZone +
", m_date=" + m_date +
", m_time=" + m_time +
", m_timeWithZone=" + m_timeWithZone +
'}';
}
}