Changeset 3117
- Timestamp:
- 02/02/12 21:32:12 (4 months ago)
- Location:
- AnalyzerBeans/trunk
- Files:
-
- 5 edited
-
components/json/src/main/java/org/eobjects/analyzer/beans/CreateJsonTransformer.java (modified) (2 diffs)
-
components/json/src/main/java/org/eobjects/analyzer/beans/ParseJsonTransformer.java (modified) (3 diffs)
-
components/json/src/test/java/org/eobjects/analyzer/beans/ParseJsonTransformerTest.java (modified) (6 diffs)
-
core/src/main/java/org/eobjects/analyzer/beans/datastructures/ExtractFromListTransformer.java (modified) (2 diffs)
-
core/src/main/java/org/eobjects/analyzer/beans/datastructures/ExtractFromMapTransformer.java (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
AnalyzerBeans/trunk/components/json/src/main/java/org/eobjects/analyzer/beans/CreateJsonTransformer.java
r3115 r3117 20 20 package org.eobjects.analyzer.beans; 21 21 22 import javax.inject.Inject; 23 22 24 import org.codehaus.jackson.map.ObjectMapper; 25 import org.eobjects.analyzer.beans.api.Categorized; 23 26 import org.eobjects.analyzer.beans.api.Configured; 24 27 import org.eobjects.analyzer.beans.api.Description; … … 26 29 import org.eobjects.analyzer.beans.api.Transformer; 27 30 import org.eobjects.analyzer.beans.api.TransformerBean; 31 import org.eobjects.analyzer.beans.categories.DataStructuresCategory; 28 32 import org.eobjects.analyzer.data.InputColumn; 29 33 import org.eobjects.analyzer.data.InputRow; 30 34 31 35 @TransformerBean("Create JSON document") 32 @Description("Joins several columns into a single JSON document.") 36 @Description("Creates a representation of a data structure as a JSON (JavaScript Object Notation) document") 37 @Categorized(DataStructuresCategory.class) 33 38 public class CreateJsonTransformer implements Transformer<String> { 34 39 40 @Inject 35 41 @Configured 42 @Description("Column containing data structures to format") 36 43 InputColumn<?> data; 37 44 -
AnalyzerBeans/trunk/components/json/src/main/java/org/eobjects/analyzer/beans/ParseJsonTransformer.java
r3115 r3117 20 20 package org.eobjects.analyzer.beans; 21 21 22 import java.io.IOException;23 import java.util.Collections;24 22 import java.util.Map; 25 23 24 import javax.inject.Inject; 25 26 26 import org.apache.commons.lang.StringUtils; 27 import org.codehaus.jackson.JsonParseException;28 import org.codehaus.jackson.map.JsonMappingException;29 27 import org.codehaus.jackson.map.ObjectMapper; 28 import org.eobjects.analyzer.beans.api.Categorized; 30 29 import org.eobjects.analyzer.beans.api.Configured; 31 30 import org.eobjects.analyzer.beans.api.Description; … … 33 32 import org.eobjects.analyzer.beans.api.Transformer; 34 33 import org.eobjects.analyzer.beans.api.TransformerBean; 34 import org.eobjects.analyzer.beans.categories.DataStructuresCategory; 35 35 import org.eobjects.analyzer.data.InputColumn; 36 36 import org.eobjects.analyzer.data.InputRow; 37 37 38 38 @TransformerBean("Parse JSON document") 39 @Description(" Extract values from a JSON document")40 public class ParseJsonTransformer implements 41 Transformer<Map<String, ?>> {39 @Description("Parses a JSON document and materializes the data structure it represents") 40 @Categorized(DataStructuresCategory.class) 41 public class ParseJsonTransformer implements Transformer<Object> { 42 42 43 43 private final ObjectMapper mapper = new ObjectMapper(); 44 44 45 @Configured 46 private InputColumn<String> json; 45 @Inject 46 @Configured(order = 1) 47 @Description("Column containing JSON documents to parse") 48 InputColumn<String> json; 49 50 @Inject 51 @Configured(order = 2) 52 Class<?> dataType = Map.class; 47 53 48 54 public ParseJsonTransformer() { … … 56 62 @Override 57 63 public OutputColumns getOutputColumns() { 58 return new OutputColumns(json.getName() + " (as Map)"); 64 String[] names = new String[] { json.getName() + " (as Map)" }; 65 Class<?>[] types = new Class[] { dataType }; 66 return new OutputColumns(names, types); 59 67 } 60 68 61 @SuppressWarnings("unchecked")62 69 @Override 63 public Map<String, ?>[] transform(InputRow inputRow) {70 public Object[] transform(InputRow inputRow) { 64 71 final String jsonString = inputRow.getValue(json); 65 72 final Object result; 66 73 if (StringUtils.isBlank(jsonString)) { 67 return new Map[] { Collections.emptyMap() }; 74 result = null; 75 } else { 76 try { 77 result = mapper.readValue(jsonString, dataType); 78 } catch (Exception e) { 79 throw new IllegalStateException( 80 "Exception occurred while parsing JSON", e); 81 } 68 82 } 69 83 70 Map<String, Object> jsonMap = Collections.emptyMap(); 71 try { 72 jsonMap = mapper.readValue(jsonString, Map.class); 73 } catch (JsonParseException e) { 74 throw new IllegalStateException("Exception while parsing Json."); 75 } catch (JsonMappingException e) { 76 throw new IllegalStateException("Exception while Json mapping."); 77 } catch (IOException e) { 78 throw new IllegalStateException("IOException while parsing Json."); 79 } 80 final Map<String, ?>[] result = new Map[] { jsonMap }; 81 return result; 84 return new Object[] { result }; 82 85 } 83 86 } -
AnalyzerBeans/trunk/components/json/src/test/java/org/eobjects/analyzer/beans/ParseJsonTransformerTest.java
r3115 r3117 21 21 22 22 import static org.junit.Assert.assertEquals; 23 import static org.junit.Assert.assertNull; 23 24 import static org.junit.Assert.assertTrue; 24 25 … … 37 38 InputColumn<String> col1 = new MockInputColumn<String>("jsonDocument", 38 39 String.class); 39 ParseJsonTransformer transformer = new ParseJsonTransformer( 40 col1); 40 ParseJsonTransformer transformer = new ParseJsonTransformer(col1); 41 41 assertEquals(1, transformer.getOutputColumns().getColumnCount()); 42 42 43 43 String json = "{\"name\":\"shekhar\",\"country\":\"india\"}"; 44 44 45 Map<String, ?>[] values = transformer.transform(new MockInputRow().put(46 col1,json));45 Object[] values = transformer.transform(new MockInputRow().put(col1, 46 json)); 47 47 assertEquals(1, values.length); 48 assertEquals(2, values[0].size());48 assertEquals(2, ((Map<?, ?>) values[0]).size()); 49 49 assertEquals("{name=shekhar, country=india}", values[0].toString()); 50 50 } … … 54 54 InputColumn<String> col1 = new MockInputColumn<String>("jsonDocument", 55 55 String.class); 56 ParseJsonTransformer transformer = new ParseJsonTransformer( 57 col1); 56 ParseJsonTransformer transformer = new ParseJsonTransformer(col1); 58 57 assertEquals(1, transformer.getOutputColumns().getColumnCount()); 59 58 60 59 String json = "{\"name\":\"kasper\",\"age\":29,\"developer\":true,\"manager\":false,\"balance\":400.17}"; 61 60 62 Map<String, ?>[] values = transformer.transform(new MockInputRow().put(63 col1,json));61 Object[] values = transformer.transform(new MockInputRow().put(col1, 62 json)); 64 63 65 64 assertEquals(1, values.length); 66 assertEquals(5, values[0].size());65 assertEquals(5, ((Map<?, ?>) values[0]).size()); 67 66 assertEquals( 68 67 "{name=kasper, age=29, developer=true, manager=false, balance=400.17}", … … 75 74 InputColumn<String> col1 = new MockInputColumn<String>("jsonDocument", 76 75 String.class); 77 ParseJsonTransformer transformer = new ParseJsonTransformer( 78 col1); 76 ParseJsonTransformer transformer = new ParseJsonTransformer(col1); 79 77 assertEquals(1, transformer.getOutputColumns().getColumnCount()); 80 Map<String, ?>[] values = transformer.transform(new MockInputRow());78 Object[] values = transformer.transform(new MockInputRow()); 81 79 assertTrue(values.length == 1); 82 assert Equals(true, values[0].isEmpty());80 assertNull(values[0]); 83 81 } 84 82 … … 87 85 InputColumn<String> col1 = new MockInputColumn<String>("jsonDocument", 88 86 String.class); 89 ParseJsonTransformer transformer = new ParseJsonTransformer( 90 col1); 87 ParseJsonTransformer transformer = new ParseJsonTransformer(col1); 91 88 assertEquals(1, transformer.getOutputColumns().getColumnCount()); 92 89 93 90 String json = "{\"name\":\"shekhar\",\"addresses\":[{\"city\":\"Delhi\",\"country:\":\"India\"},{\"city\":\"Delhi\",\"country:\":\"India\"}],\"emails\":[\"email1\",\"email2\"]}"; 94 91 95 Map<String, ?>[] values = transformer.transform(new MockInputRow().put(96 col1,json));92 Object[] values = transformer.transform(new MockInputRow().put(col1, 93 json)); 97 94 assertEquals(1, values.length); 98 Map< String, ?> map =values[0];95 Map<?, ?> map = (Map<?, ?>) values[0]; 99 96 assertEquals( 100 97 "{name=shekhar, addresses=[{city=Delhi, country:=India}, {city=Delhi, country:=India}], emails=[email1, email2]}", … … 102 99 103 100 assertTrue(map.get("addresses") instanceof List); 104 101 105 102 List<?> addresses = (List<?>) map.get("addresses"); 106 103 107 104 assertTrue(addresses.get(0) instanceof Map); 108 105 assertTrue(map.get("emails") instanceof List); -
AnalyzerBeans/trunk/core/src/main/java/org/eobjects/analyzer/beans/datastructures/ExtractFromListTransformer.java
r3102 r3117 26 26 import org.eobjects.analyzer.beans.api.Categorized; 27 27 import org.eobjects.analyzer.beans.api.Configured; 28 import org.eobjects.analyzer.beans.api.Description; 28 29 import org.eobjects.analyzer.beans.api.OutputColumns; 29 30 import org.eobjects.analyzer.beans.api.OutputRowCollector; … … 56 57 @Inject 57 58 @Configured 59 @Description("Verify that expected element type and actual type are the same") 58 60 boolean verifyTypes = false; 59 61 -
AnalyzerBeans/trunk/core/src/main/java/org/eobjects/analyzer/beans/datastructures/ExtractFromMapTransformer.java
r3102 r3117 27 27 import org.eobjects.analyzer.beans.api.Categorized; 28 28 import org.eobjects.analyzer.beans.api.Configured; 29 import org.eobjects.analyzer.beans.api.Description; 29 30 import org.eobjects.analyzer.beans.api.OutputColumns; 30 31 import org.eobjects.analyzer.beans.api.Transformer; … … 60 61 @Inject 61 62 @Configured 63 @Description("Verify that expected type and actual type are the same") 62 64 boolean verifyTypes = false; 63 65
Note: See TracChangeset
for help on using the changeset viewer.
