Skip to content

Commit

Permalink
Implemented the web-editor with in memory data storage
Browse files Browse the repository at this point in the history
  • Loading branch information
shiv12095 committed Jul 25, 2016
1 parent 43092b2 commit 2f3f63a
Show file tree
Hide file tree
Showing 18 changed files with 582 additions and 166 deletions.
Expand Up @@ -18,9 +18,11 @@
*/
package org.eclipse.vorto.editor.functionblock.web

import org.eclipse.vorto.editor.web.resource.HashMapResourceHandler
import org.eclipse.vorto.editor.web.resource.WebEditorResourceSetProvider
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
import org.eclipse.xtext.web.server.model.IWebResourceSetProvider
import org.eclipse.xtext.web.server.persistence.IServerResourceHandler

/**
* Use this class to register additional components to be used within the web application.
Expand All @@ -32,4 +34,8 @@ class FunctionblockWebModule extends AbstractFunctionblockWebModule {
return WebEditorResourceSetProvider
}

def Class<? extends IServerResourceHandler> bindIServerResourceHandler() {
return HashMapResourceHandler;
}

}
Expand Up @@ -21,6 +21,8 @@ package org.eclipse.vorto.editor.infomodel.web
import org.eclipse.vorto.editor.web.resource.WebEditorResourceSetProvider
import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor
import org.eclipse.xtext.web.server.model.IWebResourceSetProvider
import org.eclipse.xtext.web.server.persistence.IServerResourceHandler
import org.eclipse.vorto.editor.web.resource.HashMapResourceHandler

/**
* Use this class to register additional components to be used within the web application.
Expand All @@ -31,4 +33,8 @@ class InformationModelWebModule extends AbstractInformationModelWebModule {
def Class<? extends IWebResourceSetProvider> bindIWebResourceSetProvider() {
return WebEditorResourceSetProvider
}

def Class<? extends IServerResourceHandler> bindIServerResourceHandler() {
return HashMapResourceHandler;
}
}
@@ -0,0 +1,40 @@
package org.eclipse.vorto.editor.web.resource

import com.google.inject.Inject
import java.io.IOException
import org.eclipse.emf.common.util.URI
import org.eclipse.xtext.resource.XtextResource
import org.eclipse.xtext.web.server.IServiceContext
import org.eclipse.xtext.web.server.model.IWebDocumentProvider
import org.eclipse.xtext.web.server.model.IWebResourceSetProvider
import org.eclipse.xtext.web.server.model.IXtextWebDocument
import org.eclipse.xtext.web.server.persistence.IServerResourceHandler
import org.eclipse.emf.common.util.WrappedException

class HashMapResourceHandler implements IServerResourceHandler {

@Inject IWebResourceSetProvider resourceSetProvider;

@Inject IWebDocumentProvider documentProvider;

override get(String resourceId, IServiceContext serviceContext) throws IOException {
try {
val resourceSet = resourceSetProvider.get(resourceId, serviceContext);
val uri = URI.createFileURI(resourceId);
val resource = resourceSet.getResource(uri, true) as XtextResource
return documentProvider.get(resourceId, serviceContext) => [
setInput(resource)
]
}catch (WrappedException exception){
throw exception.cause
}
}

override put(IXtextWebDocument document, IServiceContext serviceContext) throws IOException {
/*
* Since the files are being stored in memory here, this has not been implemented
*/
throw new UnsupportedOperationException("TODO: auto-generated method stub")
}

}
@@ -1,17 +1,15 @@
package org.eclipse.vorto.server.devtool.controller;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Objects;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.vorto.editor.web.resource.WebEditorResourceSetProvider;
import org.eclipse.vorto.server.devtool.models.Project;
import org.eclipse.vorto.server.devtool.models.ProjectResource;
import org.eclipse.vorto.server.devtool.service.IProjectRepositoryService;
import org.eclipse.xtext.web.server.model.IWebResourceSetProvider;
import org.eclipse.xtext.web.servlet.HttpServiceContext;
Expand Down Expand Up @@ -75,44 +73,52 @@ public void openProject(@ApiParam(value = "ProjectName", required = true) final
webEditorResourceSetProvider.setSessionRefencedResourceSet(httpServiceContext,
project.getReferencedResourceSet());
}

