uk.ac.ebi.eva.server.ws.EvaWSServer.java Source code

Java tutorial

Introduction

Here is the source code for uk.ac.ebi.eva.server.ws.EvaWSServer.java

Source

/*
 * European Variation Archive (EVA) - Open-access database of all types of genetic
 * variation data from all species
 *
 * Copyright 2014-2016 EMBL - European Bioinformatics Institute
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package uk.ac.ebi.eva.server.ws;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.opencb.biodata.models.feature.Genotype;
import org.opencb.biodata.models.variant.VariantSource;
import org.opencb.biodata.models.variant.VariantSourceEntry;
import org.opencb.biodata.models.variant.stats.VariantStats;
import org.opencb.datastore.core.QueryOptions;
import org.opencb.datastore.core.QueryResponse;
import org.opencb.opencga.storage.core.variant.io.json.GenotypeJsonMixin;
import org.opencb.opencga.storage.core.variant.io.json.VariantSourceEntryJsonMixin;
import org.opencb.opencga.storage.core.variant.io.json.VariantSourceJsonMixin;
import org.opencb.opencga.storage.core.variant.io.json.VariantStatsJsonMixin;
import org.opencb.opencga.storage.core.variant.io.json.VariantStatsJsonSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.google.common.base.Splitter;

/**
 * Created by imedina on 01/04/14.
 */
public class EvaWSServer {

    protected final String version = "v1";

    @Autowired
    protected HttpServletRequest httpServletRequest;

    protected QueryOptions queryOptions;
    protected long startTime;
    protected long endTime;

    protected static Logger logger = LoggerFactory.getLogger(EvaWSServer.class);

    @Bean
    public Jackson2ObjectMapperBuilder jacksonBuilder() {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
                .mixIn(VariantSourceEntry.class, VariantSourceEntryJsonMixin.class)
                .mixIn(Genotype.class, GenotypeJsonMixin.class)
                .mixIn(VariantStats.class, VariantStatsJsonMixin.class)
                .mixIn(VariantSource.class, VariantSourceJsonMixin.class).serializationInclusion(Include.NON_NULL);

        SimpleModule module = new SimpleModule();
        module.addSerializer(VariantStats.class, new VariantStatsJsonSerializer());
        builder.modules(module);

        return builder;
    }

    public EvaWSServer() {
    }

    protected void initializeQueryOptions() {
        this.queryOptions = new QueryOptions();
        Map<String, String[]> multivaluedMap = httpServletRequest.getParameterMap();

        boolean metadata = (multivaluedMap.get("metadata") != null)
                ? multivaluedMap.get("metadata")[0].equals("true")
                : true;
        int limit = (multivaluedMap.get("limit") != null) ? Integer.parseInt(multivaluedMap.get("limit")[0]) : -1;
        int skip = (multivaluedMap.get("skip") != null) ? Integer.parseInt(multivaluedMap.get("skip")[0]) : -1;
        boolean count = (multivaluedMap.get("count") != null) ? multivaluedMap.get("count")[0].equals("true")
                : false;

        String[] exclude = multivaluedMap.get("exclude");
        String[] include = multivaluedMap.get("include");

        queryOptions.put("metadata", metadata);
        queryOptions.put("exclude",
                (exclude != null && exclude.length > 0) ? Splitter.on(",").splitToList(exclude[0]) : null);
        queryOptions.put("include",
                (include != null && include.length > 0) ? Splitter.on(",").splitToList(include[0]) : null);
        queryOptions.put("limit", (limit > 0) ? limit : -1);
        queryOptions.put("skip", (skip > 0) ? skip : -1);
        queryOptions.put("count", count);
        System.out.println(queryOptions.toJson());
    }

    protected QueryResponse setQueryResponse(Object obj) {
        QueryResponse queryResponse = new QueryResponse();
        endTime = System.currentTimeMillis() - startTime;
        // TODO Restore span time calculation
        //        queryResponse.setTime(new Long(endTime - startTime).intValue());
        queryResponse.setApiVersion(version);
        queryResponse.setQueryOptions(queryOptions);

        // Guarantee that the QueryResponse object contains a coll of results
        List coll;
        if (obj instanceof List) {
            coll = (List) obj;
        } else {
            coll = new ArrayList();
            coll.add(obj);
        }
        queryResponse.setResponse(coll);

        return queryResponse;
    }

    //    private Response buildResponse(Response.ResponseBuilder responseBuilder) {
    //        return responseBuilder.header("Access-Control-Allow-Origin", "*")
    //                .header("Access-Control-Allow-Headers", "x-requested-with, content-type, accept")
    //                .header("Access-Control-Allow-Methods", "POST, GET, OPTIONS").build();
    //    }

}