Skip to content

Commit bb7b9a8

Browse files
committed
[FIX] handle separator in EditorSettings correct & refresh CsvFile
1 parent ed66a79 commit bb7b9a8

File tree

4 files changed

+68
-4
lines changed

4 files changed

+68
-4
lines changed

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

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.seesharpsoft.intellij.plugins.csv;
22

3+
import java.util.Objects;
34
import java.util.regex.Pattern;
45

56
public class CsvValueSeparator {
@@ -17,7 +18,7 @@ public class CsvValueSeparator {
1718
public static final CsvValueSeparator TAB = new CsvValueSeparator("\t", "Tab (↹)", "TAB");
1819
public static final CsvValueSeparator COLON = new CsvValueSeparator(":", "Colon (:)", "COLON");
1920

20-
public static CsvValueSeparator create(String name, String character) {
21+
public static CsvValueSeparator getDefaultValueSeparator(String name) {
2122
if (name != null) {
2223
switch (name) {
2324
case "COMMA":
@@ -34,10 +35,21 @@ public static CsvValueSeparator create(String name, String character) {
3435
break;
3536
}
3637
}
38+
return null;
39+
}
40+
41+
public static CsvValueSeparator create(String name, String character) {
42+
CsvValueSeparator defaultValueSeparator = getDefaultValueSeparator(name);
43+
if (defaultValueSeparator != null) {
44+
return defaultValueSeparator;
45+
}
3746
return create(character);
3847
}
3948

4049
public static CsvValueSeparator create(String character) {
50+
if (character == null) {
51+
return null;
52+
}
4153
return new CsvValueSeparator(character);
4254
}
4355

@@ -75,4 +87,23 @@ public String getName() {
7587
public boolean isCustom() {
7688
return CUSTOM_NAME.equals(getName());
7789
}
90+
91+
@Override
92+
public int hashCode() {
93+
return Objects.hash(getCharacter(), isCustom());
94+
}
95+
96+
@Override
97+
public boolean equals(Object obj) {
98+
if (obj == null || !(obj instanceof CsvValueSeparator)) {
99+
return false;
100+
}
101+
CsvValueSeparator otherObj = (CsvValueSeparator)obj;
102+
return Objects.equals(otherObj.getCharacter(), this.getCharacter()) && Objects.equals(otherObj.isCustom(), this.isCustom());
103+
}
104+
105+
@Override
106+
public String toString() {
107+
return getDisplay();
108+
}
78109
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ public class CsvFileAttributes implements PersistentStateComponent<CsvFileAttrib
2929
public Map<String, Attribute> attributeMap = new HashMap<>();
3030

3131
static class Attribute {
32+
// holds the actual separator character
3233
public String separator;
34+
// holds the name of the separator (see CsvValueSeparator class)
3335
public String valueSeparator;
3436
public CsvEscapeCharacter escapeCharacter;
3537
}

src/main/java/net/seesharpsoft/intellij/plugins/csv/psi/CsvFile.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,41 @@
55
import com.intellij.openapi.fileTypes.LanguageFileType;
66
import com.intellij.psi.FileViewProvider;
77
import com.intellij.psi.PsiElement;
8+
import com.intellij.util.FileContentUtilCore;
89
import net.seesharpsoft.intellij.plugins.csv.CsvColumnInfoMap;
910
import net.seesharpsoft.intellij.plugins.csv.CsvHelper;
11+
import net.seesharpsoft.intellij.plugins.csv.settings.CsvEditorSettings;
1012
import org.jetbrains.annotations.NotNull;
1113

1214
import javax.swing.*;
15+
import java.beans.PropertyChangeEvent;
16+
import java.beans.PropertyChangeListener;
1317

1418
public class CsvFile extends PsiFileBase {
19+
20+
private class CsvEditorSettingsPropertyChangeListener implements PropertyChangeListener{
21+
@Override
22+
public void propertyChange(PropertyChangeEvent evt) {
23+
switch (evt.getPropertyName()) {
24+
case "defaultEscapeCharacter":
25+
case "defaultValueSeparator":
26+
FileContentUtilCore.reparseFiles(CsvFile.this.getVirtualFile());
27+
break;
28+
default:
29+
// does not influence file
30+
break;
31+
}
32+
}
33+
}
34+
1535
private final LanguageFileType myFileType;
1636
private CsvColumnInfoMap<PsiElement> myColumnInfoMap;
1737
private long myColumnInfoMapModifiedStamp;
1838

1939
public CsvFile(@NotNull FileViewProvider viewProvider, LanguageFileType fileType) {
2040
super(viewProvider, fileType.getLanguage());
2141
myFileType = fileType;
42+
CsvEditorSettings.getInstance().addPropertyChangeListener(new CsvEditorSettingsPropertyChangeListener());
2243
}
2344

2445
public CsvColumnInfoMap<PsiElement> getColumnInfoMap() {

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.awt.*;
1414
import java.beans.PropertyChangeListener;
1515
import java.beans.PropertyChangeSupport;
16+
import java.util.Objects;
1617

1718
@State(
1819
name = "CsvEditorSettings",
@@ -57,7 +58,7 @@ public static final class OptionSet {
5758
public boolean QUOTING_ENFORCED = false;
5859
public boolean FILE_END_LINE_BREAK = true;
5960
public CsvEscapeCharacter DEFAULT_ESCAPE_CHARACTER = ESCAPE_CHARACTER_DEFAULT;
60-
public CsvValueSeparator DEFAULT_VALUE_SEPARATOR = VALUE_SEPARATOR_DEFAULT;
61+
public String DEFAULT_VALUE_SEPARATOR = VALUE_SEPARATOR_DEFAULT.getCharacter();
6162
public boolean KEEP_TRAILING_SPACES = false;
6263

6364
public OptionSet() {
@@ -235,19 +236,28 @@ public void setTableAutoColumnWidthOnOpen(boolean tableAutoColumnWidthOnOpen) {
235236
}
236237

237238
public void setDefaultEscapeCharacter(CsvEscapeCharacter defaultEscapeCharacter) {
239+
CsvEscapeCharacter oldValue = getDefaultEscapeCharacter();
238240
getState().DEFAULT_ESCAPE_CHARACTER = defaultEscapeCharacter;
241+
if (!Objects.equals(oldValue, defaultEscapeCharacter)) {
242+
myPropertyChangeSupport.firePropertyChange("defaultEscapeCharacter", oldValue, defaultEscapeCharacter);
243+
}
239244
}
240245

241246
public CsvEscapeCharacter getDefaultEscapeCharacter() {
242247
return getState().DEFAULT_ESCAPE_CHARACTER;
243248
}
244249

245250
public void setDefaultValueSeparator(CsvValueSeparator defaultValueSeparator) {
246-
getState().DEFAULT_VALUE_SEPARATOR = defaultValueSeparator;
251+
CsvValueSeparator oldValue = getDefaultValueSeparator();
252+
getState().DEFAULT_VALUE_SEPARATOR = defaultValueSeparator.getName();
253+
if (!Objects.equals(oldValue, defaultValueSeparator)) {
254+
myPropertyChangeSupport.firePropertyChange("defaultValueSeparator", oldValue, defaultValueSeparator);
255+
}
247256
}
248257

249258
public CsvValueSeparator getDefaultValueSeparator() {
250-
return getState().DEFAULT_VALUE_SEPARATOR;
259+
CsvValueSeparator csvValueSeparator = CsvValueSeparator.getDefaultValueSeparator(getState().DEFAULT_VALUE_SEPARATOR);
260+
return csvValueSeparator == null ? VALUE_SEPARATOR_DEFAULT : csvValueSeparator;
251261
}
252262

253263
public void setKeepTrailingSpaces(boolean keepTrailingSpaces) {

0 commit comments

Comments
 (0)