SerializationUtils.java

1
package com.renomad.minum.utils;
2
3
import com.renomad.minum.security.ForbiddenUseException;
4
import com.renomad.minum.security.Inmate;
5
6
import java.util.ArrayList;
7
import java.util.List;
8
9
public final class SerializationUtils {
10
11
    private SerializationUtils() {
12
        // not meant to be constructed.
13
    }
14
15
    /**
16
     * This is a helper that will encode the values you give it
17
     * in preparation for storage in a database file.
18
     * <p>
19
     *     The values will be encoded in URL-encoding (see {@link StringUtils#encode(String)})
20
     *     and concatenated together with pipe-symbol "|" delimiters.
21
     * </p>
22
     * <p>
23
     *     <em>Please note</em>: You need to keep track of value order,
24
     *     and making sure all the values are accounted for.
25
     * </p>
26
     * <p>
27
     *     For example, see how this is used in {@link Inmate#serialize()}
28
     * </p>
29
     */
30
    public static String serializeHelper(Object... values) {
31
        StringBuilder sb = new StringBuilder();
32 3 1. serializeHelper : negated conditional → KILLED
2. serializeHelper : changed conditional boundary → KILLED
3. serializeHelper : Replaced integer subtraction with addition → KILLED
        for (int i = 0; i < values.length-1; i++) {
33 1 1. serializeHelper : negated conditional → KILLED
            String value = values[i] == null ? null : values[i].toString();
34
            sb.append(StringUtils.encode(value)).append("|");
35
        }
36
        // append the last value with no pipe symbol afterwards
37 3 1. serializeHelper : Replaced integer subtraction with addition → KILLED
2. serializeHelper : Replaced integer subtraction with addition → KILLED
3. serializeHelper : negated conditional → KILLED
        String lastValue = values[values.length - 1] == null ? null : values[values.length - 1].toString();
38
        sb.append(StringUtils.encode(lastValue));
39 1 1. serializeHelper : replaced return value with "" for com/renomad/minum/utils/SerializationUtils::serializeHelper → KILLED
        return sb.toString();
40
    }
41
42
    /**
43
     * Splits up a string based on a pipe character.  See {@link #tokenizer(String, char, int)}
44
     * <p>
45
     *     This method is intended to be used as part of the database.  See
46
     *     the package "com.renomad.minum.database"
47
     * </p>
48
     * <p>
49
     *     For an example, see how this is used in {@link Inmate#deserialize(String)}
50
     * </p>
51
     * @param serializedText the string we are splitting into tokens
52
     */
53
    public static List<String> deserializeHelper(String serializedText) {
54
        /*
55
         * As a general precaution, loops throughout the system have
56
         * safety limits in place.  In this case, it would be unexpected
57
         * to have databases of type {@link com.renomad.minum.database.DbData} that
58
         * have this many fields.
59
         */
60
        int maximumDatabasePartitionsAllowed = 200;
61 1 1. deserializeHelper : replaced return value with Collections.emptyList for com/renomad/minum/utils/SerializationUtils::deserializeHelper → KILLED
        return tokenizer(serializedText, '|', maximumDatabasePartitionsAllowed).stream().map(StringUtils::decode).toList();
62
    }
63
64
    /**
65
     * Splits up a string into tokens.
66
     *
67
     * @param serializedText the string we are splitting up
68
     * @param delimiter the character acting as a boundary between sections
69
     * @param maxTokens the maximum tokens allowable.  Probably smart to include a number
70
     *                  here, since otherwise you could get into some infinite loops.
71
     * @return a list of strings.  If the delimiter is not found, we will just return the whole string
72
     */
73
    public static List<String> tokenizer(String serializedText, char delimiter, int maxTokens) {
74
        final var resultList = new ArrayList<String>();
75
        var currentPlace = 0;
76 1 1. tokenizer : Changed increment from 1 to -1 → KILLED
        for(int i = 0; ; i++) {
77 2 1. tokenizer : changed conditional boundary → KILLED
2. tokenizer : negated conditional → KILLED
            if (i >= maxTokens) {
78
                throw new ForbiddenUseException("Asked to split content into too many partitions in the tokenizer.  Current max: " + maxTokens);
79
            }
80
            final var nextDelimiterIndex = serializedText.indexOf(delimiter, currentPlace);
81 1 1. tokenizer : negated conditional → KILLED
            if (nextDelimiterIndex == -1) {
82
                // if we don't see any delimiters ahead, grab the rest of the text from our current place
83
                resultList.add(serializedText.substring(currentPlace));
84
                break;
85
            }
86
            resultList.add(serializedText.substring(currentPlace, nextDelimiterIndex));
87 1 1. tokenizer : Replaced integer addition with subtraction → KILLED
            currentPlace = nextDelimiterIndex + 1;
88
        }
89
90 1 1. tokenizer : replaced return value with Collections.emptyList for com/renomad/minum/utils/SerializationUtils::tokenizer → KILLED
        return resultList;
91
    }
92
93
}

