Messages edited.
authorb.stoever <stoever@bioinfweb.info>
Fri, 18 Nov 2016 16:01:41 +0000 (17:01 +0100)
committerb.stoever <stoever@bioinfweb.info>
Fri, 18 Nov 2016 16:01:41 +0000 (17:01 +0100)
Support for parameters to export only single reads or only consensus implemented.
JavaDoc extended.

eu.etaxonomy.taxeditor.molecular/OSGI-INF/l10n/messages.properties
eu.etaxonomy.taxeditor.molecular/OSGI-INF/l10n/messages_de.properties
eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/handler/ExportSequenceToFileHandler.java
eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/io/CDMSequenceMatrixAdapter.java
eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/io/SequenceIDIterator.java
eu.etaxonomy.taxeditor.molecular/src/test/java/eu/etaxonomy/taxeditor/molecular/io/SequenceIDIteratorTest.java

index edb25e768396e36424a97fac2cc0d2422a78d342..b1559046cb9ab81ee36851a6ea7dabf9a709b682 100644 (file)
@@ -1,7 +1,7 @@
 wizardExportAlignmentAppendExtensionButton=Append default extension
 wizardExportAlignmentBrowseButton=Browse...
 wizardExportAlignmentDataLabel=Select the data to export:
-wizardExportAlignmentDescription=Define which data of the single read alignment shall be exported where.
+wizardExportAlignmentDescription=Define the output file and format.
 wizardExportAlignmentDestinationLabel=Select the export destination:
 wizardExportAlignmentErrorMissingFileName=The file name must not be empty.
 wizardExportAlignmentErrorMissingSeqLabel=The consensus sequence label must not be empty.
index 1cf556288aad53c80267e2516f702f92a5cfbef5..c865d5f2bd6f865ad5bab59db71d23f915e19848 100644 (file)
@@ -1,7 +1,7 @@
 wizardExportAlignmentAppendExtensionButton=Standarddateiendung anhängen
 wizardExportAlignmentBrowseButton=Durchsuchen...
 wizardExportAlignmentDataLabel=Zu exportierende Daten:
-wizardExportAlignmentDescription=Wählen Sie die zu exportierenden Daten und den Zielort aus!
+wizardExportAlignmentDescription=Wählen Sie den Zielort und das Zielformat aus!
 wizardExportAlignmentDestinationLabel=Zieldatei:
 wizardExportAlignmentErrorMissingFileName=Der Dateiname darf nicht leer sein.
 wizardExportAlignmentErrorMissingSeqLabel=Der Name der Konsensussequenz darf nicht leer sein.
index 693ee78f7c27598517d54b2dc0ab0651c756d7e8..b7e633de39e2b4d563c07206800f023f31d8b0d4 100644 (file)
@@ -44,8 +44,7 @@ import eu.etaxonomy.taxeditor.util.ApplicationUtil;
 \r
 /**\r
  * Allows to export a single read alignment to various alignment formats using\r
- * <a href="http://bioinfweb.info/JPhyloIO/"><i>JPhyloIO</i>\r
- * </a>.\r
+ * <a href="http://bioinfweb.info/JPhyloIO/"><i>JPhyloIO</i></a>.\r
  *\r
  * @author Ben Stöver\r
  * @date 24.04.2016\r
@@ -67,7 +66,7 @@ public class ExportSequenceToFileHandler extends AbstractHandler {
                 // Prepare writer parameters:\r
                 ReadWriteParameterMap parameters = new ReadWriteParameterMap();\r
                 parameters.put(ReadWriteParameterNames.KEY_APPLICATION_NAME, ApplicationUtil.getTitle());\r
-                parameters.put(ReadWriteParameterNames.KEY_APPLICATION_VERSION, ApplicationUtil.getVersion());\r
+                //parameters.put(ReadWriteParameterNames.KEY_APPLICATION_VERSION, ApplicationUtil.getVersion());  // Setting the version unnecessary, since its already contained in the title.\r
                 parameters.put(ReadWriteParameterNames.KEY_APPLICATION_URL, "http://cybertaxonomy.eu/taxeditor/");  //TODO Specify URL obtained from a central class?\r
                 parameters.put(ReadWriteParameterNames.KEY_SEQUENCE_EXTENSION_TOKEN, wizard.getModel().getElongationToken());\r
 \r
@@ -80,7 +79,8 @@ public class ExportSequenceToFileHandler extends AbstractHandler {
                 // Create writer and document adapters:\r
                 JPhyloIOEventWriter writer = factory.getWriter(wizard.getModel().getFormatInfo().getFormatID());\r
                 ListBasedDocumentDataAdapter document = new ListBasedDocumentDataAdapter();\r
-                document.getMatrices().add(new CDMSequenceMatrixAdapter(sequence, wizard.getModel().getConsensusSequenceLabel()));\r
+                document.getMatrices().add(new CDMSequenceMatrixAdapter(sequence, wizard.getModel().getConsensusSequenceLabel(),\r
+                        wizard.getModel().isExportConsensusSequence(), wizard.getModel().isExportSingleReads()));\r
 \r
                 // Write document:\r
                 File file = new File(wizard.getModel().getFileName());\r
index 6f229414820ecf574f87929e92ed7579aee2a8de..68d6ac13e14417b990896ffbd711a194e5b5286d 100644 (file)
@@ -30,6 +30,7 @@ import info.bioinfweb.jphyloio.utils.JPhyloIOWritingUtils;
 import java.io.IOException;\r
 import java.net.URI;\r
 import java.util.ArrayList;\r
+import java.util.Collections;\r
 import java.util.Iterator;\r
 import java.util.List;\r
 \r
@@ -57,6 +58,7 @@ public class CDMSequenceMatrixAdapter extends NoCharDefsNoSetsMatrixDataAdapter
 \r
 \r
     private Sequence sequence;\r
+    private boolean exportConsensus;\r
     private List<SingleReadAlignment> singleReadList;\r
     private String consensusSequenceLabel;\r
     private ObjectListDataAdapter<TokenSetDefinitionEvent> tokenSetList;\r
@@ -66,16 +68,33 @@ public class CDMSequenceMatrixAdapter extends NoCharDefsNoSetsMatrixDataAdapter
     /**\r
      * Creates a new instance of this class.\r
      *\r
-     * @param sequence\r
-     * @param consensusSequenceLabel\r
+     * @param sequence the <i>CDM</i> sequence object containing the data to be exported\r
+     * @param consensusSequenceLabel the label to be used for the consensus sequence (Maybe {@code null}.)\r
+     * @param exportConsensus Specify {@code true} here, if the consensus sequence shall be included in the export or {@code false}\r
+     *        otherwise.\r
+     * @param exportSingleReads Specify {@code true} here, if the single reads shall be included in the export or {@code false}\r
+     *        otherwise.\r
+     * @throws IllegalArgumentException if both {@code exportConsensus} and {@code exportSingleReads} are {@code false}\r
      */\r
