Package org.fao.geonet.kernel.rdf

Source Code of org.fao.geonet.kernel.rdf.KeywordResultInterpreter

package org.fao.geonet.kernel.rdf;

import java.util.Collection;

import org.fao.geonet.kernel.KeywordBean;
import org.fao.geonet.kernel.Thesaurus;
import org.fao.geonet.domain.Pair;
import org.fao.geonet.languages.IsoLanguagesMapper;
import org.openrdf.model.Value;
import org.openrdf.sesame.query.QueryResultsTable;

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;

/**
* An interpreter that assumes a query with id, label, note and bound selector to be added to the query.  The {@link QueryBuilder#keywordQueryBuilder(IsoLanguagesMapper, String...)}
* creates a mapper with this interpreter
*
* @author jeichar
*/
class KeywordResultInterpreter extends ResultInterpreter<KeywordBean> {

    private Collection<String> languages;

    public KeywordResultInterpreter(Collection<String> languages) {
        this.languages = languages;
    }
    @Override
    public KeywordBean createFromRow(Thesaurus thesaurus, QueryResultsTable resultsTable, int row) {

        BiMap<String, Integer> columnNameMap = createColumnNameMap(resultsTable);

        Pair<String, String> lowerCorner = parseCorner(resultsTable, columnNameMap, row, Selectors.LOWER_CORNER.id);
        String coordWest = lowerCorner.one();
        String coordSouth = lowerCorner.two();
       
        Pair<String, String> upperCorner = parseCorner(resultsTable, columnNameMap, row, Selectors.UPPER_CORNER.id);
        String coordEast = upperCorner.one();
        String coordNorth = upperCorner.two();

        KeywordBean keywordBean = new KeywordBean(thesaurus.getIsoLanguageMapper())
            .setThesaurusInfo(thesaurus)
            .setId(row)
            .setUriCode(columnValue(resultsTable, columnNameMap, row, Selectors.ID.id))
            .setCoordEast(coordEast)
            .setCoordNorth(coordNorth)
            .setCoordSouth(coordSouth)
            .setCoordWest(coordWest)
      .setDownloadUrl(thesaurus.getDownloadUrl())
      .setKeywordUrl(thesaurus.getKeywordUrl());
           
        for (String lang : this.languages) {
            String value = columnValue(resultsTable, columnNameMap, row, lang+Selectors.LABEL_POSTFIX);
            keywordBean.setValue(value, lang);
            String definition = columnValue(resultsTable, columnNameMap, row, lang+Selectors.NOTE_POSTFIX);
            keywordBean.setDefinition(definition, lang);
        }

        return keywordBean;
    }

    private Pair<String, String> parseCorner(QueryResultsTable resultsTable, BiMap<String, Integer> columnNameMap, int row, String columnName) {
        String corner = columnValue(resultsTable, columnNameMap, row, columnName);
        String[] parts = corner.split(" ");
        if(parts.length == 2) {
            return Pair.read(parts[0], parts[1]);
        } else {
            return Pair.read("", "");
        }
    }

    private String columnValue(QueryResultsTable resultsTable, BiMap<String, Integer> columnNameMap, int row, String columnName) {
        Integer columnIdx = columnNameMap.get(columnName);
        String prefLabel = "";
        if (columnIdx != null) {
            Value value = resultsTable.getValue(row, columnIdx);
            if (value != null) {
                prefLabel = value.toString();
            }
        }
        return prefLabel;
    }

    private BiMap<String, Integer> createColumnNameMap(QueryResultsTable resultsTable) {
        String[] columnNames = resultsTable.getColumnNames();
        BiMap<String, Integer> map =  HashBiMap.create();
        for (int i = 0; i < columnNames.length; i++) {
            map.put(columnNames[i], i);
        }
        return map;
    }
}
TOP

Related Classes of org.fao.geonet.kernel.rdf.KeywordResultInterpreter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.