// Path: chat-message-adapter/src/main/java/com/quickblox/ui/kit/chatmessage/adapter/models/QBLinkPreview.java
// public class QBLinkPreview implements Serializable{
// 
//     @SerializedName("ogTitle")
//     private String title;
// 
//     @SerializedName("ogDescription")
//     private String description;
// 
//     @SerializedName("ogImage")
//     private QBLinkPreviewImage image;
// 
//     @SerializedName("ogLocale")
//     private String locale;
// 
//     @SerializedName("ogSiteName")
//     private String siteName;
// 
//     @SerializedName("ogUrl")
//     private String url;
// 
//     @SerializedName("ogType")
//     private String type;     //possible "site", "website"
// 
//     public String getTitle() {
//         return title;
//     }
// 
//     public void setTitle(String title) {
//         this.title = title;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     public QBLinkPreviewImage getImage() {
//         return image;
//     }
// 
//     public void setImage(QBLinkPreviewImage image) {
//         this.image = image;
//     }
// 
//     public String getLocale() {
//         return locale;
//     }
// 
//     public void setLocale(String locale) {
//         this.locale = locale;
//     }
// 
//     public String getSiteName() {
//         return siteName;
//     }
// 
//     public void setSiteName(String siteName) {
//         this.siteName = siteName;
//     }
// 
//     public String getUrl() {
//         return url;
//     }
// 
//     public void setUrl(String url) {
//         this.url = url;
//     }
// 
//     public String getType() {
//         return type;
//     }
// 
//     public void setType(String type) {
//         this.type = type;
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder stringBuilder = new StringBuilder(QBLinkPreview.class.getSimpleName());
//         stringBuilder.append("{").append("title").append("=").append(getTitle()).
//                 append(", description").append("=").append(getDescription()).
//                 append(", image").append("=").append(getImage()).
//                 append(", locale").append("=").append(getLocale()).
//                 append(", siteName").append("=").append(getSiteName()).
//                 append(", url").append("=").append(getUrl()).
//                 append(", type").append("=").append(getType()).
//                 append("}");
//         return stringBuilder.toString();
//     }
// }
// 
// Path: chat-message-adapter/src/main/java/com/quickblox/ui/kit/chatmessage/adapter/utils/network/QBRestRequestExecutor.java
// public class QBRestRequestExecutor {
// 
//     public static Performer<QBLinkPreview> getLinkPreview(String url, String token) {
//         return new QueryGetLinkPreview(url, token);
//     }
// }