-    public CDMSequenceMatrixAdapter(Sequence sequence, String consensusSequenceLabel) {\r
+    public CDMSequenceMatrixAdapter(Sequence sequence, String consensusSequenceLabel, boolean exportConsensus, boolean exportSingleReads) {\r
         super();\r
-        this.sequence = sequence;\r
-        this.consensusSequenceLabel = consensusSequenceLabel;\r
-        tokenSetList = createTokenSetList();\r
-        singleReadList = new ArrayList<SingleReadAlignment>(sequence.getSingleReadAlignments());  // Store references of single reads in defined order to allow random access.\r
-                //TODO Omit single reads that do not have an edited sequence yet?\r
+        if (!exportConsensus && !exportSingleReads) {\r
+            throw new IllegalArgumentException("Either exportConsensus or exportSingleReads must be true. "\r
+                    + "Otherwise no sequences would be contained in this matrix.");\r
+        }\r
+        else {\r
+            this.sequence = sequence;\r
+            this.exportConsensus = exportConsensus;\r
+            this.consensusSequenceLabel = consensusSequenceLabel;\r
+            tokenSetList = createTokenSetList();\r
+            if (exportSingleReads) {\r
+                singleReadList = new ArrayList<SingleReadAlignment>(sequence.getSingleReadAlignments());  // Store references of single reads in defined order to allow random access.\r
+                        //TODO Omit single reads that do not have an edited sequence yet?\r
+            }\r
+            else {\r
+                singleReadList = Collections.emptyList();\r
+            }\r
+        }\r
     }\r
 \r
 \r
@@ -125,19 +144,23 @@ public class CDMSequenceMatrixAdapter extends NoCharDefsNoSetsMatrixDataAdapter
 \r
     @Override\r
     public long getColumnCount(ReadWriteParameterMap parameters) {\r
-        return getCDMSequence().getSequenceString().length();  //TODO Consider that parts of single reads may lie outside of the current consensus sequence. Possibly return -1 in the future.\r
+        return -1;  // Indicates that sequences may have different lengths. (Otherwise writing files without sequence elongation would not be possible.)\r
     }\r
 \r
 \r
     @Override\r
     public long getSequenceCount(ReadWriteParameterMap parameters) {\r
-        return singleReadList.size() + 1;  // The last sequence is the consensus sequence.\r
+        int addend = 1;\r
+        if (!exportConsensus) {\r
+            addend = 0;\r
+        }\r
+        return singleReadList.size() + addend;\r
     }\r
 \r
 \r
     @Override\r
     public Iterator<String> getSequenceIDIterator(ReadWriteParameterMap parameters) {\r
-        return new SequenceIDIterator(getCDMSequence().getSingleReadAlignments().size());\r
+        return new SequenceIDIterator(singleReadList.size(), exportConsensus);\r
     }\r
 \r
 \r
@@ -153,7 +176,7 @@ public class CDMSequenceMatrixAdapter extends NoCharDefsNoSetsMatrixDataAdapter
                 return 0;\r
             }\r
         }\r
