Changeset 3115
- Timestamp:
- 02/02/12 21:05:37 (4 months ago)
- Location:
- AnalyzerBeans/trunk
- Files:
-
- 1 edited
- 4 moved
-
components/json/src/main/java/org/eobjects/analyzer/beans/CreateJsonTransformer.java (moved) (moved from AnalyzerBeans/trunk/components/json/src/main/java/org/eobjects/analyzer/beans/JsonCreatorTransformer.java) (2 diffs)
-
components/json/src/main/java/org/eobjects/analyzer/beans/ParseJsonTransformer.java (moved) (moved from AnalyzerBeans/trunk/components/json/src/main/java/org/eobjects/analyzer/beans/ExtractJsonValuesTransformer.java) (2 diffs)
-
components/json/src/test/java/org/eobjects/analyzer/beans/CreateJsonTransformerTest.java (moved) (moved from AnalyzerBeans/trunk/components/json/src/test/java/org/eobjects/analyzer/beans/JsonCreatorTransformerTest.java) (2 diffs)
-
components/json/src/test/java/org/eobjects/analyzer/beans/ParseJsonTransformerTest.java (moved) (moved from AnalyzerBeans/trunk/components/json/src/test/java/org/eobjects/analyzer/beans/ExtractJsonValuesTransformerTest.java) (6 diffs)
-
core/src/main/java/org/eobjects/analyzer/data/MockInputColumn.java (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
AnalyzerBeans/trunk/components/json/src/main/java/org/eobjects/analyzer/beans/CreateJsonTransformer.java
r3112 r3115 20 20 package org.eobjects.analyzer.beans; 21 21 22 import java.io.IOException;23 import java.util.LinkedHashMap;24 import java.util.Map;25 26 import org.codehaus.jackson.JsonGenerationException;27 import org.codehaus.jackson.map.JsonMappingException;28 22 import org.codehaus.jackson.map.ObjectMapper; 29 23 import org.eobjects.analyzer.beans.api.Configured; … … 35 29 import org.eobjects.analyzer.data.InputRow; 36 30 37 38 31 @TransformerBean("Create JSON document") 39 32 @Description("Joins several columns into a single JSON document.") 40 public class JsonCreatorTransformer implements Transformer<String> {33 public class CreateJsonTransformer implements Transformer<String> { 41 34 42 35 @Configured 43 InputColumn<?> [] columns;36 InputColumn<?> data; 44 37 45 38 private final ObjectMapper mapper = new ObjectMapper(); 46 39 47 public JsonCreatorTransformer() {40 public CreateJsonTransformer() { 48 41 } 49 42 50 public JsonCreatorTransformer(InputColumn<?>... columns) {51 this. columns = columns;43 public CreateJsonTransformer(InputColumn<?> data) { 44 this.data = data; 52 45 } 53 46 54 47 @Override 55 48 public OutputColumns getOutputColumns() { 56 StringBuilder sb = new StringBuilder("JSON document of "); 57 for (int i = 0; i < columns.length; i++) { 58 if (i != 0) { 59 sb.append(","); 60 } 61 sb.append(columns[i].getName()); 62 if (i == 4) { 63 sb.append("..."); 64 // only include a preview of columns in the default name 65 break; 66 } 67 } 68 return new OutputColumns(sb.toString()); 49 return new OutputColumns(data.getName() + " (as JSON)"); 69 50 } 70 51 71 52 @Override 72 53 public String[] transform(InputRow row) { 73 Map<String, Object> map = new LinkedHashMap<String, Object>(); 74 for (InputColumn<?> inputColumn : columns) { 75 Object value = row.getValue(inputColumn); 76 String key = inputColumn.getName(); 77 map.put(key, value); 54 try { 55 Object value = row.getValue(data); 56 final String json = mapper.writeValueAsString(value); 57 return new String[] { json }; 58 } catch (Exception e) { 59 throw new IllegalStateException( 60 "Exception while creating JSON representation", e); 78 61 } 79 String json = null;80 try {81 json = mapper.writeValueAsString(map);82 } catch (JsonGenerationException e) {83 throw new IllegalStateException("Exception while generating Json.");84 } catch (JsonMappingException e) {85 throw new IllegalStateException("Exception while Json mapping.");86 } catch (IOException e) {87 throw new IllegalStateException("IOException while Json mapping.");88 }89 return new String[] { json };90 62 } 91 63 -
AnalyzerBeans/trunk/components/json/src/main/java/org/eobjects/analyzer/beans/ParseJsonTransformer.java
r3112 r3115 38 38 @TransformerBean("Parse JSON document") 39 39 @Description("Extract values from a JSON document") 40 public class ExtractJsonValuesTransformer implements40 public class ParseJsonTransformer implements 41 41 Transformer<Map<String, ?>> { 42 42 … … 46 46 private InputColumn<String> json; 47 47 48 public ExtractJsonValuesTransformer() {48 public ParseJsonTransformer() { 49 49 50 50 } 51 51 52 public ExtractJsonValuesTransformer(InputColumn<String> json) {52 public ParseJsonTransformer(InputColumn<String> json) { 53 53 this.json = json; 54 54 } -
AnalyzerBeans/trunk/components/json/src/test/java/org/eobjects/analyzer/beans/CreateJsonTransformerTest.java
r3111 r3115 24 24 import java.util.ArrayList; 25 25 import java.util.HashMap; 26 import java.util.LinkedHashMap; 26 27 import java.util.List; 27 28 import java.util.Map; … … 32 33 import org.junit.Test; 33 34 34 public class JsonCreatorTransformerTest {35 public class CreateJsonTransformerTest { 35 36 36 @Test 37 public void testStringColumnsToJson() { 38 InputColumn<String> col1 = new MockInputColumn<String>("name", String.class); 39 InputColumn<String> col2 = new MockInputColumn<String>("country", String.class); 40 JsonCreatorTransformer jsonTransformer = new JsonCreatorTransformer(col1, col2); 41 assertEquals(1, jsonTransformer.getOutputColumns().getColumnCount()); 42 43 String[] jsonDocs = jsonTransformer.transform(new MockInputRow().put(col1, "shekhar").put(col2, "India")); 44 assertEquals(1, jsonDocs.length); 45 assertEquals("{\"name\":\"shekhar\",\"country\":\"India\"}", jsonDocs[0]); 46 } 47 48 @Test 49 public void testStringAndMapColumnsToJson() throws Exception { 50 InputColumn<String> col1 = new MockInputColumn<String>("name", String.class); 51 InputColumn<String> col2 = new MockInputColumn<String>("country", String.class); 52 Map<String, String> stringMap = new HashMap<String,String>(); 53 stringMap.put("GivenName", "Ankit"); 54 stringMap.put("FamilyName", "Kumar"); 55 InputColumn<Map> col3 = new MockInputColumn<Map>("NamesMap", Map.class); 56 JsonCreatorTransformer jsonTransformer = new JsonCreatorTransformer(col1, col2, col3); 57 assertEquals(1, jsonTransformer.getOutputColumns().getColumnCount()); 58 59 String[] jsonDocs = jsonTransformer.transform(new MockInputRow().put(col1, "shekhar").put(col2, "India").put(col3, stringMap)); 60 assertEquals(1, jsonDocs.length); 61 assertEquals("{\"name\":\"shekhar\",\"country\":\"India\",\"NamesMap\":{\"GivenName\":\"Ankit\",\"FamilyName\":\"Kumar\"}}", jsonDocs[0]); 37 @Test 38 public void testCreateSimpleJsonOfDataTypes() throws Exception { 39 62 40 } 63 64 @Test 41 42 @Test 43 public void testSimpleMapToJson() { 44 Map<String, Object> map = new LinkedHashMap<String, Object>(); 45 map.put("name", "shekhar"); 46 map.put("country", "India"); 47 48 InputColumn<Map<?, ?>> col = new MockInputColumn<Map<?, ?>>("map", 49 MockInputColumn.MAP_CLASS); 50 CreateJsonTransformer jsonTransformer = new CreateJsonTransformer(col); 51 assertEquals(1, jsonTransformer.getOutputColumns().getColumnCount()); 52 53 String[] jsonDocs = jsonTransformer.transform(new MockInputRow().put( 54 col, map)); 55 assertEquals(1, jsonDocs.length); 56 assertEquals("{\"name\":\"shekhar\",\"country\":\"India\"}", 57 jsonDocs[0]); 58 } 59 60 @Test 61 public void testSimpleList() throws Exception { 62 List<String> list = new ArrayList<String>(); 63 list.add("hello"); 64 list.add("world"); 65 66 InputColumn<List<?>> col = new MockInputColumn<List<?>>("list", 67 MockInputColumn.LIST_CLASS); 68 69 CreateJsonTransformer jsonTransformer = new CreateJsonTransformer(col); 70 assertEquals(1, jsonTransformer.getOutputColumns().getColumnCount()); 71 72 String[] jsonDocs = jsonTransformer.transform(new MockInputRow().put( 73 col, list)); 74 assertEquals(1, jsonDocs.length); 75 assertEquals("[\"hello\",\"world\"]", jsonDocs[0]); 76 } 77 78 @Test 65 79 public void testComplexCollectionColumnsToJson() throws Exception { 66 InputColumn<String> col1 = new MockInputColumn<String>("name", String.class); 67 InputColumn<String> col2 = new MockInputColumn<String>("country", String.class); 68 Map<String, String> namesMap = new HashMap<String,String>(); 69 namesMap.put("GivenName", "Ankit"); 70 namesMap.put("FamilyName", "Kumar"); 71 List<Map<String,String>> addresses = new ArrayList<Map<String, String>>(); 72 InputColumn<List> col3 = new MockInputColumn<List>("address", List.class); 73 Map<String, String> addressMap1 = new HashMap<String,String>(); 74 addressMap1.put("Street", "Utrechtseweg"); 75 addressMap1.put("HouseNumber", "310"); 76 addressMap1.put("City", "Arnhem"); 77 addressMap1.put("Postcode", "6812AR"); 78 addressMap1.put("Country", "Netherlands"); 79 Map<String, String> addressMap2 = new HashMap<String,String>(); 80 addressMap2.put("Street", "Silversteyn"); 81 addressMap2.put("HouseNumber", "893"); 82 addressMap2.put("City", "Arnhem"); 83 addressMap2.put("Postcode", "6812AB"); 84 addressMap2.put("Country", "Netherlands"); 85 addresses.add(addressMap1); 86 addresses.add(addressMap2); 87 JsonCreatorTransformer jsonTransformer = new JsonCreatorTransformer(col1, col2, col3); 88 assertEquals(1, jsonTransformer.getOutputColumns().getColumnCount()); 89 90 String[] jsonDocs = jsonTransformer.transform(new MockInputRow().put(col1, "shekhar").put(col2, "India").put(col3, addresses)); 91 assertEquals(1, jsonDocs.length); 92 assertEquals("{\"name\":\"shekhar\",\"country\":\"India\",\"address\":[{\"Postcode\":\"6812AR\",\"Street\":\"Utrechtseweg\",\"HouseNumber\":\"310\",\"Country\":\"Netherlands\",\"City\":\"Arnhem\"},{\"Postcode\":\"6812AB\",\"Street\":\"Silversteyn\",\"HouseNumber\":\"893\",\"Country\":\"Netherlands\",\"City\":\"Arnhem\"}]}", jsonDocs[0]); 80 Map<String, String> namesMap = new HashMap<String, String>(); 81 namesMap.put("GivenName", "Ankit"); 82 namesMap.put("FamilyName", "Kumar"); 83 List<Map<String, String>> addresses = new ArrayList<Map<String, String>>(); 84 Map<String, String> addressMap1 = new HashMap<String, String>(); 85 addressMap1.put("Street", "Utrechtseweg"); 86 addressMap1.put("HouseNumber", "310"); 87 addressMap1.put("City", "Arnhem"); 88 addressMap1.put("Postcode", "6812AR"); 89 addressMap1.put("Country", "Netherlands"); 90 Map<String, String> addressMap2 = new HashMap<String, String>(); 91 addressMap2.put("Street", "Silversteyn"); 92 addressMap2.put("HouseNumber", "893"); 93 addressMap2.put("City", "Arnhem"); 94 addressMap2.put("Postcode", "6812AB"); 95 addressMap2.put("Country", "Netherlands"); 96 addresses.add(addressMap1); 97 addresses.add(addressMap2); 98 99 Map<String, Object> map = new LinkedHashMap<String, Object>(); 100 map.put("name", namesMap); 101 map.put("addresses", addresses); 102 map.put("country", "India"); 103 104 InputColumn<Map<?, ?>> col = new MockInputColumn<Map<?, ?>>("name", 105 MockInputColumn.MAP_CLASS); 106 CreateJsonTransformer jsonTransformer = new CreateJsonTransformer(col); 107 assertEquals(1, jsonTransformer.getOutputColumns().getColumnCount()); 108 109 String[] jsonDocs = jsonTransformer.transform(new MockInputRow().put( 110 col, map)); 111 assertEquals(1, jsonDocs.length); 112 assertEquals( 113 "{'name':{'GivenName':'Ankit','FamilyName':'Kumar'}," 114 + "'addresses':[{'Postcode':'6812AR','Street':'Utrechtseweg','HouseNumber':'310','Country':'Netherlands','City':'Arnhem'}," 115 + "{'Postcode':'6812AB','Street':'Silversteyn','HouseNumber':'893','Country':'Netherlands','City':'Arnhem'}],'country':'India'}", 116 jsonDocs[0].replaceAll("\"", "'")); 93 117 } 94 118 -
AnalyzerBeans/trunk/components/json/src/test/java/org/eobjects/analyzer/beans/ParseJsonTransformerTest.java
r3111 r3115 31 31 import org.junit.Test; 32 32 33 public class ExtractJsonValuesTransformerTest {33 public class ParseJsonTransformerTest { 34 34 35 35 @Test … … 37 37 InputColumn<String> col1 = new MockInputColumn<String>("jsonDocument", 38 38 String.class); 39 ExtractJsonValuesTransformer transformer = new ExtractJsonValuesTransformer(39 ParseJsonTransformer transformer = new ParseJsonTransformer( 40 40 col1); 41 41 assertEquals(1, transformer.getOutputColumns().getColumnCount()); … … 54 54 InputColumn<String> col1 = new MockInputColumn<String>("jsonDocument", 55 55 String.class); 56 ExtractJsonValuesTransformer transformer = new ExtractJsonValuesTransformer(56 ParseJsonTransformer transformer = new ParseJsonTransformer( 57 57 col1); 58 58 assertEquals(1, transformer.getOutputColumns().getColumnCount()); … … 75 75 InputColumn<String> col1 = new MockInputColumn<String>("jsonDocument", 76 76 String.class); 77 ExtractJsonValuesTransformer transformer = new ExtractJsonValuesTransformer(77 ParseJsonTransformer transformer = new ParseJsonTransformer( 78 78 col1); 79 79 assertEquals(1, transformer.getOutputColumns().getColumnCount()); … … 87 87 InputColumn<String> col1 = new MockInputColumn<String>("jsonDocument", 88 88 String.class); 89 ExtractJsonValuesTransformer transformer = new ExtractJsonValuesTransformer(89 ParseJsonTransformer transformer = new ParseJsonTransformer( 90 90 col1); 91 91 assertEquals(1, transformer.getOutputColumns().getColumnCount()); … … 102 102 103 103 assertTrue(map.get("addresses") instanceof List); 104 List addresses = (List) map.get("addresses"); 104 105 List<?> addresses = (List<?>) map.get("addresses"); 106 105 107 assertTrue(addresses.get(0) instanceof Map); 106 108 assertTrue(map.get("emails") instanceof List); -
AnalyzerBeans/trunk/core/src/main/java/org/eobjects/analyzer/data/MockInputColumn.java
r3103 r3115 20 20 package org.eobjects.analyzer.data; 21 21 22 import java.util.List; 23 import java.util.Map; 24 22 25 import org.eobjects.metamodel.schema.Column; 23 26 … … 33 36 34 37 private static final long serialVersionUID = 1L; 38 39 @SuppressWarnings("unchecked") 40 public static final Class<? extends Map<?, ?>> MAP_CLASS = (Class<? extends Map<?, ?>>) Map.class; 41 42 @SuppressWarnings("unchecked") 43 public static final Class<? extends List<?>> LIST_CLASS = (Class<? extends List<?>>) List.class; 35 44 36 45 private String _name;
Note: See TracChangeset
for help on using the changeset viewer.
