Merge branch 'release/5.42.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / io / ExportManager.java
index 861ce1ec752585ae06512c9649e2131b387a18a4..00308aff988ecb11fdc93d64f2afd7d63c344c0d 100644 (file)
@@ -6,7 +6,6 @@
  * 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.BufferedWriter;
@@ -24,7 +23,8 @@ import java.util.UUID;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -35,10 +35,9 @@ import org.eclipse.swt.widgets.Display;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationState;
 import eu.etaxonomy.cdm.api.application.ICdmRepository;
-import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
 import eu.etaxonomy.cdm.io.cdmLight.CdmLightExportConfigurator;
-import eu.etaxonomy.cdm.io.common.CdmDefaultExport;
+import eu.etaxonomy.cdm.io.coldp.ColDpExportConfigurator;
 import eu.etaxonomy.cdm.io.common.ExportDataWrapper;
 import eu.etaxonomy.cdm.io.common.ExportResult;
 import eu.etaxonomy.cdm.io.common.ExportResultType;
@@ -48,7 +47,7 @@ import eu.etaxonomy.cdm.io.dwca.out.DwcaTaxExportConfigurator;
 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.event.EventUtility;
+import eu.etaxonomy.cdm.io.wfo.out.WfoBackboneExportConfigurator;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
@@ -58,139 +57,29 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 
 /**
- * <p>
- * ExportHandler class.
- * </p>
- *
  * @author n.hoffmann
  * @created Sep 11, 2009
- * @version 1.0
  */
