ProtoTypeMetadata(BaseMarshaller<?> marshaller) { this.marshaller = marshaller; this.name = marshaller.getTypeName(); this.javaClass = marshaller.getJavaClass(); this.documentation = null; }
@Override public void registerMarshaller(BaseMarshaller<?> marshaller) { if (marshaller == null) { throw new IllegalArgumentException("marshaller argument cannot be null"); } BaseMarshallerDelegate<?> marshallerDelegate = makeMarshallerDelegate(marshaller); marshallersByName.put(marshaller.getTypeName(), marshallerDelegate); marshallersByClass.put(marshaller.getJavaClass(), marshallerDelegate); }
@Override public void unregisterMarshaller(BaseMarshaller<?> marshaller) { if (marshaller == null) { throw new IllegalArgumentException("marshaller argument cannot be null"); } BaseMarshallerDelegate<?> marshallerDelegate = marshallersByName.get(marshaller.getTypeName()); if (marshallerDelegate == null || marshallerDelegate.getMarshaller() != marshaller) { throw new IllegalArgumentException("The given marshaller is not registered"); } marshallersByName.remove(marshaller.getTypeName()); marshallersByClass.remove(marshaller.getJavaClass()); }
private BaseMarshallerDelegate<?> makeMarshallerDelegate(BaseMarshaller<?> marshaller) { if (marshaller.getJavaClass().isEnum() && !(marshaller instanceof EnumMarshaller)) { throw new IllegalArgumentException("Invalid marshaller (the produced class is a Java Enum but the marshaller is not an EnumMarshaller) : " + marshaller); } // we try to validate first that a message descriptor exists if (marshaller instanceof EnumMarshaller) { if (!marshaller.getJavaClass().isEnum()) { throw new IllegalArgumentException("Invalid enum marshaller (the produced class is not a Java Enum) : " + marshaller); } EnumDescriptor enumDescriptor = getEnumDescriptor(marshaller.getTypeName()); return new EnumMarshallerDelegate<>((EnumMarshaller<?>) marshaller, enumDescriptor); } else if (marshaller instanceof RawProtobufMarshaller) { return new RawProtobufMarshallerDelegate<>(this, (RawProtobufMarshaller<?>) marshaller); } Descriptor messageDescriptor = getMessageDescriptor(marshaller.getTypeName()); return new MessageMarshallerDelegate<>(this, (MessageMarshaller<?>) marshaller, messageDescriptor); }