Skip to content

Commit 08b156b

Browse files
committed
use enum.value() if available instead of enum.name() is available
1 parent 155ba16 commit 08b156b

File tree

2 files changed

+37
-16
lines changed

2 files changed

+37
-16
lines changed

ipp-v3-java-devkit/src/main/java/com/intuit/ipp/query/expr/EnumPath.java

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@
1515
*******************************************************************************/
1616
package com.intuit.ipp.query.expr;
1717

18+
import com.intuit.ipp.data.AccountTypeEnum;
1819
import com.intuit.ipp.query.Operation;
1920
import com.intuit.ipp.query.Path;
2021

22+
import java.lang.reflect.InvocationTargetException;
23+
import java.lang.reflect.Method;
24+
2125
/**
2226
* Class to generate the query string for enum value
2327
*
@@ -41,7 +45,7 @@ public EnumPath(String path, String entity) {
4145
* @return Expression
4246
*/
4347
public Expression<Enum<?>> eq(Enum<?> value) {
44-
String valueString = "'" + value + "'";
48+
String valueString = "'" + EnumPath.getValue(value) + "'";
4549
return new Expression<Enum<?>>(this, Operation.eq, valueString);
4650
}
4751

@@ -52,7 +56,7 @@ public Expression<Enum<?>> eq(Enum<?> value) {
5256
* @return Expression
5357
*/
5458
public Expression<Enum<?>> neq(Enum<?> value) {
55-
String valueString = "'" + value + "'";
59+
String valueString = "'" + EnumPath.getValue(value) + "'";
5660
return new Expression<Enum<?>>(this, Operation.neq, valueString);
5761
}
5862

@@ -63,7 +67,7 @@ public Expression<Enum<?>> neq(Enum<?> value) {
6367
* @return Expression
6468
*/
6569
public Expression<Enum<?>> lt(Enum<?> value) {
66-
String valueString = "'" + value + "'";
70+
String valueString = "'" + EnumPath.getValue(value) + "'";
6771
return new Expression<Enum<?>>(this, Operation.lt, valueString);
6872
}
6973

@@ -74,7 +78,7 @@ public Expression<Enum<?>> lt(Enum<?> value) {
7478
* @return Expression
7579
*/
7680
public Expression<Enum<?>> lte(Enum<?> value) {
77-
String valueString = "'" + value + "'";
81+
String valueString = "'" + EnumPath.getValue(value) + "'";
7882
return new Expression<Enum<?>>(this, Operation.lte, valueString);
7983
}
8084

@@ -85,7 +89,7 @@ public Expression<Enum<?>> lte(Enum<?> value) {
8589
* @return Expression
8690
*/
8791
public Expression<Enum<?>> gt(Enum<?> value) {
88-
String valueString = "'" + value + "'";
92+
String valueString = "'" + EnumPath.getValue(value) + "'";
8993
return new Expression<Enum<?>>(this, Operation.gt, valueString);
9094
}
9195

@@ -96,7 +100,7 @@ public Expression<Enum<?>> gt(Enum<?> value) {
96100
* @return Expression
97101
*/
98102
public Expression<Enum<?>> gte(Enum<?> value) {
99-
String valueString = "'" + value + "'";
103+
String valueString = "'" + EnumPath.getValue(value) + "'";
100104
return new Expression<Enum<?>>(this, Operation.gte, valueString);
101105
}
102106

@@ -111,13 +115,30 @@ public Expression<Enum<?>> in(Enum<?>[] value) {
111115
Boolean firstString = true;
112116
for (Enum<?> v : value) {
113117
if (firstString) {
114-
listString = listString.concat("('").concat(v.toString()).concat("'");
118+
listString = listString.concat("('").concat(EnumPath.getValue(v)).concat("'");
115119
firstString = false;
116120
} else {
117-
listString = listString.concat(", '").concat(v.toString()).concat("'");
121+
listString = listString.concat(", '").concat(EnumPath.getValue(v)).concat("'");
118122
}
119123
}
120124
listString = listString.concat(")");
121125
return new Expression<Enum<?>>(this, Operation.in, listString);
122126
}
127+
128+
/**
129+
* Intuit data enumerations have a value property which should be used in queries instead of enum names.
130+
* @param value The enumeration for which to get the query value.
131+
* @return The query value based on the given enumeration.
132+
*/
133+
private static String getValue(Enum<?> value){
134+
try{
135+
Method m = value.getClass().getDeclaredMethod("value");
136+
return (String) m.invoke(value);
137+
} catch (NoSuchMethodException ex){
138+
} catch (IllegalAccessException ex){
139+
} catch (InvocationTargetException ex){
140+
}
141+
return value.toString();
142+
}
143+
123144
}

ipp-v3-java-devkit/src/test/java/com/intuit/ipp/query/QueryTest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public void testQuery_datatypes() {
5959
$(data.getFloatData()).eq((float) 10), $(data.getDoubleData()).eq((double) 10), $(data.getCalendarData()).eq(calendar),
6060
$(data.isBooleanData()).eq(true), $(data.getDateData()).eq(calendar.getTime()), $(data.getEnumData()).eq(EntityStatusEnum.PENDING))
6161
.generate();
62-
String expectedQuery = "SELECT StringData, IntData, ByteData, ShortData, LongData, FloatData, DoubleData, CalendarData, BooleanData, DateData, EnumData FROM Data WHERE StringData = 'StringValue' AND IntData = '10' AND ByteData = '10' AND ShortData = '10' AND LongData = '10' AND FloatData = '10.0' AND DoubleData = '10.0' AND CalendarData = '" + dateString + "' AND BooleanData = true AND DateData = '" + dateString + "' AND EnumData = 'PENDING'";
62+
String expectedQuery = "SELECT StringData, IntData, ByteData, ShortData, LongData, FloatData, DoubleData, CalendarData, BooleanData, DateData, EnumData FROM Data WHERE StringData = 'StringValue' AND IntData = '10' AND ByteData = '10' AND ShortData = '10' AND LongData = '10' AND FloatData = '10.0' AND DoubleData = '10.0' AND CalendarData = '" + dateString + "' AND BooleanData = true AND DateData = '" + dateString + "' AND EnumData = 'Pending'";
6363
Assert.assertEquals(expectedQuery, query);
6464
}
6565

@@ -71,7 +71,7 @@ public void testQuery_eq() {
7171
$(data.getFloatData()).eq((float) 10), $(data.getDoubleData()).eq((double) 10), $(data.getCalendarData()).eq(calendar),
7272
$(data.isBooleanData()).eq(true), $(data.getDateData()).eq(calendar.getTime()), $(data.getEnumData()).eq(EntityStatusEnum.PENDING))
7373
.generate();
74-
String expectedQuery = "SELECT * FROM Data WHERE StringData = 'StringValue' AND IntData = '10' AND ByteData = '10' AND ShortData = '10' AND LongData = '10' AND FloatData = '10.0' AND DoubleData = '10.0' AND CalendarData = '" + dateString + "' AND BooleanData = true AND DateData = '" + dateString + "' AND EnumData = 'PENDING'";
74+
String expectedQuery = "SELECT * FROM Data WHERE StringData = 'StringValue' AND IntData = '10' AND ByteData = '10' AND ShortData = '10' AND LongData = '10' AND FloatData = '10.0' AND DoubleData = '10.0' AND CalendarData = '" + dateString + "' AND BooleanData = true AND DateData = '" + dateString + "' AND EnumData = 'Pending'";
7575

7676
Assert.assertEquals(expectedQuery, query);
7777
}
@@ -84,7 +84,7 @@ public void testQuery_neq() {
8484
$(data.getShortData()).neq((short) 10), $(data.getLongData()).neq((long) 10), $(data.getFloatData()).neq((float) 10),
8585
$(data.getDoubleData()).neq((double) 10), $(data.getCalendarData()).neq(calendar), $(data.isBooleanData()).neq(true),
8686
$(data.getDateData()).neq(calendar.getTime()), $(data.getEnumData()).neq(EntityStatusEnum.PENDING)).generate();
87-
String expectedQuery = "SELECT * FROM Data WHERE StringData != 'StringValue' AND IntData != '10' AND ByteData != '10' AND ShortData != '10' AND LongData != '10' AND FloatData != '10.0' AND DoubleData != '10.0' AND CalendarData != '" + dateString + "' AND BooleanData != true AND DateData != '" + dateString + "' AND EnumData != 'PENDING'";
87+
String expectedQuery = "SELECT * FROM Data WHERE StringData != 'StringValue' AND IntData != '10' AND ByteData != '10' AND ShortData != '10' AND LongData != '10' AND FloatData != '10.0' AND DoubleData != '10.0' AND CalendarData != '" + dateString + "' AND BooleanData != true AND DateData != '" + dateString + "' AND EnumData != 'Pending'";
8888
LOG.debug(query);
8989
Assert.assertEquals(expectedQuery, query);
9090
}
@@ -96,7 +96,7 @@ public void testQuery_lt() {
9696
$(data.getByteData()).lt((byte) 10), $(data.getShortData()).lt((short) 10), $(data.getLongData()).lt((long) 10),
9797
$(data.getFloatData()).lt((float) 10), $(data.getDoubleData()).lt((double) 10), $(data.getCalendarData()).lt(calendar),
9898
$(data.getDateData()).lt(calendar.getTime()), $(data.getEnumData()).lt(EntityStatusEnum.PENDING)).generate();
99-
String expectedQuery = "SELECT * FROM Data WHERE StringData < 'StringValue' AND IntData < '10' AND ByteData < '10' AND ShortData < '10' AND LongData < '10' AND FloatData < '10.0' AND DoubleData < '10.0' AND CalendarData < '" + dateString + "' AND DateData < '" + dateString + "' AND EnumData < 'PENDING'";
99+
String expectedQuery = "SELECT * FROM Data WHERE StringData < 'StringValue' AND IntData < '10' AND ByteData < '10' AND ShortData < '10' AND LongData < '10' AND FloatData < '10.0' AND DoubleData < '10.0' AND CalendarData < '" + dateString + "' AND DateData < '" + dateString + "' AND EnumData < 'Pending'";
100100
LOG.debug(query);
101101
Assert.assertEquals(expectedQuery, query);
102102
}
@@ -108,7 +108,7 @@ public void testQuery_lte() {
108108
$(data.getByteData()).lte((byte) 10), $(data.getShortData()).lte((short) 10), $(data.getLongData()).lte((long) 10),
109109
$(data.getFloatData()).lte((float) 10), $(data.getDoubleData()).lte((double) 10), $(data.getCalendarData()).lte(calendar),
110110
$(data.getDateData()).lte(calendar.getTime()), $(data.getEnumData()).lte(EntityStatusEnum.PENDING)).generate();
111-
String expectedQuery = "SELECT * FROM Data WHERE StringData <= 'StringValue' AND IntData <= '10' AND ByteData <= '10' AND ShortData <= '10' AND LongData <= '10' AND FloatData <= '10.0' AND DoubleData <= '10.0' AND CalendarData <= '" + dateString + "' AND DateData <= '" + dateString + "' AND EnumData <= 'PENDING'";
111+
String expectedQuery = "SELECT * FROM Data WHERE StringData <= 'StringValue' AND IntData <= '10' AND ByteData <= '10' AND ShortData <= '10' AND LongData <= '10' AND FloatData <= '10.0' AND DoubleData <= '10.0' AND CalendarData <= '" + dateString + "' AND DateData <= '" + dateString + "' AND EnumData <= 'Pending'";
112112
LOG.debug(query);
113113
Assert.assertEquals(expectedQuery, query);
114114
}
@@ -120,7 +120,7 @@ public void testQuery_gt() {
120120
$(data.getByteData()).gt((byte) 10), $(data.getShortData()).gt((short) 10), $(data.getLongData()).gt((long) 10),
121121
$(data.getFloatData()).gt((float) 10), $(data.getDoubleData()).gt((double) 10), $(data.getCalendarData()).gt(calendar),
122122
$(data.getDateData()).gt(calendar.getTime()), $(data.getEnumData()).gt(EntityStatusEnum.PENDING)).generate();
123-
String expectedQuery = "SELECT * FROM Data WHERE StringData > 'StringValue' AND IntData > '10' AND ByteData > '10' AND ShortData > '10' AND LongData > '10' AND FloatData > '10.0' AND DoubleData > '10.0' AND CalendarData > '" + dateString + "' AND DateData > '" + dateString + "' AND EnumData > 'PENDING'";
123+
String expectedQuery = "SELECT * FROM Data WHERE StringData > 'StringValue' AND IntData > '10' AND ByteData > '10' AND ShortData > '10' AND LongData > '10' AND FloatData > '10.0' AND DoubleData > '10.0' AND CalendarData > '" + dateString + "' AND DateData > '" + dateString + "' AND EnumData > 'Pending'";
124124
LOG.debug(query);
125125
Assert.assertEquals(expectedQuery, query);
126126
}
@@ -132,7 +132,7 @@ public void testQuery_gte() {
132132
$(data.getByteData()).gte((byte) 10), $(data.getShortData()).gte((short) 10), $(data.getLongData()).gte((long) 10),
133133
$(data.getFloatData()).gte((float) 10), $(data.getDoubleData()).gte((double) 10), $(data.getCalendarData()).gte(calendar),
134134
$(data.getDateData()).gte(calendar.getTime()), $(data.getEnumData()).gte(EntityStatusEnum.PENDING)).generate();
135-
String expectedQuery = "SELECT * FROM Data WHERE StringData >= 'StringValue' AND IntData >= '10' AND ByteData >= '10' AND ShortData >= '10' AND LongData >= '10' AND FloatData >= '10.0' AND DoubleData >= '10.0' AND CalendarData >= '" + dateString + "' AND DateData >= '" + dateString + "' AND EnumData >= 'PENDING'";
135+
String expectedQuery = "SELECT * FROM Data WHERE StringData >= 'StringValue' AND IntData >= '10' AND ByteData >= '10' AND ShortData >= '10' AND LongData >= '10' AND FloatData >= '10.0' AND DoubleData >= '10.0' AND CalendarData >= '" + dateString + "' AND DateData >= '" + dateString + "' AND EnumData >= 'Pending'";
136136
LOG.debug(query);
137137
Assert.assertEquals(expectedQuery, query);
138138
}
@@ -147,7 +147,7 @@ public void testQuery_in() {
147147
$(data.isBooleanData()).in(new Boolean[] { true, false }), $(data.getCalendarData()).in(new Calendar[] { calendar, calendar }),
148148
$(data.getDateData()).in(new Date[] { calendar.getTime(), calendar.getTime() }),
149149
$(data.getEnumData()).in(new EntityStatusEnum[] { EntityStatusEnum.PENDING, EntityStatusEnum.DELETED })).generate();
150-
String expectedQuery = "SELECT * FROM Data WHERE StringData IN ('StringValue1', 'StringValue2') AND IntData IN ('10', '20') AND ByteData IN ('10', '20') AND ShortData IN ('10', '20') AND LongData IN ('10', '20') AND FloatData IN ('10.0', '20.0') AND DoubleData IN ('10.0', '20.0') AND BooleanData IN (true, false) AND CalendarData IN ('" + dateString + "', '" + dateString + "') AND DateData IN ('" + dateString + "', '" + dateString + "') AND EnumData IN ('PENDING', 'DELETED')";
150+
String expectedQuery = "SELECT * FROM Data WHERE StringData IN ('StringValue1', 'StringValue2') AND IntData IN ('10', '20') AND ByteData IN ('10', '20') AND ShortData IN ('10', '20') AND LongData IN ('10', '20') AND FloatData IN ('10.0', '20.0') AND DoubleData IN ('10.0', '20.0') AND BooleanData IN (true, false) AND CalendarData IN ('" + dateString + "', '" + dateString + "') AND DateData IN ('" + dateString + "', '" + dateString + "') AND EnumData IN ('Pending', 'Deleted')";
151151
LOG.debug(query);
152152
Assert.assertEquals(expectedQuery, query);
153153
}

0 commit comments

Comments
 (0)