Merge branch 'LibrAlign' of https://dev.e-taxonomy.eu/git/taxeditor into LibrAlign
authorb.stoever <stoever@bioinfweb.info>
Wed, 26 Oct 2016 15:31:21 +0000 (17:31 +0200)
committerb.stoever <stoever@bioinfweb.info>
Wed, 26 Oct 2016 15:31:21 +0000 (17:31 +0200)
# Conflicts:
# eu.etaxonomy.taxeditor.molecular.lib/.classpath
# eu.etaxonomy.taxeditor/rcp.target

1  2 
.gitignore
eu.etaxonomy.taxeditor.molecular.lib/.classpath
eu.etaxonomy.taxeditor.molecular.lib/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/editor/AlignmentEditor.java
eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/handler/AbstractPherogramComponentHandler.java
eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/handler/AlignmentEditorPasteHandler.java
eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product
eu.etaxonomy.taxeditor/rcp.target

diff --cc .gitignore
@@@ -31,3 -31,3 +31,4 @@@ eu.etaxonomy.taxeditor.webapp/lib/cdmli
  /eu.etaxonomy.taxeditor.webapp/.settings/org.eclipse.m2e.core.prefs
  /eu.etaxonomy.taxeditor.webapp/lib/
  
++/.ssh
@@@ -7,15 -6,15 +6,16 @@@
        <classpathentry exported="true" kind="lib" path="lib/commons-collections4-4.1.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/core-1.9.2.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/sequencing-1.9.2.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.libralign.core/bin"/>
-       <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.libralign.io/bin"/>
-       <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.libralign.swt/bin"/>
 +      <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.commons.bio/bin"/>
 +      <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.commons.core/bin"/>
 +      <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.commons.swing/bin"/>
 +      <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.commons.swt/bin"/>
 +      <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.tic.core/bin"/>
 +      <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.tic.swt/bin"/>
 +      <classpathentry exported="true" kind="lib" path="lib/JPhyloIO/bin" sourcepath="lib/JPhyloIO/bin"/>
++      <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.libralign.core/bin"/>
++      <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.libralign.io/bin"/>
++      <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.libralign.swt/bin"/>
++      <classpathentry exported="true" kind="lib" path="lib/info.bioinfweb.libralign.biojava1/bin"/>
        <classpathentry kind="output" path="target/classes"/>
  </classpath>
@@@ -2,23 -2,22 +2,23 @@@ Manifest-Version: 1.
  Bundle-ManifestVersion: 2
  Bundle-Name: eu.etaxonomy.taxeditor.molecular.lib
  Bundle-SymbolicName: eu.etaxonomy.taxeditor.molecular.lib;singleton:=true
- Bundle-Version: 4.2.0.qualifier
+ Bundle-Version: 4.4.0.qualifier
  Bundle-ClassPath: .,
   lib/owlapi-xmlutils-4.1.4.jar,
 - lib/bioinfweb-commons-bio-2-SNAPSHOT.jar,
 - lib/bioinfweb-commons-core-2-SNAPSHOT.jar,
 - lib/bioinfweb-commons-swing-2-SNAPSHOT.jar,
 - lib/bioinfweb-commons-swt-2-SNAPSHOT.jar,
 - lib/jphyloio-core-0-SNAPSHOT.jar,
 - lib/libralign-biojava1-0-SNAPSHOT.jar,
 - lib/libralign-core-0-SNAPSHOT.jar,
 - lib/libralign-swt-0-SNAPSHOT.jar,
 - lib/tic-core-2-SNAPSHOT.jar,
 - lib/tic-swt-2-SNAPSHOT.jar,
   lib/commons-collections4-4.1.jar,
   lib/core-1.9.2.jar,
 - lib/sequencing-1.9.2.jar
 + lib/sequencing-1.9.2.jar,
 + lib/info.bioinfweb.commons.bio/bin/,
 + lib/info.bioinfweb.commons.core/bin/,
 + lib/info.bioinfweb.commons.swing/bin/,
 + lib/info.bioinfweb.commons.swt/bin/,
-  lib/info.bioinfweb.libralign.core/bin/,
-  lib/info.bioinfweb.libralign.io/bin/,
-  lib/info.bioinfweb.libralign.swt/bin/,
 + lib/info.bioinfweb.tic.core/bin/,
 + lib/info.bioinfweb.tic.swt/bin/,
 + lib/JPhyloIO/bin/,
