Project

General

Profile

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

    
11
import java.io.FileNotFoundException;
12
import java.io.InputStream;
13
import eu.etaxonomy.cdm.common.URI;
14
import java.util.ArrayList;
15
import java.util.Arrays;
16
import java.util.List;
17

    
18
import org.apache.poi.EncryptedDocumentException;
19
import org.apache.poi.ss.usermodel.Sheet;
20
import org.apache.poi.ss.usermodel.Workbook;
21
import org.apache.poi.ss.usermodel.WorkbookFactory;
22

    
23
import eu.etaxonomy.cdm.common.UriUtils;
24
import eu.etaxonomy.cdm.io.fact.in.FactExcelImportConfiguratorBase;
25

    
26
/**
27
 * @author a.mueller
28
 * @since 02.06.2020
29
 */
30
public class ExcelFormatAnalyzer<CONFIG extends FactExcelImportConfiguratorBase<?>> {
31

    
32
    private CONFIG config;
33

    
34
    private List<String> requiredWorksheets = new ArrayList<>();
35

    
36
    private List<String> requiredColumns = new ArrayList<>();
37

    
38
    private List<String> optionalColumns = new ArrayList<>();
39

    
40
    private List<String> optionalMultiColumns = new ArrayList<>();
41

    
42
    public ExcelFormatAnalyzer(CONFIG config,
43
            String[] requiredWorksheets,
44
            String[] requiredColumns,
45
            String[] optionalColumns,
46
            String[] optionalMultiColumns) {
47
        this.config = config;
48
        this.requiredWorksheets.addAll(Arrays.asList(requiredWorksheets));
49
        this.requiredColumns.addAll(Arrays.asList(requiredColumns));
50
        this.optionalColumns.addAll(Arrays.asList(optionalColumns));
51
        this.optionalMultiColumns.addAll(Arrays.asList(optionalMultiColumns));
52
    }
53

    
54
//******************* GETTER / SETTER ****************************/
55

    
56
    public List<String> getRequiredColumns() {
57
        return requiredColumns;
58
    }
59
    public void setRequiredColumns(List<String> requiredColumns) {
60
        this.requiredColumns = requiredColumns;
61
    }
62

    
63
    public List<String> getOptionalColumns() {
64
        return optionalColumns;
65
    }
66
    public void setOptionalColumns(List<String> optionalColumns) {
67
        this.optionalColumns = optionalColumns;
68
    }
69

    
70
    public List<String> getOptionalMultiColumns() {
71
        return optionalMultiColumns;
72
    }
73
    public void setOptionalMultiColumns(List<String> optionalMultiColumns) {
74
        this.optionalMultiColumns = optionalMultiColumns;
75
    }
76

    
77
//************************* METHOD ************************/
78

    
79
    public ExcelFormatAnalyzeResult invoke(){
80
        ExcelFormatAnalyzeResult result = new ExcelFormatAnalyzeResult(this);
81

    
82
        //workbook format
83
        analyzeWorkbookFormat(result);
84
        if (result.hasFatalErrors()){
85
            return result;
86
        }
87

    
88
//        result.addError("Obligatory column xxx is missing. Running import not possible");
89
        return result;
90
    }
91

    
92
    protected void analyzeWorkbookFormat(ExcelFormatAnalyzeResult result) {
93
        URI uri = config.getSource();
94
        if (uri == null){
95
            result.addFatalError("Now source defined. Import not possible.");
96
            return;
97
        }
98
        try {
99
            InputStream stream = UriUtils.getInputStream(uri);
100
            Workbook wb = WorkbookFactory.create(stream);
101

    
102
            List<String> worksheetNames = new ArrayList<>();
103
            worksheetNames.add(config.getWorksheetName());
104
            for (String worksheetName : worksheetNames){
105
                analyzeWorksheetName(result, wb, worksheetNames, worksheetName);
106
            }
107
        } catch(FileNotFoundException fne) {
108
            result.addFatalError("Import file '" + uri.toString() + "' not found. Import not possible.");
109
        } catch(EncryptedDocumentException ede) {
110
            result.addFatalError("File is encrypted. Import not possible.");
111
        } catch(Exception ioe) {
112
            result.addFatalError("Unhandled exception  when reading '" + uri.toString() + "'. Import not possible.");
113
        }
114
    }
115

    
116
    private void analyzeWorksheetName(ExcelFormatAnalyzeResult result, Workbook wb, List<String> worksheetNames,
117
            String worksheetName) {
118
        try {
119
            Sheet worksheet = wb.getSheet(worksheetName);
120
            if(worksheet == null && worksheetNames.size() == 1){
121
                worksheet = wb.getSheetAt(0);
122
            }
123
            if (worksheet == null){
124
                result.addFatalError("Required worksheet "+worksheetName+" not found in file. Import not possible.");
125
            }
126
        } catch (Exception e) {
127
            result.addFatalError("Error when reading worksheet '" + worksheetName + "' not found. Import not possible.");
128
        }
129
    }
130
}
(3-3/4)