blob: 1ec9b42da375afd125321f7f583655cfe0aa65d2 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.pdx;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Set;
import java.util.Stack;
import com.gemstone.gemfire.pdx.PdxReader;
import com.gemstone.gemfire.pdx.PdxSerializable;
import com.gemstone.gemfire.pdx.PdxWriter;
import org.json.JSONException;
import org.json.JSONObject;
enum Day {
Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
}
public class TestObjectForPdxFormatter implements PdxSerializable {
private boolean p_bool;
private byte p_byte;
private short p_short;
private int p_int;
private long p_long;
private float p_float;
private double p_double;
//wrapper
private Boolean w_bool;
private Byte w_byte;
private Short w_short;
private Integer w_int;
private Long w_long;
private BigInteger w_bigInt;
private Float w_float;
private BigDecimal w_bigDec;
private Double w_double;
private String w_string;
//Primitive_Arrays
private boolean[] p_boolArray;
private byte[] p_byteArray;
private short[] p_shortArray;
private int[] p_intArray;
private long[] p_longArray;
private float[] p_floatArray;
private double[] p_doubleArray;
//Wrapper_Arrays
private Boolean[] w_boolArray;
private Byte[] w_byteArray;
private Short[] w_shortArray;
private Integer[] w_intArray;
private Long[] w_longArray;
private BigInteger[] w_bigIntArray;
private Float[] w_floatArray;
private BigDecimal[] w_bigDecArray;
private Double[] w_doubleArray;
private String [] w_strArray;
//Collection Type: List, Set, Queue, Deque
private List<String> c_list;
private Set<Object> c_set;
private Queue<String> c_queue;
private Deque<Integer> c_deque;
private Stack<String> c_stack;
//Map - Classify Person objects by city
Map<String, List<Employee>> m_empByCity;
//Enum
private Day day;
private Employee employee;
public TestObjectForPdxFormatter(){
}
public String addClassTypeToJson(String json) throws JSONException {
JSONObject jsonObj = new JSONObject(json);
jsonObj.put("@type", "com.gemstone.gemfire.pdx.TestObjectForPdxFormatter");
return jsonObj.toString();
}
public void defaultInitialization(){
employee = new Employee(1010L, "NilkanthKumar", "Patel");
//Initialize Map type member
Employee e1 = new Employee(1L, "Nilkanth", "Patel");
Employee e2 = new Employee(2L, "Amey", "Barve");
Employee e3 = new Employee(3L, "Shankar", "Hundekar");
Employee e4 = new Employee(4L, "Avinash", "Dongre");
Employee e5 = new Employee(5L, "supriya", "Patil");
Employee e6 = new Employee(6L, "Rajesh", "Kumar");
Employee e7 = new Employee(7L, "Vishal", "Rao");
Employee e8 = new Employee(8L, "Hitesh", "Khamesara");
Employee e9 = new Employee(9L, "Sudhir", "Menon");
m_empByCity = new HashMap<String, List<Employee>>();
List<Employee> list1 = new ArrayList<Employee>();
List<Employee> list2 = new ArrayList<Employee>();
List<Employee> list3 = new ArrayList<Employee>();
list1.add(e1);
list1.add(e2);
list1.add(e3);
list2.add(e4);
list2.add(e5);
list2.add(e6);
list3.add(e7);
list3.add(e8);
list3.add(e9);
m_empByCity.put("Ahmedabad", list1);
m_empByCity.put("mumbai", list2);
m_empByCity.put("Pune", list3);
//Initialize Collection types members
c_list = new ArrayList<String>();
c_list.add("Java");
c_list.add("scala");
c_list.add("closure");
c_set = new HashSet<Object>();
c_set.add("element 0");
c_set.add("element 1");
c_set.add("element 2");
c_queue = new PriorityQueue<String>(3);
c_queue.add("short");
c_queue.add("very long indeed");
c_queue.add("medium");
c_deque = new ArrayDeque<Integer>(4);
c_deque.add(15);
c_deque.add(30);
c_deque.add(20);
c_deque.add(18);
c_stack = new Stack();
c_stack.push( "bat" );
c_stack.push( "cat" );
c_stack.push( "dog" );
//Initialize primitive types members
p_bool = true;
p_byte = 101;
p_short = 32001;
p_int = 100001;
p_long = 1234567898765432L;
p_float = 123.456f;
p_double = 98765.12345d;
//Wrapper type member initialization
w_bool = new Boolean(false);
w_byte = new Byte((byte)11);
w_short = new Short((short)101);
w_int = new Integer(1001);
w_long = new Long(987654321234567L);
w_bigInt = new BigInteger("12345678910");
w_float = new Float(789.456f);
w_bigDec = new BigDecimal(8866333);
w_double = new Double(123456.9876d);
w_string = new String("Nilkanth Patel");
//Initialization for members of type primitive arrays
p_boolArray = new boolean[]{ true, false, false};
p_byteArray = new byte[]{10, 11, 12};
p_shortArray = new short[]{101, 102, 103};
p_intArray = new int[]{1001,1002, 1003, 1004, 1005, 1006};
p_longArray = new long[]{ 12345678910L, 12345678911L, 12345678912L };
p_floatArray = new float[]{ 123.45f, 456.78f, -91011.123f};
p_doubleArray = new double[]{1234.5678d, -91011.1213d, 1415.1617d };
//Initialization for members of type wrapper arrays
w_boolArray = new Boolean[3];
w_byteArray = new Byte[3];
w_shortArray = new Short[3];
w_intArray = new Integer[3];
w_longArray = new Long[3];
w_floatArray = new Float[3];
w_doubleArray = new Double[3];
w_strArray = new String[3];
for (int i=0; i< 3; i++){
w_boolArray[i] = p_boolArray[i];
w_byteArray[i] = p_byteArray[i];
w_shortArray[i] = p_shortArray[i];
w_intArray[i] = p_intArray[i];
w_longArray[i] = p_longArray[i];
w_floatArray[i] = p_floatArray[i];
w_doubleArray[i] = p_doubleArray[i];
}
w_bigIntArray = new BigInteger[] {BigInteger.ZERO, BigInteger.ONE, new BigInteger("12345678910")};
w_bigDecArray = new BigDecimal[] {BigDecimal.TEN, new BigDecimal("143.145"), new BigDecimal("10.01")};
w_strArray = new String[]{"Nilkanth", "Vishal", "Hitesh"};
//Enum type initialization
day = Day.Thursday;
}
public TestObjectForPdxFormatter(boolean p_bool, byte p_byte, short p_short,
int p_int, long p_long, float p_float, double p_double, Boolean w_bool,
Byte w_byte, Short w_short, Integer w_int, Long w_long,
BigInteger w_bigInt, Float w_float, BigDecimal w_bigDec,
Double w_double, String w_string) {
super();
this.p_bool = p_bool;
this.p_byte = p_byte;
this.p_short = p_short;
this.p_int = p_int;
this.p_long = p_long;
this.p_float = p_float;
this.p_double = p_double;
this.w_bool = w_bool;
this.w_byte = w_byte;
this.w_short = w_short;
this.w_int = w_int;
this.w_long = w_long;
this.w_bigInt = w_bigInt;
this.w_float = w_float;
this.w_bigDec = w_bigDec;
this.w_double = w_double;
this.w_string = w_string;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public List<String> getC_list() {
return c_list;
}
public void setC_list(List<String> c_list) {
this.c_list = c_list;
}
public Set<Object> getC_set() {
return c_set;
}
public void setC_set(Set<Object> c_set) {
this.c_set = c_set;
}
public Queue<String> getC_queue() {
return c_queue;
}
public void setC_queue(Queue<String> c_queue) {
this.c_queue = c_queue;
}
public Deque<Integer> getC_deque() {
return c_deque;
}
public void setC_deque(Deque<Integer> c_deque) {
this.c_deque = c_deque;
}
public Map<String, List<Employee>> getM_empByCity() {
return m_empByCity;
}
public void setM_empByCity(Map<String, List<Employee>> m_empByCity) {
this.m_empByCity = m_empByCity;
}
public Day getDay() {
return day;
}
public void setDay(Day day) {
this.day = day;
}
public boolean isP_bool() {
return p_bool;
}
public void setP_bool(boolean p_bool) {
this.p_bool = p_bool;
}
public byte getP_byte() {
return p_byte;
}
public void setP_byte(byte p_byte) {
this.p_byte = p_byte;
}
public short getP_short() {
return p_short;
}
public void setP_short(short p_short) {
this.p_short = p_short;
}
public int getP_int() {
return p_int;
}
public void setP_int(int p_int) {
this.p_int = p_int;
}
public long getP_long() {
return p_long;
}
public void setP_long(long p_long) {
this.p_long = p_long;
}
public float getP_float() {
return p_float;
}
public void setP_float(float p_float) {
this.p_float = p_float;
}
public double getP_double() {
return p_double;
}
public void setP_double(double p_double) {
this.p_double = p_double;
}
public Boolean getW_bool() {
return w_bool;
}
public void setW_bool(Boolean w_bool) {
this.w_bool = w_bool;
}
public Byte getW_byte() {
return w_byte;
}
public void setW_byte(Byte w_byte) {
this.w_byte = w_byte;
}
public Short getW_short() {
return w_short;
}
public void setW_short(Short w_short) {
this.w_short = w_short;
}
public Integer getW_int() {
return w_int;
}
public void setW_int(Integer w_int) {
this.w_int = w_int;
}
public Long getW_long() {
return w_long;
}
public void setW_long(Long w_long) {
this.w_long = w_long;
}
public BigInteger getW_bigInt() {
return w_bigInt;
}
public void setW_bigInt(BigInteger w_bigInt) {
this.w_bigInt = w_bigInt;
}
public Float getW_float() {
return w_float;
}
public void setW_float(Float w_float) {
this.w_float = w_float;
}
public BigDecimal getW_bigDec() {
return w_bigDec;
}
public void setW_bigDec(BigDecimal w_bigDec) {
this.w_bigDec = w_bigDec;
}
public Double getW_double() {
return w_double;
}
public void setW_double(Double w_double) {
this.w_double = w_double;
}
public String getW_string() {
return w_string;
}
public void setW_string(String w_string) {
this.w_string = w_string;
}
public boolean[] getP_boolArray() {
return p_boolArray;
}
public void setP_boolArray(boolean[] p_boolArray) {
this.p_boolArray = p_boolArray;
}
public byte[] getP_byteArray() {
return p_byteArray;
}
public void setP_byteArray(byte[] p_byteArray) {
this.p_byteArray = p_byteArray;
}
public short[] getP_shortArray() {
return p_shortArray;
}
public void setP_shortArray(short[] p_shortArray) {
this.p_shortArray = p_shortArray;
}
public int[] getP_intArray() {
return p_intArray;
}
public void setP_intArray(int[] p_intArray) {
this.p_intArray = p_intArray;
}
public long[] getP_longArray() {
return p_longArray;
}
public void setP_longArray(long[] p_longArray) {
this.p_longArray = p_longArray;
}
public float[] getP_floatArray() {
return p_floatArray;
}
public void setP_floatArray(float[] p_floatArray) {
this.p_floatArray = p_floatArray;
}
public double[] getP_doubleArray() {
return p_doubleArray;
}
public void setP_doubleArray(double[] p_doubleArray) {
this.p_doubleArray = p_doubleArray;
}
public Boolean[] getW_boolArray() {
return w_boolArray;
}
public void setW_boolArray(Boolean[] w_boolArray) {
this.w_boolArray = w_boolArray;
}
public Byte[] getW_byteArray() {
return w_byteArray;
}
public void setW_byteArray(Byte[] w_byteArray) {
this.w_byteArray = w_byteArray;
}
public Short[] getW_shortArray() {
return w_shortArray;
}
public void setW_shortArray(Short[] w_shortArray) {
this.w_shortArray = w_shortArray;
}
public Integer[] getW_intArray() {
return w_intArray;
}
public void setW_intArray(Integer[] w_intArray) {
this.w_intArray = w_intArray;
}
public Long[] getW_longArray() {
return w_longArray;
}
public void setW_longArray(Long[] w_longArray) {
this.w_longArray = w_longArray;
}
public BigInteger[] getW_bigIntArray() {
return w_bigIntArray;
}
public void setW_bigIntArray(BigInteger[] w_bigIntArray) {
this.w_bigIntArray = w_bigIntArray;
}
public Float[] getW_floatArray() {
return w_floatArray;
}
public void setW_floatArray(Float[] w_floatArray) {
this.w_floatArray = w_floatArray;
}
public BigDecimal[] getW_bigDecArray() {
return w_bigDecArray;
}
public void setW_bigDecArray(BigDecimal[] w_bigDecArray) {
this.w_bigDecArray = w_bigDecArray;
}
public Double[] getW_doubleArray() {
return w_doubleArray;
}
public void setW_doubleArray(Double[] w_doubleArray) {
this.w_doubleArray = w_doubleArray;
}
public String[] getW_strArray() {
return w_strArray;
}
public void setW_strArray(String[] w_strArray) {
this.w_strArray = w_strArray;
}
public Stack<String> getC_stack() {
return c_stack;
}
public void setC_stack(Stack<String> c_stack) {
this.c_stack = c_stack;
}
// Getters for returning field names
public String getP_boolFN() {
return "p_bool";
}
public String getP_byteFN() {
return "p_byte";
}
public String getP_shortFN() {
return "p_short";
}
public String getP_intFN() {
return "p_int";
}
public String getP_longFN() {
return "p_long";
}
public String getP_floatFn() {
return "p_float";
}
public String getP_doubleFN() {
return "p_double";
}
public String getW_boolFN() {
return "w_bool";
}
public String getW_byteFN() {
return "w_byte";
}
public String getW_shortFN() {
return "w_short";
}
public String getW_intFN() {
return "w_int";
}
public String getW_longFN() {
return "w_long";
}
public String getW_bigIntFN() {
return "w_bigInt";
}
public String getW_floatFN() {
return "w_float";
}
public String getW_bigDecFN() {
return "w_bigDec";
}
public String getW_doubleFN() {
return "w_double";
}
public String getW_stringFN() {
return "w_string";
}
public String getP_boolArrayFN() {
return "p_boolArray";
}
public String getP_byteArrayFN() {
return "p_byteArray";
}
public String getP_shortArrayFN() {
return "p_shortArray";
}
public String getP_intArrayFN() {
return "p_intArray";
}
public String getP_longArrayFN() {
return "p_longArray";
}
public String getP_floatArrayFN() {
return "p_floatArray";
}
public String getP_doubleArrayFN() {
return "p_doubleArray";
}
public String getW_boolArrayFN() {
return "w_boolArray";
}
public String getW_byteArrayFN() {
return "w_byteArray";
}
public String getW_shortArrayFN() {
return "w_shortArray";
}
public String getW_intArrayFN() {
return "w_intArray";
}
public String getW_longArrayFN() {
return "w_longArray";
}
public String getW_bigIntArrayFN() {
return "w_bigIntArray";
}
public String getW_floatArrayFN() {
return "w_floatArray";
}
public String getW_bigDecArrayFN() {
return "w_bigDecArray";
}
public String getW_doubleArrayFN() {
return "w_doubleArray";
}
public String getW_strArrayFN() {
return "w_strArray";
}
public String getC_listFN() {
return "c_list";
}
public String getC_setFN() {
return "c_set";
}
public String getC_queueFN() {
return "c_queue";
}
public String getC_dequeFN() {
return "c_deque";
}
public String getC_stackFN() {
return "c_stack";
}
public String getM_empByCityFN() {
return "m_empByCity";
}
public String getDayFN() {
return "day";
}
@Override
public void fromData(PdxReader in) {
this.p_bool = in.readBoolean("p_bool");
this.p_byte = in.readByte("p_byte");
this.p_short = in.readShort("p_short");
this.p_int = in.readInt("p_int");
this.p_long = in.readLong("p_long");
this.p_float = in.readFloat("p_float");
this.p_double = in.readDouble("p_double");
this.w_bool = in.readBoolean("w_bool");
this.w_byte = in.readByte("w_byte");
this.w_short = in.readShort("w_short");
this.w_int = in.readInt("w_int");
this.w_long = in.readLong("w_long");
this.w_float = in.readFloat("w_float");
this.w_double = in.readDouble("w_double");
this.w_string = in.readString("w_string");
this.w_bigInt = (BigInteger) in.readObject("w_bigInt");
this.w_bigDec = (BigDecimal) in.readObject("w_bigDec");
// P_Arrays
this.p_boolArray = in.readBooleanArray("p_boolArray");
this.p_byteArray = in.readByteArray("p_byteArray");
this.p_shortArray = in.readShortArray("p_shortArray");
this.p_intArray = in.readIntArray("p_intArray");
this.p_longArray = in.readLongArray("p_longArray");
this.p_floatArray = in.readFloatArray("p_floatArray");
this.p_doubleArray = in.readDoubleArray("p_doubleArray");
// W_Arrays
this.w_boolArray = (Boolean[]) in.readObjectArray("w_boolArray");
this.w_byteArray = (Byte[]) in.readObjectArray("w_byteArray");
this.w_shortArray = (Short[]) in.readObjectArray("w_shortArray");
this.w_intArray = (Integer[]) in.readObjectArray("w_intArray");
this.w_longArray = (Long[]) in.readObjectArray("w_longArray");
this.w_floatArray = (Float[]) in.readObjectArray("w_floatArray");
this.w_doubleArray = (Double[]) in.readObjectArray("w_doubleArray");
this.w_strArray = in.readStringArray("w_strArray");
this.w_bigIntArray = (BigInteger[]) in.readObjectArray("w_bigIntArray");
this.w_bigDecArray = (BigDecimal[]) in.readObjectArray("w_bigDecArray");
// Collections
this.c_list = (List<String>) in.readObject("c_list");
this.c_set = (Set<Object>) in.readObject("c_set");
this.c_queue = (Queue<String>) in.readObject("c_queue");
this.c_deque = (Deque<Integer>) in.readObject("c_deque");
this.c_stack = (Stack<String>) in.readObject("c_stack");
// Map
this.m_empByCity = (Map<String, List<Employee>>) in.readObject("m_empByCity");
// Enum
this.day = (Day) (in.readObject("day"));
//User Object
this.employee = (Employee) in.readObject("employee");
//String type= in.readString("@type");
}
@Override
public void toData(PdxWriter out) {
//if(m_unreadFields != null){ out.writeUnreadFields(m_unreadFields); }
out.writeBoolean("p_bool", this.p_bool);
out.writeByte("p_byte", this.p_byte);
out.writeShort("p_short", p_short);
out.writeInt("p_int", p_int);
out.writeLong("p_long", p_long);
out.writeFloat("p_float", p_float);
out.writeDouble("p_double", p_double);
out.writeBoolean("w_bool", w_bool);
out.writeByte("w_byte", w_byte);
out.writeShort("w_short", w_short);
out.writeInt("w_int", w_int);
out.writeLong("w_long", w_long);
out.writeFloat("w_float", w_float);
out.writeDouble("w_double", w_double);
out.writeString("w_string", w_string);
out.writeObject("w_bigInt", w_bigInt);
out.writeObject("w_bigDec", w_bigDec);
// P_Arrays
out.writeBooleanArray("p_boolArray", p_boolArray);
out.writeByteArray("p_byteArray", p_byteArray);
out.writeShortArray("p_shortArray", p_shortArray);
out.writeIntArray("p_intArray", p_intArray);
out.writeLongArray("p_longArray", p_longArray);
out.writeFloatArray("p_floatArray", p_floatArray);
out.writeDoubleArray("p_doubleArray", p_doubleArray);
// W_Arrays
out.writeObjectArray("w_boolArray", w_boolArray);
out.writeObjectArray("w_byteArray", w_byteArray);
out.writeObjectArray("w_shortArray", w_shortArray);
out.writeObjectArray("w_intArray", w_intArray);
out.writeObjectArray("w_longArray", w_longArray);
out.writeObjectArray("w_floatArray", w_floatArray);
out.writeObjectArray("w_doubleArray", w_doubleArray);
out.writeStringArray("w_strArray", w_strArray);
out.writeObjectArray("w_bigIntArray", w_bigIntArray);
out.writeObjectArray("w_bigDecArray", w_bigDecArray);
// Collections
out.writeObject("c_list", c_list);
out.writeObject("c_set", c_set);
out.writeObject("c_queue", c_queue);
out.writeObject("c_deque", c_deque);
out.writeObject("c_stack", c_stack);
// Map
out.writeObject("m_empByCity", m_empByCity);
// Enum
out.writeObject("day", day);
out.writeObject("employee", this.employee);
//out.writeString("@type", "com.gemstone.gemfire.pdx.TestObjectForPdxFormatter");
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
TestObjectForPdxFormatter other = (TestObjectForPdxFormatter) obj;
// primitive type
if (p_bool != other.p_bool)
return false;
if (p_byte != other.p_byte)
return false;
if (p_short != other.p_short)
return false;
if (p_int != other.p_int)
return false;
if (p_long != other.p_long)
return false;
if (p_float != other.p_float)
return false;
if (p_double != other.p_double)
return false;
// wrapper type
if (w_bool.booleanValue() != other.w_bool.booleanValue())
return false;
if (w_byte.byteValue() != other.w_byte.byteValue())
return false;
if (w_short.shortValue() != other.w_short.shortValue())
return false;
if (w_int.intValue() != other.w_int.intValue())
return false;
if (w_long.longValue() != other.w_long.longValue())
return false;
if (w_float.floatValue() != other.w_float.floatValue())
return false;
if (w_double.doubleValue() != other.w_double.doubleValue())
return false;
if (!w_string.equals(other.w_string))
return false;
if (w_bigInt.longValue() != other.w_bigInt.longValue())
return false;
if (w_bigDec.longValue() != other.w_bigDec.longValue())
return false;
// Primitive arrays
if (!Arrays.equals(p_boolArray, other.p_boolArray))
return false;
if (!Arrays.equals(p_byteArray, other.p_byteArray))
return false;
if (!Arrays.equals(p_shortArray, other.p_shortArray))
return false;
if (!Arrays.equals(p_intArray, other.p_intArray))
return false;
if (!Arrays.equals(p_longArray, other.p_longArray))
return false;
if (!Arrays.equals(p_floatArray, other.p_floatArray))
return false;
if (!Arrays.equals(p_doubleArray, other.p_doubleArray))
return false;
// wrapper Arrays
if (!Arrays.equals(w_boolArray, other.w_boolArray))
return false;
if (!Arrays.equals(w_byteArray, other.w_byteArray))
return false;
if (!Arrays.equals(w_shortArray, other.w_shortArray))
return false;
if (!Arrays.equals(w_intArray, other.w_intArray))
return false;
if (!Arrays.equals(w_longArray, other.w_longArray))
return false;
if (!Arrays.equals(w_floatArray, other.w_floatArray))
return false;
if (!Arrays.equals(w_doubleArray, other.w_doubleArray))
return false;
if (!Arrays.equals(w_strArray, other.w_strArray))
return false;
if (!Arrays.equals(w_bigIntArray, other.w_bigIntArray))
return false;
if (!Arrays.equals(w_bigDecArray, other.w_bigDecArray))
return false;
// comparing Collections based on content, order not considered
if (!(c_list.size() == other.c_list.size()
&& c_list.containsAll(other.c_list)
&& other.c_list.containsAll(c_list)))
return false;
if (!(c_set.size() == other.c_set.size()
&& c_set.containsAll(other.c_set)
&& other.c_set.containsAll(c_set)))
return false;
if (!(c_queue.size() == other.c_queue.size()
&& c_queue.containsAll(other.c_queue)
&& other.c_queue.containsAll(c_queue)))
return false;
if (!(c_deque.size() == other.c_deque.size()
&& c_deque.containsAll(other.c_deque)
&& other.c_deque.containsAll(c_deque)))
return false;
// map comparision.
if (!(compareMaps(m_empByCity, other.m_empByCity)))
return false;
// Enum validation
if (!(day.equals(other.day)))
return false;
return true;
}
boolean compareMaps(Map m1, Map m2) {
if (m1.size() != m2.size())
return false;
for (Object key : m1.keySet())
if (!m1.get(key).equals(m2.get(key)))
return false;
return true;
}
}