Skip to content

Commit

Permalink
Refactor: Design Smell: Multifaceted Abstraction
Browse files Browse the repository at this point in the history
  • Loading branch information
Kavya Bhojani committed Apr 1, 2024
1 parent 276f627 commit 4fc3e04
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.fasterxml.jackson.dataformat.csv;

import com.fasterxml.jackson.core.io.CharacterEscapes;

public class ControlEscapeStrategy implements EscapeStrategy {
@Override
public int[] getEscapeCodesForAscii() {
int[] escapes = CharacterEscapes.standardAsciiEscapesForJSON();
escapes['"'] = 0; // Do not escape double quotes.
return escapes;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.fasterxml.jackson.dataformat.csv;

import com.fasterxml.jackson.core.io.CharacterEscapes;

public class ControlQuoteEscapeStrategy implements EscapeStrategy {
@Override
public int[] getEscapeCodesForAscii() {
return CharacterEscapes.standardAsciiEscapesForJSON();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
* <li> control and quote escape - do not double up quote, escape control characters and quote.</li>
* </ul>
*/

/*
public final class CsvCharacterEscapes extends CharacterEscapes
{
Expand Down Expand Up @@ -99,3 +101,43 @@ public int[] getEscapeCodesForAscii()
return escapes;
}
}
*/

public final class CsvCharacterEscapes extends CharacterEscapes {
private static final long serialVersionUID = 1L;

private final int[] escapes;

private CsvCharacterEscapes(EscapeStrategy strategy) {
this.escapes = strategy.getEscapeCodesForAscii();
}

public static CsvCharacterEscapes fromCsvFeatures(int csvFeatures) {
EscapeStrategy strategy;
if (CsvGenerator.Feature.ESCAPE_QUOTE_CHAR_WITH_ESCAPE_CHAR.enabledIn(csvFeatures)) {
if (Feature.ESCAPE_CONTROL_CHARS_WITH_ESCAPE_CHAR.enabledIn(csvFeatures)) {
strategy = new ControlQuoteEscapeStrategy();
} else {
strategy = new QuoteEscapeStrategy();
}
} else if (Feature.ESCAPE_CONTROL_CHARS_WITH_ESCAPE_CHAR.enabledIn(csvFeatures)) {
strategy = new ControlEscapeStrategy();
} else {
strategy = new NoEscapeStrategy();
}

return new CsvCharacterEscapes(strategy);
}

@Override
public SerializableString getEscapeSequence(int ch) {
return null; // unused for CSV escapes
}

@Override
public int[] getEscapeCodesForAscii() {
return escapes;
}
}


Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.fasterxml.jackson.dataformat.csv;

public interface EscapeStrategy {
int[] getEscapeCodesForAscii();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.fasterxml.jackson.dataformat.csv;

public class NoEscapeStrategy implements EscapeStrategy
{
@Override
public int[] getEscapeCodesForAscii() {
return new int[0];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.fasterxml.jackson.dataformat.csv;

public class QuoteEscapeStrategy implements EscapeStrategy {
@Override
public int[] getEscapeCodesForAscii() {
int[] escapes = new int['"' + 1];
escapes['"'] = '"';
return escapes;
}
}

0 comments on commit 4fc3e04

Please sign in to comment.