++ lib/info.bioinfweb.libralign.core/bin/,
++ lib/info.bioinfweb.libralign.io/bin/,
++ lib/info.bioinfweb.libralign.swt/bin/,
 + lib/info.bioinfweb.libralign.biojava1/bin/
  Export-Package: info.bioinfweb.commons,
   info.bioinfweb.commons.appversion,
   info.bioinfweb.commons.beans,
@@@ -134,7 -134,7 +134,7 @@@ public class AlignmentEditor extends Ed
  
  
      private MultipleAlignmentsContainer alignmentsContainer = null;
--    private final Map<Integer, SingleReadAlignment> cdmMap = new TreeMap<Integer, SingleReadAlignment>();  //TODO Move this to ContigSequenceDataProvider
++    private final Map<String, SingleReadAlignment> cdmMap = new TreeMap<String, SingleReadAlignment>();  //TODO Move this to ContigSequenceDataProvider
      private boolean dirty = false;
  
      public AlignmentEditor()
      }
  
  
--    public boolean hasPherogram(int sequenceID) {
++    public boolean hasPherogram(String sequenceID) {
          return getReadsArea().getDataAreas().getSequenceAreas(sequenceID).size() > PHEROGRAM_AREA_INDEX;
      }
  
  
--    public PherogramArea getPherogramArea(int sequenceID) {
++    public PherogramArea getPherogramArea(String sequenceID) {
          if (hasPherogram(sequenceID)) {
              return (PherogramArea)getReadsArea().getDataAreas().getSequenceAreas(sequenceID).get(PHEROGRAM_AREA_INDEX);
          }
  
                        // Add test consensus sequence:
                        AlignmentModel consensusModel = getEditableConsensusArea().getAlignmentModel();
--                      int id = consensusModel.addSequence(CONSENSUS_NAME);
++                      String id = consensusModel.addSequence(CONSENSUS_NAME);
                        Collection<Object> tokens = new ArrayList<Object>();  // First save tokens in a collection to avoid GUI updated for each token.
                        tokens.add(consensusModel.getTokenSet().tokenByRepresentation("A"));
                        tokens.add(consensusModel.getTokenSet().tokenByRepresentation("C"));
                                if (pherogramInfo.getPherogram() != null) {
                                    uri = MediaUtils.getFirstMediaRepresentationPart(pherogramInfo.getPherogram()).getUri();
                                }
--                              int id = addRead(DerivateLabelProvider.getDerivateText(pherogramInfo, conversationHolder),
++                              String id = addRead(DerivateLabelProvider.getDerivateText(pherogramInfo, conversationHolder),
                                                uri,
                                                singleReadAlignment.isReverseComplement(),
                                                singleReadAlignment.getEditedSequence(),
  
                // Set consensus sequence:
                AlignmentModel consensusProvider = getEditableConsensusArea().getAlignmentModel();
--              int id = consensusProvider.addSequence(CONSENSUS_NAME);
++              String id = consensusProvider.addSequence(CONSENSUS_NAME);
                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?
                // Write single reads:
                stringProvider.setUnderlyingModel(getReadsArea().getAlignmentModel());
                sequenceNode.getSingleReadAlignments().retainAll(cdmMap.values());  // Remove all reads that are not in the alignment anymore.
--              Iterator<Integer> iterator = getReadsArea().getAlignmentModel().sequenceIDIterator();
++              Iterator<String> iterator = getReadsArea().getAlignmentModel().sequenceIDIterator();
                while (iterator.hasNext()) {
--                      int id = iterator.next();
++                      String id = iterator.next();
                        SingleReadAlignment singleRead = cdmMap.get(id);
                        if (singleRead == null) {
                            throw new InternalError("Creating new reads from AlignmentEditor not implemented.");
        SelectionModel selection = getReadsArea().getSelection();
        AlignmentModel<?> model = getReadsArea().getAlignmentModel();
        for (int row = selection.getFirstRow(); row < selection.getFirstRow() + selection.getCursorHeight(); row++) {
--                      int sequenceID = getReadsArea().getSequenceOrder().idByIndex(row);
++              String sequenceID = getReadsArea().getSequenceOrder().idByIndex(row);
                        PherogramArea area = getPherogramArea(sequenceID);
                        PherogramAreaModel pherogramAlignmentModel = area.getModel();
                        AlignmentModelUtils.reverseComplement(model, sequenceID,
      public <T> void createConsensusSequence() {
          ConsensusSequenceArea area = getConsensusHintDataArea();
          AlignmentModel<T> model = (AlignmentModel<T>)getEditableConsensusArea().getAlignmentModel();
--        int sequenceID = model.sequenceIDIterator().next();  // There is always one sequence contained.
++        String sequenceID = model.sequenceIDIterator().next();  // There is always one sequence contained.
          int length = getReadsArea().getAlignmentModel().getMaxSequenceLength();
  
          Collection<T> tokens = new ArrayList<T>(length);
          ConsensusSequenceArea area = getConsensusHintDataArea();
          AlignmentModel<T> model = (AlignmentModel<T>)getEditableConsensusArea().getAlignmentModel();
          TokenSet<T> tokenSet = model.getTokenSet();
--        int sequenceID = model.sequenceIDIterator().next();  // There is always one sequence contained.
++        String sequenceID = model.sequenceIDIterator().next();  // There is always one sequence contained.
          int currentConsensusLength = model.getSequenceLength(sequenceID);
          int overallLength = getReadsArea().getAlignmentModel().getMaxSequenceLength();
  
  
        private String newReadName() {
                int index = 1;
--              while (getReadsArea().getAlignmentModel().sequenceIDByName(DEFAULT_READ_NAME_PREFIX + index)
--                              != AlignmentModel.NO_SEQUENCE_FOUND) {
--
++              while (getReadsArea().getAlignmentModel().sequenceIDByName(DEFAULT_READ_NAME_PREFIX + index) != null) {
                        index++;
                }
                return DEFAULT_READ_NAME_PREFIX + index;
       * @throws IOException if an error occurred when trying to read the pherogram file
       * @throws UnsupportedChromatogramFormatException if the format of the pherogram file is not supported
       */
--    public int addRead(String name, URI pherogramURI, boolean reverseComplemented, String editedSequence,
++    public String addRead(String name, URI pherogramURI, boolean reverseComplemented, String editedSequence,
              Integer firstSeqPos, Integer leftCutPos, Integer rightCutPos, SingleReadAlignment.Shift[] shifts)
              throws IOException, UnsupportedChromatogramFormatException {
  
  
          // Create sequence:
                provider.addSequence(name);
--              int id = provider.sequenceIDByName(name);
++              String id = provider.sequenceIDByName(name);
  
                // Set edited sequence:
                Collection<Object> tokens = null;  // First save tokens in a collection to avoid GUI updated for each token.
@@@ -41,7 -41,7 +41,7 @@@ public abstract class AbstractPherogram
  
          if (activePart instanceof AlignmentEditor) {
              AlignmentEditor editor = (AlignmentEditor)activePart;
--            Iterator<Integer> idIterator = editor.getReadsArea().getAlignmentModel().sequenceIDIterator();
++            Iterator<String> idIterator = editor.getReadsArea().getAlignmentModel().sequenceIDIterator();
              while (idIterator.hasNext()) {
                  PherogramArea area = editor.getPherogramArea(idIterator.next());
                  if (area != null) {
@@@ -30,10 -30,10 +30,11 @@@ import eu.etaxonomy.taxeditor.molecular
   * @date 26.08.2015\r
   */\r
  public class AlignmentEditorPasteHandler extends AbstractFocusedAlignmentAreaHandler implements IElementUpdater {\r
--      private void pasteString(AlignmentArea area, int sequenceID, String content) {\r
++      private void pasteString(AlignmentArea area, String sequenceID, String content) {\r
                area.getActionProvider().deleteSelection();  // Overwrite selected tokens.\r
                area.getActionProvider().elongateSequence(sequenceID, area.getSelection().getCursorColumn());\r
  \r
++              @SuppressWarnings("unchecked")\r
                AlignmentModel<Object> alignmentModel = (AlignmentModel<Object>)area.getAlignmentModel();\r
                alignmentModel.insertTokensAt(sequenceID, area.getSelection().getCursorColumn(),\r
                                AlignmentModelUtils.charSequenceToTokenList(content, alignmentModel.getTokenSet(),\r
@@@ -62,7 -62,7 +63,7 @@@
  \r
                        if (!lines.isEmpty()) { //TODO Can lines be empty? (Can an empty string "" be copied to the clipboard?)\r
                                if (selection.getCursorHeight() == 1) {  // If the consensus sequence is focused, this is the only possible case.\r
--                                      int sequenceID = focusedArea.getSequenceOrder().idByIndex(selection.getCursorRow());\r
++                                      String sequenceID = focusedArea.getSequenceOrder().idByIndex(selection.getCursorRow());\r
                                        if (lines.size() == 1) {\r
                                                pasteString(focusedArea, sequenceID, lines.get(0));\r
                                        }\r
@@@ -1,39 -1,39 +1,58 @@@
--<?xml version="1.0" encoding="UTF-8"?>
- <?pde version="3.5"?><product application="eu.etaxonomy.taxeditor.application.application" id="eu.etaxonomy.taxeditor.application.eu_etaxonomy_taxeditor_product" includeLaunchers="true" name="EDIT Taxonomic Editor" uid="eu.etaxonomy.taxeditor.product" useFeatures="true" version="4.2.0.qualifier">
 -<?pde version="3.5"?><product application="eu.etaxonomy.taxeditor.application.application" id="eu.etaxonomy.taxeditor.application.eu_etaxonomy_taxeditor_product" includeLaunchers="true" name="EDIT Taxonomic Editor" uid="eu.etaxonomy.taxeditor.product" useFeatures="true" version="4.4.0.qualifier">
--  <aboutInfo>
--    <image path="/eu.etaxonomy.taxeditor.application/icons/256color_48x48.gif"/>
--    <text>
--         %productBlurb
--      </text>
--  </aboutInfo>
--  <configIni use="default"></configIni>
--  <launcherArgs>
--    <programArgs>-data @user.home/.cdmLibrary -Dserver_port=58080
--      </programArgs>
--    <vmArgs>-Xmx512M -XX:MaxPermSize=256M -Dorg.eclipse.update.reconcile=false -Declipse.p2.unsignedPolicy=allow
--      </vmArgs>
--    <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
--      </vmArgsMac>
--  </launcherArgs>
--  <windowImages i16="/eu.etaxonomy.taxeditor.application/icons/256color_16x16.gif" i32="/eu.etaxonomy.taxeditor.application/icons/256color_32x32.gif" i48="/eu.etaxonomy.taxeditor.application/icons/256color_48x48.gif"/>
--  <splash location="eu.etaxonomy.taxeditor.application" startupForegroundColor="000000" startupMessageRect="7,432,360,20" startupProgressRect="5,447,366,15"/>
--  <launcher name="TaxonomicEditor">
--    <solaris/>
--    <win useIco="false">
--      <bmp/>
--    </win>
--  </launcher>
--  <vm></vm>
--  <plugins></plugins>
--  <features>
--    <feature id="eu.etaxonomy.taxeditor.feature"/>
--  </features>
--  <configurations>
--    <plugin autoStart="true" id="eu.etaxonomy.taxeditor.application" startLevel="5"/>
--    <plugin autoStart="true" id="org.eclipse.core.runtime" startLevel="4"/>
--    <plugin autoStart="true" id="org.eclipse.equinox.common" startLevel="2"/>
--    <plugin autoStart="true" id="org.eclipse.equinox.ds" startLevel="2"/>
--    <plugin autoStart="true" id="org.eclipse.equinox.p2.transport.ecf" startLevel="4"/>
--    <plugin autoStart="true" id="org.eclipse.equinox.simpleconfigurator" startLevel="1"/>
--  </configurations>
--</product>
++<?xml version="1.0" encoding="UTF-8"?>\r
++<?pde version="3.5"?>\r
++\r
++<product name="EDIT Taxonomic Editor" uid="eu.etaxonomy.taxeditor.product" id="eu.etaxonomy.taxeditor.application.eu_etaxonomy_taxeditor_product" application="eu.etaxonomy.taxeditor.application.application" version="4.4.0.qualifier" useFeatures="true" includeLaunchers="true">\r
++\r
++   <aboutInfo>\r
++      <image path="/eu.etaxonomy.taxeditor.application/icons/256color_48x48.gif"/>\r
++      <text>\r
++         %productBlurb\r
++      </text>\r
++   </aboutInfo>\r
++\r
++   <configIni use="default">\r
++   </configIni>\r
++\r
++   <launcherArgs>\r
++      <programArgs>-data @user.home/.cdmLibrary -Dserver_port=58080\r
++      </programArgs>\r
++      <vmArgs>-Xmx512M -XX:MaxPermSize=256M -Dorg.eclipse.update.reconcile=false -Declipse.p2.unsignedPolicy=allow\r
++      </vmArgs>\r
++      <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts\r
++      </vmArgsMac>\r
++   </launcherArgs>\r
++\r
++   <windowImages i16="/eu.etaxonomy.taxeditor.application/icons/256color_16x16.gif" i32="/eu.etaxonomy.taxeditor.application/icons/256color_32x32.gif" i48="/eu.etaxonomy.taxeditor.application/icons/256color_48x48.gif"/>\r
++\r
++   <splash\r
++      location="eu.etaxonomy.taxeditor.application"\r
++      startupProgressRect="5,447,366,15"\r
++      startupMessageRect="7,432,360,20"\r
++      startupForegroundColor="000000" />\r
++   <launcher name="TaxonomicEditor">\r
++      <solaris/>\r
++      <win useIco="false">\r
++         <bmp/>\r
++      </win>\r
++   </launcher>\r
++\r
++   <vm>\r
++   </vm>\r
++\r
++   <plugins>\r
++   </plugins>\r
++\r
++   <features>\r
++      <feature id="eu.etaxonomy.taxeditor.feature"/>\r
++   </features>\r
++\r
++   <configurations>\r
++      <plugin id="eu.etaxonomy.taxeditor.application" autoStart="true" startLevel="5" />\r
++      <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="4" />\r
++      <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" />\r
++      <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="2" />\r
++      <plugin id="org.eclipse.equinox.p2.transport.ecf" autoStart="true" startLevel="4" />\r
++      <plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="1" />\r
++   </configurations>\r
++\r
++</product>\r
@@@ -1,31 -1,31 +1,31 @@@
 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 -<?pde version="3.8"?><target name="Eclipse Indigo Target" sequenceNumber="7">
 -<locations>
 -<location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
 -<unit id="org.eclipse.swtbot.eclipse.feature.group" version="2.0.5.20111003_1754-3676ac8-dev-e36"/>
 -<unit id="org.eclipse.swtbot.eclipse.gef.feature.group" version="2.0.5.20111003_1754-3676ac8-dev-e36"/>
 -<unit id="org.eclipse.swtbot.ide.feature.group" version="2.0.5.20111003_1754-3676ac8-dev-e36"/>
 -<unit id="org.eclipse.swtbot.eclipse.test.junit4.feature.group" version="2.0.5.20111003_1754-3676ac8-dev-e36"/>
 -<repository location="http://download.eclipse.org/technology/swtbot/helios/dev-build/update-site"/>
 -</location>
 -<location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
 -<unit id="org.eclipse.jdt.feature.group" version="3.7.2.v20120120-1414-7z8gFcuFMP7BW5XTz0jLTnz0l9B1"/>
 -<unit id="org.eclipse.pde.source.feature.group" version="3.7.2.v20120120-1420-7b7rFUOFEx2Xnqafnpz0E--0"/>
 -<unit id="org.eclipse.platform.feature.group" version="3.7.2.v20120207-1839-9gF7UHPDFxGjd-PqDr2jX_4yKaumkoHTz04_q-q"/>
 -<unit id="org.eclipse.equinox.executable.feature.group" version="3.5.1.v20111216-1653-7P7NFUIFIbaUcU77s0KQWHw5HZTZ"/>
 -<unit id="org.eclipse.platform.source.feature.group" version="3.7.2.v20120207-1839-9gF7UHPDFxGjd-PqDr2jX_4yKaumkoHTz04_q-q"/>
 -<unit id="org.eclipse.platform.sdk" version="3.7.2.M20120208-0800"/>
 -<unit id="org.eclipse.rcp.feature.group" version="3.7.2.v20120120-1424-9DB5FmnFq5JCf1UA38R-kz0S0272"/>
 -<unit id="org.eclipse.rcp.source.feature.group" version="3.7.2.v20120120-1424-9DB5FmnFq5JCf1UA38R-kz0S0272"/>
 -<unit id="org.eclipse.rcp.sdk.id" version="3.7.2.M20120208-0800"/>
 -<unit id="org.eclipse.equinox.sdk.feature.group" version="3.7.1.R37x_v20110907-7M7W8i8eNV4WsRkue-4Vq4J6pCyW"/>
 -<unit id="org.eclipse.zest.sdk.feature.group" version="1.3.0.v20110425-2050-67C18COMPIAKSVKGQaRTQTiSN8WP"/>
 -<unit id="org.eclipse.pde.feature.group" version="3.7.2.v20120120-1420-7b7rFUOFEx2Xnqafnpz0E--0"/>
 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
 +<?pde version="3.8"?><target name="Eclipse Indigo Target" sequenceNumber="8">\r
 +<locations>\r
 +<location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">\r
 +<unit id="org.eclipse.swtbot.eclipse.feature.group" version="2.0.5.20111003_1754-3676ac8-dev-e36"/>\r
 +<unit id="org.eclipse.swtbot.eclipse.gef.feature.group" version="2.0.5.20111003_1754-3676ac8-dev-e36"/>\r
 +<unit id="org.eclipse.swtbot.ide.feature.group" version="2.0.5.20111003_1754-3676ac8-dev-e36"/>\r
 +<unit id="org.eclipse.swtbot.eclipse.test.junit4.feature.group" version="2.0.5.20111003_1754-3676ac8-dev-e36"/>\r
 +<repository location="http://download.eclipse.org/technology/swtbot/helios/dev-build/update-site"/>\r
 +</location>\r
 +<location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">\r
 +<unit id="org.eclipse.jdt.feature.group" version="3.7.2.v20120120-1414-7z8gFcuFMP7BW5XTz0jLTnz0l9B1"/>\r
 +<unit id="org.eclipse.pde.source.feature.group" version="3.7.2.v20120120-1420-7b7rFUOFEx2Xnqafnpz0E--0"/>\r
 +<unit id="org.eclipse.platform.feature.group" version="3.7.2.v20120207-1839-9gF7UHPDFxGjd-PqDr2jX_4yKaumkoHTz04_q-q"/>\r
 +<unit id="org.eclipse.equinox.executable.feature.group" version="3.5.1.v20111216-1653-7P7NFUIFIbaUcU77s0KQWHw5HZTZ"/>\r
 +<unit id="org.eclipse.platform.source.feature.group" version="3.7.2.v20120207-1839-9gF7UHPDFxGjd-PqDr2jX_4yKaumkoHTz04_q-q"/>\r
 +<unit id="org.eclipse.platform.sdk" version="3.7.2.M20120208-0800"/>\r
 +<unit id="org.eclipse.rcp.feature.group" version="3.7.2.v20120120-1424-9DB5FmnFq5JCf1UA38R-kz0S0272"/>\r
 +<unit id="org.eclipse.rcp.source.feature.group" version="3.7.2.v20120120-1424-9DB5FmnFq5JCf1UA38R-kz0S0272"/>\r
 +<unit id="org.eclipse.rcp.sdk.id" version="3.7.2.M20120208-0800"/>\r
 +<unit id="org.eclipse.equinox.sdk.feature.group" version="3.7.1.R37x_v20110907-7M7W8i8eNV4WsRkue-4Vq4J6pCyW"/>\r
 +<unit id="org.eclipse.zest.sdk.feature.group" version="1.3.0.v20110425-2050-67C18COMPIAKSVKGQaRTQTiSN8WP"/>\r
 +<unit id="org.eclipse.pde.feature.group" version="3.7.2.v20120120-1420-7b7rFUOFEx2Xnqafnpz0E--0"/>\r
- <repository location="http://download.eclipse.org/releases/indigo"/>\r
+ <repository location="http://download.eclipse.org/releases/indigo/"/>
 -</location>
 -<location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">
 -<unit id="org.eclipse.nebula.widgets.compositetable.feature.feature.group" version="1.0.0.201409040043"/>
 -<repository location="http://archive.eclipse.org/nebula/Q32014/release/"/>
 -</location>
 -</locations>
 -</target>
 +</location>\r
 +<location includeAllPlatforms="true" includeConfigurePhase="false" includeMode="slicer" includeSource="true" type="InstallableUnit">\r
 +<unit id="org.eclipse.nebula.widgets.compositetable.feature.feature.group" version="1.0.0.201409040043"/>\r
 +<repository location="http://archive.eclipse.org/nebula/Q32014/release/"/>\r
 +</location>\r
 +</locations>\r
 +</target>\r