2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.mycroft.internal.api;
15 import java.util.stream.Stream;
17 import javax.validation.constraints.NotNull;
19 import org.eclipse.jdt.annotation.NonNullByDefault;
20 import org.openhab.binding.mycroft.internal.api.dto.BaseMessage;
21 import org.openhab.binding.mycroft.internal.api.dto.MessageAudioNext;
22 import org.openhab.binding.mycroft.internal.api.dto.MessageAudioPause;
23 import org.openhab.binding.mycroft.internal.api.dto.MessageAudioPlay;
24 import org.openhab.binding.mycroft.internal.api.dto.MessageAudioPrev;
25 import org.openhab.binding.mycroft.internal.api.dto.MessageAudioResume;
26 import org.openhab.binding.mycroft.internal.api.dto.MessageAudioStop;
27 import org.openhab.binding.mycroft.internal.api.dto.MessageAudioTrackInfo;
28 import org.openhab.binding.mycroft.internal.api.dto.MessageAudioTrackInfoReply;
29 import org.openhab.binding.mycroft.internal.api.dto.MessageMicListen;
30 import org.openhab.binding.mycroft.internal.api.dto.MessageRecognizerLoopRecordBegin;
31 import org.openhab.binding.mycroft.internal.api.dto.MessageRecognizerLoopRecordEnd;
32 import org.openhab.binding.mycroft.internal.api.dto.MessageRecognizerLoopUtterance;
33 import org.openhab.binding.mycroft.internal.api.dto.MessageSpeak;
34 import org.openhab.binding.mycroft.internal.api.dto.MessageVolumeDecrease;
35 import org.openhab.binding.mycroft.internal.api.dto.MessageVolumeDuck;
36 import org.openhab.binding.mycroft.internal.api.dto.MessageVolumeGet;
37 import org.openhab.binding.mycroft.internal.api.dto.MessageVolumeGetResponse;
38 import org.openhab.binding.mycroft.internal.api.dto.MessageVolumeIncrease;
39 import org.openhab.binding.mycroft.internal.api.dto.MessageVolumeMute;
40 import org.openhab.binding.mycroft.internal.api.dto.MessageVolumeSet;
41 import org.openhab.binding.mycroft.internal.api.dto.MessageVolumeUnduck;
42 import org.openhab.binding.mycroft.internal.api.dto.MessageVolumeUnmute;
45 * All message type of interest, issued by Mycroft, are referenced here
47 * @author Gwendal Roulleau - Initial contribution
50 public enum MessageType {
52 any("special-anymessages", BaseMessage.class),
53 speak("speak", MessageSpeak.class),
54 recognizer_loop__record_begin("recognizer_loop:record_begin", MessageRecognizerLoopRecordBegin.class),
55 recognizer_loop__record_end("recognizer_loop:record_end", MessageRecognizerLoopRecordEnd.class),
56 recognizer_loop__utterance("recognizer_loop:utterance", MessageRecognizerLoopUtterance.class),
57 mycroft_mic_listen("mycroft.mic.listen", MessageMicListen.class),
59 mycroft_audio_service_pause("mycroft.audio.service.pause", MessageAudioPause.class),
60 mycroft_audio_service_resume("mycroft.audio.service.resume", MessageAudioResume.class),
61 mycroft_audio_service_stop("mycroft.audio.service.stop", MessageAudioStop.class),
62 mycroft_audio_service_play("mycroft.audio.service.play", MessageAudioPlay.class),
63 mycroft_audio_service_next("mycroft.audio.service.next", MessageAudioNext.class),
64 mycroft_audio_service_prev("mycroft.audio.service.prev", MessageAudioPrev.class),
65 mycroft_audio_service_track_info("mycroft.audio.service.track_info", MessageAudioTrackInfo.class),
66 mycroft_audio_service_track_info_reply("mycroft.audio.service.track_info_reply", MessageAudioTrackInfoReply.class),
68 mycroft_volume_set("mycroft.volume.set", MessageVolumeSet.class),
69 mycroft_volume_increase("mycroft.volume.increase", MessageVolumeIncrease.class),
70 mycroft_volume_decrease("mycroft.volume.decrease", MessageVolumeDecrease.class),
71 mycroft_volume_get("mycroft.volume.get", MessageVolumeGet.class),
72 mycroft_volume_get_response("mycroft.volume.get.response", MessageVolumeGetResponse.class),
73 mycroft_volume_mute("mycroft.volume.mute", MessageVolumeMute.class),
74 mycroft_volume_unmute("mycroft.volume.unmute", MessageVolumeUnmute.class),
75 mycroft_volume_duck("mycroft.volume.duck", MessageVolumeDuck.class),
76 mycroft_volume_unduck("mycroft.volume.unduck", MessageVolumeUnduck.class),
78 mycroft_reminder_mycroftai__reminder("mycroft-reminder.mycroftai:reminder", BaseMessage.class),
79 mycroft_date_time_mycroftai__timeskillupdate_display("mycroft-date-time.mycroftai:TimeSkillupdate_display",
81 mycroft_configuration_mycroftai__configurationskillupdate_remote(
82 "mycroft-configuration.mycroftai:ConfigurationSkillupdate_remote", BaseMessage.class);
84 private @NotNull Class<? extends BaseMessage> messageTypeClass;
85 private @NotNull String messageTypeName;
87 MessageType(String messageTypeName, Class<? extends BaseMessage> messageType) {
88 this.messageTypeClass = messageType;
89 this.messageTypeName = messageTypeName;
93 * Get the expected message type for this message
95 * @return The message type class associated with this type
97 public @NotNull Class<? extends BaseMessage> getMessageTypeClass() {
98 return messageTypeClass;
102 public static MessageType fromString(String asString) {
103 return Stream.of(values()).filter(messageType -> messageType.messageTypeName.equals(asString)).findFirst()
107 public String getMessageTypeName() {
108 return messageTypeName;
111 protected void setMessageTypeName(String messageTypeName) {
112 this.messageTypeName = messageTypeName;