locus_link.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:7k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: locus_link.cpp,v $
  4.  * PRODUCTION Revision 1000.5  2004/06/01 20:56:50  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: locus_link.cpp,v 1000.5 2004/06/01 20:56:50 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software / database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software / database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors:  Mike DiCuccio
  35.  *
  36.  * File Description:
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include "locus_link.hpp"
  41. #include "utils.hpp"
  42. #include <gui/plugin/PluginInfo.hpp>
  43. #include <gui/plugin/PluginRequest.hpp>
  44. #include <gui/plugin/PluginCommand.hpp>
  45. #include <gui/plugin/PluginCommandSet.hpp>
  46. #include <gui/plugin/PluginArgSet.hpp>
  47. #include <gui/plugin/PluginArg.hpp>
  48. #include <gui/core/version.hpp>
  49. #include <gui/core/idocument.hpp>
  50. #include <gui/core/plugin_utils.hpp>
  51. #include <gui/utils/app_popup.hpp>
  52. #include <corelib/ncbiapp.hpp>
  53. #include <corelib/ncbireg.hpp>
  54. #include <objmgr/util/feature.hpp>
  55. #include <objmgr/util/sequence.hpp>
  56. #include <objects/seq/Bioseq.hpp>
  57. #include <objects/seqfeat/Org_ref.hpp>
  58. #include <objects/general/Dbtag.hpp>
  59. #include <objects/general/Object_id.hpp>
  60. BEGIN_NCBI_SCOPE
  61. USING_SCOPE(objects);
  62. // standard info boilerplate
  63. void CAlgoLinkOut_LocusLink::GetInfo(CPluginInfo& info)
  64. {
  65.     info.Reset();
  66.     // version info macro
  67.     info.SetInfo(CPluginVersion::eMajor, CPluginVersion::eMinor, 0,
  68.                  string(__DATE__) + " " + string(__TIME__),
  69.                  "CAlgoLinkOut_LocusLink", "Link Out/LocusLink",
  70.                  "Open items in LocusLink", "");
  71.     // command info
  72.     CPluginCommandSet& cmds = info.SetCommands();
  73.     CPluginCommand&    args = cmds.AddAlgoCommand(eAlgoCommand_run);
  74.     args.AddArgument("gene", "Gene to search",
  75.                      CSeq_feat::GetTypeInfo());
  76.     args.SetConstraint("gene",
  77.                        (*CPluginValueConstraint::CreateFeatType(),
  78.                         CSeqFeatData::e_Gene));
  79.     args.AddArgument("orgn", "Limit to originating organism",
  80.                      CPluginArg::eBoolean);
  81. }
  82. // run our plugin
  83. void CAlgoLinkOut_LocusLink::RunCommand(CPluginMessage& msg)
  84. {
  85.     const CPluginCommand& args = msg.GetRequest().GetCommand();
  86.     CPluginReply& reply = msg.SetReply();
  87.     plugin_args::TFeatList genes;
  88.     GetArgValue(args["gene"], genes);
  89.     const CSeq_feat& feat = *genes.front().second;
  90.     const IDocument& doc  = *genes.front().first;
  91.     bool limit_to_orgn = args["orgn"].AsBoolean();
  92.     // retrieve the default link for LocusLink
  93.     CNcbiApplication* app = CNcbiApplication::Instance();
  94.     _ASSERT(app);
  95.     const CNcbiRegistry& reg = app->GetConfig();
  96.     string locus_link_url =
  97.         reg.GetString("LINKOUT", "LocusLink",
  98.                       "http://www.ncbi.nlm.nih.gov/LocusLink/list.cgi?"
  99.                       "Q=<gene>");
  100.     string gene_name;
  101.     feature::GetLabel(feat, &gene_name, feature::eContent, &doc.GetScope());
  102.     locus_link_url = NStr::Replace(locus_link_url, "<gene>", gene_name);
  103.     //
  104.     // check for species
  105.     //
  106.     if (limit_to_orgn) {
  107.         string species_tag;
  108.         CBioseq_Handle handle =
  109.             doc.GetScope().GetBioseqHandle(feat.GetLocation());
  110.         CConstRef<COrg_ref> ref = GetOrganism(handle);
  111.         if (ref) {
  112.             switch (ref->GetTaxId()) {
  113.             default:
  114.                 break;
  115.             case 9606:
  116.                 // homo sapiens
  117.                 species_tag = "Hs";
  118.                 break;
  119.             case 7227:
  120.                 // drosophila melanogaster
  121.                 species_tag = "Dm";
  122.                 break;
  123.             case 7955:
  124.                 // danio rerio (zebrafish
  125.                 species_tag = "Dr";
  126.                 break;
  127.             case 10090:
  128.                 // mus musculus
  129.                 species_tag = "Mm";
  130.                 break;
  131.             case 10116:
  132.                 // rattus norvegicus
  133.                 species_tag = "Rn";
  134.                 break;
  135.             }
  136.             if ( !species_tag.empty() ) {
  137.                 locus_link_url += "&ORG=" + species_tag;
  138.             }
  139.         }
  140.     }
  141.     if ( !CAppPopup::PopupURL(locus_link_url) ) {
  142.         reply.SetStatus(eMessageStatus_failed);
  143.     } else {
  144.         reply.SetStatus(eMessageStatus_success);
  145.     }
  146. }
  147. END_NCBI_SCOPE
  148. /*
  149.  * ===========================================================================
  150.  * $Log: locus_link.cpp,v $
  151.  * Revision 1000.5  2004/06/01 20:56:50  gouriano
  152.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  153.  *
  154.  * Revision 1.10  2004/05/21 22:27:47  gorelenk
  155.  * Added PCH ncbi_pch.hpp
  156.  *
  157.  * Revision 1.9  2004/01/27 18:45:26  dicuccio
  158.  * Added missing header files
  159.  *
  160.  * Revision 1.8  2003/11/24 15:45:31  dicuccio
  161.  * Renamed CVersion to CPluginVersion
  162.  *
  163.  * Revision 1.7  2003/11/06 20:12:13  dicuccio
  164.  * Cleaned up handling of USING_SCOPE - removed from all headers
  165.  *
  166.  * Revision 1.6  2003/11/04 17:49:24  dicuccio
  167.  * Changed calling parameters for plugins - pass CPluginMessage instead of paired
  168.  * CPluginCommand/CPluginReply
  169.  *
  170.  * Revision 1.5  2003/10/15 18:30:01  dicuccio
  171.  * Changed to match one-of-set constraint for feature type
  172.  *
  173.  * Revision 1.4  2003/10/07 13:47:04  dicuccio
  174.  * Renamed CPluginURL* to CPluginValue*
  175.  *
  176.  * Revision 1.3  2003/09/25 17:49:17  dicuccio
  177.  * Cleaned up handling of org-refs - implemented private function to return the
  178.  * apporpriate COrg_ref.  Added virtual destructors where necessary
  179.  *
  180.  * Revision 1.2  2003/09/24 18:24:57  dicuccio
  181.  * Cleaned up determination of tax-id from org-ref
  182.  *
  183.  * Revision 1.1  2003/09/23 19:45:45  dicuccio
  184.  * Initial revision
  185.  *
  186.  * ===========================================================================
  187.  */