-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy pathCsvEscapeCharacter.java
More file actions
114 lines (93 loc) · 3.45 KB
/
CsvEscapeCharacter.java
File metadata and controls
114 lines (93 loc) · 3.45 KB
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package net.seesharpsoft.intellij.plugins.csv;
import com.intellij.util.xmlb.Converter;
import com.intellij.xml.util.XmlStringUtil;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
import java.util.regex.Pattern;
public class CsvEscapeCharacter {
private final String myCharacter;
private final String myDisplay;
private final Pattern myPattern;
private final String myRegexPattern;
private final String myName;
private static final String CUSTOM_NAME = "CUSTOM";
private static final String CUSTOM_DISPLAY = "Custom";
public static CsvEscapeCharacter QUOTE = new CsvEscapeCharacter("\"", "Double Quote (\")", "\"", "QUOTE");
public static CsvEscapeCharacter BACKSLASH = new CsvEscapeCharacter("\\", "Backslash (\\)", "\\\\", "BACKSLASH");
public static CsvEscapeCharacter[] values() {
return new CsvEscapeCharacter[]{QUOTE, BACKSLASH};
}
public static CsvEscapeCharacter getDefaultEscapeCharacter(String character) {
if (character != null) {
switch (character) {
case "QUOTE":
case "\"":
return QUOTE;
case "BACKSLASH":
case "\\":
return BACKSLASH;
default:
break;
}
}
return null;
}
public static CsvEscapeCharacter create(String character) {
if (character == null) {
return null;
}
CsvEscapeCharacter defaultEscapeCharacter = getDefaultEscapeCharacter(character);
return defaultEscapeCharacter == null ? new CsvEscapeCharacter(character) : defaultEscapeCharacter;
}
public static class CsvEscapeCharacterConverter extends Converter<CsvEscapeCharacter> {
public CsvEscapeCharacter fromString(@NotNull String value) {
return CsvEscapeCharacter.create(XmlStringUtil.unescapeIllegalXmlChars(value));
}
public String toString(CsvEscapeCharacter value) {
return XmlStringUtil.escapeIllegalXmlChars(value.getCharacter());
}
}
public CsvEscapeCharacter(String myCharacter) {
this(myCharacter, CUSTOM_DISPLAY + " (" + myCharacter + ")", Pattern.quote(myCharacter), CUSTOM_NAME);
}
private CsvEscapeCharacter(String character, String display, String regexPattern, String name) {
myCharacter = character;
myDisplay = display;
myRegexPattern = regexPattern;
myPattern = Pattern.compile(Pattern.quote(myCharacter + "\""));
myName = name;
}
public String getCharacter() {
return myCharacter;
}
public String getDisplay() {
return myDisplay;
}
public String getRegexPattern() {
return myRegexPattern;
}
public boolean isEscapedQuote(String text) {
return myPattern.matcher(text).matches();
}
public String getName() {
return myName;
}
public boolean isCustom() {
return CUSTOM_NAME.equals(getName());
}
@Override
public int hashCode() {
return Objects.hash(getCharacter(), isCustom());
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof CsvEscapeCharacter otherObj)) {
return false;
}
return Objects.equals(otherObj.getCharacter(), this.getCharacter()) && Objects.equals(otherObj.isCustom(), this.isCustom());
}
@Override
public String toString() {
return getDisplay();
}
}