Skip to content

Commit

Permalink
chore(cli): set instead of list for schemas
Browse files Browse the repository at this point in the history
* Bug in jcommander loads same default for each option name/alias
  cbeust/jcommander#457
  • Loading branch information
npetzall committed Mar 24, 2023
1 parent f8c6d69 commit 8e83d12
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 17 deletions.
11 changes: 5 additions & 6 deletions src/main/java/org/schemaspy/cli/CommandLineArguments.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,7 @@
import org.schemaspy.view.HtmlConfigCli;

import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.*;

/**
* Holds all supported command line arguments.
Expand Down Expand Up @@ -189,9 +187,10 @@ public class CommandLineArguments {
"schemaspy.schemas", "schemaspy.schemata"
},
descriptionKey = "schemas",
listConverter = SchemasListConverter.class
converter = SchemasListConverter.class
)
private List<String> schemas = Collections.emptyList();
//Use Set instead of List to workaround https://github.com/cbeust/jcommander/issues/457
private Set<String> schemas = new HashSet<>();

@Parameter(
names = {
Expand Down Expand Up @@ -543,7 +542,7 @@ public String getSchemaSpec() {
}

public List<String> getSchemas() {
return schemas;
return new ArrayList<>(schemas);
}

public String getSchemaMeta() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,9 @@
package org.schemaspy.cli;

import com.beust.jcommander.IDefaultProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.StringReader;
import java.lang.invoke.MethodHandles;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
Expand All @@ -45,8 +42,6 @@
*/
public class PropertyFileDefaultProvider implements IDefaultProvider {

private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

private final Properties properties;

public PropertyFileDefaultProvider(String propertiesFilename) {
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/org/schemaspy/cli/SchemasListConverter.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

import com.beust.jcommander.IStringConverter;

import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.Set;

public class SchemasListConverter implements IStringConverter<List<String>> {
public class SchemasListConverter implements IStringConverter<Set<String>> {

@Override
public List<String> convert(String value) {
List<String> schemas = new ArrayList<>();
public Set<String> convert(String value) {
Set<String> schemas = new HashSet<>();
for (String name : value.split(",")) {
if (name.length() > 0)
schemas.add(name);
Expand Down
23 changes: 22 additions & 1 deletion src/test/java/org/schemaspy/cli/CommandLineArgumentsTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.schemaspy.cli;

import com.beust.jcommander.IDefaultProvider;
import com.beust.jcommander.JCommander;
import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -42,9 +43,29 @@ void schemasDefault() {
.isEmpty();
}

@Test
void schemasDefaultFromDefaultsProvider() {
assertThat(
parse((optionName ->
optionName.equals("schemaspy.schemas")
? "a 1,a 2"
: null)
)
.getSchemas()
)
.containsExactlyInAnyOrder("a 1", "a 2");
}

private CommandLineArguments parse(String...args) {
return parse(optionName -> null, args);
}

private CommandLineArguments parse(IDefaultProvider iDefaultProvider, String...args) {
CommandLineArguments commandLineArguments = new CommandLineArguments();
JCommander jCommander = JCommander.newBuilder().build();
JCommander jCommander = JCommander
.newBuilder()
.defaultProvider(iDefaultProvider)
.build();
jCommander.addObject(commandLineArguments);
jCommander.parse(args);
return commandLineArguments;
Expand Down

0 comments on commit 8e83d12

Please sign in to comment.