Skip to content

Commit

Permalink
Added client side validations
Browse files Browse the repository at this point in the history
  • Loading branch information
shiv12095 committed Aug 7, 2016
1 parent f17dec8 commit ebe7ddc
Show file tree
Hide file tree
Showing 16 changed files with 222 additions and 120 deletions.
Expand Up @@ -18,12 +18,9 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.eclipse.vorto.core.api.model.functionblock.impl.FunctionblockModelImpl;
import org.eclipse.vorto.core.api.model.informationmodel.impl.InformationModelPackageImpl;
import org.eclipse.vorto.editor.functionblock.FunctionblockRuntimeModule;
import org.eclipse.vorto.editor.functionblock.FunctionblockStandaloneSetup;
import org.eclipse.vorto.editor.functionblock.web.FunctionblockServlet;
import org.eclipse.vorto.editor.functionblock.web.FunctionblockWebModule;
import org.eclipse.vorto.editor.infomodel.InformationModelRuntimeModule;
import org.eclipse.vorto.editor.infomodel.web.InformationModelServlet;
import org.eclipse.vorto.editor.infomodel.web.InformationModelWebModule;
Expand Down
Expand Up @@ -4,18 +4,22 @@
import java.util.Objects;

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

import org.eclipse.vorto.editor.web.resource.WebEditorResourceSetProvider;
import org.eclipse.vorto.server.devtool.exception.ProjectAlreadyExistsException;
import org.eclipse.vorto.server.devtool.exception.ProjectNotFoundException;
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;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import com.google.inject.Injector;
Expand All @@ -33,10 +37,34 @@ public class ProjectController {
@Autowired
IProjectRepositoryService projectRepositoryService;

@ResponseStatus(value=HttpStatus.NOT_FOUND, reason = "Project not found")
@ExceptionHandler(ProjectNotFoundException.class)
public void handleProjectNotFoundException(){

}

@ResponseStatus(value=HttpStatus.BAD_REQUEST, reason = "Project already exists")
@ExceptionHandler(ProjectAlreadyExistsException.class)
public void handleProjectAlreadyExistsException(){

}

@ApiOperation(value = "Checks whether a Vorto project already exists")
@RequestMapping(value = "/check/{projectName}", method = RequestMethod.GET)
public void checkProjectExists(@ApiParam(value = "ProjectName", required = true) final @PathVariable String projectName,
@ApiParam(value = "Request", required = true) final HttpServletRequest request) throws ProjectAlreadyExistsException{

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

String sessionId = request.getSession().getId();

projectRepositoryService.checkProjectExists(sessionId, projectName);
}

@ApiOperation(value = "Creates a new Vorto project")
@RequestMapping(value = "/new/{projectName}", method = RequestMethod.GET)
public void createProjec(@ApiParam(value = "ProjectName", required = true) final @PathVariable String projectName,
@ApiParam(value = "Request", required = true) final HttpServletRequest request) {
@RequestMapping(value = "/new/{projectName}", method = RequestMethod.GET )
public void createProject(@ApiParam(value = "ProjectName", required = true) final @PathVariable String projectName,
@ApiParam(value = "Request", required = true) final HttpServletRequest request) throws ProjectAlreadyExistsException{

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

Expand All @@ -56,7 +84,7 @@ public void createProjec(@ApiParam(value = "ProjectName", required = true) final
@ApiOperation(value = "Opens an existing Vorto project")
@RequestMapping(value = "/open/{projectName}", method = RequestMethod.GET)
public void openProject(@ApiParam(value = "ProjectName", required = true) final @PathVariable String projectName,
@ApiParam(value = "Request", required = true) final HttpServletRequest request) {
@ApiParam(value = "Request", required = true) final HttpServletRequest request) throws ProjectNotFoundException {

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

Expand All @@ -71,52 +99,36 @@ public void openProject(@ApiParam(value = "ProjectName", required = true) final
webEditorResourceSetProvider.setSessionRefencedResourceSet(httpServiceContext,
project.getReferencedResourceSet());
}

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

@ApiOperation(value = "Returns a list of resources in the Vorto project")
@RequestMapping(value = "/resources/{projectName}", method = RequestMethod.GET)
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();
return projectRepositoryService.getProjectResources(sessionId, projectName);
}

@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) {
@ApiParam(value = "Request", required = true) final HttpServletRequest request) throws ProjectNotFoundException{

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) {

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

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();
projectRepositoryService.createResource(sessionId, projectName, resourceName, resourceId);
return projectRepositoryService.getProjectResources(sessionId, projectName);
}
}
@@ -1,4 +1,4 @@
package org.eclipse.vorto.server.devtool.controller;
package org.eclipse.vorto.server.devtool.controller.editor;

import java.io.ByteArrayInputStream;
import java.io.IOException;
Expand Down Expand Up @@ -30,7 +30,7 @@

@RestController
@RequestMapping(value = "/editor/functionblock")
public class FunctionBlockEditorController {
public class FunctionBlockEditorController implements IEditorController {

@Autowired
Injector injector;
Expand All @@ -40,7 +40,7 @@ public class FunctionBlockEditorController {

@ApiOperation(value = "Adds the data type to the resource set")
@RequestMapping(value = "/link/datatype/{resourceId}/{namespace}/{name}/{version:.+}", method = RequestMethod.GET)
public void linkFunctionBlock(@ApiParam(value = "ResourceId", required = true) final @PathVariable String resourceId,
public void linkEditor(@ApiParam(value = "ResourceId", required = true) final @PathVariable String resourceId,
@ApiParam(value = "Namespace", required = true) final @PathVariable String namespace,
@ApiParam(value = "Name", required = true) final @PathVariable String name,
@ApiParam(value = "Version", required = true) final @PathVariable String version,
Expand Down
@@ -0,0 +1,17 @@
package org.eclipse.vorto.server.devtool.controller.editor;

import java.util.List;

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

import org.eclipse.vorto.http.model.ModelResource;

public interface IEditorController {

public void linkEditor(String resourceId, String namespace, String name, String version, HttpServletRequest request,
HttpServletResponse response);

List<ModelResource> searchByExpression(String expression);

}
@@ -1,4 +1,4 @@
package org.eclipse.vorto.server.devtool.controller;
package org.eclipse.vorto.server.devtool.controller.editor;

import java.io.ByteArrayInputStream;
import java.io.IOException;
Expand Down Expand Up @@ -30,7 +30,7 @@

@RestController
@RequestMapping(value = "/editor/infomodel")
public class InformationModelEditorController {
public class InformationModelEditorController implements IEditorController{

@Autowired
Injector injector;
Expand All @@ -40,7 +40,7 @@ public class InformationModelEditorController {

@ApiOperation(value = "Adds the function block to the resource set")
@RequestMapping(value = "/link/functionblock/{resourceId}/{namespace}/{name}/{version:.+}", method = RequestMethod.GET)
public void linkFunctionBlock(
public void linkEditor(
@ApiParam(value = "ResourceId", required = true) final @PathVariable String resourceId,
@ApiParam(value = "Namespace", required = true) final @PathVariable String namespace,
@ApiParam(value = "Name", required = true) final @PathVariable String name,
Expand Down
@@ -0,0 +1,5 @@
package org.eclipse.vorto.server.devtool.exception;

public class ProjectAlreadyExistsException extends Exception {

}
@@ -0,0 +1,6 @@
package org.eclipse.vorto.server.devtool.exception;

public class ProjectNotFoundException extends Exception {


}
Expand Up @@ -2,20 +2,24 @@

import java.util.ArrayList;

import org.eclipse.vorto.server.devtool.exception.ProjectAlreadyExistsException;
import org.eclipse.vorto.server.devtool.exception.ProjectNotFoundException;
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);
void checkProjectExists(String sessionId, String projectName) throws ProjectAlreadyExistsException;

Project openProject(String sessionId, String projectName);
Project createProject(String sessionId, String projectName) throws ProjectAlreadyExistsException;

Project openProject(String sessionId, String projectName) throws ProjectNotFoundException;

ArrayList<Project> getProjects(String sessionId);

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

void createResource(String sessionId, String projectName, String resourceName, String resourceId);
void createResource(String sessionId, String projectName, String resourceName, String resourceId) throws ProjectNotFoundException;

void deleteResource(String sessionId, String projectName, String resourceId);
void deleteResource(String sessionId, String projectName, String resourceId) throws ProjectNotFoundException;
}
Expand Up @@ -5,15 +5,17 @@

import org.eclipse.vorto.server.devtool.models.Project;
import org.eclipse.vorto.server.devtool.service.IProjectRespositoryDAO;
import org.springframework.stereotype.Service;

@Service
public class MapProjectRespositoryDAOImpl implements IProjectRespositoryDAO {

private HashMap<String, ArrayList<Project>> projectRepositoryHashMap = new HashMap<>();

@Override
public void createProject(Project project, String sessionId) {
ArrayList<Project> projectList = projectRepositoryHashMap.get(sessionId);
if(projectList == null || projectList.isEmpty()){
if(projectList == null){
projectList = new ArrayList<>();
}
projectRepositoryHashMap.put(sessionId, projectList);
Expand All @@ -26,6 +28,9 @@ public void createProject(Project project, String sessionId) {
@Override
public boolean projectExists(String projectName, String sessionId) {
ArrayList<Project> projectList = projectRepositoryHashMap.get(sessionId);
if(projectList == null){
projectList = new ArrayList<>();
}
for(Project project : projectList){
if(project.getProjectName().equals(projectName)){
return true;
Expand Down Expand Up @@ -55,7 +60,5 @@ public ArrayList<Project> getProjects(String sessionId) {
}
return projectList;
}



}
Expand Up @@ -7,47 +7,60 @@
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.vorto.editor.web.resource.WebEditorResourceSetProvider;
import org.eclipse.vorto.server.devtool.exception.ProjectAlreadyExistsException;
import org.eclipse.vorto.server.devtool.exception.ProjectNotFoundException;
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.vorto.server.devtool.service.IProjectRespositoryDAO;
import org.eclipse.xtext.web.server.model.IWebResourceSetProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.stereotype.Component;

import com.google.inject.Injector;

@Service
@Component
public class ProjectRepositoryServiceImpl implements IProjectRepositoryService{

@Autowired
Injector injector;

@Autowired
IProjectRespositoryDAO projectRespositoryDAO;

@Override
public void checkProjectExists(String sessionId, String projectName) throws ProjectAlreadyExistsException {
if(projectRespositoryDAO.projectExists(projectName, sessionId)){
throw new ProjectAlreadyExistsException();
}
}

@Override
public Project createProject(String sessionId, String projectName) {
public Project createProject(String sessionId, String projectName) throws ProjectAlreadyExistsException {
WebEditorResourceSetProvider webEditorResourceSetProvider = (WebEditorResourceSetProvider) injector.getInstance(IWebResourceSetProvider.class);
Project project = new Project(projectName);
project.setResourceSet(webEditorResourceSetProvider.getNewResourceSet());
project.setReferencedResourceSet(new HashSet<String>());
project.setResourceList(new ArrayList<>());
projectRespositoryDAO.createProject(project, sessionId);
return project;
if(!projectRespositoryDAO.projectExists(projectName, sessionId)){
projectRespositoryDAO.createProject(project, sessionId);
return project;
}else{
throw new ProjectAlreadyExistsException();
}
}

@Override
public Project openProject(String sessionId, String projectName) {
public Project openProject(String sessionId, String projectName) throws ProjectNotFoundException {
Project project = projectRespositoryDAO.openProject(projectName, sessionId);
if(project == null){
throw new RuntimeException("The project with name : " + projectName + " does not exist");
throw new ProjectNotFoundException();
}
return project;
}

@Override
public ArrayList<ProjectResource> getProjectResources(String sessionId, String projectName) {
public ArrayList<ProjectResource> getProjectResources(String sessionId, String projectName) throws ProjectNotFoundException {
Project project = openProject(sessionId, projectName);
return project.getResourceList();
}
Expand All @@ -64,30 +77,24 @@ public ArrayList<Project> getProjects(String sessionId) {
}

@Override
public void createResource(String sessionId, String projectName, String resourceName, String resourceId) {
public void createResource(String sessionId, String projectName, String resourceName, String resourceId) throws ProjectNotFoundException {
Project project = openProject(sessionId, projectName);
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 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 void deleteResource(String sessionId, String projectName, String resourceId) {
Project project = openProject(sessionId, projectName);
public void deleteResource(String sessionId, String projectName, String resourceId) throws ProjectNotFoundException {
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 ebe7ddc

Please sign in to comment.