/*============================================================================

The Medical Imaging Interaction Toolkit (MITK)

Copyright (c) German Cancer Research Center (DKFZ)
All rights reserved.

Use of this source code is governed by a 3-clause BSD license that can be
found in the LICENSE file.

============================================================================*/


#ifndef BERRYIPRESENTATIONSERIALIZER_H_
#define BERRYIPRESENTATIONSERIALIZER_H_

#include "berryIPresentablePart.h"

#include <QString>

namespace berry {

/**
 * This interface is given to a StackPresentation when it is loading or saving
 * its state.
 *
 * Not intended to be implemented by clients
 *
 * @since 3.0
 * @note This interface is not intended to be implemented by clients.
 */
struct BERRY_UI_QT IPresentationSerializer {
    /**
     * Returns a unique identifier for the given part. The identifier can later
     * be used to restore the original part by calling getPart(...). This identifier
     * is guaranteed to be unique within a particular StackPresentation. However,
     * the same part may be assigned a different ID each time the presentation is saved.
     *
     * @param part a part to be identified (not null)
     * @return a unique identifier for the part (not null)
     */
    virtual QString GetId(IPresentablePart::Pointer part) = 0;

    /**
     * Returns a presentable part, given an id that was generated when the presentation
     * was saved.
     *
     * @param id an ID that was generated by getId(IPresentablePart) when the presentation
     * was saved
     * @return the presentable part associated with the given id, or null if none. Note
     * that even if the ID was valid when the presentation was saved, it may not
     * be valid when the presentation is restored. Callers must be prepared
     * to handle a null result.
     */
    virtual IPresentablePart::Pointer GetPart(const QString& id) = 0;

    virtual ~IPresentationSerializer();
};

}

#endif /* BERRYIPRESENTATIONSERIALIZER_H_ */
