/* ArrayDataSpec.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; /** * Array型データの仕様. * * @author NTT DOCOMO, INC. */ public class ArrayDataSpec extends DConnectDataSpec { private final DConnectDataSpec mItemsSpec; private Integer mMaxLength; private Integer mMinLength; ArrayDataSpec(final DConnectDataSpec itemsSpec) { super(DataType.ARRAY); mItemsSpec = itemsSpec; } /** * 配列に格納できるデータの仕様を取得する. * @return 配列に格納できるデータの仕様 */ public DConnectDataSpec getItemsSpec() { return mItemsSpec; } /** * 配列の最大長を取得する. * @return 配列の最大長 */ public Integer getMaxLength() { return mMaxLength; } /** * 配列の最大長を設定する. * @param maxLength 配列の最大長 */ void setMaxLength(final Integer maxLength) { mMaxLength = maxLength; } /** * 配列の最小長を取得する. * @return 配列の最小長 */ public Integer getMinLength() { return mMinLength; } /** * 配列の最小長を設定する. * @param minLength 配列の最小長 */ void setMinLength(final Integer minLength) { mMinLength = minLength; } @Override public boolean validate(final Object obj) { if (obj == null) { return true; } String arrayParam = obj.toString(); if (arrayParam.equals("")) { // TODO allowEmptyValueに対応 return true; } String[] items = arrayParam.split(","); // TODO csv以外の形式に対応 for (String item : items) { if (!mItemsSpec.validate(item)) { return false; } } return true; } /** * {@link ArrayDataSpec}のビルダー. * * @author NTT DOCOMO, INC. */ public static class Builder { private DConnectDataSpec mItemsSpec; private Integer mMaxLength; private Integer mMinLength; /** * 配列に格納できるデータの仕様を設定する. * * @param itemsSpec 配列に格納できるデータの仕様 * @return ビルダー自身のインスタンス */ public Builder setItemsSpec(final DConnectDataSpec itemsSpec) { mItemsSpec = itemsSpec; return this; } /** * 配列の最大長を設定する. * @param maxLength 配列の最大長 * @return ビルダー自身のインスタンス */ public Builder setMaxLength(final Integer maxLength) { mMaxLength = maxLength; return this; } /** * 配列の最小長を設定する. * @param minLength 配列の最小長 * @return ビルダー自身のインスタンス */ public Builder setMinLength(final Integer minLength) { mMinLength = minLength; return this; } /** * {@link ArrayDataSpec}のインスタンスを生成する. * @return {@link ArrayDataSpec}のインスタンス */ public ArrayDataSpec build() { ArrayDataSpec spec = new ArrayDataSpec(mItemsSpec); spec.setMaxLength(mMaxLength); spec.setMinLength(mMinLength); return spec; } } }