/* DConnectApiSpec.java Copyright (c) 2016 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.profile.spec; import android.content.Intent; import android.os.Bundle; import java.util.ArrayList; import java.util.List; /** * Device Connect APIの仕様を保持するクラス. * * @author NTT DOCOMO, INC. */ public class DConnectApiSpec implements DConnectSpecConstants { private Type mType; private Method mMethod; private String mApiName; private String mProfileName; private String mInterfaceName; private String mAttributeName; private DConnectParameterSpec[] mRequestParamList; private DConnectApiSpec() {} /** * APIの種類を設定する. * @param type APIの種類 */ void setType(final Type type) { mType = type; } /** * APIの種類を取得する. * @return APIの種類 */ public Type getType() { return mType; } /** * APIのメソッドを設定する. * @param method APIのメソッド */ void setMethod(final Method method) { mMethod = method; } /** * APIのメソッドを取得する. * @return APIのメソッド */ public Method getMethod() { return mMethod; } void setApiName(final String apiName) { mApiName = apiName; } void setProfileName(final String profileName) { mProfileName = profileName; } void setInterfaceName(final String interfaceName) { mInterfaceName = interfaceName; } void setAttributeName(final String attributeName) { mAttributeName = attributeName; } /** * API名を取得する. * @return API名 */ public String getApiName() { return mApiName; } /** * プロファイル名を取得する. * @return プロファイル名 */ public String getProfileName() { return mProfileName; } /** * インターフェース名を取得する. * @return インターフェース名 */ public String getInterfaceName() { return mInterfaceName; } /** * アトリビュート名を取得する. * @return アトリビュート名 */ public String getAttributeName() { return mAttributeName; } /** * リクエストパラメータ仕様の一覧を設定する. * @param paramList リクエストパラメータ仕様の配列 */ void setRequestParamList(final DConnectParameterSpec[] paramList) { mRequestParamList = paramList; } /** * リクエストパラメータ仕様の一覧を取得する. * @return リクエストパラメータ仕様の配列 */ public DConnectParameterSpec[] getRequestParamList() { return mRequestParamList; } /** * リクエストの内容が仕様に反していないことを確認する. * * @param request リクエスト * @return 仕様に反していない場合は<code>true</code>. そうでない場合は<code>false</code> */ public boolean validate(final Intent request) { Bundle extras = request.getExtras(); for (DConnectParameterSpec paramSpec : getRequestParamList()) { Object paramValue = extras.get(paramSpec.getName()); if (!paramSpec.validate(paramValue)) { return false; } } return true; } /** * {@link DConnectApiSpec}のビルダー. * * @author NTT DOCOMO, INC. */ public static class Builder { private Type mType; private Method mMethod; private List<DConnectParameterSpec> mParamList; /** * APIの種類を設定する. * @param type APIの種類 */ public Builder setType(final Type type) { mType = type; return this; } /** * APIのメソッドを設定する. * @param method APIのメソッド * @return ビルダー自身のインスタンス */ public Builder setMethod(final Method method) { mMethod = method; return this; } /** * リクエストパラメータ仕様の一覧を設定する. * @param paramList リクエストパラメータ仕様のリスト * @return ビルダー自身のインスタンス */ public Builder setRequestParamList(final List<DConnectParameterSpec> paramList) { mParamList = paramList; return this; } /** * {@link DConnectApiSpec}のインスタンスを生成する. * * @return {@link DConnectApiSpec}のインスタンス */ public DConnectApiSpec build() { if (mParamList == null) { mParamList = new ArrayList<DConnectParameterSpec>(); } DConnectApiSpec spec = new DConnectApiSpec(); spec.setType(mType); spec.setMethod(mMethod); spec.setRequestParamList( mParamList.toArray(new DConnectParameterSpec[mParamList.size()])); return spec; } } }