Project

General

Profile

Download (4.99 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
 * Copyright (C) 2015 EDIT
4
 * European Distributed Institute of Taxonomy
5
 * http://www.e-taxonomy.eu
6
 *
7
 * The contents of this file are subject to the Mozilla Public License Version 1.1
8
 * See LICENSE.TXT at the top of this package for the full license terms.
9
 */
10
package eu.etaxonomy.cdm.io.service;
11

    
12
import java.io.ByteArrayInputStream;
13
import java.io.FileOutputStream;
14
import java.io.IOException;
15
import java.io.Serializable;
16
import java.nio.file.Files;
17
import java.nio.file.Path;
18
import java.util.UUID;
19

    
20
import org.springframework.beans.factory.annotation.Autowired;
21
import org.springframework.beans.factory.annotation.Qualifier;
22
import org.springframework.stereotype.Service;
23
import org.springframework.transaction.annotation.Transactional;
24

    
25
import eu.etaxonomy.cdm.api.service.ProgressMonitorManager;
26
import eu.etaxonomy.cdm.api.service.util.RemotingProgressMonitorThread;
27
import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor;
28
import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitor;
29
import eu.etaxonomy.cdm.io.common.CdmApplicationAwareDefaultExport;
30
import eu.etaxonomy.cdm.io.common.CdmApplicationAwareDefaultImport;
31
import eu.etaxonomy.cdm.io.common.ExportResult;
32
import eu.etaxonomy.cdm.io.common.IExportConfigurator;
33
import eu.etaxonomy.cdm.io.common.IExportConfigurator.TARGET;
34
import eu.etaxonomy.cdm.io.common.IImportConfigurator;
35
import eu.etaxonomy.cdm.io.common.IImportConfigurator.SOURCE_TYPE;
36
import eu.etaxonomy.cdm.io.common.ImportConfiguratorBase;
37
import eu.etaxonomy.cdm.io.common.ImportResult;
38

    
39
/**
40
 * @author cmathew
41
 * @date 31 Jul 2015
42
 *
43
 */
44
@Service
45
@Transactional(readOnly = false)
46
public class IOServiceImpl implements IIOService {
47

    
48
    @Autowired
49
    CdmApplicationAwareDefaultExport cdmExport;
50

    
51
    @Autowired
52
    @Qualifier("defaultImport")
53
    CdmApplicationAwareDefaultImport cdmImport;
54

    
55
    @Autowired
56
    ProgressMonitorManager<IRemotingProgressMonitor> progressMonitorManager;
57

    
58

    
59

    
60
    /* (non-Javadoc)
61
     * @see eu.etaxonomy.cdm.io.service.IExportService#export(eu.etaxonomy.cdm.io.common.IExportConfigurator)
62
     */
63
    @Override
64
    public ExportResult export(IExportConfigurator config) {
65
        config.setTarget(TARGET.EXPORT_DATA);
66
        return cdmExport.execute(config);
67
    }
68

    
69

    
70
    @Override
71
    public UUID monitImportData(final IImportConfigurator configurator, final byte[] importData, final SOURCE_TYPE type) {
72
        final IRemotingProgressMonitor monitor = new RemotingProgressMonitor();
73
        RemotingProgressMonitorThread monitThread = new RemotingProgressMonitorThread(monitor) {
74
            @Override
75
            public Serializable doRun(IRemotingProgressMonitor monitor) {
76
                configurator.setProgressMonitor(monitor);
77
                ImportResult result = importData(configurator, importData, type);
78
                for(byte[] report : result.getReports()) {
79
                    monitor.addReport(new String(report));
80
                }
81
                return result;
82
            }
83
        };
84
        UUID uuid = progressMonitorManager.registerMonitor(monitor);
85
        monitThread.setPriority(3);
86
        monitThread.start();
87
        return uuid;
88
    }
89

    
90
    @Override
91
    public ImportResult importData(IImportConfigurator configurator, byte[] importData, SOURCE_TYPE type) {
92
        ImportResult result;
93
        switch(type) {
94
        case URI:
95
            return importDataFromUri(configurator, importData);
96
        case INPUTSTREAM:
97
            return importDataFromInputStream(configurator,importData);
98
        default :
99
            throw new RuntimeException("Source type is not recongnised");
100
        }
101
    }
102

    
103
    @Override
104
    public ImportResult importDataFromUri(IImportConfigurator configurator, byte[] importData) {
105
        ImportResult result;
106

    
107
        ImportConfiguratorBase config = (ImportConfiguratorBase)configurator;
108
        String suffix = ".import";
109
        String prefix = "cdm-";
110
        FileOutputStream stream = null;
111

    
112
        try {
113
            Path tempFilePath = Files.createTempFile(prefix, suffix);
114
            stream = new FileOutputStream(tempFilePath.toFile());
115
            stream.write(importData);
116
            config.setSource(tempFilePath.toUri());
117
            result = cdmImport.execute(config);
118
            Files.delete(tempFilePath);
119
        } catch (Exception e) {
120
            throw new RuntimeException(e);
121
        } finally {
122
            if(stream != null) {
123
                try {
124
                    stream.close();
125
                } catch (IOException e) {
126
                    throw new RuntimeException(e);
127
                }
128
            }
129
        }
130
        return result;
131
    }
132

    
133
    @Override
134
    public ImportResult importDataFromInputStream(IImportConfigurator configurator, byte[] importData) {
135
        ImportConfiguratorBase config = (ImportConfiguratorBase)configurator;
136
        ImportResult result;
137
        try {
138
            config.setSource(new ByteArrayInputStream(importData));
139
            result = cdmImport.execute(config);
140
        } catch (Exception e) {
141
            throw new RuntimeException(e);
142
        }
143
        return result;
144
    }
145

    
146
}
(2-2/2)