diff --git a/library/src/main/java/com/pengrad/telegrambot/BotUtils.java b/library/src/main/java/com/pengrad/telegrambot/BotUtils.java index d7c37c5f..474618a8 100644 --- a/library/src/main/java/com/pengrad/telegrambot/BotUtils.java +++ b/library/src/main/java/com/pengrad/telegrambot/BotUtils.java @@ -16,7 +16,7 @@ public class BotUtils { private BotUtils() {} - private static Gson gson = new Gson(); + private static final Gson gson = new Gson(); public static Update parseUpdate(String update) { return gson.fromJson(update, Update.class); @@ -35,4 +35,11 @@ static byte[] getBytesFromInputStream(InputStream is) throws IOException { return os.toByteArray(); } + public static R fromJson(String jsonString, Class resClass) { + return gson.fromJson(jsonString,resClass); + } + + public static String toJson(Object obj) { + return gson.toJson(obj); + } } diff --git a/library/src/main/java/com/pengrad/telegrambot/Callback.java b/library/src/main/java/com/pengrad/telegrambot/Callback.java index 127452e8..2dda9edc 100644 --- a/library/src/main/java/com/pengrad/telegrambot/Callback.java +++ b/library/src/main/java/com/pengrad/telegrambot/Callback.java @@ -9,7 +9,7 @@ * stas * 5/3/16. */ -public interface Callback { +public interface Callback, R extends BaseResponse> { void onResponse(T request, R response); diff --git a/library/src/main/java/com/pengrad/telegrambot/TelegramBot.java b/library/src/main/java/com/pengrad/telegrambot/TelegramBot.java index f98aed7f..37242842 100644 --- a/library/src/main/java/com/pengrad/telegrambot/TelegramBot.java +++ b/library/src/main/java/com/pengrad/telegrambot/TelegramBot.java @@ -8,16 +8,16 @@ import com.pengrad.telegrambot.request.BaseRequest; import com.pengrad.telegrambot.request.GetUpdates; import com.pengrad.telegrambot.response.BaseResponse; +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; +import okhttp3.logging.HttpLoggingInterceptor; +import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.util.concurrent.TimeUnit; -import okhttp3.Interceptor; -import okhttp3.OkHttpClient; -import okhttp3.logging.HttpLoggingInterceptor; - /** * Stas Parshin * 16 October 2015 @@ -38,7 +38,7 @@ public TelegramBot(String botToken) { this.updatesHandler = builder.updatesHandler; } - public R execute(BaseRequest request) { + public , R extends BaseResponse> R execute(BaseRequest request) { return api.send(request); } @@ -50,13 +50,12 @@ public String getFullFilePath(File file) { return fileApi.getFullFilePath(file.filePath()); } - public byte[] getFileContent(File file) throws Exception { + public byte[] getFileContent(File file) throws IOException { String fileUrl = getFullFilePath(file); URLConnection connection = new URL(fileUrl).openConnection(); - InputStream is = connection.getInputStream(); - byte[] data = BotUtils.getBytesFromInputStream(is); - is.close(); - return data; + try (InputStream is = connection.getInputStream()) { + return BotUtils.getBytesFromInputStream(is); + } } public void setUpdatesListener(UpdatesListener listener) { diff --git a/library/src/main/java/com/pengrad/telegrambot/UpdatesListener.java b/library/src/main/java/com/pengrad/telegrambot/UpdatesListener.java index 0f6e8615..6bc906dc 100644 --- a/library/src/main/java/com/pengrad/telegrambot/UpdatesListener.java +++ b/library/src/main/java/com/pengrad/telegrambot/UpdatesListener.java @@ -13,6 +13,15 @@ public interface UpdatesListener { int CONFIRMED_UPDATES_ALL = -1; int CONFIRMED_UPDATES_NONE = -2; + /** + * Callback handler with available updates + * + * @param updates available updates + * @return id of the last processed update which should not be re-delivered + * There are 2 convienient values: + * @see #CONFIRMED_UPDATES_ALL + * @see #CONFIRMED_UPDATES_NONE + */ int process(List updates); } diff --git a/library/src/main/java/com/pengrad/telegrambot/impl/TelegramBotClient.java b/library/src/main/java/com/pengrad/telegrambot/impl/TelegramBotClient.java index 2446c99f..2d042dcc 100644 --- a/library/src/main/java/com/pengrad/telegrambot/impl/TelegramBotClient.java +++ b/library/src/main/java/com/pengrad/telegrambot/impl/TelegramBotClient.java @@ -4,7 +4,14 @@ import com.pengrad.telegrambot.Callback; import com.pengrad.telegrambot.request.BaseRequest; import com.pengrad.telegrambot.response.BaseResponse; -import okhttp3.*; +import okhttp3.Call; +import okhttp3.FormBody; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; import java.io.File; import java.io.IOException; @@ -29,7 +36,7 @@ public TelegramBotClient(OkHttpClient client, Gson gson, String baseUrl) { this.clientWithTimeout = client; } - public void send(final T request, final Callback callback) { + public , R extends BaseResponse> void send(final T request, final Callback callback) { OkHttpClient client = getOkHttpClient(request); client.newCall(createRequest(request)).enqueue(new okhttp3.Callback() { @Override @@ -58,7 +65,7 @@ public void onFailure(Call call, IOException e) { }); } - public R send(final BaseRequest request) { + public , R extends BaseResponse> R send(final BaseRequest request) { try { OkHttpClient client = getOkHttpClient(request); Response response = client.newCall(createRequest(request)).execute(); @@ -68,7 +75,7 @@ public R send(final BaseRequest< } } - private OkHttpClient getOkHttpClient(BaseRequest request) { + private OkHttpClient getOkHttpClient(BaseRequest request) { int timeoutMillis = request.getTimeoutSeconds() * 1000; if (client.readTimeoutMillis() == 0 || client.readTimeoutMillis() > timeoutMillis) return client; @@ -78,7 +85,7 @@ private OkHttpClient getOkHttpClient(BaseRequest request) { return clientWithTimeout; } - private Request createRequest(BaseRequest request) { + private Request createRequest(BaseRequest request) { return new Request.Builder() .url(baseUrl + request.getMethod()) .post(createRequestBody(request)) @@ -99,7 +106,7 @@ private RequestBody createRequestBody(BaseRequest request) { } else if (value instanceof File) { builder.addFormDataPart(name, request.getFileName(), RequestBody.create(contentType, (File) value)); } else { - builder.addFormDataPart(name, String.valueOf(value)); + builder.addFormDataPart(name, toParamValue(value)); } } @@ -107,9 +114,18 @@ private RequestBody createRequestBody(BaseRequest request) { } else { FormBody.Builder builder = new FormBody.Builder(); for (Map.Entry parameter : request.getParameters().entrySet()) { - builder.add(parameter.getKey(), String.valueOf(parameter.getValue())); + builder.add(parameter.getKey(), toParamValue(parameter.getValue())); } return builder.build(); } } + + private String toParamValue(Object obj) { + if (obj.getClass().isPrimitive() || + obj.getClass().isEnum() || + obj.getClass().getName().startsWith("java.lang")) { + return String.valueOf(obj); + } + return gson.toJson(obj); + } } diff --git a/library/src/main/java/com/pengrad/telegrambot/login/CheckTelegramAuth.java b/library/src/main/java/com/pengrad/telegrambot/login/CheckTelegramAuth.java index 80503233..e1bd1a6c 100644 --- a/library/src/main/java/com/pengrad/telegrambot/login/CheckTelegramAuth.java +++ b/library/src/main/java/com/pengrad/telegrambot/login/CheckTelegramAuth.java @@ -8,7 +8,7 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Date; -import java.util.Iterator; +import java.util.Set; import java.util.TreeSet; /** @@ -28,7 +28,7 @@ private CheckTelegramAuth(String botToken, String authQueryParams) { String hash = null; long authDate = 0; String[] params = authQueryParams.split("&"); - TreeSet set = new TreeSet(); + Set set = new TreeSet<>(); for (String p : params) { if (p.startsWith("hash=")) { hash = p.substring(5); @@ -41,7 +41,7 @@ private CheckTelegramAuth(String botToken, String authQueryParams) { } this.hash = hash; this.authDate = authDate; - this.dataCheck = join(set, "\n"); + this.dataCheck = String.join("\n", set); this.botToken = botToken; } @@ -72,15 +72,4 @@ private static String hex(byte[] str) { return String.format("%040x", new BigInteger(1, str)); } - private static String join(Iterable elements, CharSequence separator) { - StringBuilder builder = new StringBuilder(); - Iterator it = elements.iterator(); - if (it.hasNext()) { - builder.append(it.next()); - while (it.hasNext()) { - builder.append(separator).append(it.next()); - } - } - return builder.toString(); - } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java b/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java index ca47e411..263063bd 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/MaskPosition.java @@ -1,7 +1,5 @@ package com.pengrad.telegrambot.model; -import com.google.gson.Gson; - import java.io.Serializable; /** @@ -10,7 +8,6 @@ */ public class MaskPosition implements Serializable { private final static long serialVersionUID = 0L; - private final static Gson gson = new Gson(); public enum Point { forehead, eyes, mouth, chin diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java index 061ebcb6..cfe65927 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineKeyboardMarkup.java @@ -1,7 +1,10 @@ package com.pengrad.telegrambot.model.request; import java.io.Serializable; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; +import java.util.Objects; /** * stas @@ -10,28 +13,48 @@ public class InlineKeyboardMarkup extends Keyboard implements Serializable { private final static long serialVersionUID = 0L; - private final InlineKeyboardButton[][] inline_keyboard; + private final List> inline_keyboard; public InlineKeyboardMarkup(InlineKeyboardButton[]... keyboard) { - this.inline_keyboard = keyboard; + this.inline_keyboard = new ArrayList<>(); + if(keyboard!=null) { + for (InlineKeyboardButton[] row : keyboard) { + addRow(row); + } + } + } + + public InlineKeyboardMarkup addRow(InlineKeyboardButton... keyboard) { + this.inline_keyboard.add(Arrays.asList(keyboard)); + return this; } public InlineKeyboardButton[][] inlineKeyboard() { - return inline_keyboard; + InlineKeyboardButton[][] res = new InlineKeyboardButton[inline_keyboard.size()][]; + for (int i = 0; i < inline_keyboard.size(); i++) { + List line = inline_keyboard.get(i); + res[i] = line.toArray(new InlineKeyboardButton[]{}); + } + return res; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - InlineKeyboardMarkup that = (InlineKeyboardMarkup) o; - - return Arrays.deepEquals(inline_keyboard, that.inline_keyboard); + return Objects.equals(inline_keyboard, that.inline_keyboard); } @Override public int hashCode() { - return Arrays.deepHashCode(inline_keyboard); + return Objects.hash(inline_keyboard); + } + + @Override + public String toString() { + return "InlineKeyboardMarkup{" + + "inline_keyboard=" + inline_keyboard + + '}'; } } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineQueryResult.java b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineQueryResult.java index 53f233d7..d69efc7b 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InlineQueryResult.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InlineQueryResult.java @@ -6,7 +6,7 @@ * stas * 1/12/16. */ -public abstract class InlineQueryResult implements Serializable { +public abstract class InlineQueryResult> implements Serializable { private final static long serialVersionUID = 0L; @SuppressWarnings("unchecked") diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InputMedia.java b/library/src/main/java/com/pengrad/telegrambot/model/request/InputMedia.java index 4d6ca9ba..6bc54247 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InputMedia.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InputMedia.java @@ -11,7 +11,7 @@ * Stas Parshin * 23 November 2017 */ -abstract public class InputMedia implements Serializable { +abstract public class InputMedia> implements Serializable { private final static long serialVersionUID = 0L; @SuppressWarnings("unchecked") @@ -23,7 +23,7 @@ abstract public class InputMedia implements Serializable { private String caption; private String parse_mode; - transient private Map attachments = new HashMap(); + transient private Map attachments = new HashMap<>(); transient private String filename; InputMedia(String type, Object media) { diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/Keyboard.java b/library/src/main/java/com/pengrad/telegrambot/model/request/Keyboard.java index 4f3c5146..e1afeb7a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/Keyboard.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/Keyboard.java @@ -1,7 +1,5 @@ package com.pengrad.telegrambot.model.request; -import com.google.gson.Gson; - import java.io.Serializable; /** @@ -10,13 +8,4 @@ */ public abstract class Keyboard implements Serializable { private final static long serialVersionUID = 0L; - - // todo remove gson - private static Gson gson = new Gson(); - - @Override - public final String toString() { - return gson.toJson(this); - } - } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java b/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java index a0f198bb..8a34b2c3 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/ReplyKeyboardMarkup.java @@ -1,6 +1,9 @@ package com.pengrad.telegrambot.model.request; import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** * stas @@ -9,31 +12,54 @@ public class ReplyKeyboardMarkup extends Keyboard implements Serializable { private final static long serialVersionUID = 0L; - private final KeyboardButton[][] keyboard; + private final List> keyboard; private boolean resize_keyboard; private boolean one_time_keyboard; private boolean selective; - public ReplyKeyboardMarkup(String[]... keyboard) { - this(keyboard, false, false, false); + public ReplyKeyboardMarkup() { + this.keyboard = new ArrayList<>(); + this.resize_keyboard = false; + this.one_time_keyboard = false; + this.selective = false; } public ReplyKeyboardMarkup(String[][] keyboard, boolean resize_keyboard, boolean one_time_keyboard, boolean selective) { - KeyboardButton[][] keyboardButtons = new KeyboardButton[keyboard.length][]; - for (int i = 0; i < keyboard.length; i++) { - keyboardButtons[i] = new KeyboardButton[keyboard[i].length]; - for (int j = 0; j < keyboard[i].length; j++) { - keyboardButtons[i][j] = new KeyboardButton(keyboard[i][j]); - } - } - this.keyboard = keyboardButtons; + this.keyboard = new ArrayList<>(); this.resize_keyboard = resize_keyboard; this.one_time_keyboard = one_time_keyboard; this.selective = selective; + for (String[] line : keyboard) { + addRow(line); + } + } + + public ReplyKeyboardMarkup(String[]... keyboard) { + this(); + for (String[] row : keyboard) { + addRow(row); + } } public ReplyKeyboardMarkup(KeyboardButton[]... keyboard) { - this.keyboard = keyboard; + this(); + for (KeyboardButton[] row : keyboard) { + addRow(row); + } + } + + public ReplyKeyboardMarkup addRow(KeyboardButton... buttons) { + this.keyboard.add(Arrays.asList(buttons)); + return this; + } + + public ReplyKeyboardMarkup addRow(String... buttons) { + List newRow = new ArrayList<>(); + for(String button: buttons) { + newRow.add(new KeyboardButton(button)); + } + this.keyboard.add(newRow); + return this; } public ReplyKeyboardMarkup resizeKeyboard(boolean resizeKeyboard) { diff --git a/library/src/main/java/com/pengrad/telegrambot/passport/SetPassportDataErrors.java b/library/src/main/java/com/pengrad/telegrambot/passport/SetPassportDataErrors.java index 9ff6a873..57d6b032 100644 --- a/library/src/main/java/com/pengrad/telegrambot/passport/SetPassportDataErrors.java +++ b/library/src/main/java/com/pengrad/telegrambot/passport/SetPassportDataErrors.java @@ -11,6 +11,6 @@ public class SetPassportDataErrors extends BaseRequest extends AbstractSendRequest { +abstract public class AbstractMultipartRequest> extends AbstractSendRequest { private boolean isMultipart; private String fileName; diff --git a/library/src/main/java/com/pengrad/telegrambot/request/AbstractSendRequest.java b/library/src/main/java/com/pengrad/telegrambot/request/AbstractSendRequest.java index 57473b20..304f909b 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/AbstractSendRequest.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/AbstractSendRequest.java @@ -7,7 +7,7 @@ * stas * 5/1/16. */ -abstract public class AbstractSendRequest extends BaseRequest { +abstract public class AbstractSendRequest> extends BaseRequest { public AbstractSendRequest(Object chatId) { super(SendResponse.class); diff --git a/library/src/main/java/com/pengrad/telegrambot/request/AbstractUploadRequest.java b/library/src/main/java/com/pengrad/telegrambot/request/AbstractUploadRequest.java index 83d22e8e..21401d3a 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/AbstractUploadRequest.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/AbstractUploadRequest.java @@ -8,7 +8,7 @@ * Stas Parshin * 23 July 2017 */ -abstract public class AbstractUploadRequest extends BaseRequest { +abstract public class AbstractUploadRequest, R extends BaseResponse> extends BaseRequest { private final boolean isMultipart; diff --git a/library/src/main/java/com/pengrad/telegrambot/request/AddStickerToSet.java b/library/src/main/java/com/pengrad/telegrambot/request/AddStickerToSet.java index 450645e6..66989d6b 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/AddStickerToSet.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/AddStickerToSet.java @@ -25,6 +25,6 @@ private AddStickerToSet(Integer userId, String name, String emojis, String stick } public AddStickerToSet maskPosition(MaskPosition maskPosition) { - return add("mask_position", serialize(maskPosition)); + return add("mask_position", maskPosition); } } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/AnswerInlineQuery.java b/library/src/main/java/com/pengrad/telegrambot/request/AnswerInlineQuery.java index f23a1722..9ebd56d6 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/AnswerInlineQuery.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/AnswerInlineQuery.java @@ -9,9 +9,9 @@ */ public class AnswerInlineQuery extends BaseRequest { - public AnswerInlineQuery(String inlineQueryId, InlineQueryResult... results) { + public AnswerInlineQuery(String inlineQueryId, InlineQueryResult... results) { super(BaseResponse.class); - add("inline_query_id", inlineQueryId).add("results", serialize(results)); + add("inline_query_id", inlineQueryId).add("results", results); } public AnswerInlineQuery cacheTime(int cacheTime) { diff --git a/library/src/main/java/com/pengrad/telegrambot/request/AnswerShippingQuery.java b/library/src/main/java/com/pengrad/telegrambot/request/AnswerShippingQuery.java index 5d2c4c59..85986093 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/AnswerShippingQuery.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/AnswerShippingQuery.java @@ -11,7 +11,7 @@ public class AnswerShippingQuery extends BaseRequest { - - private static final Gson gson = new Gson(); +abstract public class BaseRequest, R extends BaseResponse> { @SuppressWarnings("unchecked") protected final T thisAsT = (T) this; @@ -23,7 +20,7 @@ abstract public class BaseRequest public BaseRequest(Class responseClass) { this.responseClass = responseClass; - this.parameters = new HashMap(); + this.parameters = new LinkedHashMap<>(); } protected T add(String name, Object val) { @@ -45,7 +42,7 @@ public Map getParameters() { return parameters; } - public Type getResponseType() { + public Class getResponseType() { return responseClass; } @@ -66,14 +63,8 @@ public int getTimeoutSeconds() { } public String toWebhookResponse() { - Map fullMap = new HashMap(parameters); + Map fullMap = new LinkedHashMap<>(parameters); fullMap.put("method", getMethod()); - return gson.toJson(fullMap); - } - - // Serialize model objects. Basically convert to json - // todo move to TelegramBotClient, let it serialize everything in request time - protected String serialize(Object o) { - return gson.toJson(o); + return BotUtils.toJson(fullMap); } } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java b/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java index cbcdfc7e..c0a97606 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/CreateNewStickerSet.java @@ -30,6 +30,6 @@ public CreateNewStickerSet containsMasks(boolean containsMasks) { } public CreateNewStickerSet maskPosition(MaskPosition maskPosition) { - return add("mask_position", serialize(maskPosition)).containsMasks(true); + return add("mask_position", maskPosition).containsMasks(true); } } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/EditMessageMedia.java b/library/src/main/java/com/pengrad/telegrambot/request/EditMessageMedia.java index 690fb91d..acf7b224 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/EditMessageMedia.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/EditMessageMedia.java @@ -14,23 +14,23 @@ public class EditMessageMedia extends BaseRequest { private boolean isMultipart; - private InputMedia media; + private InputMedia media; - public EditMessageMedia(Object chatId, int messageId, InputMedia media) { + public EditMessageMedia(Object chatId, int messageId, InputMedia media) { super(SendResponse.class); add("chat_id", chatId).add("message_id", messageId); addMedia(media); } - public EditMessageMedia(String inlineMessageId, InputMedia media) { + public EditMessageMedia(String inlineMessageId, InputMedia media) { super(BaseResponse.class); add("inline_message_id", inlineMessageId); addMedia(media); } - private void addMedia(InputMedia media) { + private void addMedia(InputMedia media) { this.media = media; - add("media", serialize(media)); + add("media", media); Map attachments = media.getAttachments(); if (attachments != null && attachments.size() > 0) { addAll(attachments); diff --git a/library/src/main/java/com/pengrad/telegrambot/request/GetUpdates.java b/library/src/main/java/com/pengrad/telegrambot/request/GetUpdates.java index 82c9c7dd..cda20902 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/GetUpdates.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/GetUpdates.java @@ -30,7 +30,7 @@ public GetUpdates timeout(int timeout) { } public GetUpdates allowedUpdates(String... allowedUpdates) { - return add("allowed_updates", serialize(allowedUpdates)); + return add("allowed_updates", allowedUpdates); } @Override diff --git a/library/src/main/java/com/pengrad/telegrambot/request/RestrictChatMember.java b/library/src/main/java/com/pengrad/telegrambot/request/RestrictChatMember.java index 65a34f2c..2490220f 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/RestrictChatMember.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/RestrictChatMember.java @@ -16,7 +16,7 @@ public RestrictChatMember(Object chatId, int userId) { public RestrictChatMember(Object chatId, int userId, ChatPermissions permissions) { super(BaseResponse.class); - add("chat_id", chatId).add("user_id", userId).add("permissions", serialize(permissions)); + add("chat_id", chatId).add("user_id", userId).add("permissions", permissions); } public RestrictChatMember untilDate(int untilDate) { diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendInvoice.java b/library/src/main/java/com/pengrad/telegrambot/request/SendInvoice.java index 94431957..7714bd0f 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendInvoice.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendInvoice.java @@ -12,7 +12,7 @@ public SendInvoice(Integer chatId, String title, String description, String payl String startParameter, String currency, LabeledPrice... prices) { super(chatId); add("title", title).add("description", description).add("payload", payload).add("provider_token", providerToken) - .add("start_parameter", startParameter).add("currency", currency).add("prices", serialize(prices)); + .add("start_parameter", startParameter).add("currency", currency).add("prices", prices); } public SendInvoice providerData(String providerData) { diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendMediaGroup.java b/library/src/main/java/com/pengrad/telegrambot/request/SendMediaGroup.java index e92e78a5..64d01651 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendMediaGroup.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendMediaGroup.java @@ -13,11 +13,11 @@ public class SendMediaGroup extends BaseRequest... media) { super(MessagesResponse.class); - add("chat_id", chatId).add("media", serialize(media)); + add("chat_id", chatId).add("media", media); - for (InputMedia m : media) { + for (InputMedia m : media) { Map attachments = m.getAttachments(); if (attachments != null && attachments.size() > 0) { addAll(attachments); diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendPoll.java b/library/src/main/java/com/pengrad/telegrambot/request/SendPoll.java index c44404a1..d8e2edda 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendPoll.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendPoll.java @@ -12,7 +12,7 @@ public class SendPoll extends AbstractSendRequest { public SendPoll(Object chatId, String question, String... options) { super(chatId); add("question", question); - add("options", serialize(options)); + add("options", options); } public SendPoll isAnonymous(boolean isAnonymous) { diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SetChatPermissions.java b/library/src/main/java/com/pengrad/telegrambot/request/SetChatPermissions.java index 6d4bf4fa..679b46b0 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SetChatPermissions.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/SetChatPermissions.java @@ -11,6 +11,6 @@ public class SetChatPermissions extends BaseRequest { public SetMyCommands(BotCommand... commands) { super(BaseResponse.class); - add("commands", serialize(commands)); + add("commands", commands); } } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SetWebhook.java b/library/src/main/java/com/pengrad/telegrambot/request/SetWebhook.java index c4c733b2..f149ea1c 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SetWebhook.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/SetWebhook.java @@ -35,7 +35,7 @@ public SetWebhook maxConnections(int maxConnections) { } public SetWebhook allowedUpdates(String... allowedUpdates) { - return add("allowed_updates", serialize(allowedUpdates)); + return add("allowed_updates", allowedUpdates); } @Override diff --git a/library/src/test/java/com/pengrad/telegrambot/BotUtilsTest.java b/library/src/test/java/com/pengrad/telegrambot/BotUtilsTest.java index c7b1094e..1ad0f739 100644 --- a/library/src/test/java/com/pengrad/telegrambot/BotUtilsTest.java +++ b/library/src/test/java/com/pengrad/telegrambot/BotUtilsTest.java @@ -1,13 +1,16 @@ package com.pengrad.telegrambot; -import com.pengrad.telegrambot.model.*; +import com.pengrad.telegrambot.model.Update; +import com.pengrad.telegrambot.response.SendResponse; +import org.junit.Test; -import org.junit.*; - -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.StringReader; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; /** * Stas Parshin @@ -41,4 +44,11 @@ public void getBytesFromInputStream() throws IOException { byte[] bytes = BotUtils.getBytesFromInputStream(new ByteArrayInputStream(src)); assertArrayEquals(bytes, src); } + + @Test + public void parseNull() { + assertNull(BotUtils.fromJson(null, SendResponse.class)); + assertNull(BotUtils.fromJson("",SendResponse.class)); + } + } \ No newline at end of file diff --git a/library/src/test/java/com/pengrad/telegrambot/ModelTest.java b/library/src/test/java/com/pengrad/telegrambot/ModelTest.java index 00cc3d60..21b3844f 100644 --- a/library/src/test/java/com/pengrad/telegrambot/ModelTest.java +++ b/library/src/test/java/com/pengrad/telegrambot/ModelTest.java @@ -7,7 +7,8 @@ import com.pengrad.telegrambot.model.request.InlineKeyboardButton; import com.pengrad.telegrambot.model.request.InlineKeyboardMarkup; import com.pengrad.telegrambot.passport.Credentials; - +import nl.jqno.equalsverifier.EqualsVerifier; +import nl.jqno.equalsverifier.Warning; import org.junit.Before; import org.junit.Test; import org.reflections.Reflections; @@ -19,13 +20,11 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.function.Supplier; import java.util.stream.Collectors; -import nl.jqno.equalsverifier.EqualsVerifier; -import nl.jqno.equalsverifier.Warning; - import static org.junit.Assert.assertTrue; /** @@ -34,8 +33,8 @@ */ public class ModelTest { - private Set classes; - private HashMap> customInstance = new HashMap<>(); + private Set> classes; + private final Map, Supplier> customInstance = new HashMap<>(); @Before public void setClasses() { @@ -59,28 +58,28 @@ public void setClasses() { } @Test - public void testEquals() throws IllegalAccessException, InstantiationException, NoSuchFieldException { - Object callbackQuery = CallbackQuery.class.newInstance(); + public void testEquals() throws ReflectiveOperationException { + CallbackQuery callbackQuery = CallbackQuery.class.getDeclaredConstructor().newInstance(); Field f = CallbackQuery.class.getDeclaredField("id"); f.setAccessible(true); f.set(callbackQuery, "2"); - Object message = Message.class.newInstance(); + Message message = Message.class.getDeclaredConstructor().newInstance(); f = Message.class.getDeclaredField("message_id"); f.setAccessible(true); f.set(message, 11); - Object update = Update.class.newInstance(); + Update update = Update.class.getDeclaredConstructor().newInstance(); f = Update.class.getDeclaredField("update_id"); f.setAccessible(true); f.set(update, 1); - for (Class c : classes) { + for (Class c : classes) { EqualsVerifier.forClass(c) .usingGetClass() - .withPrefabValues(Update.class, Update.class.newInstance(), update) - .withPrefabValues(Message.class, Message.class.newInstance(), message) - .withPrefabValues(CallbackQuery.class, CallbackQuery.class.newInstance(), callbackQuery) + .withPrefabValues(Update.class, Update.class.getDeclaredConstructor().newInstance(), update) + .withPrefabValues(Message.class, Message.class.getDeclaredConstructor().newInstance(), message) + .withPrefabValues(CallbackQuery.class, CallbackQuery.class.getDeclaredConstructor().newInstance(), callbackQuery) .suppress(Warning.STRICT_HASHCODE) .suppress(Warning.NONFINAL_FIELDS) .verify(); @@ -89,7 +88,7 @@ public void testEquals() throws IllegalAccessException, InstantiationException, @Test public void testToString() throws Exception { - for (Class c : classes) { + for (Class c : classes) { Object instance = customInstance.containsKey(c) ? customInstance.get(c).get() : defaultInstance(c); String toString = instance.toString(); for (Field f : c.getDeclaredFields()) { @@ -101,8 +100,8 @@ public void testToString() throws Exception { } } - private Object defaultInstance(Class c) throws Exception { - Constructor constructor = c.getDeclaredConstructor(); + private R defaultInstance(Class c) throws Exception { + Constructor constructor = c.getDeclaredConstructor(); constructor.setAccessible(true); return constructor.newInstance(); } diff --git a/library/src/test/java/com/pengrad/telegrambot/ResponseTest.java b/library/src/test/java/com/pengrad/telegrambot/ResponseTest.java index 41b5c33a..eaee930b 100644 --- a/library/src/test/java/com/pengrad/telegrambot/ResponseTest.java +++ b/library/src/test/java/com/pengrad/telegrambot/ResponseTest.java @@ -30,8 +30,8 @@ public void setClasses() { @Test public void testToString() throws IllegalAccessException, InstantiationException, InvocationTargetException { - for (Class c : classes) { - Constructor constructor = c.getDeclaredConstructors()[0]; + for (Class c : classes) { + Constructor constructor = c.getDeclaredConstructors()[0]; constructor.setAccessible(true); String toString = constructor.newInstance().toString(); for (Field f : c.getDeclaredFields()) { diff --git a/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java b/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java index 249d2355..a29d76d6 100644 --- a/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java +++ b/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java @@ -1,6 +1,5 @@ package com.pengrad.telegrambot; -import com.google.gson.Gson; import com.pengrad.telegrambot.checks.AnimationCheck; import com.pengrad.telegrambot.checks.AudioTest; import com.pengrad.telegrambot.checks.ChatMemberTest; @@ -177,7 +176,10 @@ import com.pengrad.telegrambot.response.PollResponse; import com.pengrad.telegrambot.response.SendResponse; import com.pengrad.telegrambot.response.StringResponse; - +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.logging.HttpLoggingInterceptor; import org.junit.Test; import java.io.File; @@ -197,11 +199,6 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import okhttp3.logging.HttpLoggingInterceptor; - import static com.pengrad.telegrambot.request.ContentTypes.VIDEO_MIME_TYPE; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; @@ -1656,8 +1653,7 @@ public void decryptPassport() throws Exception { if (encElement.translation() != null) { files.addAll(Arrays.asList(encElement.translation())); } - for (int i = 0; i < files.size(); i++) { - PassportFile file = files.get(i); + for (PassportFile file:files) { if (file == null) continue; byte[] data = encElement.decryptFile(file, credentials, bot); assertTrue(data.length > 0); @@ -1781,9 +1777,9 @@ public void onFailure(GetMe request, IOException e) { public void botClientError() throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); TelegramBotClient botClient = new TelegramBotClient(new OkHttpClient(), null, TelegramBot.Builder.API_URL); - botClient.send(new GetMe(), new Callback() { + botClient.send(new GetMe(), new Callback() { @Override - public void onResponse(GetMe request, BaseResponse response) { + public void onResponse(GetMe request, GetMeResponse response) { } @Override @@ -1830,7 +1826,7 @@ public void multipartNonAscii() { @Test public void testResponseParameters() { String errorJson = "{\"ok\":false,\"error_code\":400,\"description\":\"Bad Request: description\",\"parameters\":{\"migrate_to_chat_id\":123456789000,\"retry_after\":3}}"; - BaseResponse response = new Gson().fromJson(errorJson, BaseResponse.class); + BaseResponse response = BotUtils.fromJson(errorJson, BaseResponse.class); ResponseParameters parameters = response.parameters(); assertNotNull(parameters); assertEquals(Long.valueOf(123456789000L), parameters.migrateToChatId());