/**
* Copyright 2014 Daum Kakao Corp.
*
* Redistribution and modification in source or binary forms are not permitted without specific prior written permission.
*
* 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.kakao.internal;
import org.json.JSONException;
import org.json.JSONObject;
import android.text.TextUtils;
import com.kakao.KakaoParameterException;
/**
* @author MJ
*/
public final class LinkObject {
public enum OBJTYPE {
UNKNOWN("", false),
TEXT("label", false),
IMAGE("image", false),
BUTTON("button", true),
TEXT_LINK("link", true);
private final String value;
private final boolean actionable;
OBJTYPE(final String value, final boolean actionable) {
this.value = value;
this.actionable = actionable;
}
}
private final OBJTYPE objType;
private final String text;
private final String imageSrc;
private final int imageWidth;
private final int imageHeight;
private final Action action;
private LinkObject(final OBJTYPE objType, final String msg, final String imageSrc, final int imageWidth, final int imageHeight, final Action action) {
this.objType = objType;
this.text = msg;
this.imageSrc = imageSrc;
this.imageWidth = imageWidth;
this.imageHeight = imageHeight;
this.action = action;
}
public static LinkObject newText(final String text) throws KakaoParameterException {
if (TextUtils.isEmpty(text)) {
throw new KakaoParameterException(KakaoParameterException.ERROR_CODE.CORE_PARAMETER_MISSING, "text type needs text.");
}
return new LinkObject(OBJTYPE.TEXT, text, null, 0, 0, null);
}
public static LinkObject newImage(final String src, final int width, final int height) throws KakaoParameterException {
if (TextUtils.isEmpty(src)) {
throw new KakaoParameterException(KakaoParameterException.ERROR_CODE.CORE_PARAMETER_MISSING, "image type needs src.");
}
if (width <= 70) {
throw new KakaoParameterException(KakaoParameterException.ERROR_CODE.MINIMUM_IMAGE_SIZE_REQUIRED, "width of image type should be bigger than 70.");
}
if (height <= 70) {
throw new KakaoParameterException(KakaoParameterException.ERROR_CODE.MINIMUM_IMAGE_SIZE_REQUIRED, "height of image type should be bigger than 70.");
}
return new LinkObject(OBJTYPE.IMAGE, null, src, width, height, null);
}
public static LinkObject newButton(final String text, final Action action) {
return new LinkObject(OBJTYPE.BUTTON, text, null, 0, 0, action);
}
public static LinkObject newLink(final String text, final Action action) {
return new LinkObject(OBJTYPE.TEXT_LINK, text, null, 0, 0, action);
}
public JSONObject createJSONObject() throws JSONException {
JSONObject json = new JSONObject();
json.put(KakaoTalkLinkProtocol.OBJ_OBJTYPE, objType.value);
if (!TextUtils.isEmpty(text)) {
json.put(KakaoTalkLinkProtocol.OBJ_TEXT, text);
}
if (!TextUtils.isEmpty(imageSrc) && objType == OBJTYPE.IMAGE) {
json.put(KakaoTalkLinkProtocol.OBJ_SRC, imageSrc);
if (imageWidth > 0) {
json.put(KakaoTalkLinkProtocol.OBJ_WIDTH, imageWidth);
}
if (imageHeight > 0) {
json.put(KakaoTalkLinkProtocol.OBJ_HEIGHT, imageHeight);
}
}
if (action != null && objType.actionable) {
json.put(KakaoTalkLinkProtocol.OBJ_ACTION, action.createJSONObject());
}
return json;
}
}