ToggleInsertOverwriteHandler now also triggers enabling and disabling of ToggleLeftRi...
authorb.stoever <b.stoever@localhost>
Wed, 17 Jun 2015 13:31:53 +0000 (13:31 +0000)
committerb.stoever <b.stoever@localhost>
Wed, 17 Jun 2015 13:31:53 +0000 (13:31 +0000)
Actions for cutting pherograms on the left and right ends added.
Action for reverse complementing single reads added.
Minor changes.

.gitattributes
eu.etaxonomy.taxeditor.editor/plugin.xml
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/CutPherogramLeftHandler.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/CutPherogramRightHandler.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/ReverseComplementHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/ToggleInsertOverwriteHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/molecular/AlignmentEditor.java

index 743b58a7fc99f7ea9c5e32f3c20356b66825cc07..01647faa59600c4eb278247122e9b1909a514654 100644 (file)
@@ -420,6 +420,8 @@ eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handle
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/SpecimenPropertyTester.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/TaxonParameterConverter.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/CreateConsensusSequenceHandler.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/CutPherogramLeftHandler.java -text svneol=unset#text/plain
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/CutPherogramRightHandler.java -text svneol=unset#text/plain
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/ReverseComplementHandler.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/ToggleInsertOverwriteHandler.java -text
 eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/ToggleLeftRightInsertionHandler.java -text
index 3c5382273559cd4df1926afacf919f9792fb85ab..d365557a59c90a1e62767c3fb3510277ea475d22 100644 (file)
                   label="Load Pherogram"
                   style="push">
             </command>
+            <command
+                  commandId="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.cutPherogramLeft"
+                  id="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.cutPherogramLeft"
+                  name="Cut pherogram left">
+            </command>
+            <command
+                  commandId="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.cutPherogramRight"
+                  id="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.cutPherogramRight"
+                  style="push">
+            </command>
+            <command
+                  commandId="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.reverseComplementRows"
+                  label="Reverse complement selected rows"
+                  mnemonic="r"
+                  style="push">
+            </command>
             <visibleWhen
                   checkEnabled="true">
                <with
             class="eu.etaxonomy.taxeditor.editor.handler.alignmenteditor.ToggleLeftRightInsertionHandler"
             commandId="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.toggleLeftRightInsertion">
       </handler>
+      <handler
+            class="eu.etaxonomy.taxeditor.editor.handler.alignmenteditor.CutPherogramLeftHandler"
+            commandId="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.cutPherogramLeft">
+      </handler>
+      <handler
+            class="eu.etaxonomy.taxeditor.editor.handler.alignmenteditor.CutPherogramRightHandler"
+            commandId="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.cutPherogramRight">
+      </handler>
+      <handler
+            class="eu.etaxonomy.taxeditor.editor.handler.alignmenteditor.ReverseComplementHandler"
+            commandId="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.reverseComplementRows">
+      </handler>
    </extension>
    <extension
          name="%extension.name"
             id="eu.etaxonomy.taxeditor.editor.showPherogram"
             name="Show Pherogram">
       </command>
