/**
* Re-implements conversion to another data type from dtkAbstractData
* @return medAbstractData *
*/
medAbstractData * medAbstractData::convert(const QString &toType)
{
    medAbstractData *conversion = NULL;

    foreach (QString converterId, medAbstractDataFactory::instance()->converters())
    {
        QScopedPointer<dtkAbstractDataConverter> converter (medAbstractDataFactory::instance()->converter(converterId));

        if (converter->fromTypes().contains(this->identifier()) && converter->canConvert(toType))
        {
            converter->setData(this);
            conversion = dynamic_cast <medAbstractData *> (converter->convert());

            if(conversion)
            {
                foreach(QString metaDataKey, this->metaDataList())
                    conversion->addMetaData(metaDataKey, this->metaDataValues(metaDataKey));

                foreach(QString propertyKey, this->propertyList())
                    conversion->addProperty(propertyKey, this->propertyValues(propertyKey));
            }
        }
    }