summaryrefslogtreecommitdiff
path: root/src/main/java/com/keuin/kbackupfabric/backup/name/IncrementalBackupFileNameEncoder.java
blob: 45cd00eca1125656c3297257c2dfdf92cee506f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.keuin.kbackupfabric.backup.name;

import com.keuin.kbackupfabric.util.DateUtil;

import java.time.LocalDateTime;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class IncrementalBackupFileNameEncoder implements BackupFileNameEncoder {

    private static final String backupFileNamePrefix = "incremental";
    public static final IncrementalBackupFileNameEncoder INSTANCE = new IncrementalBackupFileNameEncoder();

    private IncrementalBackupFileNameEncoder() {
    }

    @Override
    public String encode(String customName, LocalDateTime time) {
        if (!isValidCustomName(customName))
            throw new IllegalArgumentException("Invalid custom name");
        String timeString = DateUtil.getString(time);
        return backupFileNamePrefix + "-" + timeString + "_" + customName + ".kbi";
    }

    @Override
    public BackupFileNameEncoder.BackupBasicInformation decode(String fileName) {
        Pattern pattern = Pattern.compile(
                "^" + backupFileNamePrefix + "-" + "([0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2})_(.+)\\.kbi" + "$"
        );
        Matcher matcher = pattern.matcher(fileName);
        if (matcher.find()) {
            String timeString = matcher.group(1);
            String customName = matcher.group(2);
            return new BackupFileNameEncoder.BackupBasicInformation(customName, DateUtil.toLocalDateTime(timeString));
        }
        return null;
    }

}