org.intermine.app.json.GeneSearchResultDeserializer.java Source code

Java tutorial

Introduction

Here is the source code for org.intermine.app.json.GeneSearchResultDeserializer.java

Source

package org.intermine.app.json;

/*
 * Copyright (C) 2015 InterMine
 *
 * This code may be freely distributed and modified under the
 * terms of the GNU Lesser General Public Licence.  This should
 * be distributed with the code.  See the LICENSE file for more
 * information or http://www.gnu.org/copyleft/lesser.html.
 *
 */

import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;

import org.intermine.app.core.Gene;
import org.intermine.app.core.GenesList;
import org.intermine.app.util.Strs;

import java.lang.reflect.Type;

/**
 * @author Daria Komkova <Daria_Komkova @ hotmail.com>
 */
public class GeneSearchResultDeserializer implements JsonDeserializer<GenesList> {
    public static final String RELEVANCE_FIELD = "relevance";
    public static final String FIELDS_FIELD = "fields";
    public static final String PRIMARY_ID_FIELD = "primaryIdentifier";
    public static final String SECONDARY_ID_FIELD = "secondaryIdentifier";
    public static final String ORGANISM_NAME_FIELD = "organism.name";
    public static final String SYMBOL_FIELD = "symbol";
    public static final String NAME_FIELD = "name";
    public static final String LOCATION_START_FIELD = "chromosomeLocation.start";
    public static final String LOCATION_END_FIELD = "chromosomeLocation.end";
    public static final String ORGANISM_SHORT_NAME_FIELD = "organism.shortName";
    public static final String SEQUENCE_ONTOLOGY_TERM_FIELD = "sequenceOntologyTerm.name";

    @Override
    public GenesList deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
            throws JsonParseException {
        GenesList genesList = new GenesList();

        JsonObject jsonObject = (JsonObject) json;
        JsonObject facets = getJsonObject("facets", jsonObject);
        genesList.setResultsCount(getResultsCount(facets));

        if (null != facets) {
            JsonArray results = jsonObject.get("results").getAsJsonArray();

            if (0 < results.size()) {
                for (int i = 0; i < results.size(); i++) {
                    Gene gene = parseGeneObject(results.get(i));
                    genesList.add(gene);
                }
            }
        }
        return genesList;
    }

    protected Gene parseGeneObject(JsonElement json) {
        JsonObject jsonObject = (JsonObject) json;

        JsonObject fields = jsonObject.get(FIELDS_FIELD).getAsJsonObject();
        String name = getStringValue(NAME_FIELD, fields);
        String symbol = getStringValue(SYMBOL_FIELD, fields);
        String primaryId = getStringValue(PRIMARY_ID_FIELD, fields);
        String organismName = getStringValue(ORGANISM_NAME_FIELD, fields);
        String locationStart = getStringValue(LOCATION_START_FIELD, fields);
        String locationEnd = getStringValue(LOCATION_END_FIELD, fields);
        String organismShortName = getStringValue(ORGANISM_SHORT_NAME_FIELD, fields);
        String ontologyTerm = getStringValue(SEQUENCE_ONTOLOGY_TERM_FIELD, fields);
        String secondaryId = getStringValue(SECONDARY_ID_FIELD, fields);

        double relevance = jsonObject.get(RELEVANCE_FIELD).getAsDouble();

        Gene gene = new Gene();
        gene.setPrimaryDBId(primaryId);
        gene.setSymbol(symbol);
        gene.setName(name);
        gene.setRelevance(relevance);
        gene.setOrganismName(organismName);
        gene.setOrganismShortName(organismShortName);
        gene.setLocationStart(locationStart);
        gene.setLocationEnd(locationEnd);
        gene.setSecondaryIdentifier(secondaryId);
        gene.setOntologyTerm(ontologyTerm);
        return gene;
    }

    protected String getStringValue(String key, JsonObject jsonObj) {
        JsonElement item = jsonObj.get(key);

        if (null != item) {
            return item.getAsString();
        }
        return Strs.EMPTY_STRING;
    }

    protected JsonObject getJsonObject(String key, JsonObject jsonObj) {
        JsonElement item = jsonObj.get(key);

        if (null != item) {
            return item.getAsJsonObject();
        }
        return null;
    }

    private int getResultsCount(JsonObject obj) {
        JsonObject category = getJsonObject("Category", obj);

        if (null != category) {
            JsonElement resultsCount = category.get("Gene");

            if (null != resultsCount) {
                return resultsCount.getAsInt();
            }
        }
        return 0;
    }
}