Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[map] Added 'ConfigOptionProvider' to provide filenames ending with '.map' in Profile configuration #9641

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,16 @@

import java.io.FileReader;
import java.io.IOException;
import java.net.URI;
import java.util.Collection;
import java.util.Locale;
import java.util.Properties;
import java.util.stream.Collectors;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.core.config.core.ConfigOptionProvider;
import org.openhab.core.config.core.ParameterOption;
import org.openhab.core.transform.AbstractFileTransformationService;
import org.openhab.core.transform.TransformationException;
import org.openhab.core.transform.TransformationService;
Expand All @@ -30,11 +38,18 @@
* @author Kai Kreuzer - Initial contribution and API
* @author Gaël L'hopital - Make it localizable
*/
@Component(service = TransformationService.class, property = { "openhab.transform=MAP" })
public class MapTransformationService extends AbstractFileTransformationService<Properties> {
@NonNullByDefault
@Component(service = { TransformationService.class, ConfigOptionProvider.class }, property = {
"openhab.transform=MAP" })
public class MapTransformationService extends AbstractFileTransformationService<Properties>
implements ConfigOptionProvider {

private final Logger logger = LoggerFactory.getLogger(MapTransformationService.class);

private static final String PROFILE_CONFIG_URI = "profile:transform:MAP";
private static final String CONFIG_PARAM_FUNCTION = "function";
private static final String[] FILE_NAME_EXTENSIONS = { "map" };

/**
* <p>
* Transforms the input <code>source</code> by mapping it to another string. It expects the mappings to be read from
Expand All @@ -43,9 +58,10 @@ public class MapTransformationService extends AbstractFileTransformationService<
*
* @param properties the list of properties which contains the key value pairs for the mapping.
* @param source the input to transform
* @return the transformed result or null if the transformation couldn't be completed for any reason.
*/
@Override
protected String internalTransform(Properties properties, String source) throws TransformationException {
protected @Nullable String internalTransform(Properties properties, String source) throws TransformationException {
String target = properties.getProperty(source);

if (target == null) {
Expand All @@ -69,4 +85,17 @@ protected Properties internalLoadTransform(String filename) throws Transformatio
throw new TransformationException("An error occurred while opening file.", e);
}
}

@Override
public @Nullable Collection<ParameterOption> getParameterOptions(URI uri, String param, @Nullable String context,
@Nullable Locale locale) {
if (PROFILE_CONFIG_URI.equals(uri.toString())) {
switch (param) {
case CONFIG_PARAM_FUNCTION:
return getFilenames(FILE_NAME_EXTENSIONS).stream().map(f -> new ParameterOption(f, f))
.collect(Collectors.toList());
}
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@
/**
* Profile to offer the MapTransformationservice on a ItemChannelLink
*
* @author Stefan Triller - initial contribution
*
* @author Stefan Triller - Initial contribution
*/
@NonNullByDefault
public class MapTransformationProfile implements StateProfile {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
*/
package org.openhab.transform.map.internal.profiles;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Locale;

import org.eclipse.jdt.annotation.NonNullByDefault;
Expand All @@ -27,14 +27,14 @@
import org.openhab.core.thing.profiles.ProfileTypeProvider;
import org.openhab.core.thing.profiles.ProfileTypeUID;
import org.openhab.core.transform.TransformationService;
import org.openhab.transform.map.internal.MapTransformationService;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

/**
* Profilefactory that creates the transformation profile for the map transformation service
*
* @author Stefan Triller - initial contribution
* {@link ProfileFactory} that creates the transformation profile for the {@link MapTransformationService}.
*
* @author Stefan Triller - Initial contribution
*/
@NonNullByDefault
@Component(service = { ProfileFactory.class, ProfileTypeProvider.class })
Expand All @@ -45,7 +45,7 @@ public class MapTransformationProfileFactory implements ProfileFactory, ProfileT

@Override
public Collection<ProfileType> getProfileTypes(@Nullable Locale locale) {
return Arrays.asList(ProfileTypeBuilder
return List.of(ProfileTypeBuilder
.newState(MapTransformationProfile.PROFILE_TYPE_UID, MapTransformationProfile.PROFILE_TYPE_UID.getId())
.build());
}
Expand All @@ -58,7 +58,7 @@ public Collection<ProfileType> getProfileTypes(@Nullable Locale locale) {

@Override
public Collection<ProfileTypeUID> getSupportedProfileTypeUIDs() {
return Arrays.asList(MapTransformationProfile.PROFILE_TYPE_UID);
return List.of(MapTransformationProfile.PROFILE_TYPE_UID);
}

@Reference(target = "(openhab.transform=MAP)")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@
<parameter name="function" type="text" required="true">
<label>Filename</label>
<description>Filename containing the mapping information.</description>
<limitToOptions>false</limitToOptions>
</parameter>
<parameter name="sourceFormat" type="text" required="false">
<parameter name="sourceFormat" type="text">
<label>State Formatter</label>
<description>How to format the state on the channel before transforming it, i.e. %s or %.1f °C (default is %s)</description>
<advanced>true</advanced>
Expand Down

This file was deleted.