001/* 002 * SPDX-License-Identifier: Apache-2.0 003 * 004 * Copyright 2023-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.cli; 019 020import static dev.enola.core.thing.ListThingService.ENOLA_ROOT_LIST_THINGS; 021 022import dev.enola.core.proto.EnolaServiceGrpc.EnolaServiceBlockingStub; 023import dev.enola.core.proto.GetThingRequest; 024import dev.enola.thing.gen.graphviz.GraphvizGenerator; 025import dev.enola.thing.message.MoreThings; 026import dev.enola.thing.message.ProtoThings; 027import dev.enola.web.EnolaThingProvider; 028 029import picocli.CommandLine; 030 031@CommandLine.Command(name = "graphviz", description = "Generate Graphviz Graphs from Things") 032public class GenGraphvizCommand extends CommandWithModelAndOutput { 033 034 @Override 035 protected void run(EnolaServiceBlockingStub service) throws Exception { 036 var thingMetadataProvider = getMetadataProvider(new EnolaThingProvider(service)); 037 var graphvizGenerator = new GraphvizGenerator(thingMetadataProvider); 038 039 var request = GetThingRequest.newBuilder().setIri(ENOLA_ROOT_LIST_THINGS).build(); 040 var response = service.getThing(request); 041 var protoThings = MoreThings.fromAny(response.getThing()); 042 var javaThings = ProtoThings.proto2java(protoThings); 043 044 var base = Output.get(output); 045 var graphviz = base.resolve("graphviz.gv"); 046 047 graphvizGenerator.convertIntoOrThrow(javaThings, rp.getWritableResource(graphviz)); 048 } 049}