Ejemplo n.º 1
0
void medDatabaseControllerPrivate::buildMetaDataLookup()
{
// The table defines the mapping between metadata in the medAbstractData and the database tables.
    metaDataLookup.insert(medMetaDataKeys::ThumbnailPath.key(),
        TableEntryList() << TableEntry(T_image, "thumbnail", true)
        << TableEntry(T_series, "thumbnail", true)
        << TableEntry(T_study, "thumbnail", true)
        << TableEntry(T_patient, "thumbnail", true) );

//Patient data
    metaDataLookup.insert(medMetaDataKeys::PatientName.key(),
        TableEntryList() << TableEntry(T_patient, "name") );
    metaDataLookup.insert(medMetaDataKeys::Gender.key(),
        TableEntryList() << TableEntry(T_patient, "gender") );
    metaDataLookup.insert(medMetaDataKeys::BirthDate.key(),
        TableEntryList() << TableEntry(T_patient, "birthdate") );
    metaDataLookup.insert(medMetaDataKeys::PatientID.key(),
        TableEntryList() << TableEntry(T_patient, "patientId") );

//Study Data
    metaDataLookup.insert(medMetaDataKeys::StudyDescription.key(),
        TableEntryList() << TableEntry(T_study, "name") );
    metaDataLookup.insert(medMetaDataKeys::StudyDicomID.key(),
        TableEntryList() << TableEntry(T_study, "uid") );
    metaDataLookup.insert(medMetaDataKeys::StudyID.key(),
        TableEntryList() << TableEntry(T_study, "studyId") );
//Series Data
    metaDataLookup.insert(medMetaDataKeys::Size.key(),
        TableEntryList() << TableEntry(T_series, "size") );
    metaDataLookup.insert(medMetaDataKeys::SeriesDescription.key(),
        TableEntryList() << TableEntry(T_series, "name") );
    metaDataLookup.insert(medMetaDataKeys::Size.key(),
        TableEntryList() << TableEntry(T_series, "size") );
    metaDataLookup.insert(medMetaDataKeys::SeriesDicomID.key(),
        TableEntryList() << TableEntry(T_series, "uid") );
    metaDataLookup.insert(medMetaDataKeys::SeriesID.key(),
        TableEntryList() << TableEntry(T_series, "seriesId") );
    metaDataLookup.insert(medMetaDataKeys::Orientation.key(),
        TableEntryList() << TableEntry(T_series, "orientation") );
    metaDataLookup.insert(medMetaDataKeys::SeriesNumber.key(),
        TableEntryList() << TableEntry(T_series, "seriesNumber") );
    metaDataLookup.insert(medMetaDataKeys::SequenceName.key(),
        TableEntryList() << TableEntry(T_series, "sequenceName") );
    metaDataLookup.insert(medMetaDataKeys::SliceThickness.key(),
        TableEntryList() << TableEntry(T_series, "sliceThickness") );
    metaDataLookup.insert(medMetaDataKeys::Rows.key(),
        TableEntryList() << TableEntry(T_series, "rows") );
    metaDataLookup.insert(medMetaDataKeys::Columns.key(),
        TableEntryList() << TableEntry(T_series, "columns") );
    metaDataLookup.insert(medMetaDataKeys::Age.key(),
        TableEntryList() << TableEntry(T_series, "age") );
    metaDataLookup.insert(medMetaDataKeys::Description.key(),
        TableEntryList() << TableEntry(T_series, "description") );
    metaDataLookup.insert(medMetaDataKeys::Modality.key(),
        TableEntryList() << TableEntry(T_series, "modality") );
    metaDataLookup.insert(medMetaDataKeys::Protocol.key(),
        TableEntryList() << TableEntry(T_series, "protocol") );
    metaDataLookup.insert(medMetaDataKeys::Comments.key(),
        TableEntryList() << TableEntry(T_series, "comments") );
    metaDataLookup.insert(medMetaDataKeys::Status.key(),
        TableEntryList() << TableEntry(T_series, "status") );
    metaDataLookup.insert(medMetaDataKeys::AcquisitionDate.key(),
        TableEntryList() << TableEntry(T_series, "acquisitiondate") );
    metaDataLookup.insert(medMetaDataKeys::ImportationDate.key(),
        TableEntryList() << TableEntry(T_series, "importationdate") );
    metaDataLookup.insert(medMetaDataKeys::Referee.key(),
        TableEntryList() << TableEntry(T_series, "referee") );
    metaDataLookup.insert(medMetaDataKeys::Performer.key(),
        TableEntryList() << TableEntry(T_series, "performer") );
    metaDataLookup.insert(medMetaDataKeys::Institution.key(),
        TableEntryList() << TableEntry(T_series, "institution") );
    metaDataLookup.insert(medMetaDataKeys::Report.key(),
        TableEntryList() << TableEntry(T_series, "report") );

//Image data


}
Ejemplo n.º 2
0
KExiv2::MetaDataMap KExiv2::getIptcTagsDataList(const QStringList& iptcKeysFilter, bool invertSelection) const
{
    if (d->iptcMetadata().empty())
       return MetaDataMap();

    try
    {
        Exiv2::IptcData iptcData = d->iptcMetadata();
        iptcData.sortByKey();

        QString     ifDItemName;
        MetaDataMap metaDataMap;

        for (Exiv2::IptcData::iterator md = iptcData.begin(); md != iptcData.end(); ++md)
        {
            QString key = QString::fromLocal8Bit(md->key().c_str());

            // Decode the tag value with a user friendly output.
            std::ostringstream os;
            os << *md;
            QString value = QString(os.str().c_str());
            // To make a string just on one line.
            value.replace('\n', ' ');

            // Some Iptc key are redondancy. check if already one exist...
            MetaDataMap::iterator it = metaDataMap.find(key);

            // We apply a filter to get only the Iptc tags that we need.

            if (!invertSelection)
            {
                if (iptcKeysFilter.contains(key.section('.', 1, 1)))
                {
                    if (it == metaDataMap.end())
                        metaDataMap.insert(key, value);
                    else
                    {
                        QString v = *it;
                        v.append(", ");
                        v.append(value);
                        metaDataMap.insert(key, v);
                    }
                }
            }
            else
            {
                if (!iptcKeysFilter.contains(key.section('.', 1, 1)))
                {
                    if (it == metaDataMap.end())
                        metaDataMap.insert(key, value);
                    else
                    {
                        QString v = *it;
                        v.append(", ");
                        v.append(value);
                        metaDataMap.insert(key, v);
                    }
                }
            }
        }

        return metaDataMap;
    }
    catch (Exiv2::Error& e)
    {
        d->printExiv2ExceptionError("Cannot parse Iptc metadata using Exiv2 ", e);
    }

    return MetaDataMap();
}