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;
* @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
*
* @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) {
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;
+ }
}
*/
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;
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 })
@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());
}
@Override
public Collection<ProfileTypeUID> getSupportedProfileTypeUIDs() {
- return Arrays.asList(MapTransformationProfile.PROFILE_TYPE_UID);
+ return List.of(MapTransformationProfile.PROFILE_TYPE_UID);
}
@Reference(target = "(openhab.transform=MAP)")