Current section
Files
Jump to
Current section
Files
lib/canonical/filesystem.ex
defmodule Paradigm.Canonical.Filesystem do
@moduledoc """
The filesystem model.
"""
alias Paradigm.{Package, Class, Property, PrimitiveType}
def definition do
%Paradigm{
name: "FileSystem",
description: "Describes file/folder structure including file contents.",
primitive_types: %{"string" => %PrimitiveType{name: "String"}},
packages: %{
"filesystem_package" => %Package{
name: "filesystem",
uri: "http://example.org/filesystem",
nested_packages: [],
owned_types: ["node", "file", "folder"]
}
},
classes: %{
"file" => %Class{
name: "File",
is_abstract: false,
owned_attributes: ["file_contents", "file_extension"],
super_classes: ["node"]
},
"folder" => %Class{
name: "Folder",
is_abstract: false,
owned_attributes: ["folder_children"],
super_classes: ["node"]
},
"node" => %Class{
name: "Node",
is_abstract: true,
owned_attributes: ["node_name", "node_parent"],
super_classes: []
}
},
enumerations: %{},
properties: %{
"file_contents" => %Property{
name: "contents",
type: "string",
is_ordered: false,
is_composite: false,
lower_bound: 1,
upper_bound: 1
},
"folder_children" => %Property{
name: "children",
type: "node",
is_ordered: true,
is_composite: true,
lower_bound: 0,
upper_bound: :infinity
},
"file_extension" => %Property{
name: "extension",
type: "string"
},
"node_name" => %Property{
name: "name",
type: "string"
},
"node_parent" => %Property{
name: "parent",
type: "folder",
is_ordered: false,
is_composite: false,
lower_bound: 0,
upper_bound: 1
}
}
}
end
end