From cc48f111d9d7b053693c0c988b9caeef8e445ade Mon Sep 17 00:00:00 2001 From: Tuukka Lehtonen Date: Thu, 13 Feb 2020 16:46:00 +0200 Subject: [PATCH] Mapped dev-wiki conversion situation for situational awareness gitlab #99 Change-Id: I3fcecb0db279494bebf3916d7c75eab30cede9dc --- .../Components/Objmap/BidirectionalModel.png | Bin 0 -> 5101 bytes .../Objmap/ObjectMappingTerminology.png | Bin 0 -> 3645 bytes docs/Developer/Components/Objmap/Objmap.md | 180 ++++++ .../Components/Objmap/TriangleModel.png | Bin 0 -> 4545 bytes .../Database/Images/GraphDebuggerVG.png | Bin 0 -> 34178 bytes docs/Developer/Database/VirtualGraphs.md | 22 +- docs/Developer/Images/Simantics_spec_logo.png | Bin 0 -> 417627 bytes docs/Developer/Introduction.md | 2 + .../ModelBrowser/ModelBrowserContributions.md | 128 +++++ docs/Developer/Ontology/Layer0.pdf | Bin 0 -> 364014 bytes docs/Developer/Ontology/TransferableGraph.md | 2 +- .../Developer/Ontology/XMLSchemaConversion.md | 521 ++++++++++++++++++ docs/Developer/Ontology/tg0_tg1.jar | Bin 0 -> 7009155 bytes docs/Developer/Overview/UsefulLinks.md | 60 ++ docs/Developer/SCL/SCLCompiler.md | 29 + docs/Developer/SCL/SCLExamples.md | 27 + docs/Developer/SCL/SCLRegistry.md | 104 ++++ docs/Developer/SCL/SCLTutorial.md | 144 +++++ docs/Developer/SCL/SCLTypes.md | 112 ++++ docs/Developer/TODO.md | 215 ++++++++ 20 files changed, 1535 insertions(+), 11 deletions(-) create mode 100644 docs/Developer/Components/Objmap/BidirectionalModel.png create mode 100644 docs/Developer/Components/Objmap/ObjectMappingTerminology.png create mode 100644 docs/Developer/Components/Objmap/Objmap.md create mode 100644 docs/Developer/Components/Objmap/TriangleModel.png create mode 100644 docs/Developer/Database/Images/GraphDebuggerVG.png create mode 100644 docs/Developer/Images/Simantics_spec_logo.png create mode 100644 docs/Developer/ModelBrowser/ModelBrowserContributions.md create mode 100644 docs/Developer/Ontology/Layer0.pdf create mode 100644 docs/Developer/Ontology/XMLSchemaConversion.md create mode 100644 docs/Developer/Ontology/tg0_tg1.jar create mode 100644 docs/Developer/Overview/UsefulLinks.md create mode 100644 docs/Developer/SCL/SCLCompiler.md create mode 100644 docs/Developer/SCL/SCLExamples.md create mode 100644 docs/Developer/SCL/SCLRegistry.md create mode 100644 docs/Developer/SCL/SCLTutorial.md create mode 100644 docs/Developer/SCL/SCLTypes.md create mode 100644 docs/Developer/TODO.md diff --git a/docs/Developer/Components/Objmap/BidirectionalModel.png b/docs/Developer/Components/Objmap/BidirectionalModel.png new file mode 100644 index 0000000000000000000000000000000000000000..77bcc302bf1e551dad8ab7808a409ea659e905db GIT binary patch literal 5101 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 literal 0 HcmV?d00001 diff --git a/docs/Developer/Components/Objmap/Objmap.md b/docs/Developer/Components/Objmap/Objmap.md new file mode 100644 index 000000000..7db5fefff --- /dev/null +++ b/docs/Developer/Components/Objmap/Objmap.md @@ -0,0 +1,180 @@ +# Introduction + +When implementing an editor in Simantics platform, it is very common that the graph representation cannot be directly used, but the editor needs to create an intermediate model of the subgraph it edits. Some reasons for this are: +* Accessing the database directly is not fast enough. +* An editor using the database directly holds frequently long read locks and cannot operate during write transactions. +* The editor needs to store auxiliary objects attached to the model. +* Editor modifies the intermediate model speculatively before the modification is committed to the database or canceled. +* The modifications in database cannot be applied in the editor immediately (for example during rendering). +* Third-party component requires certain classes to be used. +* Editor needs to be backend-agnostic and cannot directly use database API. + +There are two different approaches for implementing the intermediate model: +1. Triangle model + + The editor modifies the database directly and the changes in the database are eventually propagated to the intermediate model. The editor doesn't change the intermediate model directly. + + ![triangleModel](triangleModel.png) + +2. Bidirectional model + + The editor operates only using the intermediate model and modifications are updated from intermediate model to the database and vice versa. + + ![bidirectionalModel](bidirectionalModel.png) + +By experience, the triangle model is easier to implement correctly, in particular when resources are linked to each other in complex fashion. The `org.simantics.objmap`-plugin tries to make the implementation of the bidirectional model easier by providing a framework for declaratively defining the update procedure between database and intermediate model. It can also be used with triangle model only for one direction or with hybrid model where some operations are implemented using the intermediate model and others modifying the database directly. + +# Design principles + +* Symmetric + * For every operation from database to Java objects there is a corresponding operation from Java objects to database. This makes the framework easier to learn and undestand. +* Non-intrusive + * The Java objects used with the framework do not need to implement any specific interface or follow some specific naming convention. The mapping schema can be defined using annotations or separately from the class definition. +* Support for different use scenarios + * bidirectional / unidirectional + * one shot / continuous + * automatic listening / manual updating +* One-to-one + * For every resource there is a single corresponding Java object and vise versa. This makes the framework easier to understand. It is not a transformation framework. + +# Concepts + +*Mapping* consists of a set of resources called a *domain*, a set of Java objects called a *range* and a collection of *links*. Each link is attached to exactly one domain and range element and each domain and range element has at most one link attached to it. Additionally the link has a *link type* that contains requirements for the domain and range elements in the same link. + +![objectMappingTerminology](objectMappingTerminology.png) + +A mapping is *up-to-date* if every domain and range element has a link and all links satisfy the requirements of their link types. The links of up-to-date mapping form a bijection from domain to range. + +A *mapping schema* associates all domain and range elements with a link type. It is used to add new domain and range elements to the mapping. + +# Mapping interface + +The plug-in represents a mapping with interface `org.simantics.objmap.IMapping`. The interface is symmetric in the sense that every operation on the domain of the mapping has also a counterpart that operates on the range. Typically, if one of the operations requires a read graph, its counterpart requires a write graph. We will describe only the methods operating on the domain of the mapping: + + Set getDomain(); + +Returns the domain of the mapping. All set operations are supported. Adding a new domain element does not automatically create a link to it. Removal of a domain element removes also a link and the target element, but does not remove the element from the database. + + Collection updateDomain(WriteGraph g) throws MappingException; + +Updates all domain elements whose counterpart is modified and creates new domain elements for previously added range elements. Returns the collection of domain elements that were modified or created in the update process. + + Object get(Resource domainElement); + +Returns the counterpart of a domain element or null if the element does not belong to the domain or does not have a link. + + Object map(ReadGraph g, Resource domainElement) throws MappingException; + +A convenience method that adds a domain element to the mapping and immediately updates the mapping and returns the corresponding range element. + + void domainModified(Resource domainElement); + +Tells the mapping that the domain element has been modified. + + boolean isDomainModified(); + +Tells if some domain elements have been modified or added. + + Collection getConflictingDomainElements(); + +Returns a collection of domain elements which have been modified and also their counterparts in the mapping are modified. These elements are in conflict in the sense that the updating domain and range in different orders may produce different results. + + void addMappingListener(IMappingListener listener); + void removeMappingListener(IMappingListener listener); + +Adds or removes a listener for domain and range modifications. + +# Defining a mapping schema + +The primary way for defining a mapping schema is to use Java annotations. The current annotation support is still lacking. Only the following annotations are supported: +* **GraphType(uri)** + * Specifies the domain type that the class corresponds to. +* **RelatedValue(uri)** + * Specifies a correspondence between a field and functional property. +* **RelatedElement(uri)** + * Specifies a correspondence between a field and functional relation +* **RelatedElements(uri)** + * Specifies a correspondence between a field and a relation. The type of the field has to be a collection. + +## Example + +Suppose we have the following annotated classes: + +```java +@GraphType("http://www.simantics.org/Sysdyn#Configuration") +static class Configuration { + @RelatedElements("http://www.vtt.fi/Simantics/Layer0/1.0/Relations#ConsistsOf") + Collection components; +} + +static abstract class Component { +} + +@GraphType("http://www.simantics.org/Sysdyn#Dependency") +static class Dependency extends Component { + @RelatedElement("http://www.simantics.org/Sysdyn#HasTail") + Variable tail; + @RelatedElement("http://www.simantics.org/Sysdyn#HasHead") + Auxiliary head; +} + +static abstract class Variable extends Component { + @RelatedValue("http://www.vtt.fi/Simantics/Layer0/1.0/Relations#HasName") + String name; +} + +@GraphType("http://www.simantics.org/Sysdyn#Auxiliary") +static class Auxiliary extends Variable { +} +``` + +Them the schema can be defined as follows: + +```java +SimpleSchema schema = new SimpleSchema(); +schema.addLinkType(MappingSchemas.fromAnnotations(g, Configuration.class)); +schema.addLinkType(MappingSchemas.fromAnnotations(g, Dependency.class)); +schema.addLinkType(MappingSchemas.fromAnnotations(g, Auxiliary.class)); +``` + +# Using the mapping interface + +Assume that a mapping scheme `scheme` has already been defined and `modelRoot` is the root resource of the model that the editor edits. Then the model is created as follows: + +```java +IMapping mapping = Mappings.create(scheme); +in read transaction { + MyModel model = (MyModel)mapping.map(graph, modelRoot); +} +``` + +There are different ways how the mapping can be updated. The following code forces update for all domain elements. + +```java +in read transaction { + for(Resource r : mapping.getDomain()) + mapping.domainModified(r); + mapping.updateRange(graph); +} +``` + +If the range elements have some kind of "dirty" flags, the update can be optimized: + +```java +in write transaction { + for(Object obj : mapping.getRange()) + if(obj implements MyObject && ((MyObject)obj).isDirty()) + mapping.rangeModified(obj); + mapping.updateDomain(graph); +} +``` + +Often the editor has to update some auxiliary structures when the mapping modifies the range. This can be implemented for example as: + +```java + for(Object obj : mapping.updateRange(graph)) + if(obj implements MyObject) + ((MyObject)obj).updateAuxiliary(); +``` + +The most convenient way for updating the target would be to add graph request listeners for each domain element in the mapping. This is not yet implemented although the current interface should support this without modifications. Currently the only way to listen the database changes is to listen the request that is used to call the updateRange-method. \ No newline at end of file diff --git a/docs/Developer/Components/Objmap/TriangleModel.png b/docs/Developer/Components/Objmap/TriangleModel.png new file mode 100644 index 0000000000000000000000000000000000000000..0918ef8a549c8af966d7e501f5473143164be2b9 GIT binary patch literal 4545 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 literal 0 HcmV?d00001 diff --git a/docs/Developer/Database/Images/GraphDebuggerVG.png b/docs/Developer/Database/Images/GraphDebuggerVG.png new file mode 100644 index 0000000000000000000000000000000000000000..47e592ee557c55999b0441a3c2e8e198ec4f9e83 GIT binary patch literal 34178 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

fE=nO;&a7i9^OWSMhmAjd7(vdDC{hI$Sy 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%0A15qJ?-*ro?1t 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