Projekt

Obecné

Profil

Stáhnout (2 KB) Statistiky
| Větev: | Tag: | Revize:
1
package cz.zcu.yamanager.business.file.excel;
2

    
3
import org.apache.poi.ss.usermodel.Sheet;
4
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
5

    
6
import java.io.IOException;
7
import java.io.InputStream;
8
import java.util.HashMap;
9
import java.util.Iterator;
10
import java.util.Map;
11
import java.util.Optional;
12

    
13
public class ExcelParser {
14

    
15
    private static class SheetInfo {
16
        String employee;
17
        SheetParser parser;
18
    }
19

    
20
    public static Map<String, SheetContent[]> parseXLSX(InputStream inputStream) throws IOException {
21

    
22
        Map<String, SheetContent[]> sheets = new HashMap<>();
23

    
24
        XSSFWorkbook wb = new XSSFWorkbook(inputStream);
25

    
26
        Iterator<Sheet> sheetIterator = wb.sheetIterator();
27
        while (sheetIterator.hasNext()) {
28
            Sheet sheet = sheetIterator.next();
29

    
30
            Optional<SheetInfo> sheetTitleOptional = parseSheetTitle(sheet);
31

    
32
            if (!sheetTitleOptional.isPresent()) {
33
                continue;
34
            }
35

    
36
            SheetInfo sheetInfo = sheetTitleOptional.get();
37

    
38
            SheetContent sheetContent = sheetInfo.parser.parseSheet(sheet);
39

    
40
            if (sheetContent == null) continue;
41

    
42
            if (!sheets.containsKey(sheetInfo.employee)) {
43
                sheets.put(sheetInfo.employee, new SheetContent[SheetType.values().length]);
44
            }
45

    
46
            sheets.get(sheetInfo.employee)[sheetInfo.parser.getType().ordinal()] = sheetContent;
47
        }
48

    
49
        return sheets;
50
    }
51

    
52
    private static Optional<SheetInfo> parseSheetTitle(Sheet sheet) {
53

    
54
        String[] sheetName = sheet.getSheetName().split("-");
55

    
56
        if (sheetName.length != 2) {
57
            return Optional.empty();
58
        }
59

    
60
        SheetInfo result = new SheetInfo();
61
        result.employee = sheetName[1].trim();
62
        switch (sheetName[0].trim().toLowerCase()) {
63
            case "dochazka": result.parser = new SheetAttendanceParser(); break;
64
            case "stravenky": result.parser = new SheetMealTicketParser(); break;
65
        }
66
        return Optional.of(result);
67

    
68
    }
69
}
(2-2/10)