DrmMetadata.cpp revision 3473846f64f5b28e1cbeb70ef5867073fc93159e
13473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi/*
23473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * Copyright (C) 2010 The Android Open Source Project
33473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi *
43473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * Licensed under the Apache License, Version 2.0 (the "License");
53473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * you may not use this file except in compliance with the License.
63473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * You may obtain a copy of the License at
73473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi *
83473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi *      http://www.apache.org/licenses/LICENSE-2.0
93473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi *
103473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * Unless required by applicable law or agreed to in writing, software
113473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * distributed under the License is distributed on an "AS IS" BASIS,
123473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * See the License for the specific language governing permissions and
143473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * limitations under the License.
153473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi */
163473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
173473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi#include <drm/DrmMetadata.h>
183473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
193473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiusing namespace android;
203473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
213473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiint DrmMetadata::getCount(void) const {
223473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi	return mMetadataMap.size();
233473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
243473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
253473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimistatus_t DrmMetadata::put(const String8* key,
263473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi                          const char* value) {
273473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    if((value != NULL) && (key != NULL)) {
283473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        int length = strlen(value);
293473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        char* charValue = new char[length + 1];
303473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
313473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        memcpy(charValue, value, length);
323473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        charValue[length] = '\0';
333473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        mMetadataMap.add(*key, charValue);
343473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    }
353473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    return NO_ERROR;
363473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
373473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
383473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiString8 DrmMetadata::get(const String8& key) const {
393473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    if (NULL != getValue(&key)) {
403473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        return String8(getValue(&key));
413473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    }
423473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    else {
433473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        return String8("");
443473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    }
453473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
463473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
473473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiconst char* DrmMetadata::getValue(const String8* key) const {
483473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    if(key != NULL) {
493473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        if (NAME_NOT_FOUND != mMetadataMap.indexOfKey(*key)) {
503473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi            return mMetadataMap.valueFor(*key);
513473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        }
523473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        else {
533473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi            return NULL;
543473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        }
553473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    } else {
563473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi        return NULL;
573473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    }
583473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
593473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
603473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiconst char* DrmMetadata::getAsByteArray(const String8* key) const {
613473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    return getValue(key);
623473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
633473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
643473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimibool DrmMetadata::KeyIterator::hasNext() {
653473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    return mIndex < mDrmMetadata->mMetadataMap.size();
663473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
673473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
683473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiconst String8& DrmMetadata::KeyIterator::next() {
693473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    const String8& key = mDrmMetadata->mMetadataMap.keyAt(mIndex);
703473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    mIndex++;
713473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    return key;
723473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
733473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
743473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::KeyIterator DrmMetadata::keyIterator() {
753473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    return KeyIterator(this);
763473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
773473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
783473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::KeyIterator::KeyIterator(const DrmMetadata::KeyIterator& keyIterator) :
793473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    mDrmMetadata(keyIterator.mDrmMetadata),
803473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    mIndex(keyIterator.mIndex) {
813473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    LOGV("DrmMetadata::KeyIterator::KeyIterator");
823473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
833473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
843473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::KeyIterator& DrmMetadata::KeyIterator::operator=(const DrmMetadata::KeyIterator& keyIterator) {
853473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    LOGV("DrmMetadata::KeyIterator::operator=");
863473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    mDrmMetadata = keyIterator.mDrmMetadata;
873473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    mIndex = keyIterator.mIndex;
883473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    return *this;
893473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
903473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
913473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
923473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::Iterator DrmMetadata::iterator() {
933473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    return Iterator(this);
943473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
953473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
963473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::Iterator::Iterator(const DrmMetadata::Iterator& iterator) :
973473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    mDrmMetadata(iterator.mDrmMetadata),
983473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    mIndex(iterator.mIndex) {
993473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    LOGV("DrmMetadata::Iterator::Iterator");
1003473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
1013473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
1023473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::Iterator& DrmMetadata::Iterator::operator=(const DrmMetadata::Iterator& iterator) {
1033473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    LOGV("DrmMetadata::Iterator::operator=");
1043473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    mDrmMetadata = iterator.mDrmMetadata;
1053473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    mIndex = iterator.mIndex;
1063473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    return *this;
1073473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
1083473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
1093473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimibool DrmMetadata::Iterator::hasNext() {
1103473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    return mIndex < mDrmMetadata->mMetadataMap.size();
1113473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
1123473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi
1133473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiString8 DrmMetadata::Iterator::next() {
1143473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    String8 value = String8(mDrmMetadata->mMetadataMap.editValueAt(mIndex));
1153473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    mIndex++;
1163473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi    return value;
1173473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi}
118