1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.database.core.metadata.database.enums;
19
20 import com.google.common.base.Strings;
21 import lombok.Getter;
22 import lombok.RequiredArgsConstructor;
23
24 import java.util.HashMap;
25 import java.util.Map;
26
27
28
29
30 @RequiredArgsConstructor
31 @Getter
32 public enum QuoteCharacter {
33
34 BACK_QUOTE("`", "`"),
35
36 SINGLE_QUOTE("'", "'"),
37
38 QUOTE("\"", "\""),
39
40 BRACKETS("[", "]"),
41
42 PARENTHESES("(", ")"),
43
44 NONE("", "");
45
46 private static final Map<Character, QuoteCharacter> BY_FIRST_CHAR = new HashMap<>(values().length - 1, 1F);
47
48 static {
49 for (QuoteCharacter each : values()) {
50 if (NONE != each) {
51 BY_FIRST_CHAR.put(each.startDelimiter.charAt(0), each);
52 }
53 }
54 }
55
56 private final String startDelimiter;
57
58 private final String endDelimiter;
59
60
61
62
63
64
65
66 public static QuoteCharacter getQuoteCharacter(final String value) {
67 return Strings.isNullOrEmpty(value) ? NONE : BY_FIRST_CHAR.getOrDefault(value.charAt(0), NONE);
68 }
69
70
71
72
73
74
75
76 public String wrap(final String value) {
77 return startDelimiter + value + endDelimiter;
78 }
79
80
81
82
83
84
85
86 public String unwrap(final String value) {
87 return isWrapped(value) ? value.substring(startDelimiter.length(), value.length() - endDelimiter.length()) : value;
88 }
89
90
91
92
93
94
95
96 public boolean isWrapped(final String value) {
97 return value.startsWith(startDelimiter) && value.endsWith(endDelimiter);
98 }
99
100
101
102
103
104
105
106 public static String unwrapText(final String text) {
107 return QuoteCharacter.getQuoteCharacter(text).unwrap(text);
108 }
109
110
111
112
113
114
115
116
117
118 public static String unwrapAndTrimText(final String text) {
119 return unwrapText(text).trim();
120 }
121 }