import android.os.Bundle;
import com.quickblox.core.QBEntityCallback;
import com.quickblox.core.exception.QBResponseException;
import com.quickblox.ui.kit.chatmessage.adapter.models.QBLinkPreview;
import com.quickblox.ui.kit.chatmessage.adapter.utils.network.QBRestRequestExecutor;
import java.util.HashMap;
import java.util.Map;
        if (!forceLoad) {
            QBLinkPreview linkPreview = linkPreviewsHolder.get(url);
            if (linkPreview != null && callback != null){
                callback.onSuccess(linkPreview, new Bundle());
            } else {
                getLinkPreview(url, token, true, callback);
            }

            return;
        }

        QBRestRequestExecutor.getLinkPreview(url, token).performAsync(new QBEntityCallback<QBLinkPreview>() {
            @Override
            public void onSuccess(QBLinkPreview linkPreview, Bundle bundle) {
                linkPreviewsHolder.put(url, linkPreview);
                if (callback != null) {
                    callback.onSuccess(linkPreview, bundle);
                }
            }

            @Override
            public void onError(QBResponseException e) {
                callback.onError(e);
            }
        });
    }

    public QBLinkPreview getLinkPreviewSync(final String url, String token, boolean forceLoad) throws QBResponseException {
        QBLinkPreview result;

// Path: chat-message-adapter/src/main/java/com/quickblox/ui/kit/chatmessage/adapter/models/QBLinkPreview.java
// public class QBLinkPreview implements Serializable{
// 
//     @SerializedName("ogTitle")
//     private String title;
// 
//     @SerializedName("ogDescription")
//     private String description;
// 
//     @SerializedName("ogImage")
//     private QBLinkPreviewImage image;
// 
//     @SerializedName("ogLocale")
//     private String locale;
// 
//     @SerializedName("ogSiteName")
//     private String siteName;
// 
//     @SerializedName("ogUrl")
//     private String url;
// 
//     @SerializedName("ogType")
//     private String type;     //possible "site", "website"
// 
//     public String getTitle() {
//         return title;
//     }
// 
//     public void setTitle(String title) {
//         this.title = title;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     public QBLinkPreviewImage getImage() {
//         return image;
//     }
// 
//     public void setImage(QBLinkPreviewImage image) {
//         this.image = image;
//     }
// 
//     public String getLocale() {
//         return locale;
//     }
// 
//     public void setLocale(String locale) {
//         this.locale = locale;
//     }
// 
//     public String getSiteName() {
//         return siteName;
//     }
// 
//     public void setSiteName(String siteName) {
//         this.siteName = siteName;
//     }
// 
//     public String getUrl() {
//         return url;
//     }
// 
//     public void setUrl(String url) {
//         this.url = url;
//     }
// 
//     public String getType() {
//         return type;
//     }
// 
//     public void setType(String type) {
//         this.type = type;
//     }
// 
//     @Override
//     public String toString() {
//         StringBuilder stringBuilder = new StringBuilder(QBLinkPreview.class.getSimpleName());
//         stringBuilder.append("{").append("title").append("=").append(getTitle()).
//                 append(", description").append("=").append(getDescription()).
//                 append(", image").append("=").append(getImage()).
//                 append(", locale").append("=").append(getLocale()).
//                 append(", siteName").append("=").append(getSiteName()).
//                 append(", url").append("=").append(getUrl()).
//                 append(", type").append("=").append(getType()).
//                 append("}");
//         return stringBuilder.toString();
//     }
// }
// 
// Path: chat-message-adapter/src/main/java/com/quickblox/ui/kit/chatmessage/adapter/utils/network/QBRestRequestExecutor.java
// public class QBRestRequestExecutor {
// 
//     public static Performer<QBLinkPreview> getLinkPreview(String url, String token) {
//         return new QueryGetLinkPreview(url, token);
//     }
// }


// Path: chat-message-adapter/src/main/java/com/quickblox/ui/kit/chatmessage/adapter/utils/QBLinkPreviewCashService.java
import android.os.Bundle;
import com.quickblox.core.QBEntityCallback;
import com.quickblox.core.exception.QBResponseException;
import com.quickblox.ui.kit.chatmessage.adapter.models.QBLinkPreview;
import com.quickblox.ui.kit.chatmessage.adapter.utils.network.QBRestRequestExecutor;
import java.util.HashMap;
import java.util.Map;

        if (!forceLoad) {
            QBLinkPreview linkPreview = linkPreviewsHolder.get(url);
            if (linkPreview != null && callback != null){
                callback.onSuccess(linkPreview, new Bundle());
            } else {
                getLinkPreview(url, token, true, callback);
            }

            return;
        }

        QBRestRequestExecutor.getLinkPreview(url, token).performAsync(new QBEntityCallback<QBLinkPreview>() {
            @Override
            public void onSuccess(QBLinkPreview linkPreview, Bundle bundle) {
                linkPreviewsHolder.put(url, linkPreview);
                if (callback != null) {
                    callback.onSuccess(linkPreview, bundle);
                }
            }

            @Override
            public void onError(QBResponseException e) {
                callback.onError(e);
            }
        });
    }

    public QBLinkPreview getLinkPreviewSync(final String url, String token, boolean forceLoad) throws QBResponseException {
        QBLinkPreview result;

        if (!forceLoad) {