/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * 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.
 */
#ifndef _ASSET_H
#define _ASSET_H

#include <ustring.h>
#include <uvector.h>
#include <Drm2CommonTypes.h>
#include <rights/Right.h>
using namespace ustl;

class Asset {
public:
    /**
     * Constructor for asset.
     */
    Asset();

    /**
     * Destructor for asset.
     */
    ~Asset();

    /**
     * Test whether asset has parent or not.
     * @return true/false to indicate the result.
     */
    bool hasParent();

    /**
     * Set id of asset.
     * @param id the id of asset.
     */
    void setID(const string &id);

    /**
     * Get the id of content.
     * @return asset id.
     */
    const string& getID() const;

    /**
     * Set contend id related to asset.
     * @param id the id of content.
     */
    void setContentID(const string &id);

    /**
     * Get content id.
     * @return content id.
     */
    const string& getContentID() const;

    /**
     * Set digest value of DCF.
     * @param value the DCF digest value.
     */
    void setDCFDigest(const string &value);

    /**
     * Get the DCF digest value.
     * @return the digest value of DCF.
     */
    const string& getDCFDigest() const;

    /**
     * Set encrypted key in asset.
     * @param the encrypted key.
     */
    void setEncryptedKey(const string &key);

    /**
     * Get encrypted key.
     * @return encypted key.
     */
    const string& getEncrytedKey() const;

    /**
     * Get cek.
     * @return cek.
     */
    const char* getCek() const;

    /**
     * Set the retrieval method of key.
     * @param rm the retrieval method of the key.
     */
    void setKeyRetrievalMethod(const string &rm);

    /**
     * Set parent content id for asset.
     * @param id the parent content id.
     */
    void setParentContentID(const string &id);

    /**
     * Get the parent content id of the asset.
     * @return the parent content id.
     */
    const string& getParentContentID() const;

    /**
     * Recover the CEK using private key.
     */
    void recoverCek();

PRIVATE:
    string mAssetID;
    string mContentID;
    string mDigestMethod;
    string mDigestValue;
    string mEncryptedMethod;
    string mEncryptedKey;
    string mRetrievalMethod;
    string mParentContentID;
    string mCek;
};

#endif