-        else if (CONSENSUS_SEQUENCE_ID.equals(sequenceID)) {\r
+        else if (exportConsensus && CONSENSUS_SEQUENCE_ID.equals(sequenceID)) {\r
             return getCDMSequence().getSequenceString().length();\r
         }\r
         else {\r
@@ -169,7 +192,7 @@ public class CDMSequenceMatrixAdapter extends NoCharDefsNoSetsMatrixDataAdapter
             return new LinkedLabeledIDEvent(EventContentType.SEQUENCE, sequenceID, "Single read " + singleReadIndex, null);\r
                     //TODO Use name displayed in derivate hierarchy or specified name as label instead?\r
         }\r
-        else if (CONSENSUS_SEQUENCE_ID.equals(sequenceID)) {\r
+        else if (exportConsensus && CONSENSUS_SEQUENCE_ID.equals(sequenceID)) {\r
             return new LinkedLabeledIDEvent(EventContentType.SEQUENCE, sequenceID, consensusSequenceLabel, null);\r
         }\r
         else {\r
@@ -225,7 +248,7 @@ public class CDMSequenceMatrixAdapter extends NoCharDefsNoSetsMatrixDataAdapter
             }\r
             writeStringPart(receiver, singleRead.getEditedSequence(), startColumn, endColumn);\r
         }\r
-        else if (CONSENSUS_SEQUENCE_ID.equals(sequenceID)) {\r
+        else if (exportConsensus && CONSENSUS_SEQUENCE_ID.equals(sequenceID)) {\r
             if (startColumn == 0) {\r
                 writeMetadataEvents(receiver, sequenceID, PREDICATE_IS_CONSENSUS_SEQUENCE, W3CXSConstants.DATA_TYPE_BOOLEAN, new Boolean(true));\r
                 //TODO Possibly export additional properties of sequence (e.g. isBarcode(), getDdbjId(), ...) as metadata?\r
index 74f8ece8c262ce13499763d621ba2d47f15d08bb..4f573f4866e573e4c85dc9ca0f25c38f1a6bbb2e 100644 (file)
@@ -21,6 +21,7 @@ import java.util.NoSuchElementException;
  * @date 29.04.2016\r
  */\r
 class SequenceIDIterator implements Iterator<String> {\r
+    private boolean containsConsensus;\r
     private int singleReadPos;\r
     private int singleReadCount;\r
 \r
@@ -30,8 +31,9 @@ class SequenceIDIterator implements Iterator<String> {
      *\r
      * @param singleReadCount the number of single read IDs to be returned by this iterator before the consensus sequence\r
      */\r
-    public SequenceIDIterator(int singleReadCount) {\r
+    public SequenceIDIterator(int singleReadCount, boolean containsConsensus) {\r
         super();\r
+        this.containsConsensus = containsConsensus;\r
         this.singleReadCount = singleReadCount;\r
         this.singleReadPos = 0;\r
     }\r
@@ -39,7 +41,7 @@ class SequenceIDIterator implements Iterator<String> {
 \r
     @Override\r
     public boolean hasNext() {\r
-        return singleReadPos <= singleReadCount;\r
+        return (singleReadPos < singleReadCount) || (containsConsensus && (singleReadPos <= singleReadCount));\r
     }\r
 \r
 \r
@@ -48,7 +50,7 @@ class SequenceIDIterator implements Iterator<String> {
         if (singleReadPos < singleReadCount) {\r
             return CDMSequenceMatrixAdapter.SINGLE_READ_SEQUENCE_ID_PREFIX + (singleReadPos++);\r
         }\r
-        else if (singleReadPos == singleReadCount) {\r
+        else if (containsConsensus && (singleReadPos == singleReadCount)) {\r
             singleReadPos++;\r
             return CDMSequenceMatrixAdapter.CONSENSUS_SEQUENCE_ID;\r
         }\r
index 47a4fe203e68079d30e179cfce873e8e24ceb104..93d8b3fda288479b9c059b0e6186143b64fd5ed5 100644 (file)
@@ -19,14 +19,13 @@ import org.junit.Test;
 \r
 \r
 /**\r
- * @author bstoe_01\r
+ * @author Ben Stöver\r
  * @date 29.04.2016\r
- *\r
  */\r
 public class SequenceIDIteratorTest {\r
     @Test\r
     public void test_next() {\r
-        SequenceIDIterator iterator = new SequenceIDIterator(3);\r
+        SequenceIDIterator iterator = new SequenceIDIterator(3, true);\r
 \r
         for (int i = 0; i < 3; i++) {\r
             assertTrue(iterator.hasNext());\r
@@ -36,4 +35,16 @@ public class SequenceIDIteratorTest {
         assertEquals("seqConsensus", iterator.next());\r
         assertFalse(iterator.hasNext());\r
     }\r
+\r
+\r
+    @Test\r
+    public void test_next_woConsensus() {\r
+        SequenceIDIterator iterator = new SequenceIDIterator(3, false);\r
+\r
+        for (int i = 0; i < 3; i++) {\r
+            assertTrue(iterator.hasNext());\r
+            assertEquals("seqSingleRead" + i, iterator.next());\r
+        }\r
+        assertFalse(iterator.hasNext());\r
+    }\r
 }\r