The browser-based cool stuff soon available to play with!
When it comes to manage multiple users accessing the same model resource online, the most straight forward way is to consider using a repository, such as EMFStore or CDO. The main reason why these technologies are not well suited for textual resources is the serialization format. Classical EMF resources are persisted in XMI, while resources with textual content are often persisted as-is, and this is also the case of Xtext resources.
Moreover, I don’t like the idea of persisting model content into databases… such a decision will make migrating models complex afterwards, compared to traditional file storage systems.
Anyway, I have at least two reasons to consider the problem right from the beginning. What we need is a component acting like a workspace in a web context. With the first prototype presented at MoDELS, the workspace was simply mapped to a root folder in the server’s file storage system.
To be able to manage concurrent users access, we need to keep track of information about the users accessing the workbench, such as their ID, name, company, projects, etc. We need to maintain the state of files currently locked, and by who the files are locked.
A database is a good candidate to store and manage such metadata, then we need to map the files in the file system to that metadata in the database, and provide a convenient API unifying the access to the couple (file storage system, database) as a unique singleton providing basic functions like creating a projet, creating a file, locking a file, etc. Ok, this sounds like an ECM repository right? After all, DSL files can be seen as “enterprise content”, and they are first-class entities in our scenario.
We also added an extension point that allows to integrate DSL editors easily. These are the DSLs currently contributed to the workbench:
- Fowler’s DSL: a language for describing state machines,
- Arithmetics: a language for describing arithmetic expressions,
- Dimain Model: classical entities and relationships language
- Humming Bird: a language for describing embedded system devices