Merge branch 'develop' into unify_derivative_views
authorPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 26 Oct 2015 13:50:23 +0000 (14:50 +0100)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Mon, 26 Oct 2015 13:50:23 +0000 (14:50 +0100)
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CacheLoader.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionToOtherTaxonHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java
eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle.properties
eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle_de.properties
eu.etaxonomy.taxeditor.store/plugin.xml
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenu.java [moved from eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenuFactory.java with 57% similarity]
eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/TaxonNavigatorTest.xml

index 79e4adc30c2595397a0fb07f3f723bde63a9126a..c99ce01b646bc73feed2bcbf36485ad9210d103b 100644 (file)
@@ -91,6 +91,8 @@ public class CacheLoader {
             return (T) load((Map<T,T>)obj, alreadyVisitedEntities, update);
         } else if (obj instanceof Collection) {
             return (T) load((Collection<T>)obj, alreadyVisitedEntities, update);
+        } else if (obj instanceof MergeResult) {
+            return (T) loadRecursive((MergeResult)obj, alreadyVisitedEntities, update);
         }
 
 
@@ -208,6 +210,11 @@ public class CacheLoader {
         return new MergeResult(cdmBase, mergeResult.getNewEntities());
     }
 
+    public MergeResult<CdmBase> loadRecursive(MergeResult<CdmBase> mergeResult,List<Object> alreadyVisitedEntities, boolean update) {
+        CdmBase cdmBase = loadRecursive(mergeResult.getMergedEntity(), alreadyVisitedEntities, update);
+        loadRecursive(mergeResult.getNewEntities(), alreadyVisitedEntities, update);
+        return new MergeResult(cdmBase, mergeResult.getNewEntities());
+    }
 
     /**
      * Puts the (Key,Value) pair of ({@link java.util.UUID}, {@link eu.etaxonomy.cdm.model.common.CdmBase}),
index 52fedd9b04960d13ab6ffd527757f956339ce945..3494cd6869b14468e21f31f0d6b6c660c3882db2 100644 (file)
@@ -66,6 +66,7 @@ import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
 import eu.etaxonomy.taxeditor.model.ImageResources;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
 import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart;
 import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart;
@@ -339,8 +340,13 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP
                }
                if(part instanceof BulkEditor && !(object instanceof SpecimenOrObservationBase<?>)){
                    ((BulkEditor) part).forceDirty();
+                   if(CdmStore.getCurrentSessionManager().isRemoting()) {
+                       IStructuredSelection selection = (IStructuredSelection) ((BulkEditor) part).getSelectionProvider().getSelection();
+                       ((BulkEditor) part).changed(selection.getFirstElement());
+                   }
                }
 
+
                super.changed(object);
        }
 
index a87cb24d2d6b1fd2a8ac2eb64687934d24d2a8cc..c51d0ee05057162159b7c88b79b87eb7e48262cb 100644 (file)
@@ -12,6 +12,7 @@ import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.widgets.Display;
@@ -26,9 +27,7 @@ import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
-import eu.etaxonomy.taxeditor.editor.Page;
 import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
-import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
 import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionToOtherTaxonOperation;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
@@ -53,7 +52,7 @@ public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler
        private MoveDescriptionToOtherTaxonOperation operation;
 
        private UUID newAcceptedTaxonNodeUuid;
-       private TaxonNameEditor editor;
+       private MultiPageTaxonEditor editor;
 
        /* (non-Javadoc)
         * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
@@ -63,6 +62,18 @@ public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler
     public Object execute(ExecutionEvent event) throws ExecutionException {
 
                ISelection selection = HandlerUtil.getCurrentSelection(event);
+               editor = EditorUtil.getActiveMultiPageTaxonEditor();
+               if (this.editor.isDirty()){
+                   boolean proceed = MessageDialog.openQuestion(null,
+                          "Save changes", "You have made changes that must be saved before this query can be executed. Would you like to proceed?");
+               if (proceed) {
+                   editor.doSave(EditorUtil.getMonitor());
+               } else {
+                   return null;
+               }
+
+               }
+
 
                if(selection instanceof IStructuredSelection){
 
@@ -88,7 +99,8 @@ public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler
 
                        // Choose the target taxon
                        List<UUID> excludeTaxa = new ArrayList<UUID>();
-                       editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
+
+
                        excludeTaxa.add(descriptions.get(0).getTaxon().getUuid());
 
                        //get current taxon node
@@ -143,7 +155,7 @@ public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler
 
                        @Override
             public void run() {
-                               AbstractUtility.close(editor.getMultiPageTaxonEditor());
+                               AbstractUtility.close(editor);
 
                                try {
                                        MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid);
index 527cfe3f9027d0094564fdbd67e91afc7c55e06e..331526d40397a50d0d24cd73c10560d87031aced 100644 (file)
@@ -34,6 +34,7 @@ import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
 import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
 import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart;
 import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart;
@@ -134,6 +135,10 @@ public class MediaViewPart extends AbstractCdmEditorViewPart implements IPartCon
            // take a look at ISaveblePart
            if(part instanceof BulkEditor && !(object instanceof SpecimenOrObservationBase<?>)){
                ((BulkEditor) part).forceDirty();
+               if(CdmStore.getCurrentSessionManager().isRemoting()) {
+                IStructuredSelection selection = (IStructuredSelection) ((BulkEditor) part).getSelectionProvider().getSelection();
+                ((BulkEditor) part).changed(selection.getFirstElement());
+            }
            }
            super.changed(object);
        }
index 14ce99859929ece86fb1049e56f92d4939cc4ab5..c2c090a7aed35a68a00a67386c2c1286d01714f6 100644 (file)
@@ -156,6 +156,6 @@ Bundle-Vendor = EDIT
 Bundle-Name = DataStore Bundle\r
 command.name.13 = delete\r
 command.name.14 = delete\r
-page.name.32 = TaxonNavigator\r
+page.name.32 = Taxon Navigator\r
 page.name.33 = Sort of Taxonnodes\r
 command.name.15 = Open
\ No newline at end of file
index fdc32d0692732090b3a5cdbd64382a4a76178335..8f10c0d1b443da28fd0b7b580d7721132d919f96 100644 (file)
@@ -129,7 +129,7 @@ page.name.27 = Media
 page.name.28 = Checklisten Editor
 page.name.29 = Editor Profil
 page.name.30 = Sprache
-page.name.32 = TaxonNavigator
+page.name.32 = Taxon Navigator
 page.name.33 = Sortierung im TaxonNavigator
 command.label.clone = Klonen
 command.label.openInSpecimenEditor = \u00d6ffnen im Specimen-Editor
\ No newline at end of file
index f25258f8a3b68dcb7d8d12c8accdbbc153d065b2..97507fd39517b534a2b1dd589f4982e86a9ad8e1 100644 (file)
             </command>
          </menu>
       </menuContribution>
-      <menuContribution
-            class="eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermMenuFactory"
-            locationURI="menu:org.eclipse.ui.main.menu.window?before=eu.etaxonomy.taxeditor.application.windowMenu.last">
+      <menuContribution 
+         allPopups="false" 
+                 locationURI="menu:org.eclipse.ui.main.menu.window?before=eu.etaxonomy.taxeditor.application.windowMenu.last"> 
+           <dynamic 
+                    class="eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermMenu" 
+                   id="eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermMenu"> 
+              <visibleWhen 
+                      checkEnabled="true"> 
+                  <reference 
+                        definitionId="isCdmStoreConnected"> 
+                  </reference> 
+             </visibleWhen> 
+        </dynamic> 
       </menuContribution>
       <menuContribution
             locationURI="menu:org.eclipse.ui.main.menu.file?after=eu.etaxonomy.taxeditor.application.filemenu.io">
similarity index 57%
rename from eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenuFactory.java
rename to eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/DefinedTermMenu.java
index 9bd7ccbda2d8ed188e837b2cd847829e0abab79a..4f3e7770f5ec7011fd5eb248c1f43e6aeaa6a48c 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 /**
 * Copyright (C) 2009 EDIT
-* European Distributed Institute of Taxonomy 
+* 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.
 */
