eu.etaxonomy.taxeditor.editor/icons/leaf_detail.png -text
eu.etaxonomy.taxeditor.editor/icons/link_obj.gif -text
eu.etaxonomy.taxeditor.editor/icons/xper64.png -text
+eu.etaxonomy.taxeditor.editor/lib/biojava3-alignment-3.0.7.jar -text
+eu.etaxonomy.taxeditor.editor/lib/biojava3-core-3.0.7.jar -text
+eu.etaxonomy.taxeditor.editor/lib/commons-lang3-3.1.jar -text
+eu.etaxonomy.taxeditor.editor/lib/core-1.8.5.jar -text
+eu.etaxonomy.taxeditor.editor/lib/sequencing-1.8.5.jar -text
eu.etaxonomy.taxeditor.editor/p2.inf -text
eu.etaxonomy.taxeditor.editor/plugin.xml -text
eu.etaxonomy.taxeditor.editor/pom.xml -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/group/authority/CdmAuthorityEditorInput.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/group/authority/handler/EditCdmAuthoritiesHandler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/EditNewTaxonHandler.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/LoadPherogramHandler.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenAlignmentEditor.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenChecklistEditorHandler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenDerivateViewHandler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenParentHandler.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/DeleteNodeOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/RefreshNodeNumberingOperation.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/molecular/AlignmentEditor.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/molecular/AlignmentEditorInput.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/molecular/CMDAlignmentObjectPlaceholder.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/molecular/ContigSequenceDataProvider.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/molecular/PherogramMouseListener.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/molecular/PherogramView.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/molecular/ToggleInsertOverwriteButton.java -text
+eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/molecular/ToggleLeftRightInsertionButton.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroup.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/container/AbstractGroupedContainer.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/CreateTaxonUseOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/CreateUseRecordOperation.java -text
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/CreateUseSummaryOperation.java -text
+eu.etaxonomy.taxeditor.editor/src/main/resources/AlignmentTestData/JR430_JR-P01.ab1 -text
+eu.etaxonomy.taxeditor.editor/src/main/resources/AlignmentTestData/JR444_JR-P05.ab1 -text
eu.etaxonomy.taxeditor.editor/src/main/resources/TaonDescriptionEditor.screen -text
+eu.etaxonomy.taxeditor.editor/src/main/resources/TestPherogram_qualityScore.scf -text
eu.etaxonomy.taxeditor.editor/src/main/resources/log4j.properties -text
eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/Application.java -text
eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/ApplicationActionBarAdvisor.java -text
org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = true
org.eclipse.ui/SHOW_TRADITIONAL_STYLE_TABS=false
org.eclipse.ui/DOCK_PERSPECTIVE_BAR=top-right
-org.eclipse.ui/SHOW_TEXT_ON_PERSPECTIVE_BAR=true
\ No newline at end of file
+org.eclipse.ui/SHOW_TEXT_ON_PERSPECTIVE_BAR=true
+org.eclipse.ui/KEY_CONFIGURATION_ID=eu.etaxonomy.taxeditor.bindings.scheme.default
\ No newline at end of file
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry including="**/*.java" kind="src" path="src/main/java"/>
- <classpathentry including="**/*.java" kind="src" path="src/test/java"/>
- <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
- <classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>\r
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
+ <classpathentry including="**/*.java" kind="src" path="src/main/java"/>\r
+ <classpathentry including="**/*.java" kind="src" path="src/test/java"/>\r
+ <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>\r
+ <classpathentry exported="true" kind="lib" path="lib/biojava3-alignment-3.0.7.jar"/>\r
+ <classpathentry exported="true" kind="lib" path="lib/biojava3-core-3.0.7.jar"/>\r
+ <classpathentry exported="true" kind="lib" path="lib/core-1.8.5.jar"/>\r
+ <classpathentry exported="true" kind="lib" path="lib/sequencing-1.8.5.jar"/>\r
+ <classpathentry exported="true" kind="lib" path="lib/bioinfweb.commons"/>\r
+ <classpathentry exported="true" kind="lib" path="lib/LibrAlign" sourcepath="lib/LibrAlign"/>\r
+ <classpathentry exported="true" kind="lib" path="lib/commons-lang3-3.1.jar"/>\r
+ <classpathentry kind="output" path="target/classes"/>\r
+</classpath>\r
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>eu.etaxonomy.taxeditor.editor</name>
- <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.pde.PluginNature</nature>
- </natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+ <name>eu.etaxonomy.taxeditor.editor</name>\r
+ <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>\r
+ <projects>\r
+ </projects>\r
+ <buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.jdt.core.javabuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.eclipse.pde.ManifestBuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.eclipse.pde.SchemaBuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.jdt.core.javanature</nature>\r
+ <nature>org.eclipse.pde.PluginNature</nature>\r
+ </natures>\r
+ <linkedResources>\r
+ <link>\r
+ <name>lib/LibrAlign</name>\r
+ <type>2</type>\r
+ <locationURI>WORKSPACE_LOC/LibrAlign/bin</locationURI>\r
+ </link>\r
+ <link>\r
+ <name>lib/bioinfweb.commons</name>\r
+ <type>2</type>\r
+ <locationURI>WORKSPACE_LOC/_Lib/bin</locationURI>\r
+ </link>\r
+ </linkedResources>\r
+</projectDescription>\r
jdimodel.jar,
pdebuild.jar,
compatibility.jar,
- junit.jar
+ junit.jar,
+ lib/biojava3-alignment-3.0.7.jar,
+ lib/biojava3-core-3.0.7.jar,
+ lib/core-1.8.5.jar,
+ lib/sequencing-1.8.5.jar,
+ lib/bioinfweb.commons/,
+ lib/LibrAlign/,
+ lib/commons-lang3-3.1.jar
icons/,\
p2.inf,\
OSGI-INF/l10n/plugin_de.properties,\
- OSGI-INF/l10n/plugin_en.properties
+ OSGI-INF/l10n/plugin_en.properties,\
+ lib/biojava3-alignment-3.0.7.jar,\
+ lib/biojava3-core-3.0.7.jar,\
+ lib/core-1.8.5.jar,\
+ lib/sequencing-1.8.5.jar,\
+ lib/bioinfweb.commons/,\
+ lib/LibrAlign/,\
+ lib/commons-lang3-3.1.jar
id="eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditor"
name="%editor.name.8">
</editor>
+ <editor
+ class="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor"
+ default="false"
+ id="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor"
+ name="Alignment Editor">
+ </editor>
</extension>
<extension
+ id="eu.etaxonomy.taxeditor.editor.molecular.PherogramView"
point="org.eclipse.ui.views">
<view
allowMultiple="false"
id="eu.etaxonomy.taxeditor.editor.view.dataimport.GbifResponseImportView"
name="%view.name.5">
</view>
+ <view
+ allowMultiple="true"
+ class="eu.etaxonomy.taxeditor.editor.molecular.PherogramView"
+ id="eu.etaxonomy.taxeditor.editor.molecular.PherogramView"
+ name="PherogramView"
+ restorable="true">
+ </view>
</extension>
<extension
point="org.eclipse.ui.elementFactories">
</reference>
</visibleWhen>
</command>
+ <command
+ commandId="eu.etaxonomy.taxeditor.editor.handler.OpenAlignmentEditor"
+ label="Alignment Editor"
+ style="push">
+ </command>
</menuContribution>
<menuContribution
locationURI="menu:org.eclipse.ui.main.menu.navigate">
</visibleWhen>
</command>
</menuContribution>
+ <menuContribution
+ allPopups="false"
+ locationURI="menu:org.eclipse.ui.main.menu">
+ <menu
+ label="Alignment Editor">
+ <command
+ commandId="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.loadPherogram"
+ label="Load Pherogram"
+ style="push">
+ </command>
+ <visibleWhen
+ checkEnabled="true">
+ <with
+ variable="activePartId">
+ <equals
+ value="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor">
+ </equals>
+ </with>
+ </visibleWhen>
+ </menu>
+ </menuContribution>
+ <menuContribution
+ locationURI="toolbar:org.eclipse.ui.main.toolbar?after=eu.etaxonomy.taxeditor.navigation.search.toolbar">
+ <toolbar
+ id="eu.etaxonomy.taxeditor.editor.alignmentToolbar">
+ <control
+ class="eu.etaxonomy.taxeditor.editor.molecular.ToggleLeftRightInsertionButton">
+ <visibleWhen
+ checkEnabled="true">
+ <with
+ variable="activePartId">
+ <equals
+ value="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor">
+ </equals>
+ </with>
+ </visibleWhen>
+ </control>
+ <control
+ class="eu.etaxonomy.taxeditor.editor.molecular.ToggleInsertOverwriteButton">
+ <visibleWhen
+ checkEnabled="true">
+ <with
+ variable="activePartId">
+ <equals
+ value="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor">
+ </equals>
+ </with>
+ </visibleWhen>
+ </control>
+ </toolbar>
+ </menuContribution>
+
<menuContribution
allPopups="false"
locationURI="toolbar:eu.etaxonomy.taxeditor.editor.view.descriptive">
<handler
class="eu.etaxonomy.taxeditor.editor.handler.OpenChecklistEditorHandler"
commandId="eu.etaxonomy.taxeditor.editor.handler.OpenChecklistEditorHandler">
+ </handler>
+ <handler
+ class="eu.etaxonomy.taxeditor.editor.handler.LoadPherogramHandler"
+ commandId="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.loadPherogram">
+ <activeWhen>
+ <with
+ variable="activePartId">
+ <equals
+ value="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor">
+ </equals>
+ </with>
+ </activeWhen>
</handler>
<handler
class="eu.etaxonomy.taxeditor.editor.view.derivate.handler.DeleteDerivateHandler"
defaultHandler="eu.etaxonomy.taxeditor.editor.handler.OpenChecklistEditorHandler"
id="eu.etaxonomy.taxeditor.editor.handler.OpenChecklistViewHandler"
name="%command.name.38">
- </command>
+ </command>
<command
categoryId="eu.etaxonomy.taxeditor.editor.new.category"
defaultHandler="eu.etaxonomy.taxeditor.view.datasource.handler.CreateDataSourceHandler"
id="eu.etaxonomy.taxeditor.editor.command.new.datasource"
name="%command.name.39">
</command>
+ <command
+ defaultHandler="eu.etaxonomy.taxeditor.editor.handler.OpenAlignmentEditor"
+ id="eu.etaxonomy.taxeditor.editor.handler.OpenAlignmentEditor"
+ name="Open Alignment Editor">
+ </command>
+ <command
+ id="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.addA"
+ name="Add A">
+ </command>
+ <command
+ id="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.loadPherogram"
+ name="Load Pherogram">
+ </command>
<command
id="eu.etaxonomy.taxeditor.editor.handler.showOnlyIndividualAssociations"
name="Show Only Individual Associations">
</command>
+
</extension>
<extension
point="org.eclipse.core.expressions.definitions">
id="eu.etaxonomy.taxeditor.bindings.scheme.default"
name="%scheme.name">
</scheme>
+ <key
+ commandId="eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor.loadPherogram"
+ schemeId="eu.etaxonomy.taxeditor.bindings.scheme.default"
+ sequence="M1+O">
+ </key>
</extension>
<extension
point="org.eclipse.ui.importWizards">
import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin;
import eu.etaxonomy.taxeditor.editor.key.KeyEditor;
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
+import eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor;
+import eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditorInput;
import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditorInput;
import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditor;
import eu.etaxonomy.taxeditor.editor.view.dataimport.BioCaseEditorInput;
open(input, ChecklistEditor.ID);
}
+ /**
+ * Opens a new AlignmentEditor for the given input
+ * @param input
+ * @throws PartInitException
+ */
+ public static void open(AlignmentEditorInput input)
+ throws PartInitException {
+ open(input, AlignmentEditor.ID);
+ }
+
/**
* Opens a new {@link DataImportEditor} for the given input
* @param input a {@link DataImportEditorInput}
--- /dev/null
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.editor.handler;
+
+
+import java.io.File;
+import java.io.IOException;
+
+import org.biojava.bio.chromatogram.UnsupportedChromatogramFormatException;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.ui.IEditorPart;
+
+import eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+
+
+
+/**
+ * Handler that loads an additional read into the contig alignment displayed by an instance of {@link AlignmentEditor}.
+ *
+ * @author Ben Stöver
+ * @author pplitzner
+ */
+public class LoadPherogramHandler extends AbstractHandler {
+ //TODO Change so that also URIs which do not point to files can be specified.
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IEditorPart activeEditor = AbstractUtility.getActiveEditor();
+ if (activeEditor instanceof AlignmentEditor) {
+ AlignmentEditor alignmentEditor = (AlignmentEditor)activeEditor;
+
+ FileDialog fileDialog = new FileDialog(alignmentEditor.getSite().getShell());
+ fileDialog.setText("Import pherogram into contig alignment");
+ fileDialog.setFilterNames(new String[]{"All supported formats", "AB1 pherogram files", "SCF pherogram files", "All files"});
+ fileDialog.setFilterExtensions(new String[]{"*.ab1;*.scf", "*.ab1", "*.scf", "*.*"});
+
+ String path = fileDialog.open();
+ if (path != null) {
+ try {
+ alignmentEditor.addRead(new File(path).toURI());
+ }
+ catch (UnsupportedChromatogramFormatException e) {
+ MessagingUtils.errorDialog("Unsupported format", this, "The format of the pherogram file \"" + path +
+ "\" is not supported. (Only AB1 and SCF are supported.)", "eu.etaxonomy.taxeditor.editor", e, false); //TODO set pluginID
+ }
+ catch (IOException e) {
+ MessagingUtils.errorDialog("Unsupported format", this,
+ "An IO error occurred while trying to read the file \"" + path + "\".",
+ "/eu.etaxonomy.taxeditor.editor", e, false); //TODO set pluginID
+ }
+ }
+ }
+ return null;
+ }
+}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.editor.handler;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.PartInitException;
+
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditorInput;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+
+/**
+ * @author pplitzner
+ * @date 04.08.2014
+ *
+ */
+public class OpenAlignmentEditor extends AbstractHandler {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ AlignmentEditorInput input = new AlignmentEditorInput();
+ try {
+ EditorUtil.open(input);
+ } catch (PartInitException e) {
+ MessagingUtils.error(OpenAlignmentEditor.class, "Could not open AlignmentEditor", e);
+ }
+ return null;
+ }
+}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.editor.molecular;
+
+
+import info.bioinfweb.libralign.alignmentarea.AlignmentArea;
+import info.bioinfweb.libralign.alignmentarea.content.AlignmentContentArea;
+import info.bioinfweb.libralign.dataarea.implementations.SequenceIndexArea;
+import info.bioinfweb.libralign.dataarea.implementations.pherogram.PherogramArea;
+import info.bioinfweb.libralign.editsettings.EditSettingsChangeEvent;
+import info.bioinfweb.libralign.editsettings.EditSettingsListener;
+import info.bioinfweb.libralign.pherogram.provider.BioJavaPherogramProvider;
+import info.bioinfweb.libralign.pherogram.provider.PherogramProvider;
+import info.bioinfweb.libralign.sequenceprovider.SequenceDataProvider;
+import info.bioinfweb.libralign.sequenceprovider.implementations.PackedSequenceDataProvider;
+import info.bioinfweb.libralign.sequenceprovider.tokenset.BioJavaTokenSet;
+import info.bioinfweb.libralign.sequenceprovider.tokenset.TokenSet;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.biojava.bio.chromatogram.ChromatogramFactory;
+import org.biojava.bio.chromatogram.UnsupportedChromatogramFormatException;
+import org.biojava3.core.sequence.compound.DNACompoundSet;
+import org.biojava3.core.sequence.compound.NucleotideCompound;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.EditorPart;
+
+
+
+/**
+ * Editor component to edit a contig alignment used to combine different overlapping pherograms from Sanger sequencing to
+ * a consensus sequence.
+ * <p>
+ * The contained GUI components used to edit the alignment come from <a href="http://bioinfweb.info/LibrAlign/">LibrAlign</a>.
+ *
+ * @author Ben Stöver
+ * @author pplitzner
+ * @date 04.08.2014
+ */
+public class AlignmentEditor extends EditorPart {
+ public static final String ID = "eu.etaxonomy.taxeditor.editor.molecular.AlignmentEditor";
+ public static final String DEFAULT_READ_NAME_PREFIX = "Read ";
+
+
+ private AlignmentArea readsArea = null;
+ private Map<Integer, URI> uriMap = new TreeMap<Integer, URI>();
+
+
+ private void registerEditSettingListener(AlignmentContentArea area) {
+ area.getEditSettings().addListener(new EditSettingsListener() {
+ @Override
+ public void workingModeChanged(EditSettingsChangeEvent e) {} // Currently nothing to do
+
+ @Override
+ public void insertLeftInDataAreaChanged(EditSettingsChangeEvent e) {
+ updateStatusBar();
+ }
+
+ @Override
+ public void insertChanged(EditSettingsChangeEvent e) {
+ updateStatusBar();
+ }
+ });
+ }
+
+
+ private AlignmentArea createReadsArea() {
+ AlignmentArea result = new AlignmentArea();
+ AlignmentContentArea contentArea = result.getContentArea();
+ registerEditSettingListener(contentArea);
+
+ TokenSet<NucleotideCompound> tokenSet = new BioJavaTokenSet<NucleotideCompound>(new DNACompoundSet(), true);
+ SequenceDataProvider<NucleotideCompound> provider = new PackedSequenceDataProvider<NucleotideCompound>(tokenSet);
+
+ contentArea.getDataAreas().getTopAreas().add(new SequenceIndexArea(contentArea));
+ contentArea.setSequenceProvider(provider, false);
+
+ return result;
+ }
+
+
+ private AlignmentArea getReadsArea() {
+ if (readsArea == null) {
+ readsArea = createReadsArea();
+ }
+ return readsArea;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ public void createPartControl(Composite parent) {
+ Composite alignmentWidget = getReadsArea().createSWTWidget(parent, SWT.NONE);
+ updateStatusBar();
+
+ // Just for testing:
+ try {
+ addRead(new File("D:/Users/BenStoever/Documents/Studium/Projekte/Promotion/EDITor/Quelltexte/LibrAlign branch/Repository/eu.etaxonomy.taxeditor.editor/src/main/resources/AlignmentTestData/JR444_JR-P05.ab1").toURI());
+ addRead(new File("D:/Users/BenStoever/Documents/Studium/Projekte/Promotion/EDITor/Quelltexte/LibrAlign branch/Repository/eu.etaxonomy.taxeditor.editor/src/main/resources/AlignmentTestData/JR444_JR-P05.ab1").toURI());
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ private void updateStatusBar() {
+ IActionBars bars = getEditorSite().getActionBars();
+ bars.getStatusLineManager().setMessage("Edit mode: " +
+ (getReadsArea().getContentArea().getEditSettings().isInsert() ? "Insert" : "Overwrite") + " " +
+ "Insertion in pherogram: " +
+ (getReadsArea().getContentArea().getEditSettings().isInsertLeftInDataArea() ? "Left" : "Right"));
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void doSave(IProgressMonitor monitor) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.EditorPart#doSaveAs()
+ */
+ @Override
+ public void doSaveAs() {
+ // TODO Auto-generated method stub
+
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
+ */
+ @Override
+ public void init(IEditorSite site, IEditorInput input) throws PartInitException {
+ setSite(site);
+ setInput(input);
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.EditorPart#isDirty()
+ */
+ @Override
+ public boolean isDirty() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
+ */
+ @Override
+ public boolean isSaveAsAllowed() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
+ */
+ @Override
+ public void setFocus() {
+ //alignmentArea.getToolkitComponent().redistributeHeight();
+ }
+
+
+ public boolean isInsertMode() {
+ return getReadsArea().getContentArea().getEditSettings().isInsert();
+ }
+
+
+ public boolean isInsertLeftInPherogram() {
+ return getReadsArea().getContentArea().getEditSettings().isInsertLeftInDataArea();
+ }
+
+
+ public void toggleLeftRightInsertionInPherogram() {
+ getReadsArea().getContentArea().getEditSettings().toggleInsertLeftInDataArea();
+ }
+
+
+ public void toggleInsertOverwrite() {
+ getReadsArea().getContentArea().getEditSettings().toggleInsert();
+ }
+
+
+ public static PherogramProvider readPherogram(URI uri) throws IOException, UnsupportedChromatogramFormatException {
+ PherogramProvider result;
+ InputStream stream = uri.toURL().openStream();
+ try {
+ result = new BioJavaPherogramProvider(ChromatogramFactory.create(stream));
+ }
+ finally {
+ stream.close();
+ }
+ return result;
+ }
+
+
+ private String newReadName() {
+ int index = 1;
+ while (getReadsArea().getContentArea().getSequenceProvider().sequenceIDByName(DEFAULT_READ_NAME_PREFIX + index)
+ != SequenceDataProvider.NO_SEQUENCE_FOUND) {
+
+ index++;
+ }
+ return DEFAULT_READ_NAME_PREFIX + index;
+ }
+
+
+ public void addRead(URI pherogramURI) throws IOException, UnsupportedChromatogramFormatException {
+ addRead(newReadName(), pherogramURI);
+ }
+
+
+ public void addRead(String name, URI pherogramURI) throws IOException, UnsupportedChromatogramFormatException {
+ AlignmentContentArea contentArea = getReadsArea().getContentArea();
+ SequenceDataProvider provider = contentArea.getSequenceProvider();
+ PherogramProvider pherogramProvider = readPherogram(pherogramURI); // Must happen before a sequence is added, because it might throw an exception.
+
+ // Create sequence:
+ provider.addSequence(name);
+ int id = provider.sequenceIDByName(name);
+
+ // Copy base call sequence into alignment:
+ for (int i = 0; i < pherogramProvider.getSequenceLength(); i++) {
+ provider.insertTokenAt(id, i, provider.getTokenSet().tokenByKeyChar(
+ pherogramProvider.getBaseCall(i).getUpperedBase().charAt(0)));
+ }
+
+ // Add data area:
+ PherogramArea pherogramArea = new PherogramArea(contentArea, pherogramProvider);
+ pherogramArea.addMouseListener(new PherogramMouseListener(pherogramURI));
+ contentArea.getDataAreas().getSequenceAreas(id).add(pherogramArea);
+
+ // Save source URI:
+ uriMap.put(id, pherogramURI);
+ }
+}
\ No newline at end of file
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.editor.molecular;
+
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+
+
+
+/**
+ * @author pplitzner
+ * @author Ben Stöver
+ * @date 04.08.2014
+ */
+public class AlignmentEditorInput implements IEditorInput {
+ private static final String name = "AlignmentEditor";
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+ */
+ @Override
+ public Object getAdapter(Class adapter) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#exists()
+ */
+ @Override
+ public boolean exists() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
+ */
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#getName()
+ */
+ @Override
+ public String getName() {
+ return name;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#getPersistable()
+ */
+ @Override
+ public IPersistableElement getPersistable() {
+ return null;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IEditorInput#getToolTipText()
+ */
+ @Override
+ public String getToolTipText() {
+ return name;
+ }
+}
--- /dev/null
+package eu.etaxonomy.taxeditor.editor.molecular;\r
+\r
+\r
+import info.bioinfweb.libralign.dataarea.implementations.pherogram.ShiftChange;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.TreeMap;\r
+\r
+import org.biojava3.core.sequence.compound.NucleotideCompound;\r
+import org.biojava3.core.sequence.template.Sequence;\r
+\r
+\r
+\r
+/**\r
+ * This class is used as a replacement for a class representing the CMD objects storing an contig alignment during early\r
+ * development phase.\r
+ * \r
+ * @author Ben Stöver\r
+ * @date 06.08.2014\r
+ */\r
+public class CMDAlignmentObjectPlaceholder {\r
+ /**\r
+ * Represents information in the contig alignment describing a single read sequence and the relation to its associated\r
+ * pherogram.\r
+ * \r
+ * @author Ben Stöver\r
+ * @date 06.08.2014\r
+ */\r
+ public static class Read {\r
+ private long pherogramObjectID = Long.MIN_VALUE; // The ID used in the CMD to identify the object storing the pherogram URL. (Dont' know if this is long, just as an example-)\r
+ private Sequence<NucleotideCompound> editableSequence = null; // Could also be of type String, if helpful for CDM architecture.\r
+ private List<ShiftChange> shiftChangeList = new ArrayList<ShiftChange>();\r
+ \r
+ \r
+ public Read(long pherogramObjectID) {\r
+ super();\r
+ this.pherogramObjectID = pherogramObjectID;\r
+ }\r
+\r
+\r
+ public long getPherogramObjectID() {\r
+ return pherogramObjectID;\r
+ }\r
+\r
+\r
+ public void setPherogramObjectID(long pherogramObjectID) {\r
+ this.pherogramObjectID = pherogramObjectID;\r
+ }\r
+\r
+\r
+ public List<ShiftChange> getShiftChangeList() {\r
+ return shiftChangeList;\r
+ }\r
+\r
+\r
+ public Sequence<NucleotideCompound> getEditableSequence() {\r
+ return editableSequence;\r
+ }\r
+ }\r
+ \r
+ \r
+ private Map<String, Sequence<NucleotideCompound>> consensusSequences = new TreeMap<String, Sequence<NucleotideCompound>>(); // Could also be of type Map<String, String>, if helpful for CDM architecture.\r
+ private Map<Long, Read> readSequences = new TreeMap<Long, Read>();\r
+ \r
+ \r
+ public Map<String, Sequence<NucleotideCompound>> getConsensusSequences() {\r
+ return consensusSequences;\r
+ }\r
+ \r
+ \r
+ public Map<Long, Read> getReadSequences() {\r
+ return readSequences;\r
+ }\r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2014 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.molecular;\r
+\r
+\r
+import org.biojava3.core.sequence.compound.NucleotideCompound;\r
+\r
+import info.bioinfweb.commons.bio.biojava3.core.sequence.compound.AlignmentAmbiguityDNACompoundSet;\r
+import info.bioinfweb.libralign.sequenceprovider.SequenceDataProvider;\r
+import info.bioinfweb.libralign.sequenceprovider.implementations.PackedSequenceDataProvider;\r
+import info.bioinfweb.libralign.sequenceprovider.tokenset.BioJavaTokenSet;\r
+\r
+\r
+\r
+/**\r
+ * The LibrAlign sequence data provider used to edit contig alignments with the {@link AlignmentEditor}.\r
+ * \r
+ * @author Ben Stöver\r
+ * @date 04.08.2014\r
+ */\r
+public class ContigSequenceDataProvider extends PackedSequenceDataProvider<NucleotideCompound> \r
+ implements SequenceDataProvider<NucleotideCompound> {\r
+\r
+ \r
+ public ContigSequenceDataProvider() {\r
+ super(new BioJavaTokenSet<NucleotideCompound>(AlignmentAmbiguityDNACompoundSet.getAlignmentAmbiguityDNACompoundSet(), true));\r
+ }\r
+ \r
+ \r
+ public void saveToCMD() { //TODO Add cmd node as parameter \r
+ //TODO impl.\r
+ }\r
+ \r
+ \r
+ public void loadFromCMD() { //TODO Add cmd node as parameter\r
+ //TODO impl.\r
+ }\r
+}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 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.molecular;\r
+\r
+\r
+import info.bioinfweb.commons.tic.input.TICMouseAdapter;\r
+import info.bioinfweb.commons.tic.input.TICMouseEvent;\r
+\r
+import java.io.File;\r
+import java.net.URI;\r
+\r
+import eu.etaxonomy.taxeditor.model.MessagingUtils;\r
+\r
+\r
+\r
+/**\r
+ * Listens to mouse events on data areas displaying a pherogram in {@link AlignmentEditor}.\r
+ * \r
+ * @author Ben Stöver\r
+ * @date 25.11.2014\r
+ */\r
+public class PherogramMouseListener extends TICMouseAdapter {\r
+ private URI uri;\r
+ \r
+ \r
+ public PherogramMouseListener(URI uri) {\r
+ super();\r
+ this.uri = uri;\r
+ }\r
+\r
+\r
+ @Override\r
+ public void mousePressed(TICMouseEvent event) {\r
+ if (event.getClickCount() == 2) { // Double click\r
+ try {\r
+ PherogramView.createView(uri);\r
+ }\r
+ catch (Exception e) {\r
+ MessagingUtils.errorDialog("Error", this, e.getLocalizedMessage(), "eu.etaxonomy.taxeditor.editor", e, false); //TODO set pluginID\r
+ }\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 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.molecular;\r
+\r
+\r
+import java.io.IOException;\r
+import java.net.MalformedURLException;\r
+import java.net.URI;\r
+\r
+import info.bioinfweb.libralign.pherogram.PherogramTraceCurveView;\r
+\r
+import org.biojava.bio.chromatogram.UnsupportedChromatogramFormatException;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.PlatformUI;\r
+import org.eclipse.ui.part.ViewPart;\r
+\r
+\r
+\r
+/**\r
+ * Component that allows to view a pherogram without the distortion due to aligning it to a sequence as in \r
+ * {@link AlignmentEditor}. \r
+ * \r
+ * @author Ben Stöver\r
+ * @date Nov 20, 2014\r
+ */\r
+public class PherogramView extends ViewPart {\r
+ public static final String ID = "eu.etaxonomy.taxeditor.editor.molecular.PherogramView";\r
+\r
+ private URI uri = null;\r
+ private PherogramTraceCurveView pherogramView = null;\r
+ \r
+ \r
+ public static PherogramView createView(URI uri) throws PartInitException, MalformedURLException, \r
+ UnsupportedChromatogramFormatException, IOException {\r
+ \r
+ PherogramView view = (PherogramView)PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(ID);\r
+ view.setURI(uri);\r
+ return view;\r
+ }\r
+ \r
+ \r
+ public PherogramTraceCurveView getPherogramView() {\r
+ if (pherogramView == null) {\r
+ pherogramView = new PherogramTraceCurveView();\r
+ }\r
+ return pherogramView;\r
+ }\r
+\r
+\r
+ public URI getURI() {\r
+ return uri;\r
+ }\r
+\r
+\r
+ protected void setURI(URI uri) throws MalformedURLException, IOException, UnsupportedChromatogramFormatException {\r
+ this.uri = uri;\r
+ getPherogramView().setProvider(AlignmentEditor.readPherogram(uri));\r
+ }\r
+\r
+\r
+ @Override\r
+ public void createPartControl(Composite parent) {\r
+ getPherogramView().createSWTWidget(parent, SWT.NONE);\r
+ }\r
+ \r
+ \r
+ @Override\r
+ public void setFocus() {} // nothing to do\r
+}\r
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.editor.molecular;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.menus.WorkbenchWindowControlContribution;
+
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+
+/**
+ * @author pplitzner
+ * @author Ben Stöver
+ * @date Nov 5, 2014
+ */
+public class ToggleInsertOverwriteButton extends WorkbenchWindowControlContribution {
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.action.ControlContribution#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createControl(Composite parent) {
+ Button button = new Button(parent, SWT.TOGGLE);
+// button.setImage(ImageResources.getImage(ImageResources.SWAP_SYNONYM_AND_TAXON_ICON));
+ button.setText("Toggle Insert/Overwrite");
+ button.setToolTipText("Toggle Insert/Overwrite");
+ button.addListener(SWT.Selection, new Listener() {
+ @Override
+ public void handleEvent(Event event) {
+ IEditorPart activeEditor = AbstractUtility.getActiveEditor();
+ if (activeEditor instanceof AlignmentEditor) {
+ AlignmentEditor alignmentEditor = (AlignmentEditor)activeEditor;
+ alignmentEditor.toggleInsertOverwrite();
+ }
+ }
+ });
+
+ IEditorPart activeEditor = AbstractUtility.getActiveEditor();
+ if (activeEditor instanceof AlignmentEditor) {
+ AlignmentEditor alignmentEditor = (AlignmentEditor)activeEditor;
+ button.setSelection(alignmentEditor.isInsertMode());
+ }
+ return button;
+ }
+}
--- /dev/null
+// $Id$
+/**
+* Copyright (C) 2014 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.taxeditor.editor.molecular;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.menus.WorkbenchWindowControlContribution;
+
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+
+/**
+ * @author pplitzner
+ * @date Nov 5, 2014
+ *
+ */
+public class ToggleLeftRightInsertionButton extends WorkbenchWindowControlContribution {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.action.ControlContribution#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createControl(Composite parent) {
+ final Button button = new Button(parent, SWT.TOGGLE);
+// button.setImage(ImageResources.getImage(ImageResources.SWAP_SYNONYM_AND_TAXON_ICON));
+ button.setText("Toggle Left/Right Insertion");
+ button.setToolTipText("Toggle Left/Right Insertion");
+ button.addListener(SWT.Selection, new Listener() {
+ @Override
+ public void handleEvent(Event event) {
+ IEditorPart activeEditor = AbstractUtility.getActiveEditor();
+ if (activeEditor instanceof AlignmentEditor) {
+ AlignmentEditor alignmentEditor = (AlignmentEditor)activeEditor;
+ alignmentEditor.toggleLeftRightInsertionInPherogram();
+ }
+ }
+ });
+
+ IEditorPart activeEditor = AbstractUtility.getActiveEditor();
+ if (activeEditor instanceof AlignmentEditor) {
+ AlignmentEditor alignmentEditor = (AlignmentEditor)activeEditor;
+ button.setSelection(alignmentEditor.isInsertLeftInPherogram());
+ }
+ return button;
+ }
+}
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.application"/>
- <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.bulkeditor"/>
- <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.cdmlib"/>
- <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.editor"/>
- <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.navigation"/>
- <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.printpublisher"/>
- <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.store"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.application"/>\r
+ <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.bulkeditor"/>\r
+ <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.cdmlib"/>\r
+ <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.editor"/>\r
+ <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.navigation"/>\r
+ <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.printpublisher"/>\r
+ <classpathentry kind="src" path="/eu.etaxonomy.taxeditor.store"/>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
+ <classpathentry kind="output" path="target/classes"/>\r
+</classpath>\r