Skip to content

Commit

Permalink
[map] Added ConfigOptionProvider to provide file names ending with '.…
Browse files Browse the repository at this point in the history
…map' in Profile configuration (openhab#9641)

Signed-off-by: Christoph Weitkamp <[email protected]>
  • Loading branch information
cweitkamp authored Jan 3, 2021
1 parent 2962373 commit abf0f83
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 13 deletions.
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.

0 comments on commit abf0f83

Please sign in to comment.