@Test
public void shouldParseProtoSchemaForNonNestedFields() {
ArrayList<Descriptors.FileDescriptor> fileDescriptors = new ArrayList<>();
fileDescriptors.add(TestMessage.getDescriptor().getFile());
fileDescriptors.add(Duration.getDescriptor().getFile());
fileDescriptors.add(Date.getDescriptor().getFile());
fileDescriptors.add(Struct.getDescriptor().getFile());
fileDescriptors.add(Timestamp.getDescriptor().getFile());
Map<String, Descriptors.Descriptor> descriptorMap = getDescriptors(fileDescriptors);
Map<String, String> typeNameToPackageNameMap = new HashMap<String, String>() {{
put(".gojek.beast.TestMessage.CurrentStateEntry", "com.gojek.beast.TestMessage.CurrentStateEntry");
put(".google.protobuf.Struct.FieldsEntry", "com.google.protobuf.Struct.FieldsEntry");
put(".google.protobuf.Duration", "com.google.protobuf.Duration");
put(".google.type.Date", "com.google.type.Date");
}};
/*
when(stencilClient.getAll()).thenReturn(descriptorMap);
when(stencilClient.getTypeNameToPackageNameMap()).thenReturn(typeNameToPackageNameMap);*/
ProtoField protoField = new ProtoField();
protoField = protoMappingParser.parseFields(protoField, "com.gojek.beast.TestMessage", descriptorMap, typeNameToPackageNameMap);
assertTestMessage(protoField.getFields());
}
private Consumer<Date> getDateRangeDateConsumer(
DatePickerPanel startDatePicker, DatePickerPanel endDatePicker) {
return date -> {
requestBuilder.getFilters().getDateFilterOrBuilder().getDatesList().clear();
requestBuilder.getFilters().getDateFilterOrBuilder().getRangesList().clear();
requestBuilder
.getFilters()
.getDateFilter()
.getRangesList()
.add(
DateRange.newBuilder()
.setStartDate(startDatePicker.getSelectedDate())
.setEndDate(endDatePicker.getSelectedDate())
.build());
};
}
public Date getSelectedDate() {
Date.Builder dateBuilder = Date.newBuilder();
OptionalInt year = tryParseInt(yearTextField.getText());
if (year.isPresent()) {
dateBuilder.setYear(year.getAsInt());
}
OptionalInt month = tryParseInt(monthTextField.getText());
if (month.isPresent()) {
dateBuilder.setMonth(month.getAsInt());
}
OptionalInt day = tryParseInt(dayTextField.getText());
if (day.isPresent()) {
dateBuilder.setDay(day.getAsInt());
}
return dateBuilder.build();
}
@Test
public void shouldParseProtoSchemaForNestedFields() {
ArrayList<Descriptors.FileDescriptor> fileDescriptors = new ArrayList<>();
fileDescriptors.add(TestMessage.getDescriptor().getFile());
fileDescriptors.add(Duration.getDescriptor().getFile());
fileDescriptors.add(Date.getDescriptor().getFile());
fileDescriptors.add(Struct.getDescriptor().getFile());
fileDescriptors.add(TestNestedMessage.getDescriptor().getFile());
Map<String, Descriptors.Descriptor> descriptorMap = getDescriptors(fileDescriptors);
Map<String, String> typeNameToPackageNameMap = new HashMap<String, String>() {{
put(".gojek.beast.TestMessage.CurrentStateEntry", "com.gojek.beast.TestMessage.CurrentStateEntry");
put(".google.protobuf.Struct.FieldsEntry", "com.google.protobuf.Struct.FieldsEntry");
put(".google.protobuf.Duration", "com.google.protobuf.Duration");
put(".google.type.Date", "com.google.type.Date");
put(".gojek.beast.TestMessage", "com.gojek.beast.TestMessage");
}};
/*when(stencilClient.getAll()).thenReturn(descriptorMap);
when(stencilClient.getTypeNameToPackageNameMap()).thenReturn(typeNameToPackageNameMap);*/
ProtoField protoField = new ProtoField();
protoField = protoMappingParser.parseFields(protoField, "com.gojek.beast.TestNestedMessage", descriptorMap, typeNameToPackageNameMap);
assertField(protoField.getFields().get(0), "nested_id", DescriptorProtos.FieldDescriptorProto.Type.TYPE_STRING, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 1);
assertField(protoField.getFields().get(1), "single_message", DescriptorProtos.FieldDescriptorProto.Type.TYPE_MESSAGE, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 2);
assertTestMessage(protoField.getFields().get(1).getFields());
}
private void assertTestMessage(List<ProtoField> fields) {
assertEquals(14, fields.size());
assertField(fields.get(0), "order_number", DescriptorProtos.FieldDescriptorProto.Type.TYPE_STRING, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 1);
assertField(fields.get(1), "order_url", DescriptorProtos.FieldDescriptorProto.Type.TYPE_STRING, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 2);
assertField(fields.get(2), "order_details", DescriptorProtos.FieldDescriptorProto.Type.TYPE_STRING, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 3);
assertField(fields.get(3), "created_at", DescriptorProtos.FieldDescriptorProto.Type.TYPE_MESSAGE, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 4);
assertField(fields.get(4), "status", DescriptorProtos.FieldDescriptorProto.Type.TYPE_ENUM, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 5);
assertField(fields.get(5), "discount", DescriptorProtos.FieldDescriptorProto.Type.TYPE_INT64, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 6);
assertField(fields.get(6), "success", DescriptorProtos.FieldDescriptorProto.Type.TYPE_BOOL, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 7);
assertField(fields.get(7), "price", DescriptorProtos.FieldDescriptorProto.Type.TYPE_FLOAT, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 8);
assertField(fields.get(8), "current_state", DescriptorProtos.FieldDescriptorProto.Type.TYPE_MESSAGE, DescriptorProtos.FieldDescriptorProto.Label.LABEL_REPEATED, 9);
assertField(fields.get(9), "user_token", DescriptorProtos.FieldDescriptorProto.Type.TYPE_BYTES, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 10);
assertField(fields.get(10), "trip_duration", DescriptorProtos.FieldDescriptorProto.Type.TYPE_MESSAGE, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 11);
assertField(fields.get(11), "aliases", DescriptorProtos.FieldDescriptorProto.Type.TYPE_STRING, DescriptorProtos.FieldDescriptorProto.Label.LABEL_REPEATED, 12);
assertField(fields.get(12), "properties", DescriptorProtos.FieldDescriptorProto.Type.TYPE_MESSAGE, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 13);
assertField(fields.get(13), "order_date", DescriptorProtos.FieldDescriptorProto.Type.TYPE_MESSAGE, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 14);
assertEquals(String.format(".%s", Duration.getDescriptor().getFullName()), fields.get(10).getTypeName());
assertEquals(2, fields.get(10).getFields().size());
assertField(fields.get(10).getFields().get(0), "seconds", DescriptorProtos.FieldDescriptorProto.Type.TYPE_INT64, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 1);
assertField(fields.get(10).getFields().get(1), "nanos", DescriptorProtos.FieldDescriptorProto.Type.TYPE_INT32, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 2);
assertEquals(String.format(".%s", Date.getDescriptor().getFullName()), fields.get(13).getTypeName());
assertEquals(3, fields.get(13).getFields().size());
assertField(fields.get(13).getFields().get(0), "year", DescriptorProtos.FieldDescriptorProto.Type.TYPE_INT32, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 1);
assertField(fields.get(13).getFields().get(1), "month", DescriptorProtos.FieldDescriptorProto.Type.TYPE_INT32, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 2);
assertField(fields.get(13).getFields().get(2), "day", DescriptorProtos.FieldDescriptorProto.Type.TYPE_INT32, DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL, 3);
}
public static Date parseAsDate(String s) {
LocalDate date = LocalDate.parse(s, DateTimeFormatter.ofPattern("MM/dd/yyyy"));
return Date.newBuilder()
.setDay(date.getDayOfMonth())
.setMonth(date.getMonthValue())
.setYear(date.getYear())
.build();
}
public static String formatDate(Date d) {
return String.format("%s/%s/%s", d.getMonth(), d.getDay(), d.getYear());
}
public void addDateConsumer(Consumer<Date> dateConsumer) {
dateConsumers.add(dateConsumer);
}
@Override
public void actionPerformed(ActionEvent e) {
for (Consumer<Date> dateConsumer : dateConsumers) {
dateConsumer.accept(getSelectedDate());
}
}