Skip to content

Commit 66b6d9d

Browse files
authored
Merge pull request influxdata#562 from asashour/classInheritance
@column to support support super class inheritance
2 parents 19b16de + bbbc5df commit 66b6d9d

File tree

3 files changed

+67
-5
lines changed

3 files changed

+67
-5
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
would be used [Issue #548](https://github.com/influxdata/influxdb-java/issues/548)
99
- Add BatchPoints.Builder.points(Collection)
1010
[Issue #451](https://github.com/influxdata/influxdb-java/issues/451)
11+
- @Column supports class inheritance
12+
[Issue #367](https://github.com/influxdata/influxdb-java/issues/367)
1113

1214
## 2.14 [2018-10-12]
1315

src/main/java/org/influxdb/impl/InfluxDBResultMapper.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,11 +217,15 @@ void cacheMeasurementClass(final Class<?>... classVarAgrs) {
217217
influxColumnAndFieldMap = initialMap;
218218
}
219219

220-
for (Field field : clazz.getDeclaredFields()) {
221-
Column colAnnotation = field.getAnnotation(Column.class);
222-
if (colAnnotation != null) {
223-
influxColumnAndFieldMap.put(colAnnotation.name(), field);
220+
Class<?> c = clazz;
221+
while (c != null) {
222+
for (Field field : c.getDeclaredFields()) {
223+
Column colAnnotation = field.getAnnotation(Column.class);
224+
if (colAnnotation != null) {
225+
influxColumnAndFieldMap.put(colAnnotation.name(), field);
226+
}
224227
}
228+
c = c.getSuperclass();
225229
}
226230
}
227231
}

src/test/java/org/influxdb/impl/InfluxDBResultMapperTest.java

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,38 @@ void testToPOJO_SetMeasureName() {
409409
Assertions.assertTrue(result.size() == 1);
410410
}
411411

412+
@Test
413+
void testToPOJOInheritance() {
414+
// Given...
415+
mapper.cacheMeasurementClass(MySubMeasurement.class);
416+
417+
String superValue = UUID.randomUUID().toString();
418+
String subValue = "my sub value";
419+
List<String> columnList = Arrays.asList("superValue", "subValue");
420+
421+
List<Object> firstSeriesResult = Arrays.asList(superValue, subValue);
422+
423+
QueryResult.Series series = new QueryResult.Series();
424+
series.setName("MySeriesName");
425+
series.setColumns(columnList);
426+
series.setValues(Arrays.asList(firstSeriesResult));
427+
428+
QueryResult.Result internalResult = new QueryResult.Result();
429+
internalResult.setSeries(Arrays.asList(series));
430+
431+
QueryResult queryResult = new QueryResult();
432+
queryResult.setResults(Arrays.asList(internalResult));
433+
434+
//When...
435+
List<MySubMeasurement> result =
436+
mapper.toPOJO(queryResult, MySubMeasurement.class, "MySeriesName");
437+
438+
//Then...
439+
Assertions.assertTrue(result.size() == 1);
440+
Assertions.assertEquals(superValue, result.get(0).superValue);
441+
Assertions.assertEquals(subValue, result.get(0).subValue);
442+
}
443+
412444
@Measurement(name = "CustomMeasurement")
413445
static class MyCustomMeasurement {
414446

@@ -456,7 +488,31 @@ public String toString() {
456488
}
457489
}
458490

459-
@Measurement(name = "foo")
491+
@Measurement(name = "SuperMeasurement")
492+
static class MySuperMeasurement {
493+
494+
@Column(name = "superValue")
495+
protected String superValue;
496+
497+
@Override
498+
public String toString() {
499+
return "SuperMeasurement [superValue=" + superValue + "]";
500+
}
501+
}
502+
503+
@Measurement(name = "SubMeasurement")
504+
static class MySubMeasurement extends MySuperMeasurement {
505+
506+
@Column(name = "subValue")
507+
protected String subValue;
508+
509+
@Override
510+
public String toString() {
511+
return "MySubMeasurement [subValue=" + subValue + ", superValue=" + superValue + "]";
512+
}
513+
}
514+
515+
@Measurement(name = "foo")
460516
static class MyPojoWithUnsupportedField {
461517

462518
@Column(name = "bar")

0 commit comments

Comments
 (0)