Skip to content

Commit

Permalink
more CommonRules API refactoring.
Browse files Browse the repository at this point in the history
- PropertyCommonRulesService now simply takes MidiCIDevice at constructor
  - it will help having more predefined resource properties at device.config.
- remove PropertyRulesHelper from public class inheritance
  • Loading branch information
atsushieno committed Mar 5, 2024
1 parent b92d6a3 commit 48dfdc8
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 111 deletions.
25 changes: 7 additions & 18 deletions ktmidi-ci/api/android/ktmidi-ci.api
Original file line number Diff line number Diff line change
Expand Up @@ -1169,6 +1169,7 @@ public final class dev/atsushieno/ktmidi/ci/ServiceObservablePropertyList : dev/
public fun getMetadataList ()Ljava/util/List;
public final fun removeMetadata (Ljava/lang/String;)V
public final fun updateMetadata (Ljava/lang/String;Ldev/atsushieno/ktmidi/ci/PropertyMetadata;)V
public final fun updateValue (Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
}

public final class dev/atsushieno/ktmidi/ci/SubscriptionActionState : java/lang/Enum {
Expand Down Expand Up @@ -1281,13 +1282,15 @@ public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesKnown
public static final field INSTANCE Ldev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesKnownMimeTypes;
}

public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyClient : dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyHelper, dev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules {
public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyClient : dev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;Ldev/atsushieno/ktmidi/ci/ClientConnection;)V
public fun createDataRequestHeader (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public fun createStatusHeader (I)Ljava/util/List;
public fun createSubscriptionHeader (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public fun decodeBody (Ljava/util/List;Ljava/util/List;)Ljava/util/List;
public fun encodeBody (Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
public fun getHeaderFieldInteger (Ljava/util/List;Ljava/lang/String;)Ljava/lang/Integer;
public fun getHeaderFieldString (Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;
public fun getMetadataList ()Ljava/util/List;
public fun getPropertyCatalogUpdated ()Ljava/util/List;
public fun getPropertyIdForHeader (Ljava/util/List;)Ljava/lang/String;
Expand All @@ -1299,18 +1302,6 @@ public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPrope
public fun requestPropertyList (B)V
}

public abstract class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyHelper {
public fun <init> (Ldev/atsushieno/ktmidi/ci/Logger;)V
public final fun createRequestHeaderBytes (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public final fun createSubscribeHeaderBytes (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
public final fun getHeaderFieldInteger (Ljava/util/List;Ljava/lang/String;)Ljava/lang/Integer;
public final fun getHeaderFieldString (Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;
protected final fun getLogger ()Ldev/atsushieno/ktmidi/ci/Logger;
public final fun getPropertyIdentifierInternal (Ljava/util/List;)Ljava/lang/String;
public final fun getResourceListRequestBytes ()Ljava/util/List;
public final fun getResourceListRequestJson ()Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;
}

public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyMetadata : dev/atsushieno/ktmidi/ci/PropertyMetadata {
public static final field Companion Ldev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyMetadata$Companion;
public fun <init> ()V
Expand Down Expand Up @@ -1371,23 +1362,21 @@ public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPrope
public static fun values ()[Ldev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyMetadata$Originator;
}

public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyService : dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyHelper, dev/atsushieno/ktmidi/ci/MidiCIServicePropertyRules {
public fun <init> (Ldev/atsushieno/ktmidi/ci/Logger;ILdev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;Ljava/util/List;Ljava/util/List;Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;)V
public synthetic fun <init> (Ldev/atsushieno/ktmidi/ci/Logger;ILdev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;Ljava/util/List;Ljava/util/List;Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyService : dev/atsushieno/ktmidi/ci/MidiCIServicePropertyRules {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;)V
public fun addMetadata (Ldev/atsushieno/ktmidi/ci/PropertyMetadata;)V
public fun createShutdownSubscriptionHeader (Ljava/lang/String;)Ljava/util/List;
public fun createUpdateNotificationHeader (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public fun decodeBody (Ljava/util/List;Ljava/util/List;)Ljava/util/List;
public fun encodeBody (Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
public final fun getDeviceInfo ()Ldev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;
public fun getHeaderFieldString (Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;
public final fun getLinkedResources ()Ljava/util/Map;
public fun getMetadataList ()Ljava/util/List;
public fun getPropertyCatalogUpdated ()Ljava/util/List;
public fun getPropertyData-IoAF18A (Ldev/atsushieno/ktmidi/ci/Message$GetPropertyData;)Ljava/lang/Object;
public fun getPropertyIdForHeader (Ljava/util/List;)Ljava/lang/String;
public fun getSubscriptions ()Ljava/util/List;
public fun removeMetadata (Ljava/lang/String;)V
public final fun setDeviceInfo (Ldev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;)V
public fun setPropertyData-IoAF18A (Ldev/atsushieno/ktmidi/ci/Message$SetPropertyData;)Ljava/lang/Object;
public final fun setPropertyData-gIAlu-s (Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;Ljava/util/List;)Ljava/lang/Object;
public final fun subscribe (ILdev/atsushieno/ktmidi/ci/json/Json$JsonValue;)Lkotlin/Pair;
Expand Down
25 changes: 7 additions & 18 deletions ktmidi-ci/api/jvm/ktmidi-ci.api
Original file line number Diff line number Diff line change
Expand Up @@ -1169,6 +1169,7 @@ public final class dev/atsushieno/ktmidi/ci/ServiceObservablePropertyList : dev/
public fun getMetadataList ()Ljava/util/List;
public final fun removeMetadata (Ljava/lang/String;)V
public final fun updateMetadata (Ljava/lang/String;Ldev/atsushieno/ktmidi/ci/PropertyMetadata;)V
public final fun updateValue (Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
}

public final class dev/atsushieno/ktmidi/ci/SubscriptionActionState : java/lang/Enum {
Expand Down Expand Up @@ -1281,13 +1282,15 @@ public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesKnown
public static final field INSTANCE Ldev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesKnownMimeTypes;
}

public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyClient : dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyHelper, dev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules {
public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyClient : dev/atsushieno/ktmidi/ci/MidiCIClientPropertyRules {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;Ldev/atsushieno/ktmidi/ci/ClientConnection;)V
public fun createDataRequestHeader (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public fun createStatusHeader (I)Ljava/util/List;
public fun createSubscriptionHeader (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public fun decodeBody (Ljava/util/List;Ljava/util/List;)Ljava/util/List;
public fun encodeBody (Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
public fun getHeaderFieldInteger (Ljava/util/List;Ljava/lang/String;)Ljava/lang/Integer;
public fun getHeaderFieldString (Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;
public fun getMetadataList ()Ljava/util/List;
public fun getPropertyCatalogUpdated ()Ljava/util/List;
public fun getPropertyIdForHeader (Ljava/util/List;)Ljava/lang/String;
Expand All @@ -1299,18 +1302,6 @@ public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPrope
public fun requestPropertyList (B)V
}

public abstract class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyHelper {
public fun <init> (Ldev/atsushieno/ktmidi/ci/Logger;)V
public final fun createRequestHeaderBytes (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public final fun createSubscribeHeaderBytes (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
public final fun getHeaderFieldInteger (Ljava/util/List;Ljava/lang/String;)Ljava/lang/Integer;
public final fun getHeaderFieldString (Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;
protected final fun getLogger ()Ldev/atsushieno/ktmidi/ci/Logger;
public final fun getPropertyIdentifierInternal (Ljava/util/List;)Ljava/lang/String;
public final fun getResourceListRequestBytes ()Ljava/util/List;
public final fun getResourceListRequestJson ()Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;
}

public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyMetadata : dev/atsushieno/ktmidi/ci/PropertyMetadata {
public static final field Companion Ldev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyMetadata$Companion;
public fun <init> ()V
Expand Down Expand Up @@ -1371,23 +1362,21 @@ public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPrope
public static fun values ()[Ldev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyMetadata$Originator;
}

public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyService : dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyHelper, dev/atsushieno/ktmidi/ci/MidiCIServicePropertyRules {
public fun <init> (Ldev/atsushieno/ktmidi/ci/Logger;ILdev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;Ljava/util/List;Ljava/util/List;Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;)V
public synthetic fun <init> (Ldev/atsushieno/ktmidi/ci/Logger;ILdev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;Ljava/util/List;Ljava/util/List;Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final class dev/atsushieno/ktmidi/ci/propertycommonrules/CommonRulesPropertyService : dev/atsushieno/ktmidi/ci/MidiCIServicePropertyRules {
public fun <init> (Ldev/atsushieno/ktmidi/ci/MidiCIDevice;)V
public fun addMetadata (Ldev/atsushieno/ktmidi/ci/PropertyMetadata;)V
public fun createShutdownSubscriptionHeader (Ljava/lang/String;)Ljava/util/List;
public fun createUpdateNotificationHeader (Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;
public fun decodeBody (Ljava/util/List;Ljava/util/List;)Ljava/util/List;
public fun encodeBody (Ljava/util/List;Ljava/lang/String;)Ljava/util/List;
public final fun getDeviceInfo ()Ldev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;
public fun getHeaderFieldString (Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;
public final fun getLinkedResources ()Ljava/util/Map;
public fun getMetadataList ()Ljava/util/List;
public fun getPropertyCatalogUpdated ()Ljava/util/List;
public fun getPropertyData-IoAF18A (Ldev/atsushieno/ktmidi/ci/Message$GetPropertyData;)Ljava/lang/Object;
public fun getPropertyIdForHeader (Ljava/util/List;)Ljava/lang/String;
public fun getSubscriptions ()Ljava/util/List;
public fun removeMetadata (Ljava/lang/String;)V
public final fun setDeviceInfo (Ldev/atsushieno/ktmidi/ci/MidiCIDeviceInfo;)V
public fun setPropertyData-IoAF18A (Ldev/atsushieno/ktmidi/ci/Message$SetPropertyData;)Ljava/lang/Object;
public final fun setPropertyData-gIAlu-s (Ldev/atsushieno/ktmidi/ci/json/Json$JsonValue;Ljava/util/List;)Ljava/lang/Object;
public final fun subscribe (ILdev/atsushieno/ktmidi/ci/json/Json$JsonValue;)Lkotlin/Pair;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class PropertyHostFacade(private val device: MidiCIDevice) {
private val logger by device::logger
private val config by device::config

internal val propertyService: MidiCIServicePropertyRules by lazy { CommonRulesPropertyService(logger, muid, device.deviceInfo, config.propertyValues, config.propertyMetadataList) }
internal val propertyService: MidiCIServicePropertyRules by lazy { CommonRulesPropertyService(device) }
val properties by lazy { ServiceObservablePropertyList(config.propertyValues, propertyService) }
val subscriptions: List<SubscriptionEntry> by propertyService::subscriptions

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,23 @@ import dev.atsushieno.ktmidi.ci.*
import dev.atsushieno.ktmidi.ci.json.Json
import dev.atsushieno.ktmidi.ci.json.JsonParserException

class CommonRulesPropertyClient(private val device: MidiCIDevice, private val conn: ClientConnection) :
CommonRulesPropertyHelper(device.logger), MidiCIClientPropertyRules {
class CommonRulesPropertyClient(private val device: MidiCIDevice, private val conn: ClientConnection)
: MidiCIClientPropertyRules {
private val helper = CommonRulesPropertyHelper(device)
private val logger by device::logger

override fun createDataRequestHeader(propertyId: String, fields: Map<String, Any?>): List<Byte> =
createRequestHeaderBytes(propertyId, fields)
helper.createRequestHeaderBytes(propertyId, fields)

override fun createSubscriptionHeader(propertyId: String, fields: Map<String, Any?>): List<Byte> =
createSubscribeHeaderBytes(propertyId, fields[PropertyCommonHeaderKeys.COMMAND] as String, fields[PropertyCommonHeaderKeys.MUTUAL_ENCODING] as String?)
helper.createSubscribeHeaderBytes(propertyId, fields[PropertyCommonHeaderKeys.COMMAND] as String, fields[PropertyCommonHeaderKeys.MUTUAL_ENCODING] as String?)

override fun getPropertyIdForHeader(header: List<Byte>) = getPropertyIdentifierInternal(header)
override fun getPropertyIdForHeader(header: List<Byte>) = helper.getPropertyIdentifierInternal(header)

override fun getMetadataList(): List<PropertyMetadata> = resourceList

override fun requestPropertyList(group: Byte) {
val requestASCIIBytes = getResourceListRequestBytes()
val requestASCIIBytes = helper.getResourceListRequestBytes()
val msg = Message.GetPropertyData(
Message.Common(device.muid, conn.targetMUID, MidiCIConstants.ADDRESS_FUNCTION_BLOCK, group),
device.messenger.requestIdSerial++,
Expand Down Expand Up @@ -63,6 +65,10 @@ class CommonRulesPropertyClient(private val device: MidiCIDevice, private val co
}
}

override fun getHeaderFieldInteger(header: List<Byte>, field: String): Int? = helper.getHeaderFieldInteger(header, field)

override fun getHeaderFieldString(header: List<Byte>, field: String): String? = helper.getHeaderFieldString(header, field)

override fun getSubscribedProperty(msg: Message.SubscribeProperty): String? {
val subscribeId = getHeaderFieldString(msg.header, PropertyCommonHeaderKeys.SUBSCRIBE_ID)
if (subscribeId == null) {
Expand Down Expand Up @@ -135,8 +141,8 @@ class CommonRulesPropertyClient(private val device: MidiCIDevice, private val co
Pair(false, existing.body)
}

override fun encodeBody(data: List<Byte>, encoding: String?): List<Byte> = encodeBodyInternal(data, encoding)
override fun decodeBody(header: List<Byte>, body: List<Byte>): List<Byte> = decodeBodyInternal(header, body)
override fun encodeBody(data: List<Byte>, encoding: String?): List<Byte> = helper.encodeBody(data, encoding)
override fun decodeBody(header: List<Byte>, body: List<Byte>): List<Byte> = helper.decodeBody(header, body)

override val propertyCatalogUpdated = mutableListOf<() -> Unit>()

Expand Down
Loading

0 comments on commit 48dfdc8

Please sign in to comment.