How to update mps sandbox/model over integrated mbeddr http server
First of all I want to mention my use case.
It looks like this:
reads xml from http server -> MPS sandbox -> updates xml on http server
reads xml from http server -> custom web app -> updates xml on http server
You see, I want to have a bidirectional data flow, so that the newest version of my mps thing lies on the http server and both MPS sandbox and web app should fetch data on startup.
My sandbox environment is considered for developers and the web app for none-developers.
My plan until now (big thanks to @Vladimir Sitnikov):
Add an action plugin which reads and saves the xml to http://localhost:8080/project-name/xml/file.xml
and updates my model accordingly. Secondly I have to create my web app and fetch the file from there.
Anyway I don't get further with my plan. I don't know how to get the sandbox content and save it to a xml file yet.
Any help is appreciated!
Is there still a better solution or am I on the right track?
Thanks for any support!
Kind regards
msch95
It looks like this:
reads xml from http server -> MPS sandbox -> updates xml on http server
reads xml from http server -> custom web app -> updates xml on http server
You see, I want to have a bidirectional data flow, so that the newest version of my mps thing lies on the http server and both MPS sandbox and web app should fetch data on startup.
My sandbox environment is considered for developers and the web app for none-developers.
My plan until now (big thanks to @Vladimir Sitnikov):
Add an action plugin which reads and saves the xml to http://localhost:8080/project-name/xml/file.xml
and updates my model accordingly. Secondly I have to create my web app and fetch the file from there.
My Code so far
request handler NodeOpenRequest { applicationID: select handled HTTP method: all canHandleRequest(segments, request)->boolean { segments.size == 3; } handleRequest(segments, request, response)->void { string project = segments.get(0); string modelId = segments.get(1); string nodeId = segments.get(2); response.setContentType("text/html;charset=utf-8"); MbeddrURLHelper.openLink(project, modelId, nodeId); response.getWriter().println("It works!"); response.setStatus(1); } }
Anyway I don't get further with my plan. I don't know how to get the sandbox content and save it to a xml file yet.
Any help is appreciated!
Is there still a better solution or am I on the right track?
Thanks for any support!
Kind regards
msch95
Please sign in to leave a comment.
the approach that would propably work best for you in the described use case is using the custom persistance of MPS https://confluence.jetbrains.com/display/MPSD32/Custom+Persistence+Cookbook . There is also an example project shipped with MPS called "xmlPersistence".
On the one hand you can write a m2m transformation in the generator aspect of your language from your own meta model to the jetbrains.mps.core.xml language but then you still would have to worry about getting transformations from xml -> MPS. Therefor I think custom persistance is the sensible way to go.
If custom persistance is not what you are looking for than you can always modify the models in MPS via the Open API in MPS. https://confluence.jetbrains.com/display/MPSD32/Open+API+-+accessing+models+from+code
Best regards,
Phillipp
I've successfully installed the xmlPersistence Plugin, but I don't know how to get further..
What isn't clear to me is, how I can persist my custom language filled with data in a solution to xml, so that I can read/write this data from my web app and MPS also reads and saves this data to this xml.
My custom language looks like this.. pretty simple
Best regards,
msch95