/* * Copyright 2016 Sam Sun <me@samczsun.com> * * Licensed 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 com.samczsun.skype4j.internal.participants.info; import com.eclipsesource.json.JsonArray; import com.eclipsesource.json.JsonObject; import com.samczsun.skype4j.Skype; import com.samczsun.skype4j.exceptions.ConnectionException; import com.samczsun.skype4j.internal.Endpoints; import com.samczsun.skype4j.internal.SkypeImpl; import com.samczsun.skype4j.internal.Utils; import com.samczsun.skype4j.participants.info.BotInfo; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class BotInfoImpl implements BotInfo { private SkypeImpl skype; private String id; private String displayName; private String description; private String developer; private String extra; private String userTileSmallUrl; private String userTileMediumUrl; private String userTileLargeUrl; private String userTileExtraLargeUrl; private String userTileStaticUrl; private String webpage; private String tos; private String privacyStatement; private boolean isTrusted; private List<String> capabilities = new ArrayList<>(); private List<String> supportedLocales = new ArrayList<>(); private String agentType; private double starRating; public BotInfoImpl(SkypeImpl skype, String id) { this.skype = skype; this.id = id; } @Override public Skype getClient() { return this.skype; } @Override public String getId() { return this.id; } @Override public String getDisplayName() { return this.displayName; } @Override public String getDescription() { return this.description; } @Override public String getDeveloper() { return this.developer; } @Override public String getExtra() { return this.extra; } @Override public String getUserTileSmallUrl() { return this.userTileSmallUrl; } @Override public String getUserTileMediumUrl() { return this.userTileMediumUrl; } @Override public String getUserTileLargeUrl() { return this.userTileLargeUrl; } @Override public String getUserTileExtraLargeUrl() { return this.userTileExtraLargeUrl; } @Override public String getUserTileStaticUrl() { return this.userTileStaticUrl; } @Override public String getWebpage() { return this.webpage; } @Override public String getTos() { return this.tos; } @Override public String getPrivacyStatement() { return this.privacyStatement; } @Override public boolean isTrusted() { return this.isTrusted; } @Override public List<String> getCapabilities() { return Collections.unmodifiableList(this.capabilities); } @Override public List<String> getSupportedLocales() { return Collections.unmodifiableList(this.supportedLocales); } @Override public String getAgentType() { return this.agentType; } @Override public double getStarRating() { return this.starRating; } public void load() throws ConnectionException { String uuid = id.substring(3); // trims the string "28:" JsonObject root = Endpoints.AGENT_INFO.open(skype, uuid) .expect(200, "While fetching agent info") .as(JsonObject.class) .get(); JsonArray descriptions = root.get("agentDescriptions").asArray(); if (descriptions.size() > 1) { throw Skype.UNEXPECTED; } JsonObject object = descriptions.get(0).asObject(); this.displayName = Utils.getString(object, "displayName"); this.description = Utils.getString(object, "description"); this.developer = Utils.getString(object, "developer"); this.extra = Utils.getString(object, "extra"); this.userTileSmallUrl = Utils.getString(object, "userTileSmallUrl"); this.userTileMediumUrl = Utils.getString(object, "userTileMediumUrl"); this.userTileLargeUrl = Utils.getString(object, "userTileLargeUrl"); this.userTileExtraLargeUrl = Utils.getString(object, "userTileExtraLargeUrl"); this.userTileStaticUrl = Utils.getString(object, "userTileStaticUrl"); this.webpage = Utils.getString(object, "webpage"); this.tos = Utils.getString(object, "tos"); this.privacyStatement = Utils.getString(object, "privacyStatement"); this.isTrusted = object.get("isTrusted").asBoolean(); object.get("capabilities").asArray().iterator().forEachRemaining(value -> this.capabilities.add(value.asString())); object.get("supportedLocales").asArray().iterator().forEachRemaining(value -> this.supportedLocales.add(value.asString())); this.agentType = Utils.getString(object, "agentType"); this.starRating = object.get("starRating").asDouble(); } }