@ApiOperation(value = "Opens an existing Vorto project")
@RequestMapping(value = "/get", method = RequestMethod.GET)
public ArrayList<String> getProjects(final HttpServletRequest request) {
public ArrayList<Project> getProjects(final HttpServletRequest request) {
String sessionId = request.getSession().getId();
return projectRepositoryService.getProjects(sessionId);
return projectRepositoryService.getProjects(sessionId);
}

@ApiOperation(value = "Returns a list of resources in the Vorto project")
@RequestMapping(value = "/resources/{projectName}", method = RequestMethod.GET)
public void getResources(@ApiParam(value = "ProjectName", required = true) final @PathVariable String projectName,
public ArrayList<ProjectResource> getResources(
@ApiParam(value = "ProjectName", required = true) final @PathVariable String projectName,
@ApiParam(value = "Request", required = true) final HttpServletRequest request) {

Objects.requireNonNull(projectName, "projectName must not be null");

String sessionId = request.getSession().getId();
projectRepositoryService.getProjectResources(sessionId, projectName);
return projectRepositoryService.getProjectResources(sessionId, projectName);
}

@ApiOperation(value = "Returns the contents of a resource in the existing Vorto project")
@RequestMapping(value = "/resource/{projectName}/{resourceId}", method = RequestMethod.GET)
@ApiOperation(value = "Deletes the resource in the Vorto project")
@RequestMapping(value = "resource/delete/{projectName}/{resourceId}/", method = RequestMethod.GET)
public void getProjectResourceContents(
@ApiParam(value = "ProjectName", required = true) final @PathVariable String projectName,
@ApiParam(value = "ResourceId", required = true) final @PathVariable String resourceId,
@ApiParam(value = "Request", required = true) final HttpServletRequest request) {

Objects.requireNonNull(projectName, "projectName must not be null");
Objects.requireNonNull(resourceId, "resourceId must not be null");
String sessionId = request.getSession().getId();
projectRepositoryService.deleteResource(sessionId, projectName, resourceId);
}

@ApiOperation(value = "Returns the contents of a resource in the existing Vorto project")
@RequestMapping(value = "/resource/create/{projectName}/{resourceId}/{resourceName}", method = RequestMethod.GET)
public void createResource(@ApiParam(value = "ProjectName", required = true) final @PathVariable String projectName,
@ApiParam(value = "ResourceId", required = true) final @PathVariable String resourceId,
@ApiParam(value = "ResourceName", required = true) final @PathVariable String resourceName,
@ApiParam(value = "Request", required = true) final HttpServletRequest request,
@ApiParam(value = "Response", required = true) final HttpServletResponse response) {

Objects.requireNonNull(projectName, "projectName must not be null");
Objects.requireNonNull(resourceId, "resourceId must not be null");
Objects.requireNonNull(resourceName, "resourceName must not be null");

String sessionId = request.getSession().getId();
String content = projectRepositoryService.getProjectResourceContents(sessionId, projectName, resourceId);

try {
IOUtils.copy(new ByteArrayInputStream(content.getBytes()), response.getOutputStream());
response.flushBuffer();
} catch (IOException e) {
throw new RuntimeException("Error copying file.", e);
}
projectRepositoryService.createResource(sessionId, projectName, resourceName, resourceId);
}
}
@@ -1,15 +1,17 @@
package org.eclipse.vorto.server.devtool.models;

import java.util.ArrayList;
import java.util.HashSet;

import org.eclipse.emf.ecore.resource.ResourceSet;

public class Project {

private String projectName;
private String sessionId; //change this later to author
private String sessionId; //change this later to author or login id
private ResourceSet resourceSet;
private HashSet<String> referencedResourceSet;
private HashSet<String> referencedResourceSet;
private ArrayList<ProjectResource> resourceList;

public Project(String projectName){
this.projectName = projectName;
Expand Down Expand Up @@ -46,18 +48,12 @@ public HashSet<String> getReferencedResourceSet() {
public void setReferencedResourceSet(HashSet<String> referencedResourceSet) {
this.referencedResourceSet = referencedResourceSet;
}

@Override
public boolean equals(Object obj) {
if(obj == null || !obj.getClass().equals(Project.class)){
return false;
}
Project project = (Project)obj;
if(this.getProjectName().equals(project.getProjectName())){
return true;
}else{
return false;
}

public ArrayList<ProjectResource> getResourceList() {
return resourceList;
}


public void setResourceList(ArrayList<ProjectResource> resourceList) {
this.resourceList = resourceList;
}
}
@@ -0,0 +1,33 @@
package org.eclipse.vorto.server.devtool.models;

public class ProjectResource {

private String resourceId;
private String name;
public String getResourceId() {
return resourceId;
}
public void setResourceId(String resourceId) {
this.resourceId = resourceId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

@Override
public boolean equals(Object obj) {
if(obj.getClass().equals(this.getClass())){
ProjectResource projectResource = (ProjectResource)obj;
if(projectResource.getResourceId().equals(this.resourceId)){
return true;
}else{
return false;
}
}else{
return false;
}
}
}
Expand Up @@ -4,16 +4,19 @@

import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.vorto.server.devtool.models.Project;
import org.eclipse.vorto.server.devtool.models.ProjectResource;

public interface IProjectRepositoryService {

Project createProject(String sessionId, String projectName, ResourceSet resourceSet);

Project openProject(String sessionId, String projectName);

ArrayList<String> getProjects(String sessionId);
ArrayList<Project> getProjects(String sessionId);

ArrayList<String> getProjectResources(String sessionId, String projectName);
ArrayList<ProjectResource> getProjectResources(String sessionId, String projectName);

String getProjectResourceContents(String sessionId, String projectName, String resourceId);
void createResource(String sessionId, String projectName, String resourceName, String resourceId);

void deleteResource(String sessionId, String projectName, String resourceId);
}
Expand Up @@ -57,5 +57,4 @@ private List<ModelResource> searchModelByExpressionAndValidate(String expression
}
return modelResourceList;
}

}
@@ -1,7 +1,5 @@
package org.eclipse.vorto.server.devtool.service.impl;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
Expand All @@ -10,6 +8,7 @@
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.vorto.server.devtool.models.Project;
import org.eclipse.vorto.server.devtool.models.ProjectResource;
import org.eclipse.vorto.server.devtool.service.IProjectRepositoryService;
import org.springframework.stereotype.Service;

Expand All @@ -32,6 +31,7 @@ public Project createProject(String sessionId, String projectName, ResourceSet r
Project project = new Project(projectName);
project.setResourceSet(resourceSet);
project.setReferencedResourceSet(new HashSet<String>());
project.setResourceList(new ArrayList<>());
projectList.add(project);
projectRepositoryHashMap.put(sessionId, projectList);
return project;
Expand All @@ -52,45 +52,50 @@ public Project openProject(String sessionId, String projectName) {
}

@Override
public ArrayList<String> getProjectResources(String sessionId, String projectName) {
ArrayList<String> resourceList = new ArrayList<>();
public ArrayList<ProjectResource> getProjectResources(String sessionId, String projectName) {
Project project = openProject(sessionId, projectName);
ResourceSet resourceSet = project.getResourceSet();
for(Resource resource : resourceSet.getResources()){
System.out.println(resource.getURI().toString());
resourceList.add(resource.getURI().toString());
}
return resourceList;
return project.getResourceList();
}

@Override
public String getProjectResourceContents(String sessionId, String projectName, String resourceId) {
public ArrayList<Project> getProjects(String sessionId) {
ArrayList<Project> projectList = projectRepositoryHashMap.get(sessionId);
if(projectList == null || projectList.isEmpty()){
projectList = new ArrayList<>();
}
ArrayList<Project> projectNameList = new ArrayList<>();
for(Project iterProject : projectList){
Project project = new Project(iterProject.getProjectName());
projectNameList.add(project);
}
return projectNameList;
}

@Override
public void createResource(String sessionId, String projectName, String resourceName, String resourceId) {
Project project = openProject(sessionId, projectName);
ResourceSet resourceSet = project.getResourceSet();
ArrayList<ProjectResource> resourceList = project.getResourceList();
URI uri = URI.createURI(resourceId);
ResourceSet resourceSet = project.getResourceSet();
Resource resource = resourceSet.getResource(uri, true);
if(resource == null){
throw new RuntimeException("No resource with resourceId : " + resourceId);
}
try{
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
resource.save(byteArrayOutputStream, null);
return byteArrayOutputStream.toString();
}catch (IOException e){
throw new RuntimeException(e);
throw new NullPointerException("The editor for resource id : " + resourceId + " does not exist");
}
ProjectResource projectResource = new ProjectResource();
projectResource.setResourceId(resourceId);
projectResource.setName(resourceName);
resourceList.add(projectResource);
}

@Override
public ArrayList<String> getProjects(String sessionId) {
ArrayList<Project> projectList = projectRepositoryHashMap.get(sessionId);
if(projectList == null || projectList.isEmpty()){
projectList = new ArrayList<>();
}
ArrayList<String> projectNameList = new ArrayList<>();
for(Project project : projectList){
projectNameList.add(project.getProjectName());
}
return projectNameList;
public void deleteResource(String sessionId, String projectName, String resourceId) {
Project project = openProject(sessionId, projectName);
URI uri = URI.createURI(resourceId);
ResourceSet resourceSet = project.getResourceSet();
Resource resource = resourceSet.getResource(uri, true);
resourceSet.getResources().remove(resource);
ProjectResource projectResource = new ProjectResource();
projectResource.setResourceId(resourceId);
project.getResourceList().remove(projectResource);
}
}
}

0 comments on commit 2f3f63a

Please sign in to comment.