/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.component.avro; import java.net.URI; import java.util.Map; import org.apache.avro.Protocol; import org.apache.camel.RuntimeCamelException; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriParams; import org.apache.camel.spi.UriPath; import org.apache.commons.lang.StringUtils; import static org.apache.camel.component.avro.AvroConstants.AVRO_MESSAGE_NAME_SEPARATOR; @UriParams public class AvroConfiguration implements Cloneable { @UriPath @Metadata(required = "true") private AvroTransport transport; @UriPath @Metadata(required = "true") private String host; @UriPath @Metadata(required = "true") private int port; @UriPath private String messageName; @UriParam private String protocolLocation; @UriParam private Protocol protocol; @UriParam private String protocolClassName; @UriParam private String uriAuthority; @UriParam private boolean reflectionProtocol; @UriParam private boolean singleParameter; public AvroConfiguration copy() { try { AvroConfiguration answer = (AvroConfiguration)clone(); return answer; } catch (CloneNotSupportedException e) { throw new RuntimeCamelException(e); } } public void parseURI(URI uri, Map<String, Object> parameters, AvroComponent component) throws Exception { transport = AvroTransport.valueOf(uri.getScheme()); setHost(uri.getHost()); setPort(uri.getPort()); if ((uri.getPath() != null) && (StringUtils.indexOf(uri.getPath(), AVRO_MESSAGE_NAME_SEPARATOR) != -1)) { String path = StringUtils.substringAfter(uri.getPath(), AVRO_MESSAGE_NAME_SEPARATOR); if (!path.contains(AVRO_MESSAGE_NAME_SEPARATOR)) { setMessageName(path); } else { throw new IllegalArgumentException("Unrecognized Avro message name: " + path + " for uri: " + uri); } } setUriAuthority(uri.getAuthority()); } public String getHost() { return host; } /** * Hostname to use */ public void setHost(String host) { this.host = host; } public int getPort() { return port; } /** * Port number to use */ public void setPort(int port) { this.port = port; } public Protocol getProtocol() { return protocol; } /** * Avro protocol to use */ public void setProtocol(Protocol protocol) { this.protocol = protocol; } public AvroTransport getTransport() { return transport; } /** * Transport to use */ public void setTransport(String transport) { this.transport = AvroTransport.valueOf(transport); } public void setTransport(AvroTransport transport) { this.transport = transport; } public String getProtocolLocation() { return protocolLocation; } /** * Avro protocol location */ public void setProtocolLocation(String protocolLocation) { this.protocolLocation = protocolLocation; } public String getProtocolClassName() { return protocolClassName; } /** * Avro protocol to use defined by the FQN class name */ public void setProtocolClassName(String protocolClassName) { this.protocolClassName = protocolClassName; } public String getMessageName() { return messageName; } /** * The name of the message to send. */ public void setMessageName(String messageName) { this.messageName = messageName; } public String getUriAuthority() { return uriAuthority; } /** * Authority to use (username and password) */ public void setUriAuthority(String uriAuthority) { this.uriAuthority = uriAuthority; } public boolean isReflectionProtocol() { return reflectionProtocol; } /** * If protocol object provided is reflection protocol. Should be used only with protocol parameter because for protocolClassName protocol type will be auto detected */ public void setReflectionProtocol(boolean isReflectionProtocol) { this.reflectionProtocol = isReflectionProtocol; } public boolean isSingleParameter() { return singleParameter; } /** * If true, consumer parameter won't be wrapped into array. Will fail if protocol specifies more then 1 parameter for the message */ public void setSingleParameter(boolean singleParameter) { this.singleParameter = singleParameter; } }