/*
DConnectParameterSpec.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;
/**
* Device Connect APIのリクエストパラメータの仕様定義.
*
* @param <T> DConnectDataSpecの子クラス
* @author NTT DOCOMO, INC.
*/
public abstract class DConnectParameterSpec<T extends DConnectDataSpec> implements DConnectSpecConstants {
protected final T mDataSpec;
String mName;
Boolean mIsRequired;
/**
* コンストラクタ.
*
* @param dataSpec リクエストパラメータとして受け付けるデータの仕様
*/
protected DConnectParameterSpec(final T dataSpec) {
mDataSpec = dataSpec;
}
/**
* データの種類を取得する.
* @return データの種類
*/
public DataType getDataType() {
return mDataSpec.getDataType();
}
/**
* リクエストパラメータの名前を取得する.
* @return リクエストパラメータの名前
*/
public String getName() {
return mName;
}
/**
* リクエストパラメータの名前を設定する.
* @param name リクエストパラメータの名前
*/
public void setName(final String name) {
mName = name;
}
/**
* 必須パラメータフラグを設定する.
* @param isRequired 必須パラメータである場合は<code>true</code>. そうでない場合は<code>false</code>
*/
void setRequired(final boolean isRequired) {
mIsRequired = isRequired;
}
/**
* 必須パラメータフラグを取得する.
* @return 必須パラメータである場合は<code>true</code>. そうでない場合は<code>false</code>
*/
public boolean isRequired() {
return mIsRequired != null ? mIsRequired : false;
}
/**
* リクエストパラメータとして入力された値が仕様に反していないことを確認する.
* @param param リクエストパラメータとして入力された値
* @return 仕様に反していない場合は<code>true</code>. そうでない場合は<code>false</code>
*/
public final boolean validate(final Object param) {
if (param == null) {
return !isRequired();
}
return mDataSpec.validate(param);
}
abstract static class BaseBuilder<T extends BaseBuilder<T>> {
protected String mName;
protected Boolean mIsRequired;
protected abstract T getThis();
/**
* リクエストパラメータの名前を設定する.
* @param name リクエストパラメータの名前
* @return ビルダー自身のインスタンス
*/
public T setName(final String name) {
mName = name;
return getThis();
}
/**
* 必須パラメータフラグを設定する.
* @param isRequired 必須パラメータである場合は<code>true</code>. そうでない場合は<code>false</code>
* @return ビルダー自身のインスタンス
*/
public T setRequired(final boolean isRequired) {
mIsRequired = isRequired;
return getThis();
}
}
}