-public class ExportManager extends AbstractIOManager<IExportConfigurator> implements IPostMoniteredOperationEnabled {
+public class ExportManager
+        extends AbstractIOManager<IExportConfigurator>
+        implements IPostMoniteredOperationEnabled {
 
-       private final String successMessage = "The export was successful";
+    private static final Logger logger = LogManager.getLogger();
 
-    private static final Logger logger = Logger.getLogger(ExportManager.class);
     /** Constant <code>DATE_FORMAT_NOW="yyyyMMddHHmm"</code> */
        public static final String DATE_FORMAT_NOW = "yyyyMMddHHmm";
-       /**
-        *
-        * @param applicationConfiguration
-        */
+
+       private final String successMessage = "The export was successful";
+
        private ExportManager(ICdmRepository applicationConfiguration) {
                super(applicationConfiguration);
        }
 
-       /**
-        * <p>
-        * NewInstance
-        * </p>
-        *
-        * @param applicationConfiguration
-        *            a
-        *            {@link eu.etaxonomy.cdm.api.application.CdmApplicationController}
-        *            object.
-        * @return a {@link eu.etaxonomy.taxeditor.io.ExportManager} object.
-        */
        public static ExportManager NewInstance(
                        ICdmRepository applicationConfiguration) {
                return new ExportManager(applicationConfiguration);
        }
 
-       /**
-        * <p>
-        * createIOJob
-        * </p>
-        *
-        * @param configurator
-        *            a {@link eu.etaxonomy.cdm.io.common.IExportConfigurator}
-        *            object.
-        * @return a {@link org.eclipse.core.runtime.jobs.Job} object.
-        */
-       @Override
-       protected Job createIOJob(final IExportConfigurator configurator) {
-
-               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.", 100);
-                               monitor.worked(10);
-
-                           /** see ticket # 4456 and */
-//                             display.asyncExec(new Runnable() {
-//
-//                                     @Override
-//                                     public void run() {
-//
-//                                         // terminate any open transactions
-//                                             IConversationEnabled activePart = (IConversationEnabled) StoreUtil
-//                                                             .getActivePage().getActivePart();
-//                                             activePart.getConversationHolder().commit(false);
-//                                     }
-//                             });
-
-//                             monitor.worked(10);
-
-                               CdmDefaultExport<IExportConfigurator> exporter = new CdmDefaultExport<IExportConfigurator>();
-                               configurator.setProgressMonitor(CdmProgressMonitorAdapter
-                                               .CreateSubMonitor(monitor, 80));
-                               exporter.setCdmAppController(applicationConfiguration);
-                               monitor.worked(10);
-
-                               try {
-                                       exporter.invoke(configurator);
-                                       monitor.worked(60);
-                               } catch (RuntimeException e) {
-                                       MessagingUtils.messageDialog("Error exporting data", this,
-                                                       "An error occurred while"
-                                                                       + "exporting to destination '"
-                                                                       + configurator.getDestinationNameString()
-                                                                       + "'.\n"
-                                                                       + "Please check error log for details.", e);
-                               }
-
-                               display.asyncExec(new Runnable() {
-
-                                       @Override
-                                       public void run() {
-                                               Object activePart = EventUtility.getActivePart();
-                                               if (activePart instanceof IConversationEnabled) {
-                                                       // terminate any open transactions
-                                                       IConversationEnabled conversationEnabled = (IConversationEnabled) activePart;
-                                                       // restarting transaction and committing it to
-                                                       // trigger
-                                                       // change listener
-                                                       // TODO verify correct behaviour
-
-                                                       try{
-                                                               conversationEnabled.getConversationHolder()
-                                                                       .startTransaction();
-
-                                                               conversationEnabled.getConversationHolder()
-                                                                       .commit();
-                                                       }catch(RuntimeException e){
-                                                               MessagingUtils.messageDialog("Error starting conversation handling", this, "" +
-                                                                               "Conversation Error: "+ e);
-                                                       }
-                                               }
-                                       }
-                               });
-                               monitor.worked(10);
-
-                               return Status.OK_STATUS;
-                       }
-
-
-               };
-
-               return job;
-       }
-
        public Job createIOServiceJob(final IExportConfigurator configurator, final File exportFile) {
            Assert.isNotNull(configurator, "Configuration may not be null");
 
@@ -205,7 +94,7 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> implem
                        IIOService ioService = CdmApplicationState.getIOService();
                        UUID uuid = ioService.monitExportData(configurator);
                        IRemotingProgressMonitor remotingMonitor;
-                       List<IFeedbackGenerator> feedBackGeneratorList = new ArrayList<IFeedbackGenerator>();
+                       List<IFeedbackGenerator> feedBackGeneratorList = new ArrayList<>();
                     try {
                         remotingMonitor = CdmStore.getProgressMonitorClientManager().pollMonitor("Export Data",
                                 uuid,
@@ -215,11 +104,11 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> implem
                                 subMonitor);
 
                     } catch (Exception ex) {
-                        return new Status(Status.ERROR, TaxeditorStorePlugin.PLUGIN_ID, "Operation Interrupted", ex);
+                        return new Status(IStatus.ERROR, TaxeditorStorePlugin.PLUGIN_ID, "Operation Interrupted", ex);
                     }
 
                        ExportResult result = (ExportResult)remotingMonitor.getResult();
-                       ExportDataWrapper data = result.getExportData();
+                       ExportDataWrapper<?> data = result.getExportData();
                        try{
                        if (result.getExportData().getType().equals(ExportResultType.BYTE_ARRAY) || result.getExportData().getType().equals(ExportResultType.LIST_BYTE_ARRAY)){
                            if (data.getExportData() instanceof byte[]){
@@ -235,7 +124,8 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> implem
                                 }
                            }else if (data.getExportData() instanceof List<?>){
                                 //TODO:This needs to be improved
-                               List<byte[]> exportData = (List<byte[]>)data.getExportData();
+                               @SuppressWarnings("unchecked")
+                                List<byte[]> exportData = (List<byte[]>)data.getExportData();
                                     if(exportData != null){
                                         FileOutputStream stream = new FileOutputStream(exportFile);
                                         Writer out = new BufferedWriter(new OutputStreamWriter(
@@ -248,10 +138,9 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> implem
                            }
 
                        } else if (result.getExportData().getType().equals(ExportResultType.MAP_BYTE_ARRAY)){
+                            @SuppressWarnings("unchecked")
                             Map<String, byte[]> resultMap = (Map<String, byte[]>)data.getExportData();
                             Set<String> keySet = resultMap.keySet();
-                            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
-                            Calendar cal = Calendar.getInstance();
                             String fileEnding = ".zip";
                             if (configurator instanceof DwcaTaxExportConfigurator){
                                DwcaTaxExportConfigurator dwcaConfig = (DwcaTaxExportConfigurator)configurator;
@@ -292,10 +181,7 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> implem
            };
            return job;
        }
-       /**
-        * @param jaxb
-        * @return
-        */
+
        private IIoConfigurator getConfigurator(TYPE type) {
                Assert.isNotNull(type, "Type should not be null");
 
@@ -310,34 +196,14 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> implem
                }
        }
 
-       /**
-        * <p>
-        * JaxbConfigurator
-        * </p>
-        *
-        * @return a {@link eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator} object.
-        */
        public final JaxbExportConfigurator JaxbConfigurator() {
                return (JaxbExportConfigurator) getConfigurator(TYPE.Jaxb);
        }
 
-       /**
-        * <p>
-        * SddConfigurator
-        * </p>
-        *
-        * @return a {@link eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator}
-        *         object.
-        */
        public final SDDExportConfigurator SddConfigurator() {
                return (SDDExportConfigurator) getConfigurator(TYPE.Sdd);
        }
 
-    /**
-     * @param configurator
-     * @param urlString
-     * @return
-     */
     public Job createIOServiceJob(CdmLightExportConfigurator configurator, String urlString) {
         Assert.isNotNull(configurator, "Configuration may not be null");
         final Display display = Display.getDefault();
@@ -354,7 +220,7 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> implem
                      configurator.setProgressMonitor(CdmProgressMonitorAdapter
                              .CreateSubMonitor(monitor, 80));
                      ExportResult result = ioService.export(configurator);
-                     ExportDataWrapper data = result.getExportData();
+                     ExportDataWrapper<?> data = result.getExportData();
                      try{
                          if (result.getExportData().getType().equals(ExportResultType.BYTE_ARRAY) || result.getExportData().getType().equals(ExportResultType.LIST_BYTE_ARRAY)){
                              byte[] exportData = (byte[])data.getExportData();
@@ -369,7 +235,8 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> implem
                                 stream.close();
                              }
                          } else if (result.getExportData().getType().equals(ExportResultType.MAP_BYTE_ARRAY)){
-                             Map<String, byte[]> resultMap = (Map<String, byte[]>)data.getExportData();
+                             @SuppressWarnings("unchecked")
+                            Map<String, byte[]> resultMap = (Map<String, byte[]>)data.getExportData();
                              Set<String> keySet = resultMap.keySet();
                              SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
                              Calendar cal = Calendar.getInstance();
@@ -395,7 +262,9 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> implem
                                      Writer out = new BufferedWriter(new OutputStreamWriter(
                                                        stream, "UTF8"));
                                      stream.write(fileData);
+                                     out.flush();
                                      stream.close();
+
                                  }
                                 }
                         }else{
@@ -430,33 +299,41 @@ public class ExportManager extends AbstractIOManager<IExportConfigurator> implem
             @Override
             public void run() {
                boolean isZip = false;
-               if (configurator instanceof CdmLightExportConfigurator){
-                       isZip = ((CdmLightExportConfigurator)configurator).isCreateZipFile();
+               String urlAddition = "";
+               if (configurator instanceof CdmLightExportConfigurator 
+                               || configurator instanceof ColDpExportConfigurator 
+                               || configurator instanceof WfoBackboneExportConfigurator){
+                       
+                       if (configurator instanceof CdmLightExportConfigurator) {
+                           isZip = ((CdmLightExportConfigurator)configurator).isCreateZipFile();
+                       }else if (configurator instanceof ColDpExportConfigurator){
+                           isZip = ((ColDpExportConfigurator)configurator).isCreateZipFile();
+                       }else if (configurator instanceof WfoBackboneExportConfigurator){
+                           isZip = ((WfoBackboneExportConfigurator)configurator).isCreateZipFile();
+                           if (isZip) {
+                               SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
+                            Calendar cal = Calendar.getInstance();
+                               urlAddition = File.separator + ((WfoBackboneExportConfigurator)configurator).getFamilyStr() + "_WFO_" + sdf.format(cal.getTime());
+                           }
+                       }
                 }
-                AbstractUtility.executeMoniteredExport("Export: " + configurator.getClass().getSimpleName(),
+                AbstractUtility.executeMoniteredExport(
+                               configurator.getUserFriendlyIOName() != null? configurator.getUserFriendlyIOName(): "Export",
                         uuid,
                         1000,
                         true,
                         ExportManager.this,
                         null,
-                        urlString,
+                        urlString+urlAddition,
                         isZip);
-
             }
         });
-
     }
 
        @Override
        public void postOperation(IRemotingProgressMonitor monitor) {
-                Display.getDefault().asyncExec(new Runnable() {
-
-                   @Override
-                   public void run() {
-                       CdmStore.getContextManager().notifyContextRefresh();
-                   }
-               });
-
+                Display.getDefault().asyncExec(()-> {
+                CdmStore.getContextManager().notifyContextRefresh();
+        });
        }
-
-}
+}
\ No newline at end of file