Skip to content

Commit

Permalink
chore: FileNameGenerator as a decorator
Browse files Browse the repository at this point in the history
  • Loading branch information
npetzall committed Jan 1, 2024
1 parent 994f283 commit 72a36dd
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 7 deletions.
15 changes: 10 additions & 5 deletions src/main/java/org/schemaspy/util/naming/FileNameGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,24 @@

public class FileNameGenerator implements Name {

private final String original_name;
private final Name origin;

public FileNameGenerator(final String original_name) {
this.original_name = original_name;
this(new NameFromString(original_name));
}

public FileNameGenerator(final Name name) {
this.origin = name;
}

@Override
public String value() {
String name = original_name.replaceAll("[^a-zA-Z0-9\\-_\\.]", "_");
if (name.length() <= 40 && original_name.equalsIgnoreCase(name)) {
String originValue = origin.value();
String name = originValue.replaceAll("[^a-zA-Z0-9\\-_.]", "_");
if (name.length() <= 40 && originValue.equalsIgnoreCase(name)) {
return name;
} else {
String hashAsHex = Integer.toHexString(original_name.hashCode());
String hashAsHex = Integer.toHexString(originValue.hashCode());
int targetLength = Math.min(39 - hashAsHex.length(), name.length());
return name.substring(0, targetLength) + "_" + hashAsHex;
}
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/org/schemaspy/util/naming/NameFromString.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.schemaspy.util.naming;

public class NameFromString implements Name {

private final String value;

public NameFromString(String value) {
this.value = value;
}

@Override
public String value() {
return value;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,15 @@ void wontGenerateSameForSimilar() {
assertThat(new FileNameGenerator(nameOne).value()).isNotEqualToIgnoringCase(new FileNameGenerator(nameTwo).value());
}

@ParameterizedTest(name = "{0}, \"{1}\" should become {2}")
@ParameterizedTest(name = "{0}, \"{1}\" should become \"{2}\"")
@CsvSource(
textBlock = """
#case, input, output
japanese, こんにちは, ______bfca3f39
illegal, Test\tif/name/is#fixed or not, Test_if_name_is_fixed_or_not_f9e4eeb2
shortAndOk, 1234567890123456789012345678901234567890, 1234567890123456789012345678901234567890
short40C, 12345678901234567890123456789012345678901, 1234567890123456789012345678901_6e3e05c5
short40C, 12345678901234567890123456789012345678901, 1234567890123456789012345678901_6e3e05c5
withDot, file.name, file.name
"""
)
void generateName(String description, String input, String output) {
Expand Down

0 comments on commit 72a36dd

Please sign in to comment.