Mutations

32

1.1
Location : serializeHelper
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testSerializationHelper(com.renomad.minum.utils.SerializationUtilsTests)
negated conditional → KILLED

2.2
Location : serializeHelper
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testSerializationHelper(com.renomad.minum.utils.SerializationUtilsTests)
changed conditional boundary → KILLED

3.3
Location : serializeHelper
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testSerializationHelper(com.renomad.minum.utils.SerializationUtilsTests)
Replaced integer subtraction with addition → KILLED

33

1.1
Location : serializeHelper
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testSerializationHelper(com.renomad.minum.utils.SerializationUtilsTests)
negated conditional → KILLED

37

1.1
Location : serializeHelper
Killed by : com.renomad.minum.database.DbTests.test_Serialization_SimpleCase(com.renomad.minum.database.DbTests)
Replaced integer subtraction with addition → KILLED

2.2
Location : serializeHelper
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testSerializationHelper(com.renomad.minum.utils.SerializationUtilsTests)
Replaced integer subtraction with addition → KILLED

3.3
Location : serializeHelper
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testSerializationHelper(com.renomad.minum.utils.SerializationUtilsTests)
negated conditional → KILLED

39

1.1
Location : serializeHelper
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testSerializationHelper(com.renomad.minum.utils.SerializationUtilsTests)
replaced return value with "" for com/renomad/minum/utils/SerializationUtils::serializeHelper → KILLED

61

1.1
Location : deserializeHelper
Killed by : com.renomad.minum.database.DbTests.test_Serialization_SimpleCase(com.renomad.minum.database.DbTests)
replaced return value with Collections.emptyList for com/renomad/minum/utils/SerializationUtils::deserializeHelper → KILLED

76

1.1
Location : tokenizer
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testTokenizer_OverMaxTokenCount(com.renomad.minum.utils.SerializationUtilsTests)
Changed increment from 1 to -1 → KILLED

77

1.1
Location : tokenizer
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testTokenizer_OverMaxTokenCount(com.renomad.minum.utils.SerializationUtilsTests)
changed conditional boundary → KILLED

2.2
Location : tokenizer
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testTokenizer(com.renomad.minum.utils.SerializationUtilsTests)
negated conditional → KILLED

81

1.1
Location : tokenizer
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testTokenizer(com.renomad.minum.utils.SerializationUtilsTests)
negated conditional → KILLED

87

1.1
Location : tokenizer
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testTokenizer(com.renomad.minum.utils.SerializationUtilsTests)
Replaced integer addition with subtraction → KILLED

90

1.1
Location : tokenizer
Killed by : com.renomad.minum.utils.SerializationUtilsTests.testTokenizer(com.renomad.minum.utils.SerializationUtilsTests)
replaced return value with Collections.emptyList for com/renomad/minum/utils/SerializationUtils::tokenizer → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0