use of org.eclipse.smarthome.core.thing.profiles.ProfileTypeUID in project smarthome by eclipse.
the class CommunicationManager method getProfile.
private Profile getProfile(ItemChannelLink link, Item item, @Nullable Thing thing) {
synchronized (profiles) {
Profile profile = profiles.get(link.getUID());
if (profile != null) {
return profile;
}
ProfileTypeUID profileTypeUID = determineProfileTypeUID(link, item, thing);
if (profileTypeUID != null) {
profile = getProfileFromFactories(profileTypeUID, link, createCallback(link));
if (profile != null) {
profiles.put(link.getUID(), profile);
return profile;
}
}
return new NoOpProfile();
}
}
use of org.eclipse.smarthome.core.thing.profiles.ProfileTypeUID in project smarthome by eclipse.
the class CommunicationManagerTest method setup.
@Before
public void setup() {
initMocks(this);
safeCaller = getService(SafeCaller.class);
assertNotNull(safeCaller);
manager = new CommunicationManager();
manager.setEventPublisher(eventPublisher);
manager.setDefaultProfileFactory(new SystemProfileFactory());
manager.setSafeCaller(safeCaller);
doAnswer(invocation -> {
switch(((Channel) invocation.getArguments()[0]).getKind()) {
case STATE:
return new ProfileTypeUID("test:state");
case TRIGGER:
return new ProfileTypeUID("test:trigger");
}
return null;
}).when(mockProfileAdvisor).getSuggestedProfileTypeUID(isA(Channel.class), isA(String.class));
doAnswer(invocation -> {
switch(((ProfileTypeUID) invocation.getArguments()[0]).toString()) {
case "test:state":
return stateProfile;
case "test:trigger":
return triggerProfile;
}
return null;
}).when(mockProfileFactory).createProfile(isA(ProfileTypeUID.class), isA(ProfileCallback.class), isA(ProfileContext.class));
when(mockProfileFactory.getSupportedProfileTypeUIDs()).thenReturn(Stream.of(new ProfileTypeUID("test:state"), new ProfileTypeUID("test:trigger")).collect(Collectors.toList()));
manager.addProfileFactory(mockProfileFactory);
manager.addProfileAdvisor(mockProfileAdvisor);
ItemChannelLinkRegistry iclRegistry = new ItemChannelLinkRegistry() {
@Override
public Stream<ItemChannelLink> stream() {
return Arrays.asList(LINK_1_S1, LINK_1_S2, LINK_2_S2, LINK_1_T1, LINK_1_T2, LINK_2_T2).stream();
}
};
manager.setItemChannelLinkRegistry(iclRegistry);
when(itemRegistry.get(eq(ITEM_NAME_1))).thenReturn(ITEM_1);
when(itemRegistry.get(eq(ITEM_NAME_2))).thenReturn(ITEM_2);
manager.setItemRegistry(itemRegistry);
THING.setHandler(mockHandler);
when(thingRegistry.get(eq(THING_UID))).thenReturn(THING);
manager.setThingRegistry(thingRegistry);
manager.addItemFactory(new CoreItemFactory());
}
use of org.eclipse.smarthome.core.thing.profiles.ProfileTypeUID in project smarthome by eclipse.
the class CommunicationManager method determineProfileTypeUID.
@Nullable
private ProfileTypeUID determineProfileTypeUID(ItemChannelLink link, Item item, @Nullable Thing thing) {
ProfileTypeUID profileTypeUID = getConfiguredProfileTypeUID(link);
Channel channel = null;
if (profileTypeUID == null) {
if (thing == null) {
return null;
}
channel = thing.getChannel(link.getLinkedUID().getId());
if (channel == null) {
return null;
}
// ask advisors
profileTypeUID = getAdvice(link, item, channel);
if (profileTypeUID == null) {
// ask default advisor
logger.trace("No profile advisor found for link {}, falling back to the defaults", link);
profileTypeUID = defaultProfileFactory.getSuggestedProfileTypeUID(channel, item.getType());
}
}
return profileTypeUID;
}
use of org.eclipse.smarthome.core.thing.profiles.ProfileTypeUID in project smarthome by eclipse.
the class ChannelTypeResourceTest method returnLinkableItemTypesForTriggerChannelType.
@SuppressWarnings("unchecked")
@Test
public void returnLinkableItemTypesForTriggerChannelType() throws IOException {
ChannelType channelType = mockChannelType("ct");
ChannelTypeUID uid = channelType.getUID();
ProfileTypeUID profileTypeUID = new ProfileTypeUID("system:profileType");
when(channelTypeRegistry.getChannelType(uid)).thenReturn(channelType);
TriggerProfileType profileType = mock(TriggerProfileType.class);
when(profileType.getUID()).thenReturn(profileTypeUID);
when(profileType.getSupportedChannelTypeUIDs()).thenReturn(Collections.singletonList(uid));
when(profileType.getSupportedItemTypes()).thenReturn(Arrays.asList("Switch", "Dimmer"));
when(profileTypeRegistry.getProfileTypes()).thenReturn(Collections.singletonList(profileType));
Response response = channelTypeResource.getLinkableItemTypes(uid.getAsString());
verify(channelTypeRegistry).getChannelType(uid);
verify(profileTypeRegistry).getProfileTypes();
assertThat(response.getStatus(), is(200));
assertThat((Set<String>) response.getEntity(), IsCollectionContaining.hasItems("Switch", "Dimmer"));
}
Aggregations