Skip to content

Commit ea0ea02

Browse files
committed
[FIX] custom serialize/deserialize of CsvValueSeparator
Fixes #221
1 parent 302e542 commit ea0ea02

File tree

3 files changed

+31
-13
lines changed

3 files changed

+31
-13
lines changed

src/main/java/net/seesharpsoft/intellij/plugins/csv/CsvValueSeparator.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package net.seesharpsoft.intellij.plugins.csv;
22

3+
import com.intellij.util.xmlb.Converter;
4+
35
import java.util.Objects;
46
import java.util.regex.Pattern;
57

@@ -22,14 +24,19 @@ public static CsvValueSeparator getDefaultValueSeparator(String name) {
2224
if (name != null) {
2325
switch (name) {
2426
case "COMMA":
27+
case ",":
2528
return COMMA;
2629
case "SEMICOLON":
30+
case ";":
2731
return SEMICOLON;
2832
case "PIPE":
33+
case "|":
2934
return PIPE;
3035
case "TAB":
36+
case "\t":
3137
return TAB;
3238
case "COLON":
39+
case ":":
3340
return COLON;
3441
default:
3542
break;
@@ -57,6 +64,17 @@ public static CsvValueSeparator[] values() {
5764
return new CsvValueSeparator[]{COMMA, SEMICOLON, PIPE, TAB, COLON};
5865
}
5966

67+
public static class CsvValueSeparatorConverter extends Converter<CsvValueSeparator> {
68+
public CsvValueSeparator fromString(String value) {
69+
int index = value.indexOf("@");
70+
return index == -1 ? CsvValueSeparator.create(value, value) : CsvValueSeparator.create(value.substring(0, index), value.substring(index + 1));
71+
}
72+
73+
public String toString(CsvValueSeparator value) {
74+
return value.getName() + "@" + value.getCharacter();
75+
}
76+
}
77+
6078
public CsvValueSeparator(String myCharacter) {
6179
this(myCharacter, CUSTOM_DISPLAY + " (" + myCharacter + ")", CUSTOM_NAME);
6280
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/components/CsvFileAttributes.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
import com.intellij.openapi.vfs.VirtualFile;
1111
import com.intellij.psi.PsiFile;
1212
import com.intellij.util.xmlb.XmlSerializerUtil;
13+
import com.intellij.util.xmlb.annotations.OptionTag;
1314
import net.seesharpsoft.intellij.plugins.csv.*;
1415
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
1516
import org.jetbrains.annotations.NotNull;
1617
import org.jetbrains.annotations.Nullable;
1718

18-
import java.util.Arrays;
1919
import java.util.HashMap;
2020
import java.util.Map;
2121

@@ -30,9 +30,8 @@ public class CsvFileAttributes implements PersistentStateComponent<CsvFileAttrib
3030

3131
static class Attribute {
3232
// holds the actual separator character
33-
public String separator;
34-
// holds the name of the separator (see CsvValueSeparator class)
35-
public String valueSeparator;
33+
@OptionTag(converter = CsvValueSeparator.CsvValueSeparatorConverter.class)
34+
public CsvValueSeparator separator;
3635
public CsvEscapeCharacter escapeCharacter;
3736
}
3837

@@ -93,8 +92,7 @@ public void setFileSeparator(@NotNull PsiFile psiFile, @NotNull CsvValueSeparato
9392
return;
9493
}
9594
Attribute attribute = getFileAttribute(psiFile.getProject(), psiFile.getOriginalFile().getVirtualFile(), true);
96-
attribute.valueSeparator = separator.getName();
97-
attribute.separator = separator.getCharacter();
95+
attribute.separator = separator;
9896
}
9997

10098
public void resetValueSeparator(@NotNull PsiFile psiFile) {
@@ -103,7 +101,7 @@ public void resetValueSeparator(@NotNull PsiFile psiFile) {
103101
}
104102
Attribute attribute = getFileAttribute(psiFile.getProject(), psiFile.getOriginalFile().getVirtualFile());
105103
if (attribute != null) {
106-
attribute.valueSeparator = null;
104+
attribute.separator = null;
107105
}
108106
}
109107

@@ -117,14 +115,14 @@ CsvValueSeparator getValueSeparator(Project project, VirtualFile virtualFile) {
117115
return ((CsvSeparatorHolder) language).getSeparator();
118116
}
119117
Attribute attribute = getFileAttribute(project, virtualFile);
120-
return attribute == null || attribute.valueSeparator == null ?
118+
return attribute == null || attribute.separator == null ?
121119
CsvEditorSettings.getInstance().getDefaultValueSeparator() :
122-
CsvValueSeparator.create(attribute.valueSeparator, attribute.separator);
120+
attribute.separator;
123121
}
124122

125123
public boolean hasValueSeparatorAttribute(@NotNull Project project, @NotNull VirtualFile virtualFile) {
126124
Attribute attribute = getFileAttribute(project, virtualFile);
127-
return attribute != null && attribute.valueSeparator != null;
125+
return attribute != null && attribute.separator != null;
128126
}
129127

130128
public void setEscapeCharacter(@NotNull PsiFile psiFile, @NotNull CsvEscapeCharacter escapeCharacter) {

src/main/java/net/seesharpsoft/intellij/plugins/csv/settings/CsvEditorSettings.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.intellij.openapi.components.State;
66
import com.intellij.openapi.components.Storage;
77
import com.intellij.openapi.editor.ex.EditorSettingsExternalizable;
8+
import com.intellij.util.xmlb.annotations.OptionTag;
89
import net.seesharpsoft.intellij.plugins.csv.CsvEscapeCharacter;
910
import net.seesharpsoft.intellij.plugins.csv.CsvStorageHelper;
1011
import net.seesharpsoft.intellij.plugins.csv.CsvValueSeparator;
@@ -58,7 +59,8 @@ public static final class OptionSet {
5859
public boolean QUOTING_ENFORCED = false;
5960
public boolean FILE_END_LINE_BREAK = true;
6061
public CsvEscapeCharacter DEFAULT_ESCAPE_CHARACTER = ESCAPE_CHARACTER_DEFAULT;
61-
public String DEFAULT_VALUE_SEPARATOR = VALUE_SEPARATOR_DEFAULT.getCharacter();
62+
@OptionTag(converter = CsvValueSeparator.CsvValueSeparatorConverter.class)
63+
public CsvValueSeparator DEFAULT_VALUE_SEPARATOR = VALUE_SEPARATOR_DEFAULT;
6264
public boolean KEEP_TRAILING_SPACES = false;
6365

6466
public OptionSet() {
@@ -249,14 +251,14 @@ public CsvEscapeCharacter getDefaultEscapeCharacter() {
249251

250252
public void setDefaultValueSeparator(CsvValueSeparator defaultValueSeparator) {
251253
CsvValueSeparator oldValue = getDefaultValueSeparator();
252-
getState().DEFAULT_VALUE_SEPARATOR = defaultValueSeparator.getName();
254+
getState().DEFAULT_VALUE_SEPARATOR = defaultValueSeparator;
253255
if (!Objects.equals(oldValue, defaultValueSeparator)) {
254256
myPropertyChangeSupport.firePropertyChange("defaultValueSeparator", oldValue, defaultValueSeparator);
255257
}
256258
}
257259

258260
public CsvValueSeparator getDefaultValueSeparator() {
259-
CsvValueSeparator csvValueSeparator = CsvValueSeparator.getDefaultValueSeparator(getState().DEFAULT_VALUE_SEPARATOR);
261+
CsvValueSeparator csvValueSeparator = getState().DEFAULT_VALUE_SEPARATOR;
260262
return csvValueSeparator == null ? VALUE_SEPARATOR_DEFAULT : csvValueSeparator;
261263
}
262264

0 commit comments

Comments
 (0)