#5129 Extend export ui for remoting
authorCherian Mathew <c.mathew@bgbm.org>
Tue, 4 Aug 2015 16:34:22 +0000 (18:34 +0200)
committerCherian Mathew <c.mathew@bgbm.org>
Tue, 4 Aug 2015 16:34:22 +0000 (18:34 +0200)
20 files changed:
eu.etaxonomy.taxeditor.cdmlib/.classpath
eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationState.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/AbstractIOManager.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/ExportManager.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/ImportManager.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/wizard/CsvExportWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/wizard/CsvNameExportWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/wizard/CsvPrintExportWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/wizard/JaxbExportWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/wizard/SddExportWizard.java
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/BaseRemotingTest.java
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/IOServiceTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/service/IOServiceTest.xml [new file with mode: 0644]

index 76e36337a21cacef1f71a0da6577f63201596140..f0537b16b8994140e46a2d6b938134e69f90fb3a 100644 (file)
        <classpathentry exported="true" kind="lib" path="lib/swagger-annotations-1.3.5.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/cdmlib-commons-3.8.0-SNAPSHOT.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/cdmlib-ext-3.8.0-SNAPSHOT.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/cdmlib-io-3.8.0-SNAPSHOT.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/cdmlib-io-3.8.0-SNAPSHOT.jar" sourcepath="/data/.m2/repository/eu/etaxonomy/cdmlib-io/3.8.0-SNAPSHOT/cdmlib-io-3.8.0-SNAPSHOT-sources.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/cdmlib-model-3.8.0-SNAPSHOT.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/cdmlib-persistence-3.8.0-SNAPSHOT.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/cdmlib-print-3.8.0-SNAPSHOT.jar"/>
index 4a39ebbc6954adb0d245469ca5b8c3f89bc68dfd..4738620485a7af1e2a538de2754ef64fbf8d8086 100644 (file)
@@ -77,6 +77,7 @@ Export-Package: com.google.api,
  eu.etaxonomy.cdm.io.sdd.ikeyplus,
  eu.etaxonomy.cdm.io.sdd.in,
  eu.etaxonomy.cdm.io.sdd.out,
+ eu.etaxonomy.cdm.io.service,
  eu.etaxonomy.cdm.io.specimen,
  eu.etaxonomy.cdm.io.specimen.abcd206.in,
  eu.etaxonomy.cdm.io.specimen.excel.in,
index 729d7442b48b3fd87d66ed1238ff119299c88b86..a0fa11a365a6e7ff7e9a79f86b7ee802c63aa88f 100644 (file)
@@ -26,6 +26,7 @@ import org.springframework.core.io.Resource;
 import eu.etaxonomy.cdm.api.service.ITestService;
 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
 import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor;
+import eu.etaxonomy.cdm.io.service.IIOService;
 import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager;
 import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
 import eu.etaxonomy.taxeditor.service.ICachedCommonService;
@@ -205,6 +206,9 @@ public class CdmApplicationRemoteController  extends CdmApplicationController {
         return ((CdmApplicationRemoteConfiguration)configuration).getCdmEntitySessionManager();
     }
 
