[map] Added ConfigOptionProvider to provide file names ending with '.map' in Profile configuration (#9641)
Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>pull/9670/head
parent
6b693ff73b
commit
b7495f9699
|
@ -14,8 +14,16 @@ package org.openhab.transform.map.internal;
|
||||||
|
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Properties;
|
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.AbstractFileTransformationService;
|
||||||
import org.openhab.core.transform.TransformationException;
|
import org.openhab.core.transform.TransformationException;
|
||||||
import org.openhab.core.transform.TransformationService;
|
import org.openhab.core.transform.TransformationService;
|
||||||
|
@ -30,11 +38,18 @@ import org.slf4j.LoggerFactory;
|
||||||
* @author Kai Kreuzer - Initial contribution and API
|
* @author Kai Kreuzer - Initial contribution and API
|
||||||
* @author Gaël L'hopital - Make it localizable
|
* @author Gaël L'hopital - Make it localizable
|
||||||
*/
|
*/
|
||||||
@Component(service = TransformationService.class, property = { "openhab.transform=MAP" })
|
@NonNullByDefault
|
||||||
public class MapTransformationService extends AbstractFileTransformationService<Properties> {
|
@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 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>
|
* <p>
|
||||||
* Transforms the input <code>source</code> by mapping it to another string. It expects the mappings to be read from
|
* Transforms the input <code>source</code> by mapping it to another string. It expects the mappings to be read from
|
||||||
|
@ -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 properties the list of properties which contains the key value pairs for the mapping.
|
||||||
* @param source the input to transform
|
* @param source the input to transform
|
||||||
|
* @return the transformed result or null if the transformation couldn't be completed for any reason.
|
||||||
*/
|
*/
|
||||||
@Override
|
@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);
|
String target = properties.getProperty(source);
|
||||||
|
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
|
@ -69,4 +85,17 @@ public class MapTransformationService extends AbstractFileTransformationService<
|
||||||
throw new TransformationException("An error occurred while opening file.", e);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,8 +30,7 @@ import org.slf4j.LoggerFactory;
|
||||||
/**
|
/**
|
||||||
* Profile to offer the MapTransformationservice on a ItemChannelLink
|
* Profile to offer the MapTransformationservice on a ItemChannelLink
|
||||||
*
|
*
|
||||||
* @author Stefan Triller - initial contribution
|
* @author Stefan Triller - Initial contribution
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class MapTransformationProfile implements StateProfile {
|
public class MapTransformationProfile implements StateProfile {
|
||||||
|
|
|
@ -12,8 +12,8 @@
|
||||||
*/
|
*/
|
||||||
package org.openhab.transform.map.internal.profiles;
|
package org.openhab.transform.map.internal.profiles;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
|
@ -27,14 +27,14 @@ import org.openhab.core.thing.profiles.ProfileTypeBuilder;
|
||||||
import org.openhab.core.thing.profiles.ProfileTypeProvider;
|
import org.openhab.core.thing.profiles.ProfileTypeProvider;
|
||||||
import org.openhab.core.thing.profiles.ProfileTypeUID;
|
import org.openhab.core.thing.profiles.ProfileTypeUID;
|
||||||
import org.openhab.core.transform.TransformationService;
|
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.Component;
|
||||||
import org.osgi.service.component.annotations.Reference;
|
import org.osgi.service.component.annotations.Reference;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Profilefactory that creates the transformation profile for the map transformation service
|
* {@link ProfileFactory} that creates the transformation profile for the {@link MapTransformationService}.
|
||||||
*
|
|
||||||
* @author Stefan Triller - initial contribution
|
|
||||||
*
|
*
|
||||||
|
* @author Stefan Triller - Initial contribution
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
@Component(service = { ProfileFactory.class, ProfileTypeProvider.class })
|
@Component(service = { ProfileFactory.class, ProfileTypeProvider.class })
|
||||||
|
@ -45,7 +45,7 @@ public class MapTransformationProfileFactory implements ProfileFactory, ProfileT
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<ProfileType> getProfileTypes(@Nullable Locale locale) {
|
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())
|
.newState(MapTransformationProfile.PROFILE_TYPE_UID, MapTransformationProfile.PROFILE_TYPE_UID.getId())
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,7 @@ public class MapTransformationProfileFactory implements ProfileFactory, ProfileT
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<ProfileTypeUID> getSupportedProfileTypeUIDs() {
|
public Collection<ProfileTypeUID> getSupportedProfileTypeUIDs() {
|
||||||
return Arrays.asList(MapTransformationProfile.PROFILE_TYPE_UID);
|
return List.of(MapTransformationProfile.PROFILE_TYPE_UID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Reference(target = "(openhab.transform=MAP)")
|
@Reference(target = "(openhab.transform=MAP)")
|
||||||
|
|
|
@ -8,8 +8,9 @@
|
||||||
<parameter name="function" type="text" required="true">
|
<parameter name="function" type="text" required="true">
|
||||||
<label>Filename</label>
|
<label>Filename</label>
|
||||||
<description>Filename containing the mapping information.</description>
|
<description>Filename containing the mapping information.</description>
|
||||||
|
<limitToOptions>false</limitToOptions>
|
||||||
</parameter>
|
</parameter>
|
||||||
<parameter name="sourceFormat" type="text" required="false">
|
<parameter name="sourceFormat" type="text">
|
||||||
<label>State Formatter</label>
|
<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>
|
<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>
|
<advanced>true</advanced>
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Bundle resources go in here!
|
|
Loading…
Reference in New Issue