@startuml

title Model Resources (WP3)

actor "Resource Expert" as re
participant "SODALITE IDE" as ide
participant "Semantic Reasoner" as reasoner
participant "Semantic Knowledge Base\n(ontology in GraphDB)" as ontology

re->ide: Enter\nusername/password
activate ide
ref over ide: Login
ide->reasoner: Retrieve known resource types, etc. (API call)
activate reasoner
ref over reasoner: Check JWT access token
reasoner->ontology: Request resources (SPARQL)
activate ontology
ontology->reasoner: Return resources (JSON)
deactivate ontology
reasoner->ide: Return known resource types, etc. (JSON)
deactivate reasoner
ide->re: Initialization completed - Present design options

loop Design time
    opt Abstract resources
        re->ide: Define new abstract resource type
        ide->reasoner: Request validation (API call)
        activate reasoner
        reasoner->ontology: Query for known inconsistencies (SPARQL)
        activate ontology
        ontology-->reasoner: Return results (JSON)
        deactivate ontology
        reasoner-->ide: Return detected inconsistencies (JSON)
        deactivate reasoner
        ide-->re: Present validation results
    end

    opt Target resources
        re->ide: Define new target resource
        ide->reasoner: Request validation (API call)
        activate reasoner
        reasoner->ontology: Query for known inconsistencies (SPARQL)
        activate ontology
        ontology-->reasoner: Return results (JSON)
        deactivate ontology
        reasoner-->ide: Return detected inconsistencies (JSON)
        deactivate reasoner
        ide-->re: Present validation results
    end

    opt Dependencies
        re->ide: Define new dependency/relationship\nbetween (target/abstract) resources
        ide->reasoner: Request validation (API call)
        activate reasoner
        reasoner->ontology: Query for known inconsistencies (SPARQL)
        activate ontology
        ontology-->reasoner: Return results (JSON)
        deactivate ontology
        reasoner-->ide: Return detected inconsistencies (JSON)
        deactivate reasoner
        ide-->re: Present validation results
    end

    opt Optimizations
        re->ide: Define new optimization approaches/patterns\nfor specific resources
        ide->reasoner: Request validation (API call)
        activate reasoner
        reasoner->ontology: Query for known inconsistencies (SPARQL)
        activate ontology
        ontology-->reasoner: Return results (JSON)
        deactivate ontology
        reasoner-->ide: Return detected inconsistencies (JSON)
        deactivate reasoner
        ide-->re: Present validation results
    end

    opt Ansible artifacts
        re->ide: Define the scripts that will be executed\nduring the lifetime of the application \n (e.g. create, stop, start)
        ide->reasoner: Save the scripts (API call)
        activate reasoner
        reasoner->ontology: Save the scripts in KB
        activate ontology
        ontology-->reasoner: Return success/failure
        deactivate ontology
        reasoner-->ide: Return success/failure
        deactivate reasoner
        ide-->re: Return success/failure
    end


end

re->ide: Submit new resources, relationships, ansible scripts etc.
ide->reasoner: Request to store new pattern (API call)
activate reasoner
reasoner->ontology: Store new pattern (SPARQL)
deactivate reasoner
deactivate ide

@enduml