+    public IIOService getIOService(){
+        return (IIOService) getBean("ioService");
+    }
 
     public ITestService getTestService(){
         return (ITestService) getBean("testService");
index 070df43a12f8ad947d1fa7772857fd74c5854e3d..07dfa81afb40f441eaa6cd3f5b86d927c68fe52d 100644 (file)
@@ -19,6 +19,7 @@ import eu.etaxonomy.cdm.api.cache.CdmServiceCacher;
 import eu.etaxonomy.cdm.api.service.ICommonService;
 import eu.etaxonomy.cdm.api.service.IService;
 import eu.etaxonomy.cdm.api.service.ITestService;
+import eu.etaxonomy.cdm.io.service.IIOService;
 import eu.etaxonomy.taxeditor.service.ICachedCommonService;
 
 /**
@@ -174,6 +175,14 @@ public class CdmApplicationState {
 
     }
 
+    public static IIOService getIOService() {
+        ICdmApplicationConfiguration configuration = getCurrentAppConfig();
+
+        return ((CdmApplicationRemoteController)configuration).getIOService();
+
+    }
+
+
     public static ITestService getTestService() {
         ICdmApplicationConfiguration configuration = getCurrentAppConfig();
 
@@ -189,8 +198,8 @@ public class CdmApplicationState {
     }
 
     public static CdmServiceCacher getCdmServiceCacher() {
-
         return cdmServiceCacher;
     }
 
+
 }
index ecca6c7f58a241587e0064634ece4df14a818dd8..3391f17a7ebb1829c163aaed119dcc26a120c197 100644 (file)
@@ -158,7 +158,7 @@ public class CdmServerInfo {
         return null;
     }
 
-    public ICdmRemoteSource getCdmRemoteSource(CdmInstanceInfo instance, int port) {
+    public CdmRemoteSource getCdmRemoteSource(CdmInstanceInfo instance, int port) {
         if(instance != null) {
             return CdmRemoteSource.NewInstance(name,
                     server,
@@ -226,7 +226,7 @@ public class CdmServerInfo {
         return instances;
     }
 
-    public static ICdmRemoteSource getDevServerRemoteSource() {
+    public static CdmRemoteSource getDevServerRemoteSource() {
         String value=System.getProperty("cdm.server.dev.activate");
         boolean available = false;
         CdmInstanceInfo devInstance = null;
index 0e5b8f9e6e50e578cddeef78eb8c5ce14d405acc..72f6294c34a667c48052854c3ae6df4931d7e040 100644 (file)
@@ -43,16 +43,12 @@ public class CachedCommonServiceImpl implements ICachedCommonService {
      */
     @Override
     public CdmBase find(Class<? extends CdmBase> clazz, int id) {
-//        if(cacheEnabled) {
-            CdmBase cdmEntity = CdmApplicationState.getCurrentAppConfig().getCommonService().find(clazz, id, getPropertyPaths(clazz));
-            if(cdmEntity == null) {
-                throw new NullPointerException("CDM Entity of type " + clazz.getName() + " with id " + id  + " is null.");
-            }
-            return cdmEntity;
-            //return cdmEntitySessionManager.load(cdmEntity, false);
-//        } else {
-//            return CdmBase.deproxy(commonService.find(clazz, id),clazz);
-//        }
+        CdmBase cdmEntity = CdmApplicationState.getCurrentAppConfig().getCommonService().find(clazz, id, getPropertyPaths(clazz));
+        if(cdmEntity == null) {
+            throw new NullPointerException("CDM Entity of type " + clazz.getName() + " with id " + id  + " is null.");
+        }
+        return cdmEntity;
+
     }
 
 
index 12785fa57e421d6418715b7fbefecb93554f22ba..f2debccfeaae80793d8ff61b1984d24efa5c8c38 100644 (file)
@@ -1296,7 +1296,7 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
                        try {
                                String role = getRole();
                                String fieldName = role.substring(role.lastIndexOf(".") + 1);
-                               log.info("--> Remote Lazy Initializing Collection " + getRole() + " , key : " + getKey() + " , field : " + fieldName);
+                               log.info("--> Remote Lazy Initializing Collection " + getRole() + " , owner : " + getOwner().getClass() + "/" + getKey() + " , field : " + fieldName);
                                Object owner = getOwner();
                                CdmBase cdmBase;
                                if(owner instanceof CdmBase) {
index 626cad9d5255623d07980c42646928617a86f69a..833ee86cd6c40cbdd0d94175894fa0c8818bfb60 100644 (file)
       </bean>\r
     </property>\r
   </bean>\r
+  \r
+  <bean id="ioService" lazy-init="true"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/io.service\r
+      </value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.io.service.IIOService\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean class="eu.etaxonomy.taxeditor.service.CdmAuthenticatedHttpInvokerRequestExecutor">\r
+        <property name="readTimeout" value="0" />\r
+      </bean>\r
+    </property>\r
+  </bean>\r
 \r
   <bean id="testService" lazy-init="true"\r
     class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
index 928decf93413554054a6352939f876297759c5cd..604b197fbf54a92f9dd9fe280cbd241fd55c9ddf 100644 (file)
     \r
   <bean id="cachedCommonService" \r
     class="eu.etaxonomy.taxeditor.service.CachedCommonServiceImpl" />\r
+    \r
   \r
+  <bean id="defaultExport"\r
+    class="eu.etaxonomy.cdm.io.common.CdmApplicationAwareDefaultExport" />\r
+    \r
+  <bean id="jaxbExport"\r
+    class="eu.etaxonomy.cdm.io.jaxb.JaxbExport" />\r
+    \r
   <bean id="accessDecisionManager" \r
     class="eu.etaxonomy.cdm.persistence.hibernate.permission.UnanimousBasedUnrevokable" >\r
     \r
index 2504f4a1746edbacbacd88e041137d6cc4ba2462..ebabf84aea9cd7016c957ac2d437a48eb81ff401 100644 (file)
@@ -1,15 +1,17 @@
 // $Id$
 /**
  * Copyright (C) 2007 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.
  */
 
 package eu.etaxonomy.taxeditor.io;
 
+import java.io.File;
+
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.ui.progress.IProgressConstants;
 
@@ -20,7 +22,7 @@ import eu.etaxonomy.cdm.io.common.IIoConfigurator;
  * <p>
  * Abstract AbstractIOHandler class.
  * </p>
- * 
+ *
  * @author n.hoffmann
  * @created Sep 11, 2009
  * @version 1.0
@@ -37,7 +39,7 @@ public abstract class AbstractIOManager<CONFIGURATOR extends IIoConfigurator> {
         * <p>
         * Constructor for AbstractIOHandler.
         * </p>
-        * 
+        *
         * @param applicationController
         *            a
         *            {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
@@ -52,7 +54,7 @@ public abstract class AbstractIOManager<CONFIGURATOR extends IIoConfigurator> {
 
        /**
         * Starts the IO process
-        * 
+        *
         * @param configurator
         *            a CONFIGURATOR object.
         */
@@ -71,10 +73,12 @@ public abstract class AbstractIOManager<CONFIGURATOR extends IIoConfigurator> {
         * <p>
         * createIOJob
         * </p>
-        * 
+        *
         * @param configurator
         *            a CONFIGURATOR object.
         * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
         */
        protected abstract Job createIOJob(CONFIGURATOR configurator);
+
+       public abstract Job createIOServiceJob(CONFIGURATOR configurator, File ioFile);
 }
index e3fbfe9ab2862d0159f4d3fd7577bf3a40b31c06..21c1d98f458be68084770b805a357af3cd580270 100644 (file)
 
 package eu.etaxonomy.taxeditor.io;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.List;
+
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -18,16 +22,20 @@ import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IWorkbenchPart;
 
+import eu.etaxonomy.cdm.api.application.CdmApplicationState;
 import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.io.common.CdmDefaultExport;
+import eu.etaxonomy.cdm.io.common.ExportResult;
 import eu.etaxonomy.cdm.io.common.IExportConfigurator;
 import eu.etaxonomy.cdm.io.common.IIoConfigurator;
 import eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator;
 import eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator;
+import eu.etaxonomy.cdm.io.service.IIOService;
 import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.store.StoreUtil;
+import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 
 /**
  * <p>
@@ -157,6 +165,46 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> {
                return job;
        }
 
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.io.AbstractIOManager#createIOServiceJob(eu.etaxonomy.cdm.io.common.IIoConfigurator)
+        */
+       @Override
+       public Job createIOServiceJob(final IExportConfigurator configurator, final File exportFile) {
+           Assert.isNotNull(configurator, "Configuration may not be null");
+
+           final Display display = Display.getCurrent();
+
+           Job job = new Job("Export: " + configurator.getClass().getSimpleName()) {
+               @Override
+               protected IStatus run(IProgressMonitor monitor) {
+                   monitor.beginTask("Exporting database. This will take some time.", IProgressMonitor.UNKNOWN);
+                   try {
+                       IIOService ioService = CdmApplicationState.getIOService();
+
+                       ExportResult result = ioService.export(configurator);
+                       List<byte[]> dataList = result.getExportData();
+                       byte[] exportData = dataList.get(0);
+
+                       FileOutputStream stream = new FileOutputStream(exportFile);
+                       try {
+                           stream.write(exportData);
+                       } finally {
+                           stream.close();
+                       }
+
+                   } catch (Exception e) {
+                       MessagingUtils.errorDialog("Error exporting data",
+                               this,
+                               e.getMessage(),
+                               TaxeditorStorePlugin.PLUGIN_ID,
+                               e,
+                               true);
+                   }
+                   return Status.OK_STATUS;
+               }
+           };
+           return job;
+       }
        /**
         * @param jaxb
         * @return
@@ -198,4 +246,6 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> {
                return (SDDExportConfigurator) getConfigurator(TYPE.Sdd);
        }
 
+
+
 }
index a607e3f0f43c686cdb0e9e1e346144f1f8ba700d..fcb651eb6c58db9c091ae76ac88f6a97670cda46 100644 (file)
@@ -1,15 +1,17 @@
 // $Id$
 /**
  * Copyright (C) 2007 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.
  */
 
 package eu.etaxonomy.taxeditor.io;
 
+import java.io.File;
+
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -17,7 +19,6 @@ import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.swt.widgets.Display;
 
-import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
 import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
 import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
 import eu.etaxonomy.cdm.io.common.IImportConfigurator;
@@ -36,7 +37,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  * <p>
  * ImportHandler class.
  * </p>
- * 
+ *
  * @author n.hoffmann
  * @created Sep 11, 2009
  * @version 1.0
@@ -54,7 +55,7 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
         * <p>
         * NewInstance
         * </p>
-        * 
+        *
         * @param applicationConfiguration
         *            a
         *            {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
@@ -68,7 +69,7 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
 
        /**
         * Use when importing data into the current application context
-        * 
+        *
         * @param configurator
         *            a {@link eu.etaxonomy.cdm.io.common.IImportConfigurator}
         *            object.
@@ -91,7 +92,7 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
                                monitor.worked(5);
 
                                CdmDefaultImport<IImportConfigurator> importer = new CdmDefaultImport<IImportConfigurator>();
-                               importer.setCdmAppController((ICdmApplicationConfiguration) applicationConfiguration);
+                               importer.setCdmAppController(applicationConfiguration);
                                monitor.worked(5);
 
                                try {
@@ -127,6 +128,16 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
 
        }
 
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.io.AbstractIOManager#createIOServiceJob(eu.etaxonomy.cdm.io.common.IIoConfigurator)
+     */
+    @Override
+    public Job createIOServiceJob(IImportConfigurator configurator, File importFile) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
        private IImportConfigurator getConfigurator(TYPE type) {
                Assert.isNotNull(type, "Type should not be null");
 
@@ -157,7 +168,7 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
         * <p>
         * JaxbConfigurator
         * </p>
-        * 
+        *
         * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbImportConfigurator} object.
         */
        public final JaxbImportConfigurator JaxbConfigurator() {
@@ -168,7 +179,7 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
         * <p>
         * TcsConfigurator
         * </p>
-        * 
+        *
         * @return a {@link eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator}
         *         object.
         */
@@ -180,7 +191,7 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
         * <p>
         * EndnoteConfigurator
         * </p>
-        * 
+        *
         * @return a
         *         {@link eu.etaxonomy.cdm.io.reference.endnote.in.EndnoteImportConfigurator}
         *         object.
@@ -193,7 +204,7 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
         * <p>
         * NormalExplicitConfigurator
         * </p>
-        * 
+        *
         * @return a
         *         {@link eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator}
         *         object.
@@ -206,7 +217,7 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
         * <p>
         * SddConfigurator
         * </p>
-        * 
+        *
         * @return a {@link eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator}
         *         object.
         */
@@ -218,7 +229,7 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
         * <p>
         * AbcdConfigurator
         * </p>
-        * 
+        *
         * @return a
         *         {@link eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator}
         *         object.
@@ -231,4 +242,5 @@ public class ImportManager extends AbstractIOManager<IImportConfigurator> {
                return (SpecimenCdmExcelImportConfigurator) getConfigurator(TYPE.SpecimenCdmExcel);
        }
 
+
 }
index 744876e944ccf966a07e23717543669f933f6b2d..e703c2d3dbc74f7f2807088a9d866f8889f9c152 100644 (file)
@@ -15,9 +15,11 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.UUID;
 
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.progress.IProgressConstants;
 
 import eu.etaxonomy.cdm.io.csv.redlist.demo.CsvDemoExportConfigurator;
 import eu.etaxonomy.cdm.model.taxon.Classification;
@@ -91,10 +93,19 @@ public class CsvExportWizard extends AbstractExportWizard<CsvDemoExportConfigura
                        configurator.setLastChange(true);
                    }
                }
-               configurator.setDestination(new File(urlString));
-
-               CdmStore.getExportManager().run(configurator);
-
+               if(CdmStore.getCurrentSessionManager().isRemoting()) {
+                   // create job
+                   Job job = CdmStore.getExportManager().createIOServiceJob(configurator, new File(urlString));
+                   // configure the job
+                   job.setProperty(IProgressConstants.KEEP_PROPERTY, true);
+                   job.setUser(true);
+                   // schedule job
+                   job.schedule();
+               } else {
+
+                   configurator.setDestination(new File(urlString));
+                   CdmStore.getExportManager().run(configurator);
+               }
                return true;
        }
 
index 24d0db49c9c428db666476dff16b2e3fe51f4d05..36f8d024c7114c6c5d099ef3d1b82582369587a5 100644 (file)
@@ -12,9 +12,11 @@ package eu.etaxonomy.taxeditor.io.wizard;
 \r
 import java.io.File;\r
 \r
+import org.eclipse.core.runtime.jobs.Job;\r
 import org.eclipse.jface.viewers.IStructuredSelection;\r
 import org.eclipse.swt.widgets.Combo;\r
 import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.progress.IProgressConstants;\r
 \r
 import eu.etaxonomy.cdm.io.csv.caryophyllales.out.CsvNameExportConfigurator;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
@@ -59,15 +61,23 @@ public class CsvNameExportWizard extends AbstractExportWizard<CsvNameExportConfi
         */\r
        @Override\r
        public boolean performFinish() {\r
-               String urlString = page.getFolderText() + File.separator\r
-                               + page.getExportFileName();\r
-\r
-               final Combo combo = page.getCombo();\r
-               \r
-               configurator.setDestination(new File(urlString));\r
-\r
-               CdmStore.getExportManager().run(configurator);\r
-\r
+           String urlString = page.getFolderText() + File.separator\r
+                   + page.getExportFileName();\r
+\r
+           final Combo combo = page.getCombo();\r
+\r
+           if(CdmStore.getCurrentSessionManager().isRemoting()) {\r
+               // create job\r
+               Job job = CdmStore.getExportManager().createIOServiceJob(configurator, new File(urlString));\r
+               // configure the job\r
+               job.setProperty(IProgressConstants.KEEP_PROPERTY, true);\r
+               job.setUser(true);\r
+               // schedule job\r
+               job.schedule();\r
+           } else {\r
+               configurator.setDestination(new File(urlString));\r
+               CdmStore.getExportManager().run(configurator);\r
+           }\r
                return true;\r
        }\r
 \r
index 81e8105821b0fa8d2c726dedf8bf8dde62e583c2..61905f31f057bfb22947f96fbb3b96f045bbccce 100644 (file)
@@ -5,17 +5,19 @@ import java.util.HashSet;
 import java.util.List;\r
 import java.util.UUID;\r
 \r
+import org.eclipse.core.runtime.jobs.Job;\r
 import org.eclipse.jface.viewers.IStructuredSelection;\r
 import org.eclipse.swt.widgets.Combo;\r
 import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.progress.IProgressConstants;\r
 \r
 import eu.etaxonomy.cdm.io.csv.caryophyllales.out.CsvNameExportConfigurator;\r
 import eu.etaxonomy.cdm.model.taxon.Classification;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
 \r
 public class CsvPrintExportWizard extends CsvNameExportWizard{\r
-       \r
-       \r
+\r
+\r
        private final String description = "Export the contents of the currently selected database into Semicolon Separated Value format.";\r
        @Override\r
        public void init(IWorkbench workbench, IStructuredSelection selection) {\r
@@ -25,11 +27,11 @@ public class CsvPrintExportWizard extends CsvNameExportWizard{
 \r
        @Override\r
        public CsvNameExportConfigurator getConfigurator() {\r
-               \r
+\r
                return configurator;\r
        }\r
 \r
-       \r
+\r
 \r
        /*\r
         * (non-Javadoc)\r
@@ -72,17 +74,26 @@ public class CsvPrintExportWizard extends CsvNameExportWizard{
                                set.add(c.getUuid());\r
                            }\r
                        }\r
-                      \r
+\r
                        configurator.setHasHeaderLines(true);\r
-                       \r
+\r
                    }\r
-               } else{         \r
+               } else{\r
                        configurator.setClassificationUUID(listClassifications.get(0).getUuid());\r
                }\r
-               configurator.setDestination(new File(urlString));\r
-\r
-               CdmStore.getExportManager().run(configurator);\r
 \r
+               if(CdmStore.getCurrentSessionManager().isRemoting()) {\r
+                   // create job\r
+                   Job job = CdmStore.getExportManager().createIOServiceJob(configurator, new File(urlString));\r
+                   // configure the job\r
+                   job.setProperty(IProgressConstants.KEEP_PROPERTY, true);\r
+                   job.setUser(true);\r
+                   // schedule job\r
+                   job.schedule();\r
+               } else {\r
+                   configurator.setDestination(new File(urlString));\r
+                   CdmStore.getExportManager().run(configurator);\r
+               }\r
                return true;\r
        }\r
 \r
index 3ca24a788f303bd812c5455e5a1f10bbb2a75de7..00a9c1bc6f2623c14c784c577c827770318e25c5 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 /**
 * Copyright (C) 2007 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.
 */
@@ -13,8 +13,10 @@ package eu.etaxonomy.taxeditor.io.wizard;
 import java.io.File;
 import java.net.URI;
 
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.progress.IProgressConstants;
 
 import eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -36,11 +38,12 @@ public class JaxbExportWizard extends AbstractExportWizard<JaxbExportConfigurato
         * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
         */
        /** {@inheritDoc} */
-       public void init(IWorkbench workbench, IStructuredSelection selection) {
+       @Override
+    public void init(IWorkbench workbench, IStructuredSelection selection) {
                this.setWindowTitle("JAXB Export");
                this.configurator = CdmStore.getExportManager().JaxbConfigurator();
        }
-       
+
        /* (non-Javadoc)
         * @see org.eclipse.jface.wizard.Wizard#performFinish()
         */
@@ -48,12 +51,21 @@ public class JaxbExportWizard extends AbstractExportWizard<JaxbExportConfigurato
        @Override
        public boolean performFinish() {
                boolean performFinish = false;
-               URI urlString;
-               File savePath = new File(page.getFolderText() + File.separator + page.getExportFileName());
-               urlString = savePath.toURI();
-               //orig: urlString = new URI(page.getFolderText() + File.separator + page.getExportFileName());
+
+               File exportFile = new File(page.getFolderText() + File.separator + page.getExportFileName());
+               URI urlString = exportFile.toURI();
                configurator.setDestination(urlString);
-               CdmStore.getExportManager().run(configurator);
+               if(CdmStore.getCurrentSessionManager().isRemoting()) {
+                   // create job
+                   Job job = CdmStore.getExportManager().createIOServiceJob(configurator, exportFile);
+                   // configure the job
+                   job.setProperty(IProgressConstants.KEEP_PROPERTY, true);
+                   job.setUser(true);
+                   // schedule job
+                   job.schedule();
+               } else {
+               CdmStore.getExportManager().run(configurator);
+               }
                performFinish = true;
                return performFinish;
        }
@@ -65,7 +77,7 @@ public class JaxbExportWizard extends AbstractExportWizard<JaxbExportConfigurato
        @Override
        public void addPages() {
                super.addPages();
-                               
+
                page = ExportToFileDestinationWizardPage.Jaxb();
                addPage(page);
        }
@@ -78,6 +90,6 @@ public class JaxbExportWizard extends AbstractExportWizard<JaxbExportConfigurato
        public JaxbExportConfigurator getConfigurator() {
                return configurator;
        }
-       
+
 
 }
index c6eb0787ba710544d51b349a2461fead6ecb7e9b..379a59f1ae1b89ea1fc0fbe421e67091f629fcc5 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 /**
 * Copyright (C) 2007 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.
 */
@@ -12,8 +12,10 @@ package eu.etaxonomy.taxeditor.io.wizard;
 
 import java.io.File;
 
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.progress.IProgressConstants;
 
 import eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -28,9 +30,9 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
 public class SddExportWizard extends AbstractExportWizard<SDDExportConfigurator> {
 
        private ExportToFileDestinationWizardPage page;
-       
+
        private SDDExportConfigurator configurator;
-       
+
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.io.wizard.AbstractExportWizard#getConfigurator()
         */
@@ -46,13 +48,21 @@ public class SddExportWizard extends AbstractExportWizard<SDDExportConfigurator>
        /** {@inheritDoc} */
        @Override
        public boolean performFinish() {
-               File file = new File(page.getFolderText() + File.separator + page.getExportFileName());
-               
-               configurator.setDestination(file);
-               
-               CdmStore.getExportManager().run(configurator);
-               
-               return true;
+           File file = new File(page.getFolderText() + File.separator + page.getExportFileName());
+
+           if(CdmStore.getCurrentSessionManager().isRemoting()) {
+               // create job
+               Job job = CdmStore.getExportManager().createIOServiceJob(configurator, file);
+               // configure the job
+               job.setProperty(IProgressConstants.KEEP_PROPERTY, true);
+               job.setUser(true);
+               // schedule job
+               job.schedule();
+           } else {
+               configurator.setDestination(file);
+               CdmStore.getExportManager().run(configurator);
+           }
+           return true;
        }
 
        /*
@@ -63,16 +73,17 @@ public class SddExportWizard extends AbstractExportWizard<SDDExportConfigurator>
        @Override
        public void addPages() {
                super.addPages();
-               
+
                page = ExportToFileDestinationWizardPage.Sdd();
                addPage(page);
        }
-       
+
        /* (non-Javadoc)
         * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
         */
        /** {@inheritDoc} */
-       public void init(IWorkbench workbench, IStructuredSelection selection) {                
+       @Override
+    public void init(IWorkbench workbench, IStructuredSelection selection) {
                this.setWindowTitle("SDD Export");
                this.configurator = CdmStore.getExportManager().SddConfigurator();
        }
index e368a6b061b808b9a0e93b13ab8779aa62b002da..59a9ad11ce5446cf723f89f5d20cfc1dccd39146 100644 (file)
@@ -9,6 +9,7 @@
 package eu.etaxonomy.taxeditor.httpinvoker;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.net.URL;
@@ -67,8 +68,8 @@ public abstract class BaseRemotingTest extends UnitilsJUnit4 {
     public static final Resource SERVER_PROPERTIES_FILE =
             new ClassPathResource("server.properties");
 
-    public static final Resource EDITOR_DATASOURCES_FILE =
-            new ClassPathResource(".cdmLibrary/writableResources/cdm.datasources.xml");
+//    public static final Resource EDITOR_DATASOURCES_FILE =
+//            new ClassPathResource(".cdmLibrary/writableResources/cdm.datasources.xml");
 
     //private static CdmApplicationRemoteController remoteApplicationController;
     private static ICdmRemoteSource cdmRemoteSource;
@@ -90,23 +91,16 @@ public abstract class BaseRemotingTest extends UnitilsJUnit4 {
     @BeforeClass
     public static void initializeBaseRemotingTest() {
 
-        //NOTE: Run this the cdmTest H2 DB whenever it needs to be
-        //      recreated e.g. after a model change
         DatabaseUnitils.disableConstraints();
 
         try {
             String userHomeDirPath;
             Bundle bundle = Platform.getBundle("eu.etaxonomy.taxeditor.test");
-            // if bundle is null then we are running as junit test in eclipse
-            if(bundle == null) {
-                userHomeDirPath = EDITOR_DATASOURCES_FILE.getFile().getParentFile().getParentFile().getParent();
-            } else {
-                // ... else we are running in maven which requires loading the dir via the
-                // classpath bundle
-                URL userHomeDirURL = bundle.getEntry("src/test/resources");
-                File userHomeDir = new File(FileLocator.resolve(userHomeDirURL).toURI());
-                userHomeDirPath = userHomeDir.getAbsolutePath();
-            }
+
+            URL userHomeDirURL = bundle.getEntry("src/test/resources");
+            File userHomeDir = new File(FileLocator.resolve(userHomeDirURL).toURI());
+            userHomeDirPath = userHomeDir.getAbsolutePath();
+
 
 
             logger.info("Setting user.home to " + userHomeDirPath);
@@ -116,7 +110,10 @@ public abstract class BaseRemotingTest extends UnitilsJUnit4 {
 
 
             Properties prop = new Properties();
-            InputStream inputStream = SERVER_PROPERTIES_FILE.getInputStream();
+
+            URL serverPropertiesURL = bundle.getEntry("src/test/resources/server.properties");
+            File serverPropertiesFile = new File(FileLocator.resolve(serverPropertiesURL).toURI());
+            InputStream inputStream = new FileInputStream(serverPropertiesFile);
 
             if (inputStream != null) {
                 prop.load(inputStream);
diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/IOServiceTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/IOServiceTest.java
new file mode 100644 (file)
index 0000000..89d04c8
--- /dev/null
@@ -0,0 +1,162 @@
+// $Id$
+/**
+* Copyright (C) 2015 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.service;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.List;
+import java.util.UUID;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.unitils.dbunit.annotation.DataSet;
+
+import eu.etaxonomy.cdm.api.application.CdmApplicationState;
+import eu.etaxonomy.cdm.io.common.ExportResult;
+import eu.etaxonomy.cdm.io.csv.caryophyllales.out.CsvNameExportConfigurator;
+import eu.etaxonomy.cdm.io.csv.redlist.demo.CsvDemoExportConfigurator;
+import eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator;
+import eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator;
+import eu.etaxonomy.cdm.io.service.IIOService;
+import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest;
+
+/**
+ * @author cmathew
+ * @date 31 Jul 2015
+ *
+ */
+@DataSet
+public class IOServiceTest extends BaseRemotingTest {
+
+    private final IIOService ioService = CdmApplicationState.getIOService();
+
+    @Test
+    public void exportJaxbTest() {
+        JaxbExportConfigurator config = JaxbExportConfigurator.NewInstance(null, null);
+        ExportResult result = ioService.export(config);
+        List<byte[]> dataList = result.getExportData();
+        Assert.assertEquals(1, dataList.size());
+        byte[] exportData = dataList.get(0);
+        String savePath = "target/exportjaxb.xml";
+        FileOutputStream stream = null;
+        try {
+            stream = new FileOutputStream(savePath);
+            stream.write(exportData);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if(stream != null) {
+                    stream.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+    }
+
+    @Test
+    public void exportSDDTest() {
+        SDDExportConfigurator config = SDDExportConfigurator.NewInstance(null, null, null);
+        ExportResult result = ioService.export(config);
+        List<byte[]> dataList = result.getExportData();
+        Assert.assertEquals(1, dataList.size());
+        byte[] exportData = dataList.get(0);
+        String savePath = "target/exportsdd.xml";
+        FileOutputStream stream = null;
+        try {
+            stream = new FileOutputStream(savePath);
+            stream.write(exportData);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if(stream != null) {
+                    stream.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Test
+    public void exportCSVTest() {
+        HashSet<UUID> set = new HashSet<UUID>();
+        set.add(UUID.fromString("0c2b5d25-7b15-4401-8b51-dd4be0ee5cab"));
+        CsvDemoExportConfigurator config = CsvDemoExportConfigurator.NewInstance(null, null);
+        config.setClassificationUuids(set);
+        config.setDoTaxa(true);
+        config.setHasHeaderLines(true);
+        config.setClassification(true);
+        config.setTaxonName(true);
+        config.setAuthor(true);
+        config.setRank(true);
+        config.setLastChange(true);
+
+        ExportResult result = ioService.export(config);
+        List<byte[]> dataList = result.getExportData();
+        Assert.assertEquals(1, dataList.size());
+        byte[] exportData = dataList.get(0);
+        String savePath = "target/exportcsv.xml";
+        saveToFile(savePath, exportData);
+    }
+
+    @Test
+    public void exportCSVNameTest() {
+        CsvNameExportConfigurator config = CsvNameExportConfigurator.NewInstance(null,null);
+        ExportResult result = ioService.export(config);
+        List<byte[]> dataList = result.getExportData();
+        Assert.assertEquals(1, dataList.size());
+        byte[] exportData = dataList.get(0);
+        String savePath = "target/exportcsvname.xml";
+        saveToFile(savePath, exportData);
+    }
+
+    @Test
+    public void exportCSVPrintTest() {
+        CsvNameExportConfigurator config = CsvNameExportConfigurator.NewInstance(null,null);
+        config.setNamesOnly(false);
+        config.setClassificationUUID(UUID.fromString("0c2b5d25-7b15-4401-8b51-dd4be0ee5cab"));
+        ExportResult result = ioService.export(config);
+        List<byte[]> dataList = result.getExportData();
+        Assert.assertEquals(1, dataList.size());
+        byte[] exportData = dataList.get(0);
+        String savePath = "target/exportcsvprint.xml";
+        saveToFile(savePath, exportData);
+    }
+
+    private static void saveToFile(String filePath, byte[] data) {
+        FileOutputStream stream = null;
+        try {
+            stream = new FileOutputStream(filePath);
+            stream.write(data);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if(stream != null) {
+                    stream.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/service/IOServiceTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/service/IOServiceTest.xml
new file mode 100644 (file)
index 0000000..b0afec0
--- /dev/null
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+  generated by Jailer 4.3, Fri Jun 19 09:13:03 CEST 2015 from cmathew@cmbgbm-t530
+  
+  Extraction Model:  all rows from Classification (extractionmodel/by-example/SbE-Classification-09-10-20-259.csv)
+  Database URL:      jdbc:mysql://127.0.0.1:3306/local-cyprus
+  Database User:     root
+  
+  Exported Rows:     67
+      Classification                 1
+      DescriptionBase                22
+      TaxonBase                      14
+      TaxonNameBase                  14
+      TaxonNode                      16
+  
+--><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="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"/>
+  <TaxonNode id="714" created="2010-12-21 15:09:48.0" uuid="b85b5b78-6760-409f-ac91-bb89e95ff2a1" countchildren="0"   classification_id="10" parent_id="715" taxon_id="812" treeIndex="#t10#4032#49#48#715#714#" sortIndex="0"/>
+  <TaxonNode id="715" created="2010-12-21 15:09:48.0" uuid="91698cec-615f-4472-9002-feda1a6acded" countchildren="2"   classification_id="10" parent_id="48" taxon_id="814" treeIndex="#t10#4032#49#48#715#" sortIndex="2"/>
+  <TaxonNode id="716" created="2010-12-21 15:09:48.0" uuid="6ad8e9e2-f5f6-41ad-aa30-f62a903650db" countchildren="0"   classification_id="10" parent_id="715" taxon_id="815" treeIndex="#t10#4032#49#48#715#716#" sortIndex="1"/>
+  <TaxonNode id="828" created="2010-12-21 15:09:49.0" uuid="786622ba-cb2c-47f4-9eeb-65a6ebb7122b" countchildren="0"   classification_id="10" parent_id="829" taxon_id="946" treeIndex="#t10#4032#49#48#829#828#" sortIndex="0"/>
+  <TaxonNode id="829" created="2010-12-21 15:09:49.0" uuid="4fe03763-b966-4361-8334-352f6f777588" countchildren="1"   classification_id="10" parent_id="48" taxon_id="948" treeIndex="#t10#4032#49#48#829#" sortIndex="3"/>
+  <TaxonNode id="1915" created="2010-12-21 15:09:57.0" uuid="99f03b56-67cd-4e01-9ceb-2362d48f9d07" countchildren="0"   classification_id="10" parent_id="1916" taxon_id="2203" treeIndex="#t10#4032#49#48#1916#1915#" sortIndex="0"/>
+  <TaxonNode id="1916" created="2010-12-21 15:09:57.0" uuid="d8998200-500f-4312-90f4-2b60e6fd3a78" countchildren="1"   classification_id="10" parent_id="48" taxon_id="2205" treeIndex="#t10#4032#49#48#1916#" sortIndex="4"/>
+  <TaxonNode id="2354" created="2010-12-21 15:10:00.0" uuid="b8439f51-6b96-445a-b401-7a836ba1cf58" countchildren="0"   classification_id="10" parent_id="2355" taxon_id="2737" treeIndex="#t10#4032#49#48#2355#2354#" sortIndex="0"/>
+  <TaxonNode id="2355" created="2010-12-21 15:10:00.0" uuid="6da4e5b6-ebc3-4c46-bdce-24161b7bd0e2" countchildren="1"   classification_id="10" parent_id="48" taxon_id="2738" treeIndex="#t10#4032#49#48#2355#" sortIndex="5"/>
+  <TaxonNode id="4032" created="2014-01-16 10:24:29.0" uuid="29b3fd3f-29b4-4011-ab12-9c1ad1607dbd" countchildren="1" classification_id="10" treeIndex="#t10#4032#"/>
+
+  <TaxonNameBase DTYPE="BotanicalName" id="48" created="2010-12-21 15:09:43.0" uuid="7aceb517-2b91-46b9-a5a2-88b7e0fb3230" protectedtitlecache="false" titleCache="Adiantum capillus-veneris L." fullTitleCache="Adiantum capillus-veneris L." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="L." binomhybrid="false" genusoruninomial="Adiantum" hybridformula="false" monomhybrid="false" namecache="Adiantum capillus-veneris" protectedauthorshipcache="false" protectednamecache="false" specificepithet="capillus-veneris" trinomhybrid="false" anamorphic="false"    rank_id="778" />
+  <TaxonNameBase DTYPE="BotanicalName" id="49" created="2010-12-21 15:09:43.0" uuid="079fff38-ff2d-426b-a49e-70b0f1db6c31" protectedtitlecache="false" titleCache="Pteridophyta" fullTitleCache="Pteridophyta" parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="" binomhybrid="false" genusoruninomial="Pteridophyta" hybridformula="false" monomhybrid="false" namecache="Pteridophyta" protectedauthorshipcache="false" protectednamecache="false" trinomhybrid="false" anamorphic="false"    rank_id="810"/>
+  <TaxonNameBase DTYPE="BotanicalName" id="51" created="2010-12-21 15:09:43.0" uuid="c8af63e0-7bd4-4fad-aa2d-3777cbe1210a" protectedtitlecache="false" titleCache="Adiantum" fullTitleCache="Adiantum" parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="" binomhybrid="false" genusoruninomial="Adiantum" hybridformula="false" monomhybrid="false" namecache="Adiantum" protectedauthorshipcache="false" protectednamecache="false" trinomhybrid="false" anamorphic="false"    rank_id="788"/>
+  <TaxonNameBase DTYPE="BotanicalName" id="264" created="2010-12-21 15:09:45.0" uuid="b976da6a-dd84-4fcd-9a1b-9847afba1da2" protectedtitlecache="false" titleCache="Anogramma leptophylla (L.) Link" fullTitleCache="Anogramma leptophylla (L.) Link" parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="(L.) Link" binomhybrid="false" genusoruninomial="Anogramma" hybridformula="false" monomhybrid="false" namecache="Anogramma leptophylla" protectedauthorshipcache="false" protectednamecache="false" specificepithet="leptophylla" trinomhybrid="false" anamorphic="false"    rank_id="778"  />
+  <TaxonNameBase DTYPE="BotanicalName" id="265" created="2010-12-21 15:09:45.0" uuid="c7f1db22-20fb-4eeb-810b-d37c5593b95d" protectedtitlecache="false" titleCache="Anogramma" fullTitleCache="Anogramma" parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="" binomhybrid="false" genusoruninomial="Anogramma" hybridformula="false" monomhybrid="false" namecache="Anogramma" protectedauthorshipcache="false" protectednamecache="false" trinomhybrid="false" anamorphic="false"    rank_id="788"/>
+  <TaxonNameBase DTYPE="BotanicalName" id="812" created="2010-12-21 15:09:48.0" uuid="16450a2d-2085-471f-804a-defcd43c03e4" protectedtitlecache="false" titleCache="Cheilanthes acrostica (Balb.) Tod." fullTitleCache="Cheilanthes acrostica (Balb.) Tod." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="(Balb.) Tod." binomhybrid="false" genusoruninomial="Cheilanthes" hybridformula="false" monomhybrid="false" namecache="Cheilanthes acrostica" protectedauthorshipcache="false" protectednamecache="false" specificepithet="acrostica" trinomhybrid="false" anamorphic="false"    rank_id="778"  />
+  <TaxonNameBase DTYPE="BotanicalName" id="814" created="2010-12-21 15:09:48.0" uuid="bbb1c5be-5a0c-45e2-b8af-f37a80ccf858" protectedtitlecache="false" titleCache="Cheilanthes" fullTitleCache="Cheilanthes" parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="" binomhybrid="false" genusoruninomial="Cheilanthes" hybridformula="false" monomhybrid="false" namecache="Cheilanthes" protectedauthorshipcache="false" protectednamecache="false" trinomhybrid="false" anamorphic="false"    rank_id="788"/>
+  <TaxonNameBase DTYPE="BotanicalName" id="815" created="2010-12-21 15:09:48.0" uuid="f04a9283-f856-4d28-b469-4a222472862b" protectedtitlecache="false" titleCache="Cheilanthes maderensis Lowe" fullTitleCache="Cheilanthes maderensis Lowe" parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="Lowe" binomhybrid="false" genusoruninomial="Cheilanthes" hybridformula="false" monomhybrid="false" namecache="Cheilanthes maderensis" protectedauthorshipcache="false" protectednamecache="false" specificepithet="maderensis" trinomhybrid="false" anamorphic="false"    rank_id="778" />
+  <TaxonNameBase DTYPE="BotanicalName" id="946" created="2010-12-21 15:09:49.0" uuid="e30ef44b-52e4-41ff-a68d-9912d3c537f1" protectedtitlecache="false" titleCache="Cosentinia vellea (Aiton) Tod." fullTitleCache="Cosentinia vellea (Aiton) Tod." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="(Aiton) Tod." binomhybrid="false" genusoruninomial="Cosentinia" hybridformula="false" monomhybrid="false" namecache="Cosentinia vellea" protectedauthorshipcache="false" protectednamecache="false" specificepithet="vellea" trinomhybrid="false" anamorphic="false"    rank_id="778"  />
+  <TaxonNameBase DTYPE="BotanicalName" id="948" created="2010-12-21 15:09:49.0" uuid="21fda99e-0425-4f29-b7b2-196f8a51b054" protectedtitlecache="false" titleCache="Cosentinia" fullTitleCache="Cosentinia" parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="" binomhybrid="false" genusoruninomial="Cosentinia" hybridformula="false" monomhybrid="false" namecache="Cosentinia" protectedauthorshipcache="false" protectednamecache="false" trinomhybrid="false" anamorphic="false"    rank_id="788"/>
+  <TaxonNameBase DTYPE="BotanicalName" id="2203" created="2010-12-21 15:09:57.0" uuid="8fe0bb4b-7687-4d32-8ff2-94e690980f81" protectedtitlecache="false" titleCache="Notholaena marantae (L.) Desv." fullTitleCache="Notholaena marantae (L.) Desv." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="(L.) Desv." binomhybrid="false" genusoruninomial="Notholaena" hybridformula="false" monomhybrid="false" namecache="Notholaena marantae" protectedauthorshipcache="false" protectednamecache="false" specificepithet="marantae" trinomhybrid="false" anamorphic="false"    rank_id="778"  />
+  <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"/>
+
+  <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="51" created="2010-12-21 15:09:43.0" uuid="233cac41-bb05-4925-bb9e-ab0bdf330973" protectedtitlecache="false" titleCache="Adiantum sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="51"  publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="264" created="2011-03-01 20:11:27.0" uuid="d679c5d0-53b3-40fc-97e1-0646aad7ed23" protectedtitlecache="false" titleCache="Anogramma leptophylla (L.) Link sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="264"  publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="265" created="2010-12-21 15:09:45.0" uuid="1fc1d927-1155-4282-a9f5-f07202f79ace" protectedtitlecache="false" titleCache="Anogramma sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="265"  publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="812" created="2011-03-01 20:11:29.0" uuid="e40854d7-143f-4054-b229-6ed4cedb4bff" protectedtitlecache="false" titleCache="Cheilanthes acrostica (Balb.) Tod. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="812"  publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="814" created="2010-12-21 15:09:48.0" uuid="433ad11a-b931-49a4-8128-d6f4d454914a" protectedtitlecache="false" titleCache="Cheilanthes sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="814"  publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="815" created="2010-12-21 15:09:48.0" uuid="7ea2c74a-f2b2-41f6-acdf-1ca35f5d03f8" protectedtitlecache="false" titleCache="Cheilanthes maderensis Lowe sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="815"  publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="946" created="2011-03-01 20:11:30.0" uuid="ba21b018-97d2-42d7-af6c-5e8db8e495ff" protectedtitlecache="false" titleCache="Cosentinia vellea (Aiton) Tod. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="946"  publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="948" created="2010-12-21 15:09:49.0" uuid="a2768f6d-80f2-4e0c-a6e3-99b7a9f3bc9d" protectedtitlecache="false" titleCache="Cosentinia sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"   name_id="948"  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"/>
+
+  <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="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"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="521" created="2010-12-21 15:09:49.0" uuid="2d672585-0f35-42f8-9923-dfd5545e6369" updated="2011-03-01 19:20:48.0" protectedtitlecache="false" titleCache="Taxon description for Cosentinia vellea (Aiton) Tod." imagegallery="false"   taxon_id="946"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="1234" created="2010-12-21 15:09:57.0" uuid="a8a734c2-122b-4d5b-9c89-a852f4ab4661" updated="2011-03-01 19:20:53.0" protectedtitlecache="false" titleCache="Taxon description for Notholaena marantae (L.) Desv." imagegallery="false"   taxon_id="2203"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="1524" created="2010-12-21 15:10:00.0" uuid="c4e66d46-e4fb-4da2-a432-3f1cf5353b81" updated="2011-03-01 19:20:55.0" protectedtitlecache="false" titleCache="Taxon description for Pteris vittata L." imagegallery="false"   taxon_id="2737"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="4567" created="2011-03-01 19:20:45.0" uuid="dd0f7395-6162-4ce4-8ece-774011b09325" updated="2011-03-01 20:11:26.0" protectedtitlecache="true" titleCache="Cyprus Distributions Excel Import for Adiantum capillus-veneris L. sec. Cyprus" imagegallery="false" taxon_id="48"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="4627" created="2011-03-01 19:20:46.0" uuid="34266202-eb5d-41ec-a0b2-da56deb11cc7" updated="2011-03-01 20:11:27.0" protectedtitlecache="true" titleCache="Cyprus Distributions Excel Import for Anogramma leptophylla (L.) Link sec. Cyprus" imagegallery="false" taxon_id="264"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="4798" created="2011-03-01 19:20:48.0" uuid="504b0178-39e6-4c79-8e33-ca00b0662f27" updated="2011-03-01 20:11:29.0" protectedtitlecache="true" titleCache="Cyprus Distributions Excel Import for Cheilanthes acrostica (Balbis) Tod. sec. Cyprus" imagegallery="false" taxon_id="812"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="4840" created="2011-03-01 19:20:48.0" uuid="73396d11-5d35-43fb-8b15-4d472bdcdd43" updated="2011-03-01 20:11:30.0" protectedtitlecache="true" titleCache="Cyprus Distributions Excel Import for Cosentinia vellea (Aiton) Tod. sec. Cyprus" imagegallery="false" taxon_id="946"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="5409" created="2011-03-01 19:20:55.0" uuid="64a797b2-7f92-4012-a4f5-d76f8aaeb6b4" updated="2011-03-01 20:11:39.0" protectedtitlecache="true" titleCache="Cyprus Distributions Excel Import for Pteris vittata L. sec. Cyprus" imagegallery="false" taxon_id="2737"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="5974" created="2011-03-01 19:20:53.0" uuid="71872861-8229-4cab-8042-b75dfa0e3f63" updated="2011-03-01 20:11:36.0" protectedtitlecache="true" titleCache="Cyprus Distributions Excel Import for Notholaena marantae (L.) Desv. sec. Cyprus" imagegallery="false" taxon_id="2203"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="11766" created="2012-07-30 15:39:44.0" uuid="6b4be8a2-ea86-4815-bd31-b022055a90f2" protectedtitlecache="false" titleCache="Image gallery for Pteris vittata L." imagegallery="true"   taxon_id="2737"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="12353" created="2012-12-03 12:21:48.0" uuid="b8d3a151-032e-48d9-9191-d7b8fb1fe1a0" protectedtitlecache="false" titleCache="Image gallery for Cheilanthes acrostica (Balbis) Tod." imagegallery="true"   taxon_id="812"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="12713" created="2013-02-10 21:43:33.0" uuid="61fbdc1b-80bf-4aea-b6cb-8f4d466bd923" protectedtitlecache="false" titleCache="Image gallery for Adiantum capillus-veneris L." imagegallery="true"   taxon_id="48"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="13728" created="2014-02-28 19:20:29.0" uuid="53b3125e-2a43-4433-a4dd-50dd9a4cf92c" updated="2014-02-28 19:20:29.0" protectedtitlecache="true" titleCache="Import from Cyprus Excel Altitude Import" imagegallery="false" taxon_id="48"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="13817" created="2014-02-28 19:20:34.0" uuid="7b108193-e689-417a-bcab-adaf6c49d532" updated="2014-02-28 19:20:34.0" protectedtitlecache="true" titleCache="Import from Cyprus Excel Altitude Import" imagegallery="false" taxon_id="264"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="14043" created="2014-02-28 19:20:58.0" uuid="de29cc97-a160-4783-b996-b929157335d5" updated="2014-02-28 19:20:58.0" protectedtitlecache="true" titleCache="Import from Cyprus Excel Altitude Import" imagegallery="false" taxon_id="812"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="14101" created="2014-02-28 19:21:07.0" uuid="815336d3-19d6-493d-9ea4-bcb320d1b922" updated="2014-02-28 19:21:08.0" protectedtitlecache="true" titleCache="Import from Cyprus Excel Altitude Import" imagegallery="false" taxon_id="946"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="14658" created="2014-02-28 19:23:51.0" uuid="ce4068f8-17b0-46e2-9fbb-e8c16efb7255" updated="2014-02-28 19:23:51.0" protectedtitlecache="true" titleCache="Import from Cyprus Excel Altitude Import" imagegallery="false" taxon_id="2203"/>
+  <DescriptionBase DTYPE="TaxonDescription" id="14864" created="2014-02-28 19:25:21.0" uuid="2d55f445-8e72-43d3-976a-133828e89599" updated="2014-02-28 19:25:21.0" protectedtitlecache="true" titleCache="Import from Cyprus Excel Altitude Import" imagegallery="false" taxon_id="2737"/>
+
+  <SynonymRelationship/>
+  
+  <LanguageString id="10"/>
+</dataset>