Set a default presentation pattern for String/Number/Datetime items (#4175)

* Set a default presentation pattern for String/Number/Datetime items

A default state pattern was previously provided by ChannelStateDescriptionProvider only for String and Number items linked to a channel.
It is now the class DefaultStateDescriptionFragmentProvider which is responsible for providing the default state pattern for items, whether the item is linked to a channel or not.
This new class is the lowest ranked StateDescriptionFragmentProvider so that all other providers have priority in setting the state pattern.

Default pattern for string item: %s
Default pattern for datetime item or group with datetime state: %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS
Default pattern for number item or group with number state: %.0f
Default pattern for number+dimension item or group with number+dimension state: %.0f %unit%

Closes #4071
Closes #3835

Signed-off-by: Laurent Garnier <lg.hc@free.fr>
This commit is contained in:
lolodomo
2024-05-02 16:29:35 +02:00
committed by GitHub
parent 1b503afdbb
commit 1fb949ba8f
5 changed files with 142 additions and 19 deletions
@@ -35,6 +35,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import org.openhab.core.common.registry.RegistryChangeListener;
import org.openhab.core.events.EventPublisher;
import org.openhab.core.i18n.UnitProvider;
import org.openhab.core.internal.items.DefaultStateDescriptionFragmentProvider;
import org.openhab.core.internal.items.ItemBuilderFactoryImpl;
import org.openhab.core.internal.items.ItemRegistryImpl;
import org.openhab.core.items.events.ItemAddedEvent;
@@ -101,7 +102,8 @@ public class ItemRegistryImplTest extends JavaTest {
itemProvider.add(cameraItem4);
// setup ItemRegistryImpl with necessary dependencies:
itemRegistry = new ItemRegistryImpl(mock(MetadataRegistry.class)) {
itemRegistry = new ItemRegistryImpl(mock(MetadataRegistry.class),
mock(DefaultStateDescriptionFragmentProvider.class)) {
{
addProvider(itemProvider);
setManagedProvider(itemProvider);