+      <command
+            id="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.cutPherogramLeft"
+            name="Cut pherogram left">
+      </command>
+      <command
+            id="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.cutPherogramRight"
+            name="Cut pherogram right">
+      </command>
+      <command
+            id="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.reverseComplementRows"
+            name="Reverse complement selected rows">
+      </command>
    </extension>
    <extension
          point="org.eclipse.core.expressions.definitions">
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/CutPherogramLeftHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/CutPherogramLeftHandler.java
new file mode 100644 (file)
index 0000000..0b76ca9
--- /dev/null
@@ -0,0 +1,43 @@
+// $Id$\r
+/**\r
+* Copyright (C) 2015 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.taxeditor.editor.handler.alignmenteditor;\r
+\r
+\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.ui.IEditorPart;\r
+\r
+import eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor;\r
+import eu.etaxonomy.taxeditor.model.AbstractUtility;\r
+import eu.etaxonomy.taxeditor.model.MessagingUtils;\r
+\r
+\r
+\r
+/**\r
+ * Handler that cuts the base call sequence of a pherogram attached to the current sequence on the left\r
+ * of the current selection or cursor position.\r
+ *\r
+ * @author Ben Stöver\r
+ * @date 15.06.2015\r
+ */\r
+public class CutPherogramLeftHandler extends AbstractHandler {\r
+    @Override\r
+    public Object execute(ExecutionEvent event) throws ExecutionException {\r
+        IEditorPart activeEditor = AbstractUtility.getActiveEditor();\r
+        if (activeEditor instanceof AlignmentEditor) {\r
+            String errorMessage = ((AlignmentEditor)activeEditor).cutPherogramLeft();\r
+            if (errorMessage != null) {\r
+                MessagingUtils.errorDialog("Unable to cut base call sequence", this, errorMessage, "eu.etaxonomy.taxeditor.editor", null, false);  //TODO set pluginID\r
+            }\r
+        }\r
+        return null;\r
+    }\r
+}\r
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/CutPherogramRightHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/alignmenteditor/CutPherogramRightHandler.java
new file mode 100644 (file)
index 0000000..15c07fb
--- /dev/null
@@ -0,0 +1,43 @@
+// $Id$\r
+/**\r
+* Copyright (C) 2015 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.taxeditor.editor.handler.alignmenteditor;\r
+\r
+\r
+import org.eclipse.core.commands.AbstractHandler;\r
+import org.eclipse.core.commands.ExecutionEvent;\r
+import org.eclipse.core.commands.ExecutionException;\r
+import org.eclipse.ui.IEditorPart;\r
+\r
+import eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor;\r
+import eu.etaxonomy.taxeditor.model.AbstractUtility;\r
+import eu.etaxonomy.taxeditor.model.MessagingUtils;\r
+\r
+\r
+\r
+/**\r
+ * Handler that cuts the base call sequence of a pherogram attached to the current sequence on the right\r
+ * of the current selection or cursor position.\r
+ *\r
+ * @author BenStoever\r
+ * @date 15.06.2015\r
+ */\r
+public class CutPherogramRightHandler extends AbstractHandler {\r
+    @Override\r
+    public Object execute(ExecutionEvent event) throws ExecutionException {\r
+        IEditorPart activeEditor = AbstractUtility.getActiveEditor();\r
+        if (activeEditor instanceof AlignmentEditor) {\r
+            String errorMessage = ((AlignmentEditor)activeEditor).cutPherogramRight();\r
+            if (errorMessage != null) {\r
+                MessagingUtils.errorDialog("Unable to cut base call sequence", this, errorMessage, "eu.etaxonomy.taxeditor.editor", null, false);  //TODO set pluginID\r
+            }\r
+        }\r
+        return null;\r
+    }\r
+}\r
index e3065ab67614bb4d83c72157941b621760aa86b9..d3da248a9e6c3a7280837a42e03d464666ca9584 100644 (file)
@@ -30,7 +30,7 @@ public class ReverseComplementHandler extends AbstractHandler {
        public Object execute(ExecutionEvent event) throws ExecutionException {\r
         IEditorPart activeEditor = AbstractUtility.getActiveEditor();\r
         if (activeEditor instanceof AlignmentEditor) {\r
-               ((AlignmentEditor)activeEditor).reverseComplementSelection();\r
+               ((AlignmentEditor)activeEditor).reverseComplementSelectedSequences();\r
         }\r
         return null;\r
        }\r
index 2d3ebb83fe77d91b857ca0073f3d8c030350240e..56221f9781f7866f700450fd7e09c1f154fdc4bd 100644 (file)
@@ -10,7 +10,6 @@
 package eu.etaxonomy.taxeditor.editor.handler.alignmenteditor;\r
 \r
 \r
-import java.util.HashMap;\r
 import java.util.Map;\r
 \r
 import org.eclipse.core.commands.AbstractHandler;\r
@@ -49,8 +48,6 @@ public class ToggleInsertOverwriteHandler extends AbstractHandler implements IEl
         IEditorPart activeEditor = AbstractUtility.getActiveEditor();\r
         if (activeEditor instanceof AlignmentEditor) {\r
             ((AlignmentEditor)activeEditor).toggleInsertOverwrite();\r
-            ((ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class)).refreshElements(\r
-                    ToggleLeftRightInsertionHandler.COMMAND_ID, new HashMap());\r
         }\r
         return null;\r
        }\r
@@ -70,6 +67,8 @@ public class ToggleInsertOverwriteHandler extends AbstractHandler implements IEl
                                element.setText("OVR");\r
                                element.setTooltip("Click to switch to insertion mode");\r
                        }\r
+            ((ICommandService)PlatformUI.getWorkbench().getService(ICommandService.class)).refreshElements(\r
+                    ToggleLeftRightInsertionHandler.COMMAND_ID, null);\r
                }\r
        }\r
 }\r
index 79d0ca257670f992155653132b24b17f9f549535..087b59c220582dabb73919dc781f16c851915cc5 100644 (file)
@@ -23,7 +23,7 @@ import info.bioinfweb.libralign.editsettings.EditSettingsChangeEvent;
 import info.bioinfweb.libralign.editsettings.EditSettingsListener;
 import info.bioinfweb.libralign.model.AlignmentModel;
 import info.bioinfweb.libralign.model.AlignmentModelChangeListener;