@@ -11,6 +11,7 @@
 package eu.etaxonomy.taxeditor.editor.definedterm;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.EnumSet;
@@ -23,89 +24,89 @@ import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.swt.SWT;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.CompoundContributionItem;
 import org.eclipse.ui.menus.CommandContributionItem;
 import org.eclipse.ui.menus.CommandContributionItemParameter;
-import org.eclipse.ui.menus.ExtensionContributionFactory;
-import org.eclipse.ui.menus.IContributionRoot;
-import org.eclipse.ui.services.IServiceLocator;
 
 import eu.etaxonomy.cdm.model.common.TermType;
 
 /**
- * Menu factory used in the store plugin xml to dynamically generate menu (sub-menu) contribution items
+ * Menu used in the store plugin xml to dynamically generate menu (sub-menu) contribution items
  * for term types which when clicked open the defined term editor for the chosen term type
- * 
- * @author c.mathew
- * @date 18 Jul 2013
+ *
+ * @author pplitzner
+ * @date 21 Jul 2015
  *
  */
 
-public class DefinedTermMenuFactory extends ExtensionContributionFactory {     
-       
-       @Override
-       public void createContributionItems(IServiceLocator serviceLocator,
-                       IContributionRoot additions) {
-               
-               MenuManager dtMenuManager = 
-                               new MenuManager("Term Editor","eu.etaxonomy.taxeditor.store.definedTermEditorMenu"); 
-               
-               dtMenuManager.setVisible(true);
-        
-               additions.addContributionItem(dtMenuManager, null);
-               List<TermType> ttList = new ArrayList<TermType>(EnumSet.allOf(TermType.class));
-               Collections.sort(ttList,new SortByTermTypeMessage());
-        for (TermType tt : ttList)
-        {
-               // if term type has a parent, do not add it
-               // it will be added in the recursive call
-               if(tt.getKindOf() == null) {
-                       IContributionItem ici = addChildTermsToMenuManager(tt, serviceLocator);                 
-                       if(ici != null) {                                                       
-                               dtMenuManager.add(ici);
-                       }
-               }
-        }                                     
+public class DefinedTermMenu extends CompoundContributionItem {
+
+
+    @Override
+    protected IContributionItem[] getContributionItems() {
+        Collection<IContributionItem> items = new ArrayList<IContributionItem>();
+           MenuManager dtMenuManager =
+                   new MenuManager("Term Editor","eu.etaxonomy.taxeditor.store.definedTermEditorMenu");
+
+           dtMenuManager.setVisible(true);
+
+           items.add(dtMenuManager);
+           List<TermType> ttList = new ArrayList<TermType>(EnumSet.allOf(TermType.class));
+           Collections.sort(ttList,new SortByTermTypeMessage());
+           for (TermType tt : ttList)
+           {
+               // if term type has a parent, do not add it
+               // it will be added in the recursive call
+               if(tt.getKindOf() == null) {
+                   IContributionItem ici = addChildTermsToMenuManager(tt);
+                   if(ici != null) {
+                       dtMenuManager.add(ici);
+                   }
+               }
+           }
+           return items.toArray(new IContributionItem[]{});
        }
-       
-       private IContributionItem addChildTermsToMenuManager(TermType termType, IServiceLocator serviceLocator) {
-       
+
+       private IContributionItem addChildTermsToMenuManager(TermType termType) {
+
                //FIXME : need a better way to find out if a term type can be editable (ticket 3853)
                if(termType.getEmptyDefinedTermBase() != null) {
                        Set<TermType> children = termType.getGeneralizationOf();
                        // term type has no children, so create menu item
-                       if(children.isEmpty()) {                        
-                               return createMenuItem(termType, serviceLocator);
+                       if(children.isEmpty()) {
+                               return createMenuItem(termType);
                        }
-                       // term type has children, so create sub menu           
-                       MenuManager dtMenuManager = 
-                                       new MenuManager(termType.getMessage(),"eu.etaxonomy.taxeditor.store." + termType.getKey() + "Menu"); 
+                       // term type has children, so create sub menu
+                       MenuManager dtMenuManager =
+                                       new MenuManager(termType.getMessage(),"eu.etaxonomy.taxeditor.store." + termType.getKey() + "Menu");
                        dtMenuManager.setVisible(true);
-                       dtMenuManager.add(createDefaultMenuItem(termType, serviceLocator));
+                       dtMenuManager.add(createDefaultMenuItem(termType));
 
                        Separator sep = new Separator();
                        dtMenuManager.add(sep);
                        // add child items to the sub menu
-                       for(TermType tt : children) {                   
-                               IContributionItem item = addChildTermsToMenuManager(tt,serviceLocator);
-                               if(item != null) {                              
+                       for(TermType tt : children) {
+                               IContributionItem item = addChildTermsToMenuManager(tt);
+                               if(item != null) {
                                        dtMenuManager.add(item);
-                               }                                       
-                       }               
+                               }
+                       }
                        return dtMenuManager;
                } else {
                        return null;
                }
-               
+
        }
-       
-       private CommandContributionItem createMenuItem(TermType termType, IServiceLocator serviceLocator) {
-               
+
+       private CommandContributionItem createMenuItem(TermType termType) {
+
                Map<String, String> params = new HashMap<String, String>();
                params.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid",
-                               termType.getUuid().toString());         
-               
+                               termType.getUuid().toString());
+
         CommandContributionItemParameter p = new CommandContributionItemParameter(
-                serviceLocator, 
+                PlatformUI.getWorkbench(),
                 "",
                 "eu.etaxonomy.taxeditor.store.openDefinedTermEditor",
                 params,
@@ -114,24 +115,24 @@ public class DefinedTermMenuFactory extends ExtensionContributionFactory {
                 null,
                 termType.getMessage(),
                 "",
-                "",                
+                "",
                 SWT.PUSH,
                 "",
                 true);
-   
-        CommandContributionItem item = new CommandContributionItem(p);   
+
+        CommandContributionItem item = new CommandContributionItem(p);
         return item;
-               
+
        }
-       
-       private CommandContributionItem createDefaultMenuItem(TermType termType, IServiceLocator serviceLocator) {
-               
+
+       private CommandContributionItem createDefaultMenuItem(TermType termType) {
+
                Map<String, String> params = new HashMap<String, String>();
                params.put("eu.etaxonomy.taxeditor.store.openDefinedTermEditor.termTypeUuid",
-                               termType.getUuid().toString());         
-               
+                               termType.getUuid().toString());
+
         CommandContributionItemParameter p = new CommandContributionItemParameter(
-                serviceLocator, 
+                PlatformUI.getWorkbench(),
                 "",
                 "eu.etaxonomy.taxeditor.store.openDefinedTermEditor",
                 params,
@@ -140,23 +141,24 @@ public class DefinedTermMenuFactory extends ExtensionContributionFactory {
                 null,
                 "Other " + termType.getMessage() + "s",
                 "",
-                "",                
+                "",
                 SWT.PUSH,
                 "",
                 true);
-        
-        
-   
-        CommandContributionItem item = new CommandContributionItem(p);   
+
+
+
+        CommandContributionItem item = new CommandContributionItem(p);
         return item;
-               
+
        }
-       
+
        private class SortByTermTypeMessage implements Comparator<TermType> {
-           public int compare(TermType t1, TermType t2) {
+           @Override
+        public int compare(TermType t1, TermType t2) {
                return t1.getMessage().compareTo(t2.getMessage());
            }
        }
-       
+
 
 }
index b0afec078d6ada01b7c5fe91caa194c36bc2d462..80bb4a9507a8eb137ca6633faa16ff13e00aac10 100644 (file)
 --><dataset>
   <TaxonNode id="46" created="2010-12-21 15:09:43.0" uuid="168a4d09-a2b0-4206-b4cc-5d13199f9306" countchildren="0"   classification_id="10" parent_id="47" taxon_id="48" treeIndex="#t10#4032#49#48#47#46#" sortIndex="0"/>
   <TaxonNode id="47" created="2010-12-21 15:09:43.0" uuid="2f05d429-632d-4230-b9cb-70299360b470" countchildren="1"   classification_id="10" parent_id="48" taxon_id="51" treeIndex="#t10#4032#49#48#47#" sortIndex="0"/>
-  <TaxonNode id="48" created="2010-12-21 15:09:43.0" uuid="24773d3b-8f11-4400-99de-71658982b245" countchildren="6"   classification_id="10" parent_id="49"  treeIndex="#t10#4032#49#48#" sortIndex="0"/>
+  <TaxonNode id="48" created="2010-12-21 15:09:43.0"
+       uuid="24773d3b-8f11-4400-99de-71658982b245" countchildren="6"
+       classification_id="10" parent_id="49" treeIndex="#t10#4032#49#48#"
+       sortIndex="0" taxon_id="2739" />
   <TaxonNode id="49" created="2010-12-21 15:09:43.0" uuid="572290a9-7535-48c8-9f68-25ddbc9869ee" countchildren="10"   classification_id="10" parent_id="4032" taxon_id="49" treeIndex="#t10#4032#49#" sortIndex="0"/>
   <TaxonNode id="236" created="2010-12-21 15:09:45.0" uuid="f5d97f8b-c673-4050-af06-bbfab33baaec" countchildren="0"   classification_id="10" parent_id="237" taxon_id="264" treeIndex="#t10#4032#49#48#237#236#" sortIndex="0"/>
   <TaxonNode id="237" created="2010-12-21 15:09:45.0" uuid="4998de90-d0be-433b-a62f-0d57a1e399b0" countchildren="1"   classification_id="10" parent_id="48" taxon_id="265" treeIndex="#t10#4032#49#48#237#" sortIndex="1"/>
@@ -44,8 +47,9 @@
   <TaxonNameBase DTYPE="BotanicalName" id="2205" created="2010-12-21 15:09:57.0" uuid="77b7934f-8f62-4798-b96a-f3d12bfd5ebf" protectedtitlecache="false" titleCache="Notholaena" fullTitleCache="Notholaena" parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="" binomhybrid="false" genusoruninomial="Notholaena" hybridformula="false" monomhybrid="false" namecache="Notholaena" protectedauthorshipcache="false" protectednamecache="false" trinomhybrid="false" anamorphic="false"    rank_id="788"/>
   <TaxonNameBase DTYPE="BotanicalName" id="2737" created="2010-12-21 15:10:00.0" uuid="25560d66-07a3-41ce-8244-36ca98638c71" protectedtitlecache="false" titleCache="Pteris vittata L." fullTitleCache="Pteris vittata L." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="L." binomhybrid="false" genusoruninomial="Pteris" hybridformula="false" monomhybrid="false" namecache="Pteris vittata" protectedauthorshipcache="false" protectednamecache="false" specificepithet="vittata" trinomhybrid="false" anamorphic="false"    rank_id="778" />
   <TaxonNameBase DTYPE="BotanicalName" id="2738" created="2010-12-21 15:10:00.0" uuid="a40593ce-e8cc-43bb-a391-2de988b09039" protectedtitlecache="false" titleCache="Pteris" fullTitleCache="Pteris" parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="" binomhybrid="false" genusoruninomial="Pteris" hybridformula="false" monomhybrid="false" namecache="Pteris" protectedauthorshipcache="false" protectednamecache="false" trinomhybrid="false" anamorphic="false"    rank_id="788"/>
+  <TaxonNameBase DTYPE="BotanicalName" id="2739" created="2010-12-21 15:10:00.0" uuid="81e2f844-70a9-4b14-82c2-9c2ba3fdb24e" protectedtitlecache="false" titleCache="Pteris cretica L." fullTitleCache="Pteris cretica L." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="L." binomhybrid="false" genusoruninomial="Pteris" hybridformula="false" monomhybrid="false" namecache="Pteris cretica" protectedauthorshipcache="false" protectednamecache="false" specificepithet="cretica" trinomhybrid="false" anamorphic="false"    rank_id="778" />
 
-  <Classification id="10" created="2010-12-21 15:09:43.0" uuid="0c2b5d25-7b15-4401-8b51-dd4be0ee5cab" updated="2015-06-09 07:10:42.0" protectedtitlecache="false" titleCache="Cyprus"   updatedby_id="10" name_id="10"  rootnode_id="4032"/>
+       <Classification id="10" created="2010-12-21 15:09:43.0" uuid="0c2b5d25-7b15-4401-8b51-dd4be0ee5cab" updated="2015-06-09 07:10:42.0" protectedtitlecache="false" titleCache="Cyprus"   updatedby_id="10" name_id="10"  rootnode_id="4032"/>
 
   <TaxonBase DTYPE="Taxon" id="48" created="2011-03-01 20:11:26.0" uuid="b8402dc4-5050-4882-a147-01b71e0e47d6" protectedtitlecache="false" titleCache="Adiantum capillus-veneris L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="48"  publish="true"/>
   <TaxonBase DTYPE="Taxon" id="49" created="2010-12-21 15:09:43.0" uuid="1141a510-5ee8-4a59-ae60-7b4fea44872f" protectedtitlecache="false" titleCache="Pteridophyta sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="49"  publish="true"/>
   <TaxonBase DTYPE="Taxon" id="2203" created="2011-03-01 20:11:36.0" uuid="d9a0c5d5-baee-4b6b-974a-a7de5affe748" protectedtitlecache="false" titleCache="Notholaena marantae (L.) Desv. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="2203"  publish="true"/>
   <TaxonBase DTYPE="Taxon" id="2205" created="2010-12-21 15:09:57.0" uuid="c221d34c-76b0-4fc7-9901-e72efd4c899b" protectedtitlecache="false" titleCache="Notholaena sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="2205"  publish="true"/>
   <TaxonBase DTYPE="Taxon" id="2737" created="2011-03-01 20:11:39.0" uuid="6b46ac55-3e39-4c37-a1b6-b680b21599b2" protectedtitlecache="false" titleCache="Pteris vittata L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="2737"  publish="true"/>
-  <TaxonBase DTYPE="Taxon" id="2738" created="2010-12-21 15:10:00.0" uuid="8ac3dca2-6bbf-4cd4-84b7-53ddc2973ed8" protectedtitlecache="false" titleCache="Pteris sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="2738"  publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="2738" created="2010-12-21 15:10:00.0" uuid="8ac3dca2-6bbf-4cd4-84b7-53ddc2973ed8" protectedtitlecache="false" titleCache="Pteris sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="2738"  publish="true"/><TaxonBase
+       DTYPE="Taxon" id="2739" created="2010-12-21 15:10:00.0" uuid="79b45ff5-c17c-44ec-9114-fb6b3cd1aef4" protectedtitlecache="false"
+       titleCache="Pteris cretica sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" name_id="2739"
+       taxonomicchildrencount="0" publish="true" unplaced="false"
+       taxonstatusunknown="false">
+</TaxonBase>
 
-  <DescriptionBase DTYPE="TaxonDescription" id="28" created="2010-12-21 15:09:43.0" uuid="f04f8f66-ad92-42d0-89bc-04ac5b36163c" updated="2011-03-01 19:20:45.0" protectedtitlecache="false" titleCache="Taxon description for Adiantum capillus-veneris L." imagegallery="false"   taxon_id="48"/>
+       <DescriptionBase DTYPE="TaxonDescription" id="28" created="2010-12-21 15:09:43.0" uuid="f04f8f66-ad92-42d0-89bc-04ac5b36163c" updated="2011-03-01 19:20:45.0" protectedtitlecache="false" titleCache="Taxon description for Adiantum capillus-veneris L." imagegallery="false"   taxon_id="48"></DescriptionBase>
   <DescriptionBase DTYPE="TaxonDescription" id="149" created="2010-12-21 15:09:45.0" uuid="24df0fca-bfc4-4f0f-a269-336985ed6e5e" updated="2011-03-01 19:20:46.0" protectedtitlecache="false" titleCache="Taxon description for Anogramma leptophylla (L.) Link" imagegallery="false"   taxon_id="264"/>
   <DescriptionBase DTYPE="TaxonDescription" id="447" created="2010-12-21 15:09:48.0" uuid="01863b86-c6ae-48b8-a8da-f693be9087da" updated="2011-03-01 19:20:48.0" protectedtitlecache="false" titleCache="Taxon description for Cheilanthes acrostica (Balbis) Tod." imagegallery="false"   taxon_id="812"/>
   <DescriptionBase DTYPE="TaxonDescription" id="448" created="2010-12-21 15:09:48.0" uuid="aac7b184-e622-409b-8eda-e14998b9021d" protectedtitlecache="false" titleCache="Taxon description for Cheilanthes maderensis Lowe" imagegallery="false"   taxon_id="815"/>