@Override protected Object getRecordState(Object r, Schema s) { Descriptor d = ((MessageOrBuilder)r).getDescriptorForType(); FieldDescriptor[] fields = fieldCache.get(d); if (fields == null) { // cache miss fields = new FieldDescriptor[s.getFields().size()]; for (Field f : s.getFields()) fields[f.pos()] = d.findFieldByName(f.name()); fieldCache.put(d, fields); // update cache } return fields; }
/** * Converts a list of MapEntry messages into a Map used for equals() and * hashCode(). */ @SuppressWarnings({"rawtypes", "unchecked"}) private static Map convertMapEntryListToMap(List list) { if (list.isEmpty()) { return Collections.emptyMap(); } Map result = new HashMap(); Iterator iterator = list.iterator(); Message entry = (Message) iterator.next(); Descriptors.Descriptor descriptor = entry.getDescriptorForType(); Descriptors.FieldDescriptor key = descriptor.findFieldByName("key"); Descriptors.FieldDescriptor value = descriptor.findFieldByName("value"); Object fieldValue = entry.getField(value); if (fieldValue instanceof EnumValueDescriptor) { fieldValue = ((EnumValueDescriptor) fieldValue).getNumber(); } result.put(entry.getField(key), fieldValue); while (iterator.hasNext()) { entry = (Message) iterator.next(); fieldValue = entry.getField(value); if (fieldValue instanceof EnumValueDescriptor) { fieldValue = ((EnumValueDescriptor) fieldValue).getNumber(); } result.put(entry.getField(key), fieldValue); } return result; }
private static void writeMap(Collection<MapEntry> mapEntries, JsonWriter writer) { writer.beginObject(); for (MapEntry mapEntry : mapEntries) { // Key fields are always double-quoted in json writer.name(mapEntry.getKey().toString()); Descriptors.FieldDescriptor valueDescriptor = mapEntry.getDescriptorForType().findFieldByName("value"); writeFieldValue(valueDescriptor, mapEntry.getValue(), writer); } writer.endObject(); }
private void mergeStruct(JsonElement json, Message.Builder builder) throws InvalidProtocolBufferException { Descriptor descriptor = builder.getDescriptorForType(); FieldDescriptor field = descriptor.findFieldByName("fields"); if (field == null) { throw new InvalidProtocolBufferException("Invalid Struct type."); } mergeMapField(field, json, builder); }
/** Prints google.protobuf.Struct */ private void printStruct(MessageOrBuilder message) throws IOException { Descriptor descriptor = message.getDescriptorForType(); FieldDescriptor field = descriptor.findFieldByName("fields"); if (field == null) { throw new InvalidProtocolBufferException("Invalid Struct type."); } // Struct is formatted as a map object. printMapFieldValue(field, message.getField(field)); }
private void mergeListValue(JsonElement json, Message.Builder builder) throws InvalidProtocolBufferException { Descriptor descriptor = builder.getDescriptorForType(); FieldDescriptor field = descriptor.findFieldByName("values"); if (field == null) { throw new InvalidProtocolBufferException("Invalid ListValue type."); } mergeRepeatedField(field, json, builder); }
/** Prints google.protobuf.ListValue */ private void printListValue(MessageOrBuilder message) throws IOException { Descriptor descriptor = message.getDescriptorForType(); FieldDescriptor field = descriptor.findFieldByName("values"); if (field == null) { throw new InvalidProtocolBufferException("Invalid ListValue type."); } printRepeatedFieldValue(field, message.getField(field)); }
@Nonnull protected Descriptors.FieldDescriptor validateFieldExistence(@Nonnull Descriptors.Descriptor descriptor) { Descriptors.FieldDescriptor field = descriptor.findFieldByName(fieldName); if (field == null) { throw new Query.InvalidExpressionException("Missing field " + fieldName); } return field; }
public List<Descriptors.FieldDescriptor> validate(@Nonnull Descriptors.Descriptor parentDescriptor, boolean allowMessageType) { final Descriptors.FieldDescriptor fieldDescriptor = parentDescriptor.findFieldByName(fieldName); validate(parentDescriptor, fieldDescriptor, allowMessageType); return Collections.singletonList(fieldDescriptor); }
@Override public void copy(@Nonnull Descriptors.Descriptor recordDescriptor, @Nonnull Message.Builder recordBuilder, @Nonnull IndexEntry kv) { final Descriptors.FieldDescriptor fieldDescriptor = recordDescriptor.findFieldByName(field); switch (fieldDescriptor.getType()) { case MESSAGE: break; default: throw new RecordCoreException("only nested message should be handled by MessageCopier"); } recordBuilder.setField(fieldDescriptor, nested.toRecord(fieldDescriptor.getMessageType(), kv)); }
field = type.findFieldByName(name); field = type.findFieldByName(lowerName);
sb.append(getLastComponent(fd.getMessageType().getFullName())); sb.append("\",\"values\":["); Descriptors.FieldDescriptor childDescriptor = requestDesc.findFieldByName(fd.getName()); Message.Builder subMessageBuilder = builder.newBuilderForField(childDescriptor); Message subMessage = subMessageBuilder.build();
byte[] userKey = Base64.decodeBase64(urlsafeKey); DynamicMessage userKeyMessage = DynamicMessage.newBuilder(referenceDescriptor).mergeFrom(userKey).build(); String app = (String) userKeyMessage.getField(referenceDescriptor.findFieldByName("app")); if (app.startsWith("s~")) { app = app.substring(2); DynamicMessage path = (DynamicMessage) userKeyMessage.getField(referenceDescriptor.findFieldByName("path")); Descriptors.Descriptor pathDescriptor = keyDescriptor.findMessageTypeByName("Path"); Descriptors.Descriptor elementDescriptor = keyDescriptor.findMessageTypeByName("Element"); Descriptors.FieldDescriptor elementFieldDescriptor = pathDescriptor.findFieldByName("Element"); int elementCount = path.getRepeatedFieldCount(elementFieldDescriptor); Key key = null; for (int i = 0; i < elementCount; i++) { DynamicMessage element = (DynamicMessage) path.getRepeatedField(elementFieldDescriptor, i); String type = (String) element.getField(elementDescriptor.findFieldByName("type")); Long id = (Long) element.getField(elementDescriptor.findFieldByName("id")); String name = (String) element.getField(elementDescriptor.findFieldByName("name")); if (key == null) { if (name != null && !"".equals(name)) {
fullProjectId = "s~" + fullProjectId; keyMessageBuilder.setField(referenceDescriptor.findFieldByName("app"), fullProjectId); Descriptors.Descriptor elementDescriptor = keyDescriptor.findMessageTypeByName("Element"); do { DynamicMessage.Builder elementMessageBuilder = DynamicMessage.newBuilder(elementDescriptor); elementMessageBuilder.setField(elementDescriptor.findFieldByName("type"), key.getKind()); if (key.getName() != null) { elementMessageBuilder.setField(elementDescriptor.findFieldByName("name"), key.getName()); } else { elementMessageBuilder.setField(elementDescriptor.findFieldByName("id"), key.getId()); DynamicMessage.Builder pathBuilder = DynamicMessage.newBuilder(pathDescriptor); for (DynamicMessage elementMessage: elementMessages) { pathBuilder.addRepeatedField(pathDescriptor.findFieldByName("Element"), elementMessage); keyMessageBuilder.setField(referenceDescriptor.findFieldByName("path"), pathBuilder.build()); return Base64.encodeBase64URLSafeString(keyMessageBuilder.build().toByteArray());
} else { final String name = tokenizer.consumeIdentifier(); field = type.findFieldByName(name); field = type.findFieldByName(lowerName);
} else { final String name = tokenizer.consumeIdentifier(); field = type.findFieldByName(name); field = type.findFieldByName(lowerName);
public long extractTimestampMillis(String topic, final byte[] bytes) throws IOException { if (timestampFieldPath != null) { com.google.protobuf.Message decodedMessage = protobufUtil.decodeProtobufOrJsonMessage(topic, bytes); int i = 0; for (; i < timestampFieldPath.length - 1; ++i) { decodedMessage = (com.google.protobuf.Message) decodedMessage .getField(decodedMessage.getDescriptorForType().findFieldByName(timestampFieldPath[i])); } Object timestampObject = decodedMessage .getField(decodedMessage.getDescriptorForType().findFieldByName(timestampFieldPath[i])); if (timestampObject instanceof com.google.protobuf.Timestamp){ return Timestamps.toMillis((com.google.protobuf.Timestamp) timestampObject); }else { return toMillis((Long) timestampObject); } } else { // Assume that the timestamp field is the first field, is required, // and is a uint64. CodedInputStream input = CodedInputStream.newInstance(bytes); // Don't really care about the tag, but need to read it to get, to // the payload. input.readTag(); return toMillis(input.readUInt64()); } } }
@Override protected FieldDescriptor loadDescriptor() { return scope.getDescriptorForType().findFieldByName(name); } },
private boolean hasField(IRubyObject fieldName) { String nameStr = fieldName.asJavaString(); return this.descriptor.findFieldByName(Utils.escapeIdentifier(nameStr)) != null; }
private Descriptors.FieldDescriptor findField(ThreadContext context, IRubyObject fieldName) { String nameStr = fieldName.asJavaString(); Descriptors.FieldDescriptor ret = this.descriptor.findFieldByName(Utils.escapeIdentifier(nameStr)); if (ret == null) throw context.runtime.newArgumentError("field " + fieldName.asJavaString() + " is not found"); return ret; }