-import info.bioinfweb.libralign.model.SequenceUtils;
+import info.bioinfweb.libralign.model.AlignmentModelUtils;
 import info.bioinfweb.libralign.model.adapters.StringAdapter;
 import info.bioinfweb.libralign.model.events.SequenceChangeEvent;
 import info.bioinfweb.libralign.model.events.SequenceRenamedEvent;
@@ -277,7 +277,7 @@ public class AlignmentEditor extends EditorPart {
                // Set consensus sequence:
                AlignmentModel consensusProvider = getConsensusArea().getAlignmentModel();
                int id = consensusProvider.addSequence(CONSENSUS_NAME);
-               consensusProvider.insertTokensAt(id, 0, SequenceUtils.stringToTokenList(
+               consensusProvider.insertTokensAt(id, 0, AlignmentModelUtils.charSequenceToTokenList(
                                sequenceNode.getConsensusSequence().getString(), consensusProvider.getTokenSet()));
                //TODO Can the consensus sequence also be null? / Should it be created here, if nothing is in the DB?
     }
@@ -461,18 +461,60 @@ public class AlignmentEditor extends EditorPart {
     }
 
 
-    public void reverseComplementSelection() {
+    private String cutPherogram(boolean left) {
+        SelectionModel selection = getReadsArea().getSelection();
+        if (selection.getCursorHeight() != 1) {
+            return "Cutting pherograms is only possible if exactly one row is selected.";
+        }
+        else {
+            PherogramArea pherogramArea =
+                    getPherogramArea(getReadsArea().getSequenceOrder().idByIndex(selection.getCursorRow()));
+            if (pherogramArea == null) {
+                return "There is no pherogram attached to the current sequence.";
+            }
+            else {
+                if (left) {
+                    if (pherogramArea.setLeftCutPositionBySelection()) {
+                        return null;
+                    }
+                    else {
+                        return "The left end of the selection lies outside the pherogram attached to this sequence.";
+                    }
+                }
+                else {
+                    if (pherogramArea.setRightCutPositionBySelection()) {
+                        return null;
+                    }
+                    else {
+                        return "The right end of the selection lies outside the pherogram attached to this sequence.";
+                    }
+                }
+            }
+        }
+    }
+
+
+    public String cutPherogramLeft() {
+        return cutPherogram(true);
+    }
+
+
+    public String cutPherogramRight() {
+        return cutPherogram(false);
+    }
+
+
+    public void reverseComplementSelectedSequences() {
        SelectionModel selection = getReadsArea().getSelection();
-       AlignmentModel<?> provider = getReadsArea().getAlignmentModel();
-       for (int row = selection.getStartRow(); row < selection.getStartRow() + selection.getCursorHeight(); row++) {
+       AlignmentModel<?> model = getReadsArea().getAlignmentModel();
+       for (int row = selection.getFirstRow(); row < selection.getFirstRow() + selection.getCursorHeight(); row++) {
                        int sequenceID = getReadsArea().getSequenceOrder().idByIndex(row);
-                       //TODO rc edited sequence
-
-                       if (getPherogramArea(sequenceID).getPherogramModel() instanceof ReverseComplementPherogramModel) {
-                               //getPherogramArea(sequenceID).
-                               //TODO Allow to set new provider in PherogramArea or create new PherogramArea
-                               //TODO Reposition pherogram according to previous position in edited sequence and length
-                       }
+                       PherogramArea area = getPherogramArea(sequenceID);
+                       PherogramAlignmentModel pherogramAlignmentModel = area.getPherogramAlignmentModel();
+                       AlignmentModelUtils.reverseComplement(model, sequenceID,
+                               pherogramAlignmentModel.editableIndexByBaseCallIndex(area.getLeftCutPosition()).getBeforeValidIndex(),
+                               pherogramAlignmentModel.editableIndexByBaseCallIndex(area.getRightCutPosition()).getAfterValidIndex());
+                       area.reverseComplement();
                }
     }
 
@@ -539,7 +581,7 @@ public class AlignmentEditor extends EditorPart {
                // Set edited sequence:
                Collection<Object> tokens;  // First save tokens in a collection to avoid GUI updated for each token.
                if (editedSequence != null) {
-                       tokens = SequenceUtils.stringToTokenList(editedSequence, provider.getTokenSet());
+                       tokens = AlignmentModelUtils.charSequenceToTokenList(editedSequence, provider.getTokenSet());
                }
                else {  // Copy base call sequence into alignment:
                        tokens = new ArrayList<Object>();