QueryResultFormatter extends AbstractJSONFormatter { public synchronized QueryResultFormatter add(String key, Object value) { List<Object> list = this.map.get(key); if (list != null) { list.add(value); } else { list = new ArrayList<>(); if (value != null) { list.add(value); } this.map.put(key, list); } return this; } QueryResultFormatter(int maxCollectionElements); private  QueryResultFormatter(int maxCollectionElements, int serializationDepth); synchronized QueryResultFormatter add(String key, Object value); @Override synchronized String toString(); static final String DATE_FORMAT_PATTERN; }
@Test public void canBeMocked() { QueryResultFormatter mockQueryResultFormatter = mock(QueryResultFormatter.class); Object value = new Object(); mockQueryResultFormatter.add("key", value); verify(mockQueryResultFormatter, times(1)).add("key", value); }
@Test public void testPrimitives() throws Exception { String expectedByteString = "{\"result\":[[\"java.lang.Byte\",1]]}"; QueryResultFormatter byteResult = new QueryResultFormatter(100).add(RESULT, (byte) 1); QueryResultFormatter boxedByteResult = new QueryResultFormatter(100).add(RESULT, new Byte("1")); checkResult(byteResult, expectedByteString); checkResult(boxedByteResult, expectedByteString); String expectedShortString = "{\"result\":[[\"java.lang.Short\",1]]}"; QueryResultFormatter shortResult = new QueryResultFormatter(100).add(RESULT, (short) 1); QueryResultFormatter boxedShortResult = new QueryResultFormatter(100).add(RESULT, new Short("1")); checkResult(shortResult, expectedShortString); checkResult(boxedShortResult, expectedShortString); String expectedIntegerString = "{\"result\":[[\"java.lang.Integer\",1]]}"; QueryResultFormatter integerResult = new QueryResultFormatter(100).add(RESULT, 1); QueryResultFormatter boxedIntegerResult = new QueryResultFormatter(100).add(RESULT, new Integer("1")); checkResult(integerResult, expectedIntegerString); checkResult(boxedIntegerResult, expectedIntegerString); String expectedLongString = "{\"result\":[[\"java.lang.Long\",25]]}"; QueryResultFormatter longResult = new QueryResultFormatter(100).add(RESULT, 25L); QueryResultFormatter boxedLongResult = new QueryResultFormatter(100).add(RESULT, new Long("25")); checkResult(longResult, expectedLongString); checkResult(boxedLongResult, expectedLongString); String expectedFloatString = "{\"result\":[[\"java.lang.Float\",26.0]]}"; QueryResultFormatter floatResult = new QueryResultFormatter(100).add(RESULT, 26f); QueryResultFormatter boxedFloatResult = new QueryResultFormatter(100).add(RESULT, new Float("26.0")); checkResult(floatResult, expectedFloatString); checkResult(boxedFloatResult, expectedFloatString); String expectedDoubleString = "{\"result\":[[\"java.lang.Double\",30.0]]}"; QueryResultFormatter doubleResult = new QueryResultFormatter(100).add(RESULT, 30d); QueryResultFormatter boxedDoubleResult = new QueryResultFormatter(100).add(RESULT, new Double("30.0")); checkResult(doubleResult, expectedDoubleString); checkResult(boxedDoubleResult, expectedDoubleString); String expectedBooleanString = "{\"result\":[[\"java.lang.Boolean\",true]]}"; QueryResultFormatter booleanResult = new QueryResultFormatter(100).add(RESULT, true); QueryResultFormatter boxedBooleanResult = new QueryResultFormatter(100).add(RESULT, Boolean.TRUE); checkResult(booleanResult, expectedBooleanString); checkResult(boxedBooleanResult, expectedBooleanString); String expectedCharString = "{\"result\":[[\"java.lang.Character\",\"a\"]]}"; QueryResultFormatter charResult = new QueryResultFormatter(100).add(RESULT, 'a'); QueryResultFormatter boxedCharResult = new QueryResultFormatter(100).add(RESULT, new Character('a')); checkResult(charResult, expectedCharString); checkResult(boxedCharResult, expectedCharString); QueryResultFormatter stringResult = new QueryResultFormatter(100).add(RESULT, "String"); checkResult(stringResult, "{\"result\":[[\"java.lang.String\",\"String\"]]}"); Date date = new Date(0); String expectedString = new SimpleDateFormat(QueryResultFormatter.DATE_FORMAT_PATTERN).format(date); QueryResultFormatter javaDateResult = new QueryResultFormatter(100).add(RESULT, date); checkResult(javaDateResult, "{\"result\":[[\"java.util.Date\",\"" + expectedString + "\"]]}"); java.sql.Date sqlDate = new java.sql.Date(0); QueryResultFormatter sqlDateResult = new QueryResultFormatter(100).add(RESULT, sqlDate); checkResult(sqlDateResult, "{\"result\":[[\"java.sql.Date\",\"" + expectedString + "\"]]}"); }
@Test public void testCustomBeans() throws Exception { Object object = new Object(); QueryResultFormatter queryResultFormatter = new QueryResultFormatter(100).add(RESULT, object); checkResult(queryResultFormatter, "{\"result\":[[\"java.lang.Object\",{}]]}"); Order order = new Order(); order.setId("order1"); Collection<Item> items = new ArrayList<>(); items.add(new Item(order, "item1", "itemDescription1")); order.setItems(items); QueryResultFormatter orderResult = new QueryResultFormatter(100).add(RESULT, order); checkResult(orderResult, "{\"result\":[[\"org.apache.geode.management.model.Order\",{\"id\":[\"java.lang.String\",\"order1\"],\"items\":[\"java.util.ArrayList\",{\"0\":[\"org.apache.geode.management.model.Item\",{\"itemDescription\":[\"java.lang.String\",\"itemDescription1\"],\"itemId\":[\"java.lang.String\",\"item1\"],\"order\":\"duplicate org.apache.geode.management.model.Order\"}]}]}]]}"); }
@Test public void testBigDecimal() throws Exception { BigDecimal dc = new BigDecimal(20); QueryResultFormatter queryResultFormatter = new QueryResultFormatter(100).add(RESULT, dc); checkResult(queryResultFormatter, "{\"result\":[[\"java.math.BigDecimal\",20]]}"); }
@Test public void testArrayWithPrimitives() throws Exception { Byte[] byteArray = new Byte[] {0, 1, 2}; QueryResultFormatter byteArrayResult = new QueryResultFormatter(100).add(RESULT, byteArray); checkResult(byteArrayResult, "{\"result\":[[\"java.lang.Byte[]\",[0,1,2]]]}"); Short[] shortArray = new Short[] {0, 1, 2}; QueryResultFormatter shortArrayResult = new QueryResultFormatter(100).add(RESULT, shortArray); checkResult(shortArrayResult, "{\"result\":[[\"java.lang.Short[]\",[0,1,2]]]}"); Integer[] integerArray = new Integer[] {0, 1, 2}; QueryResultFormatter integerArrayResult = new QueryResultFormatter(100).add(RESULT, integerArray); checkResult(integerArrayResult, "{\"result\":[[\"java.lang.Integer[]\",[0,1,2]]]}"); Long[] longArray = new Long[] {0L, 1L, 2L}; QueryResultFormatter longArrayResult = new QueryResultFormatter(100).add(RESULT, longArray); checkResult(longArrayResult, "{\"result\":[[\"java.lang.Long[]\",[0,1,2]]]}"); Float[] floatArray = new Float[] {0f, 1f, 2f}; QueryResultFormatter floatArrayResult = new QueryResultFormatter(100).add(RESULT, floatArray); checkResult(floatArrayResult, "{\"result\":[[\"java.lang.Float[]\",[0.0,1.0,2.0]]]}"); Double[] doubleArray = new Double[] {0d, 1d, 2d}; QueryResultFormatter doubleArrayResult = new QueryResultFormatter(100).add(RESULT, doubleArray); checkResult(doubleArrayResult, "{\"result\":[[\"java.lang.Double[]\",[0.0,1.0,2.0]]]}"); Boolean[] booleanArray = new Boolean[] {true, false}; QueryResultFormatter booleanArrayResult = new QueryResultFormatter(100).add(RESULT, booleanArray); checkResult(booleanArrayResult, "{\"result\":[[\"java.lang.Boolean[]\",[true,false]]]}"); Character[] charArray = new Character[] {'a', 'b'}; QueryResultFormatter charArrayResult = new QueryResultFormatter(100).add(RESULT, charArray); checkResult(charArrayResult, "{\"result\":[[\"java.lang.Character[]\",[\"a\",\"b\"]]]}"); String[] stringArray = new String[] {"string_1", "string_2"}; QueryResultFormatter stringArrayResult = new QueryResultFormatter(100).add(RESULT, stringArray); checkResult(stringArrayResult, "{\"result\":[[\"java.lang.String[]\",[\"string_1\",\"string_2\"]]]}"); }
@Test public void testArrayWithCustomBeans() throws Exception { SubOrder[] subOrderArray = new SubOrder[2]; subOrderArray[0] = new SubOrder(); QueryResultFormatter subOrderArrayResult = new QueryResultFormatter(100).add(RESULT, subOrderArray); checkResult(subOrderArrayResult, "{\"result\":[[\"org.apache.geode.management.model.SubOrder[]\",[{\"id\":[\"java.lang.String\",\"null1\"],\"items\":[\"java.util.ArrayList\",{}]},null]]]}"); CollectionHolder arrayHolder = new CollectionHolder(); QueryResultFormatter arrayHolderResult = new QueryResultFormatter(100).add(RESULT, arrayHolder); checkResult(arrayHolderResult, "{\"result\":[[\"org.apache.geode.cache.query.data.CollectionHolder\",{\"arr\":[\"java.lang.String[]\",[\"0\",\"1\",\"2\",\"3\",\"4\",\"SUN\",\"IBM\",\"YHOO\",\"GOOG\",\"MSFT\"]]}]]}"); }
@Test public void testArrayList() throws Exception { List<String> list = new ArrayList<>(); list.add("ONE"); list.add("TWO"); list.add("THREE"); QueryResultFormatter queryResultFormatter = new QueryResultFormatter(100).add(RESULT, list); checkResult(queryResultFormatter, "{\"result\":[[\"java.util.ArrayList\",{\"0\":[\"java.lang.String\",\"ONE\"],\"1\":[\"java.lang.String\",\"TWO\"],\"2\":[\"java.lang.String\",\"THREE\"]}]]}"); }
@Test public void testMap() throws Exception { Map<String, String> map = new HashMap<>(); map.put("1", "ONE"); map.put("2", "TWO"); map.put("3", "THREE"); map.put("4", "FOUR"); QueryResultFormatter queryResultFormatter = new QueryResultFormatter(100).add(RESULT, map); checkResult(queryResultFormatter, "{\"result\":[[\"java.util.HashMap\",{\"1\":[\"java.lang.String\",\"ONE\"],\"2\":[\"java.lang.String\",\"TWO\"],\"3\":[\"java.lang.String\",\"THREE\"],\"4\":[\"java.lang.String\",\"FOUR\"]}]]}"); }
@Test public void testBigList() throws Exception { List<String> list = new ArrayList<>(); for (int i = 0; i < 1000; i++) { list.add("BIG_COLL_" + i); } QueryResultFormatter queryResultFormatter = new QueryResultFormatter(100).add(RESULT, list); checkResult(queryResultFormatter, "{\"result\":[[\"java.util.ArrayList\",{\"0\":[\"java.lang.String\",\"BIG_COLL_0\"],\"1\":[\"java.lang.String\",\"BIG_COLL_1\"],\"2\":[\"java.lang.String\",\"BIG_COLL_2\"],\"3\":[\"java.lang.String\",\"BIG_COLL_3\"],\"4\":[\"java.lang.String\",\"BIG_COLL_4\"],\"5\":[\"java.lang.String\",\"BIG_COLL_5\"],\"6\":[\"java.lang.String\",\"BIG_COLL_6\"],\"7\":[\"java.lang.String\",\"BIG_COLL_7\"],\"8\":[\"java.lang.String\",\"BIG_COLL_8\"],\"9\":[\"java.lang.String\",\"BIG_COLL_9\"],\"10\":[\"java.lang.String\",\"BIG_COLL_10\"],\"11\":[\"java.lang.String\",\"BIG_COLL_11\"],\"12\":[\"java.lang.String\",\"BIG_COLL_12\"],\"13\":[\"java.lang.String\",\"BIG_COLL_13\"],\"14\":[\"java.lang.String\",\"BIG_COLL_14\"],\"15\":[\"java.lang.String\",\"BIG_COLL_15\"],\"16\":[\"java.lang.String\",\"BIG_COLL_16\"],\"17\":[\"java.lang.String\",\"BIG_COLL_17\"],\"18\":[\"java.lang.String\",\"BIG_COLL_18\"],\"19\":[\"java.lang.String\",\"BIG_COLL_19\"],\"20\":[\"java.lang.String\",\"BIG_COLL_20\"],\"21\":[\"java.lang.String\",\"BIG_COLL_21\"],\"22\":[\"java.lang.String\",\"BIG_COLL_22\"],\"23\":[\"java.lang.String\",\"BIG_COLL_23\"],\"24\":[\"java.lang.String\",\"BIG_COLL_24\"],\"25\":[\"java.lang.String\",\"BIG_COLL_25\"],\"26\":[\"java.lang.String\",\"BIG_COLL_26\"],\"27\":[\"java.lang.String\",\"BIG_COLL_27\"],\"28\":[\"java.lang.String\",\"BIG_COLL_28\"],\"29\":[\"java.lang.String\",\"BIG_COLL_29\"],\"30\":[\"java.lang.String\",\"BIG_COLL_30\"],\"31\":[\"java.lang.String\",\"BIG_COLL_31\"],\"32\":[\"java.lang.String\",\"BIG_COLL_32\"],\"33\":[\"java.lang.String\",\"BIG_COLL_33\"],\"34\":[\"java.lang.String\",\"BIG_COLL_34\"],\"35\":[\"java.lang.String\",\"BIG_COLL_35\"],\"36\":[\"java.lang.String\",\"BIG_COLL_36\"],\"37\":[\"java.lang.String\",\"BIG_COLL_37\"],\"38\":[\"java.lang.String\",\"BIG_COLL_38\"],\"39\":[\"java.lang.String\",\"BIG_COLL_39\"],\"40\":[\"java.lang.String\",\"BIG_COLL_40\"],\"41\":[\"java.lang.String\",\"BIG_COLL_41\"],\"42\":[\"java.lang.String\",\"BIG_COLL_42\"],\"43\":[\"java.lang.String\",\"BIG_COLL_43\"],\"44\":[\"java.lang.String\",\"BIG_COLL_44\"],\"45\":[\"java.lang.String\",\"BIG_COLL_45\"],\"46\":[\"java.lang.String\",\"BIG_COLL_46\"],\"47\":[\"java.lang.String\",\"BIG_COLL_47\"],\"48\":[\"java.lang.String\",\"BIG_COLL_48\"],\"49\":[\"java.lang.String\",\"BIG_COLL_49\"],\"50\":[\"java.lang.String\",\"BIG_COLL_50\"],\"51\":[\"java.lang.String\",\"BIG_COLL_51\"],\"52\":[\"java.lang.String\",\"BIG_COLL_52\"],\"53\":[\"java.lang.String\",\"BIG_COLL_53\"],\"54\":[\"java.lang.String\",\"BIG_COLL_54\"],\"55\":[\"java.lang.String\",\"BIG_COLL_55\"],\"56\":[\"java.lang.String\",\"BIG_COLL_56\"],\"57\":[\"java.lang.String\",\"BIG_COLL_57\"],\"58\":[\"java.lang.String\",\"BIG_COLL_58\"],\"59\":[\"java.lang.String\",\"BIG_COLL_59\"],\"60\":[\"java.lang.String\",\"BIG_COLL_60\"],\"61\":[\"java.lang.String\",\"BIG_COLL_61\"],\"62\":[\"java.lang.String\",\"BIG_COLL_62\"],\"63\":[\"java.lang.String\",\"BIG_COLL_63\"],\"64\":[\"java.lang.String\",\"BIG_COLL_64\"],\"65\":[\"java.lang.String\",\"BIG_COLL_65\"],\"66\":[\"java.lang.String\",\"BIG_COLL_66\"],\"67\":[\"java.lang.String\",\"BIG_COLL_67\"],\"68\":[\"java.lang.String\",\"BIG_COLL_68\"],\"69\":[\"java.lang.String\",\"BIG_COLL_69\"],\"70\":[\"java.lang.String\",\"BIG_COLL_70\"],\"71\":[\"java.lang.String\",\"BIG_COLL_71\"],\"72\":[\"java.lang.String\",\"BIG_COLL_72\"],\"73\":[\"java.lang.String\",\"BIG_COLL_73\"],\"74\":[\"java.lang.String\",\"BIG_COLL_74\"],\"75\":[\"java.lang.String\",\"BIG_COLL_75\"],\"76\":[\"java.lang.String\",\"BIG_COLL_76\"],\"77\":[\"java.lang.String\",\"BIG_COLL_77\"],\"78\":[\"java.lang.String\",\"BIG_COLL_78\"],\"79\":[\"java.lang.String\",\"BIG_COLL_79\"],\"80\":[\"java.lang.String\",\"BIG_COLL_80\"],\"81\":[\"java.lang.String\",\"BIG_COLL_81\"],\"82\":[\"java.lang.String\",\"BIG_COLL_82\"],\"83\":[\"java.lang.String\",\"BIG_COLL_83\"],\"84\":[\"java.lang.String\",\"BIG_COLL_84\"],\"85\":[\"java.lang.String\",\"BIG_COLL_85\"],\"86\":[\"java.lang.String\",\"BIG_COLL_86\"],\"87\":[\"java.lang.String\",\"BIG_COLL_87\"],\"88\":[\"java.lang.String\",\"BIG_COLL_88\"],\"89\":[\"java.lang.String\",\"BIG_COLL_89\"],\"90\":[\"java.lang.String\",\"BIG_COLL_90\"],\"91\":[\"java.lang.String\",\"BIG_COLL_91\"],\"92\":[\"java.lang.String\",\"BIG_COLL_92\"],\"93\":[\"java.lang.String\",\"BIG_COLL_93\"],\"94\":[\"java.lang.String\",\"BIG_COLL_94\"],\"95\":[\"java.lang.String\",\"BIG_COLL_95\"],\"96\":[\"java.lang.String\",\"BIG_COLL_96\"],\"97\":[\"java.lang.String\",\"BIG_COLL_97\"],\"98\":[\"java.lang.String\",\"BIG_COLL_98\"],\"99\":[\"java.lang.String\",\"BIG_COLL_99\"]}]]}"); }
@Test public void testEnum() throws Exception { QueryResultFormatter queryResultFormatter = new QueryResultFormatter(100).add(RESULT, Currency.DIME); checkResult(queryResultFormatter, "{\"result\":[[\"org.apache.geode.management.internal.json.QueryResultFormatterTest.Currency\",\"DIME\"]]}"); }
@Test public void testEnumList() throws Exception { List<Currency> list = new ArrayList<>(); list.add(Currency.DIME); list.add(Currency.NICKLE); list.add(Currency.QUARTER); list.add(Currency.NICKLE); QueryResultFormatter queryResultFormatter = new QueryResultFormatter(100).add(RESULT, list); checkResult(queryResultFormatter, "{\"result\":[[\"java.util.ArrayList\",{\"0\":[\"org.apache.geode.management.internal.json.QueryResultFormatterTest.Currency\",\"DIME\"],\"1\":[\"org.apache.geode.management.internal.json.QueryResultFormatterTest.Currency\",\"NICKLE\"],\"2\":[\"org.apache.geode.management.internal.json.QueryResultFormatterTest.Currency\",\"QUARTER\"],\"3\":[\"org.apache.geode.management.internal.json.QueryResultFormatterTest.Currency\",\"NICKLE\"]}]]}"); }
@Test public void testEnumContainer() throws Exception { EnumContainer enumContainer = new EnumContainer(Currency.DIME); QueryResultFormatter queryResultFormatter = new QueryResultFormatter(100).add(RESULT, enumContainer); checkResult(queryResultFormatter, "{\"result\":[[\"org.apache.geode.management.internal.json.QueryResultFormatterTest.EnumContainer\",{}]]}"); }