package org.molgenis.mutation.web; import java.io.IOException; import java.text.ParseException; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.abdera.Abdera; import org.apache.abdera.model.Entry; import org.apache.abdera.model.Feed; import org.apache.commons.lang.StringUtils; import org.molgenis.framework.db.DatabaseException; import org.molgenis.framework.server.MolgenisContext; import org.molgenis.framework.server.MolgenisRequest; import org.molgenis.framework.server.MolgenisResponse; import org.molgenis.framework.server.MolgenisService; import org.molgenis.mutation.ServiceLocator; import org.molgenis.mutation.dto.GeneDTO; import org.molgenis.mutation.dto.MutationSummaryDTO; import org.molgenis.mutation.service.SearchService; public class AtomFeed implements MolgenisService { private static Abdera abdera = null; public AtomFeed(@SuppressWarnings("unused") MolgenisContext mc) { if (abdera == null) abdera = new Abdera(); } @Override public void handleRequest(MolgenisRequest req, MolgenisResponse resp) throws ParseException, DatabaseException, IOException { HttpServletRequest request = req.getRequest(); HttpServletResponse response = resp.getResponse(); response.setContentType("application/atom+xml"); try { if (StringUtils.startsWith(request.getPathInfo(), "/gene")) { this.handleGeneFeed(req, resp); } else if (StringUtils.startsWith(request.getPathInfo(), "/variants")) { this.handleVariantsFeed(req, resp); } } catch (Exception e) { try { response.sendError(500, e.getMessage()); } catch (Exception e2) { // bad luck } } } private void handleGeneFeed(MolgenisRequest req, MolgenisResponse resp) throws IOException { HttpServletRequest request = req.getRequest(); HttpServletResponse response = resp.getResponse(); SearchService searchService = ServiceLocator.instance().getSearchService(); searchService.setDatabase(req.getDatabase()); String geneURL = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/molgenis.do?__target=SearchPlugin&__action=listAllMutations"; GeneDTO geneSummaryDTO = searchService.findGene(); StringBuffer content = new StringBuffer(); content.append("id:" + geneSummaryDTO.getSymbol() + "\n"); content.append("entrez_id:NA\n"); content.append("symbol:" + geneSummaryDTO.getSymbol() + "\n"); content.append("name:" + geneSummaryDTO.getName() + "\n"); content.append("chromosome_location:" + geneSummaryDTO.getChromosome() + "\n"); content.append("position_start:" + geneSummaryDTO.getChromosome() + ":" + geneSummaryDTO.getBpStart() + "\n"); content.append("position_end:" + geneSummaryDTO.getChromosome() + ":" + geneSummaryDTO.getBpEnd() + "\n"); content.append("refseq_genomic:" + geneSummaryDTO.getGenbankId() + "." + geneSummaryDTO.getGenomeBuild() + "\n"); content.append("refseq_mrna:NA"); content.append("refseq_build:NA"); Feed feed = abdera.newFeed(); feed.addLink(request.getRequestURL().toString(), "self"); feed.setUpdated(new Date()); feed.setGenerator("http://www.molgenis.org/", "4.0.0", "MOLGENIS database generator"); feed.setRights("Copyright (c), the curators of this database"); Entry entry = feed.addEntry(); entry.setId(geneSummaryDTO.getSymbol()); entry.setTitle(geneSummaryDTO.getSymbol()); entry.setRights("Copyright (c), the curators of this database"); entry.addAuthor("Peter van den Akker"); entry.addContributor("Peter van den Akker"); entry.addLink(geneURL, "alternate"); entry.setPublished(new Date()); entry.setUpdated(new Date()); entry.setContent(content.toString()); feed.writeTo(response.getOutputStream()); } private void handleVariantsFeed(MolgenisRequest req, MolgenisResponse resp) throws IOException { HttpServletRequest request = req.getRequest(); HttpServletResponse response = resp.getResponse(); SearchService searchService = (SearchService) ServiceLocator.instance().getService("searchService"); searchService.setDatabase(req.getDatabase()); String geneURL = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/molgenis.do?__target=SearchPlugin&__action=listAllMutations"; GeneDTO geneSummaryDTO = searchService.findGene(); Feed feed = abdera.newFeed(); feed.setTitle("Listing of all public variants in the " + geneSummaryDTO.getSymbol() + " database"); feed.addLink(geneURL, "alternate"); feed.addLink(request.getRequestURL().toString(), "self"); feed.setUpdated(new Date()); feed.setGenerator("http://www.molgenis.org/", "4.0.0", "MOLGENIS database generator"); feed.setRights("Copyright (c), the curators of this database"); List<MutationSummaryDTO> mutationSummaryVOList = searchService.findAllMutationSummaries(); for (MutationSummaryDTO mutationSummaryVO : mutationSummaryVOList) { Entry entry = feed.addEntry(); entry.setId(mutationSummaryVO.getIdentifier()); entry.setTitle(geneSummaryDTO.getSymbol() + ":" + mutationSummaryVO.getCdnaNotation()); String mutationURL = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/molgenis.do?__target=SearchPlugin&__action=showMutation&mid=" + mutationSummaryVO.getIdentifier() + "#results"; entry.addLink(mutationURL, "alternate"); entry.addLink(request.getRequestURL().toString(), "self"); entry.addAuthor("Peter van den Akker"); entry.addContributor("Peter van den Akker"); entry.setPublished(new Date()); entry.setUpdated(new Date()); StringBuffer content = new StringBuffer(); content.append("symbol:" + geneSummaryDTO.getSymbol() + "\n"); content.append("id:" + mutationSummaryVO.getIdentifier() + "\n"); content.append("position_mRNA:" + geneSummaryDTO.getGenbankId() + "." + geneSummaryDTO.getGenomeBuild() + ":c." + mutationSummaryVO.getCdnaStart() + "\n"); content.append("position_genomic:" + geneSummaryDTO.getChromosome() + ":" + mutationSummaryVO.getGdnaStart() + "\n"); content.append("Variant/DNA:" + mutationSummaryVO.getCdnaNotation() + "\n"); content.append("Variant/DBID:" + mutationSummaryVO.getIdentifier() + "\n"); content.append("Times_reported:" + mutationSummaryVO.getPatientSummaryDTOList().size() + "\n"); entry.setContent(content.toString()); } feed.writeTo(response.getOutputStream()); } }