radial sugiyama positioning integration

This commit is contained in:
Oxy8
2026-03-23 11:13:27 -03:00
parent 6b9115e43b
commit 696844f341
51 changed files with 10089 additions and 364 deletions

View File

@@ -38,6 +38,12 @@ type Config struct {
SparqlReadyDelay time.Duration
SparqlReadyTimeout time.Duration
HierarchyLayoutEngine string
HierarchyLayoutBridgeBin string
HierarchyLayoutBridgeWorkdir string
HierarchyLayoutTimeout time.Duration
HierarchyLayoutRootIRI string
ListenAddr string
}
@@ -64,6 +70,11 @@ func LoadConfig() (Config, error) {
SparqlLoadOnStart: envBool("SPARQL_LOAD_ON_START", false),
SparqlClearOnStart: envBool("SPARQL_CLEAR_ON_START", false),
HierarchyLayoutEngine: envString("HIERARCHY_LAYOUT_ENGINE", "go"),
HierarchyLayoutBridgeBin: envString("HIERARCHY_LAYOUT_BRIDGE_BIN", "/app/radial_sugiyama_go_bridge"),
HierarchyLayoutBridgeWorkdir: envString("HIERARCHY_LAYOUT_BRIDGE_WORKDIR", "/workspace/radial_sugiyama"),
HierarchyLayoutRootIRI: envString("HIERARCHY_LAYOUT_ROOT_IRI", "http://purl.obolibrary.org/obo/BFO_0000001"),
SparqlReadyRetries: envInt("SPARQL_READY_RETRIES", 30),
ListenAddr: envString("LISTEN_ADDR", ":8000"),
}
@@ -81,6 +92,10 @@ func LoadConfig() (Config, error) {
if err != nil {
return Config{}, err
}
cfg.HierarchyLayoutTimeout, err = envSeconds("HIERARCHY_LAYOUT_TIMEOUT_S", 60)
if err != nil {
return Config{}, err
}
if cfg.SparqlLoadOnStart && strings.TrimSpace(cfg.SparqlDataFile) == "" {
return Config{}, fmt.Errorf("SPARQL_LOAD_ON_START=true but SPARQL_DATA_FILE is not set")
@@ -110,6 +125,24 @@ func LoadConfig() (Config, error) {
if cfg.EdgeBatchSize > cfg.MaxEdgeLimit {
return Config{}, fmt.Errorf("EDGE_BATCH_SIZE must be <= MAX_EDGE_LIMIT")
}
switch strings.ToLower(strings.TrimSpace(cfg.HierarchyLayoutEngine)) {
case "go", "rust":
cfg.HierarchyLayoutEngine = strings.ToLower(strings.TrimSpace(cfg.HierarchyLayoutEngine))
default:
return Config{}, fmt.Errorf("HIERARCHY_LAYOUT_ENGINE must be 'go' or 'rust'")
}
if strings.TrimSpace(cfg.HierarchyLayoutBridgeBin) == "" {
return Config{}, fmt.Errorf("HIERARCHY_LAYOUT_BRIDGE_BIN must not be empty")
}
if strings.TrimSpace(cfg.HierarchyLayoutBridgeWorkdir) == "" {
return Config{}, fmt.Errorf("HIERARCHY_LAYOUT_BRIDGE_WORKDIR must not be empty")
}
if strings.TrimSpace(cfg.HierarchyLayoutRootIRI) == "" {
return Config{}, fmt.Errorf("HIERARCHY_LAYOUT_ROOT_IRI must not be empty")
}
if cfg.HierarchyLayoutTimeout <= 0 {
return Config{}, fmt.Errorf("HIERARCHY_LAYOUT_TIMEOUT_S must be > 0")
}
return cfg, nil
}