Skip to content

Commit 9812f64

Browse files
authored
Merge pull request #135 from cloudsufi/feature/PLUGIN-1942
PLUGIN-1942: Update the plugin code to replace `enableNewDataTypes` with `legacyMapping`
2 parents b9948a7 + 393855e commit 9812f64

15 files changed

+49
-48
lines changed

src/main/java/io/cdap/plugin/servicenow/apiclient/ServiceNowTableAPIClientImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -311,11 +311,11 @@ private SchemaType getSchemaTypeBasedOnUseConnection(Boolean useConnection) {
311311
* @param accessToken Access Token to use
312312
* @param valueType Type of value (Actual/Display)
313313
* @param schemaType Enum to determine which approach to take to fetch schema.
314-
* @param enableNewDataTypes Flag to enable new data types
314+
* @param legacyMapping Boolean Flag to determine whether to use legacy mapping for data types.
315315
* @return schema for given ServiceNow table
316316
*/
317317
public Schema fetchTableSchema(String tableName, String accessToken, SourceValueType valueType,
318-
SchemaType schemaType, Boolean enableNewDataTypes)
318+
SchemaType schemaType, Boolean legacyMapping)
319319
throws ServiceNowAPIException {
320320
ServiceNowTableAPIRequestBuilder requestBuilder = new ServiceNowTableAPIRequestBuilder(
321321
this.conf.getRestApiEndpoint(), tableName, true, schemaType)
@@ -327,7 +327,7 @@ public Schema fetchTableSchema(String tableName, String accessToken, SourceValue
327327
List<ServiceNowColumn> columns = new ArrayList<>();
328328

329329
if (schemaType == SchemaType.METADATA_API_BASED) {
330-
return prepareSchemaWithMetadataAPI(restAPIResponse, columns, tableName, valueType, enableNewDataTypes);
330+
return prepareSchemaWithMetadataAPI(restAPIResponse, columns, tableName, valueType, legacyMapping);
331331
} else if (schemaType == SchemaType.SCHEMA_API_BASED) {
332332
return prepareSchemaWithSchemaAPI(restAPIResponse, columns, tableName);
333333
} else {
@@ -386,7 +386,7 @@ private Schema prepareSchemaWithSchemaAPI(RestAPIResponse restAPIResponse, List<
386386
* @throws RuntimeException if the response does not contain valid column information.
387387
*/
388388
private Schema prepareSchemaWithMetadataAPI(RestAPIResponse restAPIResponse, List<ServiceNowColumn> columns,
389-
String tableName, SourceValueType valueType, Boolean enableNewDataTypes) throws ServiceNowAPIException {
389+
String tableName, SourceValueType valueType, Boolean legacyMapping) throws ServiceNowAPIException {
390390
MetadataAPISchemaResponse metadataAPISchemaResponse = parseSchemaResponse(restAPIResponse.getResponseBody());
391391

392392
if (metadataAPISchemaResponse.getResult() == null || metadataAPISchemaResponse.getResult().getColumns() == null ||
@@ -411,7 +411,7 @@ private Schema prepareSchemaWithMetadataAPI(RestAPIResponse restAPIResponse, Lis
411411
columns.add(new ServiceNowColumn(field.getName(), field.getInternalType()));
412412
}
413413
}
414-
return SchemaBuilder.constructSchema(tableName, columns, enableNewDataTypes);
414+
return SchemaBuilder.constructSchema(tableName, columns, legacyMapping);
415415
}
416416

417417
/**

src/main/java/io/cdap/plugin/servicenow/connector/ServiceNowRecordConverter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public class ServiceNowRecordConverter {
8484
));
8585

8686
public static void convertToValue(String fieldName, Schema fieldSchema, Map<String, String> record,
87-
StructuredRecord.Builder recordBuilder, Boolean enableNewDataTypes) {
87+
StructuredRecord.Builder recordBuilder, Boolean legacyMapping) {
8888
String fieldValue = record.get(fieldName);
8989
if (fieldValue == null || fieldValue.isEmpty()) {
9090
// Set 'null' value as it is
@@ -130,7 +130,7 @@ public static void convertToValue(String fieldName, Schema fieldSchema, Map<Stri
130130
recordBuilder.set(fieldName, convertToBooleanValue(fieldValue));
131131
return;
132132
case ARRAY:
133-
recordBuilder.set(fieldName, enableNewDataTypes.equals(Boolean.TRUE) ? convertToList(fieldValue) : fieldValue);
133+
recordBuilder.set(fieldName, legacyMapping.equals(Boolean.FALSE) ? convertToList(fieldValue) : fieldValue);
134134
return;
135135
default:
136136
throw new IllegalStateException(

src/main/java/io/cdap/plugin/servicenow/source/ServiceNowBaseSourceConfig.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,11 @@ public class ServiceNowBaseSourceConfig extends ServiceNowBaseConfig {
7575
@Description("The number of records to fetch from ServiceNow. Default is 5000.")
7676
private Integer pageSize;
7777

78-
@Name(ServiceNowConstants.PROPERTY_ENABLE_NEW_DATA_TYPES)
78+
@Name(ServiceNowConstants.PROPERTY_LEGACY_MAPPING)
7979
@Nullable
80-
@Description("Enable support for new data types such as array (glide_list) ")
81-
private Boolean enableNewDataTypes;
80+
@Description("Specifies whether to use legacy mapping for data types. If true, uses legacy mapping; if false, uses" +
81+
" updated mapping. Default is true.")
82+
private Boolean legacyMapping;
8283

8384
/**
8485
* Constructor for ServiceNowSourceConfig object.
@@ -98,15 +99,15 @@ public class ServiceNowBaseSourceConfig extends ServiceNowBaseConfig {
9899
public ServiceNowBaseSourceConfig(String referenceName, String clientId, String clientSecret, String restApiEndpoint,
99100
String user, String password, String tableNameField, String valueType,
100101
@Nullable String startDate, @Nullable String endDate, Integer pageSize,
101-
Boolean enableNewDataTypes) {
102+
Boolean legacyMapping) {
102103
super(clientId, clientSecret, restApiEndpoint, user, password);
103104
this.referenceName = referenceName;
104105
this.tableNameField = tableNameField;
105106
this.valueType = valueType;
106107
this.startDate = startDate;
107108
this.endDate = endDate;
108109
this.pageSize = pageSize;
109-
this.enableNewDataTypes = enableNewDataTypes;
110+
this.legacyMapping = legacyMapping;
110111
}
111112

112113
public String getReferenceName() {
@@ -131,8 +132,8 @@ public Integer getPageSize() {
131132
return pageSize == null ? ServiceNowConstants.PAGE_SIZE : pageSize;
132133
}
133134

134-
public Boolean getEnableNewDataTypes() {
135-
return enableNewDataTypes == null ? Boolean.FALSE : enableNewDataTypes;
135+
public Boolean getLegacyMapping() {
136+
return legacyMapping == null ? Boolean.TRUE : legacyMapping;
136137
}
137138

138139
/**

src/main/java/io/cdap/plugin/servicenow/source/ServiceNowMultiRecordReader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class ServiceNowMultiRecordReader extends ServiceNowBaseRecordReader {
3636

3737
private final ServiceNowMultiSourceConfig multiSourcePluginConf;
3838
private ServiceNowTableAPIClientImpl restApi;
39-
private Boolean enableNewDataTypes;
39+
private Boolean legacyMapping;
4040

4141
ServiceNowMultiRecordReader(ServiceNowMultiSourceConfig multiSourcePluginConf) {
4242
super();
@@ -83,7 +83,7 @@ public StructuredRecord getCurrentValue() throws IOException {
8383
for (Schema.Field field : tableFields) {
8484
String fieldName = field.getName();
8585
ServiceNowRecordConverter.convertToValue(fieldName, field.getSchema(), row, recordBuilder,
86-
multiSourcePluginConf.getEnableNewDataTypes());
86+
multiSourcePluginConf.getLegacyMapping());
8787
}
8888
} catch (Exception e) {
8989
throw new IOException("Error decoding row from table " + tableName, e);

src/main/java/io/cdap/plugin/servicenow/source/ServiceNowMultiSourceConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ public class ServiceNowMultiSourceConfig extends ServiceNowBaseSourceConfig {
5555
public ServiceNowMultiSourceConfig(String referenceName, String clientId, String clientSecret, String restApiEndpoint,
5656
String user, String password, String tableNameField, String valueType,
5757
@Nullable String startDate, @Nullable String endDate, Integer pageSize,
58-
String tableNames, Boolean enableNewDataTypes) {
58+
String tableNames, Boolean legacyMapping) {
5959
super(referenceName, clientId, clientSecret, restApiEndpoint, user, password, tableNameField, valueType, startDate,
60-
endDate, pageSize, enableNewDataTypes);
60+
endDate, pageSize, legacyMapping);
6161
this.tableNames = tableNames;
6262
}
6363

src/main/java/io/cdap/plugin/servicenow/source/ServiceNowRecordReader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class ServiceNowRecordReader extends ServiceNowBaseRecordReader {
3838
private static final Logger LOG = LoggerFactory.getLogger(ServiceNowRecordReader.class);
3939
private final ServiceNowSourceConfig pluginConf;
4040
private ServiceNowTableAPIClientImpl restApi;
41-
private Boolean enableNewDataTypes;
41+
private Boolean legacyMapping;
4242

4343
public ServiceNowRecordReader(ServiceNowSourceConfig pluginConf) {
4444
super();
@@ -96,7 +96,7 @@ public StructuredRecord getCurrentValue() throws IOException {
9696
for (Schema.Field field : tableFields) {
9797
String fieldName = field.getName();
9898
ServiceNowRecordConverter.convertToValue(fieldName, field.getSchema(), row, recordBuilder,
99-
pluginConf.getEnableNewDataTypes());
99+
pluginConf.getLegacyMapping());
100100
}
101101
} catch (Exception e) {
102102
LOG.error("Error decoding row from table " + tableName, e);

src/main/java/io/cdap/plugin/servicenow/source/ServiceNowSourceConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ public ServiceNowSourceConfig(String referenceName, String queryMode, @Nullable
7979
@Nullable String tableNameField, @Nullable String tableName, String clientId,
8080
String clientSecret, String restApiEndpoint, String user, String password,
8181
String valueType, @Nullable String startDate, @Nullable String endDate,
82-
Integer pageSize, Boolean enableNewDataTypes) {
82+
Integer pageSize, Boolean legacyMapping) {
8383
super(referenceName, clientId, clientSecret, restApiEndpoint, user, password, tableNameField, valueType, startDate,
84-
endDate, pageSize, enableNewDataTypes);
84+
endDate, pageSize, legacyMapping);
8585
this.referenceName = referenceName;
8686
this.queryMode = queryMode;
8787
this.applicationName = applicationName;

src/main/java/io/cdap/plugin/servicenow/util/SchemaBuilder.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,27 +34,27 @@ public class SchemaBuilder {
3434
* @param columns The list of ServiceNowColumn objects that will be added as Schema.Field
3535
* @return The instance of Schema object
3636
*/
37-
public static Schema constructSchema(String tableName, List<ServiceNowColumn> columns, boolean enableNewDataTypes) {
37+
public static Schema constructSchema(String tableName, List<ServiceNowColumn> columns, boolean legacyMapping) {
3838
SchemaBuilder schemaBuilder = new SchemaBuilder();
39-
List<Schema.Field> fields = schemaBuilder.constructSchemaFields(columns, enableNewDataTypes);
39+
List<Schema.Field> fields = schemaBuilder.constructSchemaFields(columns, legacyMapping);
4040

4141
return Schema.recordOf(tableName, fields);
4242
}
4343

44-
private List<Schema.Field> constructSchemaFields(List<ServiceNowColumn> columns, Boolean enableNewDataTypes) {
44+
private List<Schema.Field> constructSchemaFields(List<ServiceNowColumn> columns, Boolean legacyMapping) {
4545
return columns.stream()
46-
.map(o -> transformToField(o, enableNewDataTypes))
46+
.map(o -> transformToField(o, legacyMapping))
4747
.filter(Objects::nonNull)
4848
.collect(Collectors.toList());
4949
}
5050

51-
private Schema.Field transformToField(ServiceNowColumn column, Boolean enableNewDataTypes) {
51+
private Schema.Field transformToField(ServiceNowColumn column, Boolean legacyMapping) {
5252
String name = column.getFieldName();
5353
if (Strings.isNullOrEmpty(name)) {
5454
return null;
5555
}
5656

57-
Schema schema = createSchema(column, enableNewDataTypes);
57+
Schema schema = createSchema(column, legacyMapping);
5858
if (schema == null) {
5959
return null;
6060
}
@@ -64,7 +64,7 @@ private Schema.Field transformToField(ServiceNowColumn column, Boolean enableNew
6464
: Schema.Field.of(name, Schema.nullableOf(schema));
6565
}
6666

67-
private Schema createSchema(ServiceNowColumn column, Boolean enableNewDataTypes) {
67+
private Schema createSchema(ServiceNowColumn column, Boolean legacyMapping) {
6868
switch (column.getTypeName().toLowerCase()) {
6969
case "decimal":
7070
return Schema.of(Schema.Type.DOUBLE);
@@ -79,7 +79,7 @@ private Schema createSchema(ServiceNowColumn column, Boolean enableNewDataTypes)
7979
case "glide_time":
8080
return Schema.of(Schema.LogicalType.TIME_MICROS);
8181
case "glide_list":
82-
return enableNewDataTypes.equals(Boolean.TRUE) ? Schema.arrayOf(Schema.of(Schema.Type.STRING)) :
82+
return legacyMapping.equals(Boolean.FALSE) ? Schema.arrayOf(Schema.of(Schema.Type.STRING)) :
8383
Schema.of(Schema.Type.STRING);
8484
case "reference":
8585
case "currency":

src/main/java/io/cdap/plugin/servicenow/util/ServiceNowConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public interface ServiceNowConstants {
5454
/**
5555
* Configuration property name used to enable new data types.
5656
*/
57-
String PROPERTY_ENABLE_NEW_DATA_TYPES = "enableNewDataTypes";
57+
String PROPERTY_LEGACY_MAPPING = "legacyMapping";
5858

5959
/**
6060
* Configuration property name used to specify table names.

src/test/java/io/cdap/plugin/servicenow/apiclient/ServiceNowTableAPIClientImplTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ public void testFetchTableSchema_WithGlide_ListType_ParseAsArray() throws Except
253253
RestAPIResponse mockResponse = new RestAPIResponse(Collections.emptyMap(), jsonResponse, null);
254254
Mockito.doReturn(mockResponse).when(implSpy).executeGetWithRetries(Mockito.any());
255255
Schema schema = implSpy.fetchTableSchema("u_custom_13", "dummy-access-token",
256-
SourceValueType.SHOW_ACTUAL_VALUE, SchemaType.METADATA_API_BASED, true);
256+
SourceValueType.SHOW_ACTUAL_VALUE, SchemaType.METADATA_API_BASED, false);
257257
Assert.assertNotNull(schema);
258258
Assert.assertEquals("record", schema.getDisplayName());
259259
Assert.assertEquals(2, schema.getFields().size());
@@ -291,7 +291,7 @@ public void testFetchTableSchema_WithGlide_ListType_ParseAsString() throws Excep
291291
RestAPIResponse mockResponse = new RestAPIResponse(Collections.emptyMap(), jsonResponse, null);
292292
Mockito.doReturn(mockResponse).when(implSpy).executeGetWithRetries(Mockito.any());
293293
Schema schema = implSpy.fetchTableSchema("u_custom_13", "dummy-access-token",
294-
SourceValueType.SHOW_ACTUAL_VALUE, SchemaType.METADATA_API_BASED, false);
294+
SourceValueType.SHOW_ACTUAL_VALUE, SchemaType.METADATA_API_BASED, true);
295295
Assert.assertNotNull(schema);
296296
Assert.assertEquals("record", schema.getDisplayName());
297297
Assert.assertEquals(2, schema.getFields().size());

0 commit comments

Comments
 (0)