001/*
002 * SPDX-License-Identifier: Apache-2.0
003 *
004 * Copyright 2024-2026 The Enola <https://enola.dev> Authors
005 *
006 * Licensed under the Apache License, Version 2.0 (the "License");
007 * you may not use this file except in compliance with the License.
008 * You may obtain a copy of the License at
009 *
010 *     https://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package dev.enola.core.message;
019
020import dev.enola.common.protobuf.DescriptorProvider;
021import dev.enola.thing.KIRI;
022import dev.enola.thing.message.MessageWithIRI;
023import dev.enola.thing.message.ProtoTypes;
024import dev.enola.thing.message.ThingExt;
025import dev.enola.thing.proto.Things;
026
027import java.util.Map;
028
029public class ProtoMessageToThingConnector extends ProtoToThingConnector {
030    // TODO Move to package dev.enola.thing.message ?
031
032    public ProtoMessageToThingConnector(DescriptorProvider descriptorProvider) {
033        super(descriptorProvider);
034    }
035
036    @Override
037    public String iri() {
038        return ProtoTypes.MESSAGE_DESCRIPTOR_ERI_PREFIX + "{FQN}";
039    }
040
041    /*
042        @Override
043        public Type type() {
044            return Type.newBuilder()
045                    .setEmoji("🕵🏾‍♀️")
046                    .setName("enola.dev/proto/message")
047                    .setUri(iri())
048                    .setProto(DescriptorProto.getDescriptor().getFullName())
049                    .build();
050        }
051    */
052
053    @Override
054    public void augment(Things.Builder things, String iri, Map<String, String> parameters) {
055        var fqn = parameters.get("FQN");
056        if (!"{FQN}".equals(fqn)) {
057            var descriptor = descriptorProvider.findByName(fqn);
058            var newThing = m2t.convert(new MessageWithIRI(iri, descriptor.toProto()));
059            ThingExt.setString(newThing, KIRI.RDFS.LABEL, descriptor.getName());
060            things.addThings(newThing);
061        }
062    }
063}