PageRenderTime 45ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/de.jabc.cinco.meta.plugin.pyro/src/de/jabc/cinco/meta/plugin/pyro/backend/graphmodel/controller/EcoreController.xtend

https://gitlab.com/yeckey/fundus-pyro-demo
Xtend | 159 lines | 119 code | 37 blank | 3 comment | 6 complexity | ff33b53647305a17c28911df82bc1376 MD5 | raw file
  1. package de.jabc.cinco.meta.plugin.pyro.backend.graphmodel.controller
  2. import de.jabc.cinco.meta.plugin.pyro.util.Generatable
  3. import de.jabc.cinco.meta.plugin.pyro.util.GeneratorCompound
  4. import org.eclipse.emf.ecore.EPackage
  5. class EcoreController extends Generatable {
  6. new(GeneratorCompound gc) {
  7. super(gc)
  8. }
  9. def filename(EPackage p)'''«p.name.fuEscapeJava»Controller.java'''
  10. def content(EPackage p)
  11. '''
  12. package info.scce.pyro.core;
  13. import info.scce.pyro.«p.name.lowEscapeJava».rest.«p.name.fuEscapeJava»List;
  14. import info.scce.pyro.«p.name.lowEscapeJava».rest.«p.name.fuEscapeJava»;
  15. import de.ls5.dywa.generated.controller.info.scce.pyro.core.PyroUserController;
  16. import de.ls5.dywa.generated.entity.info.scce.pyro.core.PyroFolder;
  17. import de.ls5.dywa.generated.entity.info.scce.pyro.core.PyroProject;
  18. import info.scce.pyro.core.rest.types.CreateEcore;
  19. import info.scce.pyro.sync.GraphModelWebSocket;
  20. import info.scce.pyro.sync.ProjectWebSocket;
  21. import info.scce.pyro.sync.WebSocketMessage;
  22. import javax.ws.rs.core.Response;
  23. import java.io.IOException;
  24. @javax.transaction.Transactional
  25. @javax.ws.rs.Path("/«p.name.lowEscapeJava»")
  26. public class «p.name.fuEscapeJava»Controller implements info.scce.pyro.IPyroController {
  27. @javax.inject.Inject
  28. private info.scce.pyro.rest.ObjectCache objectCache;
  29. «FOR e:p.elementsAndEnums + #[p]»
  30. @javax.inject.Inject
  31. private «p.dywaControllerFQN».«e.name.fuEscapeJava»Controller «e.name.escapeJava»Controller;
  32. public «p.dywaControllerFQN».«e.name.fuEscapeJava»Controller get«e.name.escapeJava»Controller() { return «e.name.escapeJava»Controller; }
  33. «ENDFOR»
  34. @javax.inject.Inject
  35. private de.ls5.dywa.generated.controller.info.scce.pyro.core.PyroFolderController folderController;
  36. @javax.inject.Inject
  37. private de.ls5.dywa.generated.controller.info.scce.pyro.core.PyroProjectController projectController;
  38. @javax.inject.Inject
  39. private PyroUserController subjectController;
  40. @javax.inject.Inject
  41. private ProjectWebSocket projectWebSocket;
  42. @javax.inject.Inject
  43. private GraphModelWebSocket graphModelWebSocket;
  44. @javax.inject.Inject
  45. private GraphModelController graphModelController;
  46. @javax.ws.rs.GET
  47. @javax.ws.rs.Path("read/{id}/private")
  48. @javax.ws.rs.Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
  49. @org.jboss.resteasy.annotations.GZIP
  50. public Response load(@javax.ws.rs.PathParam("id") final long id) {
  51. final de.ls5.dywa.generated.entity.info.scce.pyro.core.PyroProject project = projectController.read(id);
  52. if(project==null){
  53. return Response.status(Response.Status.BAD_REQUEST).build();
  54. }
  55. final java.util.Set<«p.dywaFQN».«p.name.fuEscapeJava»> list = collectProjectFiles(project);
  56. if (list == null) {
  57. return Response.status(Response.Status.BAD_REQUEST).build();
  58. }
  59. return Response.ok(«p.name.fuEscapeJava»List.fromDywaEntity(list, objectCache))
  60. .build();
  61. }
  62. public java.util.Set<«p.dywaFQN».«p.name.fuEscapeJava»> collectProjectFiles(de.ls5.dywa.generated.entity.info.scce.pyro.core.PyroFolder folder)
  63. {
  64. java.util.Set<«p.dywaFQN».«p.name.fuEscapeJava»> found = new java.util.HashSet<>();
  65. found.addAll(
  66. folder.getfiles_PyroFile()
  67. .stream()
  68. .filter(n->n instanceof «p.dywaFQN».«p.name.fuEscapeJava»)
  69. .map(n->(«p.dywaFQN».«p.name.fuEscapeJava»)n)
  70. .collect(java.util.stream.Collectors.toSet())
  71. );
  72. folder.getinnerFolders_PyroFolder().forEach(f->found.addAll(collectProjectFiles(f)));
  73. return found;
  74. }
  75. @javax.ws.rs.POST
  76. @javax.ws.rs.Path("create/private")
  77. @javax.ws.rs.Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
  78. @javax.ws.rs.Consumes(javax.ws.rs.core.MediaType.APPLICATION_JSON)
  79. @org.jboss.resteasy.annotations.GZIP
  80. public Response createEcore(CreateEcore ecore) {
  81. final de.ls5.dywa.generated.entity.info.scce.pyro.core.PyroUser subject = subjectController
  82. .read((Long) org.apache.shiro.SecurityUtils.getSubject()
  83. .getPrincipal());
  84. final PyroFolder folder = folderController.read(ecore.getparentId());
  85. if(folder==null||subject==null){
  86. return Response.status(Response.Status.BAD_REQUEST).build();
  87. }
  88. final de.ls5.dywa.generated.entity.«p.name.escapeJava».«p.name.fuEscapeJava» newEcore = «p.name.escapeJava»Controller.create("«p.name.fuEscapeJava»_"+ecore.getfilename());
  89. newEcore.setfilename(ecore.getfilename());
  90. newEcore.setextension("ecore");
  91. folder.getfiles_PyroFile().add(newEcore);
  92. PyroProject pp = graphModelController.getProject(folder);
  93. projectWebSocket.send(pp.getDywaId(), WebSocketMessage.fromDywaEntity(subject.getDywaId(), info.scce.pyro.core.rest.types.PyroProjectStructure.fromDywaEntity(pp,objectCache)));
  94. return Response.ok(«p.name.fuEscapeJava».fromDywaEntity(newEcore,new info.scce.pyro.rest.ObjectCache())).build();
  95. }
  96. @javax.ws.rs.GET
  97. @javax.ws.rs.Path("remove/{id}/{parentId}/private")
  98. @javax.ws.rs.Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)
  99. @org.jboss.resteasy.annotations.GZIP
  100. public Response removeGraphModel(@javax.ws.rs.PathParam("id") final long id,@javax.ws.rs.PathParam("parentId") final long parentId) {
  101. final de.ls5.dywa.generated.entity.info.scce.pyro.core.PyroUser subject = subjectController
  102. .read((Long) org.apache.shiro.SecurityUtils.getSubject()
  103. .getPrincipal());
  104. //find parent
  105. final de.ls5.dywa.generated.entity.«p.name.escapeJava».«p.name.fuEscapeJava» gm = «p.name.escapeJava»Controller.read(id);
  106. final PyroFolder parent = folderController.read(parentId);
  107. if(gm==null||parent==null){
  108. return Response.status(Response.Status.NOT_FOUND).build();
  109. }
  110. //cascade remove
  111. if(parent.getfiles_PyroFile().contains(gm)){
  112. parent.getfiles_PyroFile().remove(gm);
  113. //TODO
  114. PyroProject pp = graphModelController.getProject(parent);
  115. projectWebSocket.send(pp.getDywaId(), WebSocketMessage.fromDywaEntity(subject.getDywaId(), info.scce.pyro.core.rest.types.PyroProjectStructure.fromDywaEntity(pp,objectCache)));
  116. return Response.ok("OK").build();
  117. }
  118. return Response.status(Response.Status.BAD_REQUEST).build();
  119. }
  120. }
  121. '''
  122. }