Skip to content

Commit

Permalink
Fix OOBE in item metadata descriptions providers (openhab#3488)
Browse files Browse the repository at this point in the history
Signed-off-by: Miguel Álvarez <[email protected]>
GitOrigin-RevId: 4d0dba1
  • Loading branch information
GiviMAD authored and splatch committed Jul 12, 2023
1 parent adc7b89 commit b4bf208
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,18 +63,8 @@ public MetadataCommandDescriptionProvider(final @Reference MetadataRegistry meta
if (metadata.getConfiguration().containsKey("options")) {
Stream.of(metadata.getConfiguration().get("options").toString().split(",")).forEach(o -> {
if (o.contains("=")) {
String command;
String label;
if (o.startsWith("\"")) {
String[] parts = o.trim().split("\"=\"");
command = removeSurroundingQuotes(parts[0]);
label = removeSurroundingQuotes(parts[1]);
} else {
String[] parts = o.trim().split("=");
command = parts[0];
label = parts[1];
}
commandDescription.addCommandOption(new CommandOption(command.trim(), label.trim()));
var pair = parseValueLabelPair(o.trim());
commandDescription.addCommandOption(new CommandOption(pair[0], pair[1]));
} else {
commandDescription.addCommandOption(new CommandOption(o.trim(), null));
}
Expand All @@ -91,14 +81,18 @@ public MetadataCommandDescriptionProvider(final @Reference MetadataRegistry meta
return null;
}

public static String removeSurroundingQuotes(String input) {
String output = input;
if (input.startsWith("\"")) {
output = output.substring(1);
public static String[] parseValueLabelPair(String text) {
String value;
String label;
if (text.startsWith("\"") && text.contains("\"=\"") && text.endsWith("\"")) {
String[] parts = text.split("\"=\"");
value = parts[0].substring(1);
label = parts[1].substring(0, parts[1].length() - 1);
} else {
String[] parts = text.split("=");
value = parts[0];
label = parts[1];
}
if (input.endsWith("\"")) {
output = output.substring(0, output.length() - 1);
}
return output;
return new String[] { value.trim(), label.trim() };
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
*/
package org.openhab.core.internal.items;

import static org.openhab.core.internal.items.MetadataCommandDescriptionProvider.removeSurroundingQuotes;
import static org.openhab.core.internal.items.MetadataCommandDescriptionProvider.parseValueLabelPair;

import java.math.BigDecimal;
import java.math.BigInteger;
Expand Down Expand Up @@ -106,18 +106,8 @@ public MetadataStateDescriptionFragmentProvider(final @Reference MetadataRegistr
List<StateOption> stateOptions = Stream
.of(metadata.getConfiguration().get("options").toString().split(",")).map(o -> {
if (o.contains("=")) {
String value;
String label;
if (o.startsWith("\"")) {
String[] parts = o.trim().split("\"=\"");
value = removeSurroundingQuotes(parts[0]);
label = removeSurroundingQuotes(parts[1]);
} else {
String[] parts = o.trim().split("=");
value = parts[0];
label = parts[1];
}
return new StateOption(value.trim(), label.trim());
var pair = parseValueLabelPair(o.trim());
return new StateOption(pair[0], pair[1]);
} else {
return new StateOption(o.trim(), null);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,14 +97,14 @@ public void testEmptyConfig() throws Exception {
public void testOptions() throws Exception {
MetadataKey metadataKey = new MetadataKey("commandDescription", ITEM_NAME);
Map<String, Object> metadataConfig = new HashMap<>();
metadataConfig.put("options", "OPTION1,OPTION2 , 3 =Option 3 ");
metadataConfig.put("options", "OPTION1,OPTION2 , 3 =Option 3 , \" 4=4 \"=\"Option 4 \"");
Metadata metadata = new Metadata(metadataKey, "N/A", metadataConfig);

metadataRegistryMock.added(managedProviderMock, metadata);
CommandDescription commandDescription = commandDescriptionProvider.getCommandDescription(ITEM_NAME, null);
assertNotNull(commandDescription);
assertNotNull(commandDescription.getCommandOptions());
assertEquals(3, commandDescription.getCommandOptions().size());
assertEquals(4, commandDescription.getCommandOptions().size());

Iterator<CommandOption> it = commandDescription.getCommandOptions().iterator();
CommandOption commandOption = it.next();
Expand All @@ -116,5 +116,8 @@ public void testOptions() throws Exception {
commandOption = it.next();
assertEquals("3", commandOption.getCommand());
assertEquals("Option 3", commandOption.getLabel());
commandOption = it.next();
assertEquals("4=4", commandOption.getCommand());
assertEquals("Option 4", commandOption.getLabel());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public void testFragment() throws Exception {
metadataConfig.put("max", "34");
metadataConfig.put("step", 3);
metadataConfig.put("readOnly", "true");
metadataConfig.put("options", "OPTION1,OPTION2 , 3 =Option 3 ");
metadataConfig.put("options", "OPTION1,OPTION2 , 3 =Option 3 ,\"4=4\"=\" Option=4 \" ");
Metadata metadata = new Metadata(metadataKey, "N/A", metadataConfig);
metadataRegistryMock.added(managedProviderMock, metadata);

Expand All @@ -119,5 +119,8 @@ public void testFragment() throws Exception {
stateOption = it.next();
assertEquals("3", stateOption.getValue());
assertEquals("Option 3", stateOption.getLabel());
stateOption = it.next();
assertEquals("4=4", stateOption.getValue());
assertEquals("Option=4", stateOption.getLabel());
}
}

0 comments on commit b4bf208

Please sign in to comment.