/** * 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.telegram; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriParams; import org.apache.camel.spi.UriPath; /** * Bean holding the configuration of the telegram component. */ @UriParams public class TelegramConfiguration { public static final String ENDPOINT_TYPE_BOTS = "bots"; @UriPath(description = "The endpoint type. Currently, only the 'bots' type is supported.", enums = ENDPOINT_TYPE_BOTS) @Metadata(required = "true") private String type; @UriPath(label = "security", description = "The authorization token for using the bot (ask the BotFather), eg. 654321531:HGF_dTra456323dHuOedsE343211fqr3t-H.") @Metadata(required = "true") private String authorizationToken; @UriParam(description = "The identifier of the chat that will receive the produced messages. Chat ids can be first obtained from incoming messages " + "(eg. when a telegram user starts a conversation with a bot, its client sends automatically a '/start' message containing the chat id). " + "It is an optional parameter, as the chat id can be set dynamically for each outgoing message (using body or headers).", label = "producer") private String chatId; @UriParam(description = "Timeout in seconds for long polling. Put 0 for short polling or a bigger number for long polling. Long polling produces shorter response time.", optionalPrefix = "consumer.", defaultValue = "30", label = "consumer") private Integer timeout = 30; @UriParam(description = "Limit on the number of updates that can be received in a single polling request.", optionalPrefix = "consumer.", defaultValue = "100", label = "consumer") private Integer limit = 100; public TelegramConfiguration() { } /** * Sets the remaining configuration parameters available in the URI. * * @param remaining the URI part after the scheme * @param defaultAuthorizationToken the default authorization token to use if not present in the URI */ public void updatePathConfig(String remaining, String defaultAuthorizationToken) { String[] parts = remaining.split("/"); if (parts.length == 0 || parts.length > 2) { throw new IllegalArgumentException("Unexpected URI format. Expected 'bots' or 'bots/<authorizationToken>', found '" + remaining + "'"); } String type = parts[0]; if (!type.equals(ENDPOINT_TYPE_BOTS)) { throw new IllegalArgumentException("Unexpected endpoint type. Expected 'bots', found '" + type + "'"); } String authorizationToken = defaultAuthorizationToken; if (parts.length > 1) { authorizationToken = parts[1]; } if (authorizationToken == null || authorizationToken.trim().length() == 0) { throw new IllegalArgumentException("The authorization token must be provided and cannot be empty"); } this.type = type; this.authorizationToken = authorizationToken; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getAuthorizationToken() { return authorizationToken; } public void setAuthorizationToken(String authorizationToken) { this.authorizationToken = authorizationToken; } public String getChatId() { return chatId; } public void setChatId(String chatId) { this.chatId = chatId; } public Integer getTimeout() { return timeout; } public void setTimeout(Integer timeout) { this.timeout = timeout; } public Integer getLimit() { return limit; } public void setLimit(Integer limit) { this.limit = limit; } @Override public String toString() { final StringBuilder sb = new StringBuilder("TelegramConfiguration{"); sb.append("type='").append(type).append('\''); sb.append(", authorizationToken='").append(authorizationToken).append('\''); sb.append(", chatId='").append(chatId).append('\''); sb.append(", timeout=").append(timeout); sb.append(", limit=").append(limit); sb.append('}'); return sb.toString(); } }