/**
  * Test constructor to create a non-empty database.
  *
  * @throws BioException if iterator fails.
  */
 public void testNonEmptyConstructor() throws BioException {
   SimpleSymbolPropertyTableDB dbInit = new SimpleSymbolPropertyTableDB();
   SymbolPropertyTable t1 = new SimpleSymbolPropertyTable(ProteinTools.getAlphabet(), "protein");
   SymbolPropertyTable t2 = new SimpleSymbolPropertyTable(DNATools.getDNA(), "dna");
   dbInit.addTable(t1);
   dbInit.addTable(t2);
   SymbolPropertyTableDB db = new SimpleSymbolPropertyTableDB(dbInit.tableIterator());
   assertEquals("Database has wrong number of tables.", 2, db.numTables());
   SymbolPropertyTableIterator iterator = db.tableIterator();
   ArrayList tables = new ArrayList(2);
   while (iterator.hasNext()) {
     tables.add(iterator.nextTable());
   }
   assertEquals("Iterator returned wrong number of tables.", 2, tables.size());
   assertEquals("Iterator returned wrong table.", t1, tables.get(0));
   assertEquals("Iterator returned wrong table.", t2, tables.get(1));
 }
 /**
  * Test for {@link SimpleSymbolPropertyTableDB#addTable(SymbolPropertyTable)}.
  *
  * @throws IllegalIDException if {@link SymbolPropertyTableDB#table(String)} fails.
  */
 public void testAddTable() throws IllegalIDException {
   SimpleSymbolPropertyTableDB db = new SimpleSymbolPropertyTableDB();
   SymbolPropertyTable t1 = new SimpleSymbolPropertyTable(ProteinTools.getAlphabet(), "protein");
   SymbolPropertyTable t2 = new SimpleSymbolPropertyTable(DNATools.getDNA(), "dna");
   db.addTable(t1);
   assertEquals("Database has wrong number of tables.", 1, db.numTables());
   db.addTable(t2);
   assertEquals("Database has wrong number of tables.", 2, db.numTables());
   assertEquals("Database returned wrong table.", t1, db.table("protein"));
   assertEquals("Database returned wrong table.", t2, db.table("dna"));
   Set names = db.names();
   assertTrue("Table is missing.", names.contains("protein"));
   assertTrue("Table is missing.", names.contains("dna"));
   assertEquals("Database has wrong number of tables.", 2, names.size());
   try {
     db.addTable(null);
     fail("addTable must throw NullPointerException.");
   } catch (NullPointerException e) {
     e.printStackTrace();
   }
 }
예제 #3
0
  private void dnaCommand(HttpServletRequest req, DazzleResponse resp, DazzleDataSource dds)
      throws IOException, DataSourceException, ServletException, DazzleException {

    DazzleReferenceSource drs = (DazzleReferenceSource) dds;

    List segments = DazzleTools.getSegments(dds, req, resp);
    if (segments.size() == 0) {
      throw new DazzleException(
          DASStatus.STATUS_BAD_COMMAND_ARGUMENTS, "No segments specified for dna command");
    }

    // Fetch and validate the requests.

    Map segmentResults = new HashMap();
    for (Iterator i = segments.iterator(); i.hasNext(); ) {
      Segment seg = (Segment) i.next();

      try {
        Sequence seq = drs.getSequence(seg.getReference());
        if (seq.getAlphabet() != DNATools.getDNA()) {
          throw new DazzleException(
              DASStatus.STATUS_SERVER_ERROR,
              "Sequence " + seg.toString() + " is not in the DNA alphabet");
        }
        if (seg.isBounded()) {
          if (seg.getMin() < 1 || seg.getMax() > seq.length()) {
            throw new DazzleException(
                DASStatus.STATUS_BAD_COORDS,
                "Segment " + seg.toString() + " doesn't fit sequence of length " + seq.length());
          }
        }
        segmentResults.put(seg, seq);
      } catch (NoSuchElementException ex) {
        throw new DazzleException(DASStatus.STATUS_BAD_REFERENCE, ex);
      } catch (DataSourceException ex) {
        throw new DazzleException(DASStatus.STATUS_SERVER_ERROR, ex);
      }
    }

    //
    // Looks okay -- generate the response document
    //

    XMLWriter xw = resp.startDasXML("DASDNA", "dasdna.dtd");

    try {
      xw.openTag("DASDNA");
      for (Iterator i = segmentResults.entrySet().iterator(); i.hasNext(); ) {
        Map.Entry me = (Map.Entry) i.next();
        Segment seg = (Segment) me.getKey();
        Sequence seq = (Sequence) me.getValue();

        xw.openTag("SEQUENCE");
        xw.attribute("id", seg.getReference());
        xw.attribute("version", drs.getLandmarkVersion(seg.getReference()));
        if (seg.isBounded()) {
          xw.attribute("start", "" + seg.getStart());
          xw.attribute("stop", "" + seg.getStop());
        } else {
          xw.attribute("start", "" + 1);
          xw.attribute("stop", "" + seq.length());
        }

        SymbolList syms = seq;
        if (seg.isBounded()) {
          syms = syms.subList(seg.getMin(), seg.getMax());
        }
        if (seg.isInverted()) {
          syms = DNATools.reverseComplement(syms);
        }

        xw.openTag("DNA");
        xw.attribute("length", "" + syms.length());

        for (int pos = 1; pos <= syms.length(); pos += 60) {
          int maxPos = Math.min(syms.length(), pos + 59);
          xw.println(syms.subStr(pos, maxPos));
        }

        xw.closeTag("DNA");
        xw.closeTag("SEQUENCE");
      }
      xw.closeTag("DASDNA");
      xw.close();
    } catch (Exception ex) {
      throw new DazzleException(ex, "Error writing DNA document");
    }
  }