Skip to content

Commit 37c5d0d

Browse files
committed
Merge pull request #27 from dcrissman/result-translator-type
fixes #21 fully support types
2 parents b823b9f + c8097f2 commit 37c5d0d

File tree

2 files changed

+125
-55
lines changed

2 files changed

+125
-55
lines changed

lightblue-ldap-crud/src/main/java/com/redhat/lightblue/crud/ldap/translator/ResultTranslator.java

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import com.redhat.lightblue.metadata.SimpleArrayElement;
3939
import com.redhat.lightblue.metadata.SimpleField;
4040
import com.redhat.lightblue.metadata.Type;
41-
import com.redhat.lightblue.metadata.types.BooleanType;
41+
import com.redhat.lightblue.metadata.types.BinaryType;
4242
import com.redhat.lightblue.metadata.types.DateType;
4343
import com.redhat.lightblue.metadata.types.IntegerType;
4444
import com.redhat.lightblue.metadata.types.StringType;
@@ -106,7 +106,9 @@ else if (field instanceof ObjectField) {
106106
}
107107
else if (field instanceof ArrayField){
108108
value = toJson((ArrayField)field, attr, fieldCursor);
109-
node.set(LightblueUtil.createArrayCountFieldName(fieldName), IntegerType.TYPE.toJson(factory, attr.getValues().length));
109+
node.set(
110+
LightblueUtil.createArrayCountFieldName(fieldName),
111+
IntegerType.TYPE.toJson(factory, attr.getValues().length));
110112
}
111113
else if (field instanceof ReferenceField) {
112114
value = toJson((ReferenceField)field, attr);
@@ -130,22 +132,14 @@ private JsonNode toJson(SimpleField field, Attribute attr){
130132
Type type = field.getType();
131133

132134
Object value = null;
133-
if(type instanceof StringType){
134-
value = attr.getValue();
135-
}
136-
else if(type instanceof IntegerType){
137-
value = attr.getValueAsInteger();
138-
}
139-
else if(type instanceof BooleanType){
140-
value = attr.getValueAsBoolean();
141-
}
142-
else if(type instanceof DateType){
135+
if(type instanceof DateType){
143136
value = attr.getValueAsDate();
144137
}
145-
//TODO BigDecimalType, BigIntegerType, BinaryType, DoubleType, UIDType
146-
147-
if(value == null){
148-
throw new UnsupportedOperationException("Unable to convert Type: " + type.getClass().getName());
138+
else if(type instanceof BinaryType){
139+
value = attr.getValueByteArray();
140+
}
141+
else{
142+
value = attr.getValue();
149143
}
150144

151145
return field.getType().toJson(factory, value);

lightblue-ldap-crud/src/test/java/com/redhat/lightblue/crud/ldap/translator/ResultTranslatorTest.java

Lines changed: 115 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@
2121
import static org.junit.Assert.assertEquals;
2222
import static org.junit.Assert.assertNotNull;
2323

24+
import java.math.BigInteger;
2425
import java.util.ArrayList;
2526
import java.util.Arrays;
2627
import java.util.Iterator;
2728
import java.util.List;
29+
import java.util.UUID;
2830

2931
import org.json.JSONException;
3032
import org.junit.Test;
@@ -42,11 +44,16 @@
4244
import com.redhat.lightblue.metadata.ReferenceField;
4345
import com.redhat.lightblue.metadata.SimpleArrayElement;
4446
import com.redhat.lightblue.metadata.SimpleField;
45-
import com.redhat.lightblue.metadata.Type;
47+
import com.redhat.lightblue.metadata.types.BigDecimalType;
48+
import com.redhat.lightblue.metadata.types.BigIntegerType;
49+
import com.redhat.lightblue.metadata.types.BinaryType;
4650
import com.redhat.lightblue.metadata.types.BooleanType;
4751
import com.redhat.lightblue.metadata.types.DateType;
52+
import com.redhat.lightblue.metadata.types.DoubleType;
4853
import com.redhat.lightblue.metadata.types.IntegerType;
4954
import com.redhat.lightblue.metadata.types.StringType;
55+
import com.redhat.lightblue.metadata.types.UIDType;
56+
import com.redhat.lightblue.util.JsonDoc;
5057
import com.redhat.lightblue.util.Path;
5158
import com.unboundid.ldap.sdk.Attribute;
5259
import com.unboundid.ldap.sdk.SearchResult;
@@ -124,15 +131,14 @@ public void testTranslate_SimpleField_Boolean() throws JSONException{
124131
}
125132

126133
@Test
127-
public void testTranslate_SimpleField_Date() throws JSONException{
128-
//Note in and out data are formatted differently
134+
public void testTranslate_SimpleField_BigDecimalType() throws JSONException{
129135
SearchResult result = fakeSearchResult(
130136
new SearchResultEntry(-1, "uid=john.doe,dc=example,dc=com", new Attribute[]{
131-
new Attribute("key", "20150109201731.570Z")
137+
new Attribute("key", String.valueOf(Double.MAX_VALUE))
132138
}));
133139

134140
EntityMetadata md = fakeEntityMetadata("fakeMetadata",
135-
new SimpleField("key", DateType.TYPE)
141+
new SimpleField("key", BigDecimalType.TYPE)
136142
);
137143

138144
List<DocCtx> documents = new ResultTranslator(factory).translate(result, md);
@@ -141,58 +147,128 @@ public void testTranslate_SimpleField_Date() throws JSONException{
141147
assertEquals(1, documents.size());
142148

143149
JSONAssert.assertEquals(
144-
"{\"key\":\"20150109T20:17:31.570+0000\",\"dn\":\"uid=john.doe,dc=example,dc=com\"}",
150+
"{\"key\":" + String.valueOf(Double.MAX_VALUE) + ",\"dn\":\"uid=john.doe,dc=example,dc=com\"}",
145151
documents.get(0).getOutputDocument().toString(),
146152
true);
147153
}
148154

149-
@Test(expected = UnsupportedOperationException.class)
150-
public void testTranslate_SimpleField_Unknown() throws JSONException{
155+
@Test
156+
public void testTranslate_SimpleField_BigIntegerType() throws JSONException{
151157
SearchResult result = fakeSearchResult(
152158
new SearchResultEntry(-1, "uid=john.doe,dc=example,dc=com", new Attribute[]{
153-
new Attribute("uid", "john.doe")
159+
new Attribute("key", BigInteger.ZERO.toString())
154160
}));
155161

156162
EntityMetadata md = fakeEntityMetadata("fakeMetadata",
157-
new SimpleField("uid", new Type(){
163+
new SimpleField("key", BigIntegerType.TYPE)
164+
);
158165

159-
@Override
160-
public String getName() {
161-
throw new UnsupportedOperationException("Method should never be called.");
162-
}
166+
List<DocCtx> documents = new ResultTranslator(factory).translate(result, md);
163167

164-
@Override
165-
public boolean supportsEq() {
166-
throw new UnsupportedOperationException("Method should never be called.");
167-
}
168+
assertNotNull(documents);
169+
assertEquals(1, documents.size());
168170

169-
@Override
170-
public boolean supportsOrdering() {
171-
throw new UnsupportedOperationException("Method should never be called.");
172-
}
171+
JSONAssert.assertEquals(
172+
"{\"key\":" + BigInteger.ZERO + ",\"dn\":\"uid=john.doe,dc=example,dc=com\"}",
173+
documents.get(0).getOutputDocument().toString(),
174+
true);
175+
}
173176

174-
@Override
175-
public JsonNode toJson(JsonNodeFactory factory, Object value) {
176-
throw new UnsupportedOperationException("Method should never be called.");
177-
}
177+
@Test
178+
public void testTranslate_SimpleField_DoubleType() throws JSONException{
179+
SearchResult result = fakeSearchResult(
180+
new SearchResultEntry(-1, "uid=john.doe,dc=example,dc=com", new Attribute[]{
181+
new Attribute("key", String.valueOf(Double.MAX_VALUE))
182+
}));
178183

179-
@Override
180-
public Object fromJson(JsonNode value) {
181-
throw new UnsupportedOperationException("Method should never be called.");
182-
}
184+
EntityMetadata md = fakeEntityMetadata("fakeMetadata",
185+
new SimpleField("key", DoubleType.TYPE)
186+
);
183187

184-
@Override
185-
public int compare(Object v1, Object v2) {
186-
throw new UnsupportedOperationException("Method should never be called.");
187-
}
188+
List<DocCtx> documents = new ResultTranslator(factory).translate(result, md);
188189

189-
@Override
190-
public Object cast(Object v) {
191-
throw new UnsupportedOperationException("Method should never be called.");
192-
}
190+
assertNotNull(documents);
191+
assertEquals(1, documents.size());
192+
193+
JSONAssert.assertEquals(
194+
"{\"key\":" + String.valueOf(Double.MAX_VALUE) + ",\"dn\":\"uid=john.doe,dc=example,dc=com\"}",
195+
documents.get(0).getOutputDocument().toString(),
196+
true);
197+
}
198+
199+
@Test
200+
public void testTranslate_SimpleField_UIDType() throws JSONException{
201+
String uuid = UUID.randomUUID().toString();
202+
203+
SearchResult result = fakeSearchResult(
204+
new SearchResultEntry(-1, "uid=john.doe,dc=example,dc=com", new Attribute[]{
205+
new Attribute("key", uuid)
193206
}));
194207

195-
new ResultTranslator(factory).translate(result, md);
208+
EntityMetadata md = fakeEntityMetadata("fakeMetadata",
209+
new SimpleField("key", UIDType.TYPE)
210+
);
211+
212+
List<DocCtx> documents = new ResultTranslator(factory).translate(result, md);
213+
214+
assertNotNull(documents);
215+
assertEquals(1, documents.size());
216+
217+
JSONAssert.assertEquals(
218+
"{\"key\":" + uuid + ",\"dn\":\"uid=john.doe,dc=example,dc=com\"}",
219+
documents.get(0).getOutputDocument().toString(),
220+
true);
221+
}
222+
223+
@Test
224+
public void testTranslate_SimpleField_BinaryType() throws Exception{
225+
byte[] bite = new byte[]{1, 2, 3, 'a', 'b', 'c'};
226+
227+
SearchResult result = fakeSearchResult(
228+
new SearchResultEntry(-1, "uid=john.doe,dc=example,dc=com", new Attribute[]{
229+
new Attribute("key", bite)
230+
}));
231+
232+
EntityMetadata md = fakeEntityMetadata("fakeMetadata",
233+
new SimpleField("key", BinaryType.TYPE)
234+
);
235+
236+
List<DocCtx> documents = new ResultTranslator(factory).translate(result, md);
237+
238+
assertNotNull(documents);
239+
assertEquals(1, documents.size());
240+
JsonDoc document = documents.get(0).getOutputDocument();
241+
242+
JsonNode keyNode = document.get(new Path("key"));
243+
assertEquals(bite, keyNode.binaryValue());
244+
245+
JSONAssert.assertEquals(
246+
"{\"key\":\"" + keyNode.asText() + "\",\"dn\":\"uid=john.doe,dc=example,dc=com\"}",
247+
document.toString(),
248+
true);
249+
}
250+
251+
@Test
252+
public void testTranslate_SimpleField_Date() throws JSONException{
253+
//Note in and out data are formatted differently
254+
SearchResult result = fakeSearchResult(
255+
new SearchResultEntry(-1, "uid=john.doe,dc=example,dc=com", new Attribute[]{
256+
new Attribute("key", "20150109201731.570Z")
257+
}));
258+
259+
EntityMetadata md = fakeEntityMetadata("fakeMetadata",
260+
new SimpleField("key", DateType.TYPE)
261+
);
262+
263+
List<DocCtx> documents = new ResultTranslator(factory).translate(result, md);
264+
265+
assertNotNull(documents);
266+
assertEquals(1, documents.size());
267+
268+
JSONAssert.assertEquals(
269+
"{\"key\":\"20150109T20:17:31.570+0000\",\"dn\":\"uid=john.doe,dc=example,dc=com\"}",
270+
documents.get(0).getOutputDocument().toString(),
271+
true);
196272
}
197273

198274
@Test

0 commit comments

Comments
 (0)