Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions db-updates/0010-project-link-active.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Author: J. Ewald
* Created: Mar 20, 2018
*
* Add an active field to the project link table. This will allow a user to
* enable/disable their shared project without destroying the shared project
* key.
*/

ALTER TABLE project_sharing ADD active BIT DEFAULT 0 NULL AFTER sharekey;
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
import java.util.List;

/**
*
* Convert a ProjectRecord object into a JSON object
*
* @author Michel
*/
public class ProjectConverter {
Expand All @@ -28,7 +29,11 @@ public class ProjectConverter {
private UserService userService;
private ProjectService projectService;
private ProjectSharingService projectSharingService;

// Internal flag to enable/disable parent project details
private Boolean includeParentProjectDetails = false;


@Inject
public void setProjectDao(ProjectDao projectDao) {
this.projectDao = projectDao;
Expand All @@ -49,6 +54,13 @@ public void setProjectSharingService(ProjectSharingService projectSharingService
this.projectSharingService = projectSharingService;
}


/**
* Convert a ProjectRecord to a JSON object
*
* @param project
* @return
*/
public JsonObject toListJson(ProjectRecord project) {
JsonObject result = new JsonObject();

Expand Down Expand Up @@ -83,6 +95,25 @@ public JsonObject toListJson(ProjectRecord project) {
return result;
}

// Overrride method to provide option to turn off parent project details
public JsonObject toJson(ProjectRecord project, Boolean includeParentDetails) {
includeParentProjectDetails = includeParentDetails;
return toJson(project);
}

// Overrride method to provide option to turn off parent project details
public JsonObject toJson(Project project, Boolean includeParentDetails) {
includeParentProjectDetails = includeParentDetails;
return toJson(project);
}


/**
* Convert a project record to a JSON payload
*
* @param project
* @return
*/
public JsonObject toJson(ProjectRecord project) {
JsonObject result = new JsonObject();

Expand All @@ -96,38 +127,45 @@ public JsonObject toJson(ProjectRecord project) {
result.addProperty("shared", project.getShared());
result.addProperty("created", DateConversion.toDateTimeString(project.getCreated().getTime()));
result.addProperty("modified", DateConversion.toDateTimeString(project.getModified().getTime()));


// Does current user own this project?
boolean isYours = project.getIdUser().equals(BlocklyPropSecurityUtils.getCurrentUserId());
result.addProperty("yours", isYours);

result.addProperty("user", userService.getUserScreenName(project.getIdUser()));

// Obtain a project share key if it is available
if (isYours) {
List<ProjectSharingRecord> projectSharingRecords = projectSharingService.getSharingInfo(project.getId());
List<ProjectSharingRecord> projectSharingRecords =
projectSharingService.getSharingInfo(project.getId());

if (projectSharingRecords != null && !projectSharingRecords.isEmpty()) {
result.addProperty("share-key", projectSharingRecords.get(0).getSharekey());
}
}

// Look for parent project
if (project.getBasedOn() != null) {
JsonObject basedOn = new JsonObject();
ProjectRecord basedOnProject = projectDao.getProject(project.getBasedOn());
if (basedOnProject != null) {
basedOn.addProperty("id", basedOnProject.getId());
basedOn.addProperty("name", basedOnProject.getName());
boolean basedOnProjectisYours = basedOnProject.getIdUser().equals(BlocklyPropSecurityUtils.getCurrentUserId());
basedOn.addProperty("yours", basedOnProjectisYours);
if (!isYours) {
basedOn.addProperty("user", userService.getUserScreenName(basedOnProject.getIdUser()));
if (includeParentProjectDetails) {
// Look for parent project - WHY????
if (project.getBasedOn() != null) {
JsonObject basedOn = new JsonObject();
ProjectRecord basedOnProject = projectDao.getProject(project.getBasedOn());
if (basedOnProject != null) {
basedOn.addProperty("id", basedOnProject.getId());
basedOn.addProperty("name", basedOnProject.getName());
boolean basedOnProjectisYours = basedOnProject.getIdUser().equals(BlocklyPropSecurityUtils.getCurrentUserId());
basedOn.addProperty("yours", basedOnProjectisYours);
if (!isYours) {
basedOn.addProperty("user", userService.getUserScreenName(basedOnProject.getIdUser()));
}
result.add("basedOn", basedOn);
}
result.add("basedOn", basedOn);
}
}

return result;
}


public JsonObject toJson(Project project) {
JsonObject result = new JsonObject();
result.addProperty("id", project.getId());
Expand All @@ -143,20 +181,23 @@ public JsonObject toJson(Project project) {
result.addProperty("yours", isYours);
result.addProperty("user", userService.getUserScreenName(project.getIdUser()));

if (project.getBasedOn() != null) {
JsonObject basedOn = new JsonObject();
ProjectRecord basedOnProject = projectDao.getProject(project.getBasedOn());
if (basedOnProject != null) {
basedOn.addProperty("id", basedOnProject.getId());
basedOn.addProperty("name", basedOnProject.getName());
boolean basedOnProjectisYours = basedOnProject.getIdUser().equals(BlocklyPropSecurityUtils.getCurrentUserId());
basedOn.addProperty("yours", basedOnProjectisYours);
if (!isYours) {
basedOn.addProperty("user", userService.getUserScreenName(basedOnProject.getIdUser()));
if (includeParentProjectDetails) {
if (project.getBasedOn() != null) {
JsonObject basedOn = new JsonObject();
ProjectRecord basedOnProject = projectDao.getProject(project.getBasedOn());
if (basedOnProject != null) {
basedOn.addProperty("id", basedOnProject.getId());
basedOn.addProperty("name", basedOnProject.getName());
boolean basedOnProjectisYours = basedOnProject.getIdUser().equals(BlocklyPropSecurityUtils.getCurrentUserId());
basedOn.addProperty("yours", basedOnProjectisYours);
if (!isYours) {
basedOn.addProperty("user", userService.getUserScreenName(basedOnProject.getIdUser()));
}
result.add("basedOn", basedOn);
}
result.add("basedOn", basedOn);
}
}

return result;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,24 +27,55 @@ public void setDSLContext(DSLContext dsl) {
this.create = dsl;
}


/**
*
* @param idProject
* @param accessKey
* @return
*/
@Override
public ProjectSharingRecord getProject(Long idProject, String accessKey) {
return create.selectFrom(Tables.PROJECT_SHARING).where(Tables.PROJECT_SHARING.ID_PROJECT.equal(idProject).and(Tables.PROJECT_SHARING.SHAREKEY.equal(accessKey))).fetchOne();
}


/**
*
* @param idProject
* @param shareKey
* @return
*/
@Override
public ProjectSharingRecord shareProject(Long idProject, String shareKey) {
return create.insertInto(Tables.PROJECT_SHARING).columns(Tables.PROJECT_SHARING.ID_PROJECT, Tables.PROJECT_SHARING.SHAREKEY).values(idProject, shareKey).returning().fetchOne();
}


/**
*
* @param idProject
* @return
*/
@Override
public int revokeSharing(Long idProject) {
return create.deleteFrom(Tables.PROJECT_SHARING).where(Tables.PROJECT_SHARING.ID_PROJECT.equal(idProject)).execute();
}


/**
* Return the project sharing details for an individual project
*
* @param idProject
* @return
*/
@Override
public List<ProjectSharingRecord> getSharingInfo(Long idProject) {
return create.selectFrom(Tables.PROJECT_SHARING).where(Tables.PROJECT_SHARING.ID_PROJECT.equal(idProject)).fetch();
return create
.selectFrom(Tables.PROJECT_SHARING)
.where(Tables.PROJECT_SHARING.ID_PROJECT
.equal(idProject))
.fetch();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ public Response get(@PathParam("id") @ParameterDetail("Project identifier") Long
}

// The currect user owns this project
JsonObject result = projectConverter.toJson(project);
JsonObject result = projectConverter.toJson(project,false);
return Response.ok(result.toString()).build();
}

Expand Down Expand Up @@ -201,7 +201,7 @@ public Response saveProjectCode(
ProjectRecord savedProject = projectService.saveProjectCode(idProject, code);
LOG.debug("Code for project {} has been saved", idProject);

JsonObject result = projectConverter.toJson(savedProject);
JsonObject result = projectConverter.toJson(savedProject,false);
LOG.debug("Returning JSON: {}", result);

result.addProperty("success", true);
Expand Down Expand Up @@ -236,7 +236,7 @@ public Response saveProjectCodeAs(
newName);
LOG.debug("Code for project {} has been saved as {}", idProject, newName);

JsonObject result = projectConverter.toJson(savedProject);
JsonObject result = projectConverter.toJson(savedProject,false);
LOG.debug("Returning JSON: {}", result);

result.addProperty("success", true);
Expand Down Expand Up @@ -289,7 +289,7 @@ public Response saveProject(
board);
LOG.debug("Project {} has been saved.", idProject);

JsonObject result = projectConverter.toJson(savedProject);
JsonObject result = projectConverter.toJson(savedProject,false);
LOG.debug("Returning JSON: {}", result);

result.addProperty("success", true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,21 @@ public Response get(
@Detail("Get shared projects by user")
@Name("Get shared projects by user")
@Produces("application/json")
public Response get(@QueryParam("sort") TableSort sort, @QueryParam("order") TableOrder order, @QueryParam("limit") Integer limit, @QueryParam("offset") Integer offset, @PathParam("id") Long idUser) {
LOG.info("Sort: {}", sort);
public Response get(
@QueryParam("sort") TableSort sort,
@QueryParam("order") TableOrder order,
@QueryParam("limit") Integer limit,
@QueryParam("offset") Integer offset,
@PathParam("id") Long idUser) {

LOG.info("REST: /get/user/" + idUser + "/");

List<ProjectRecord> projects = projectService.getSharedProjectsByUser(sort, order, limit, offset, idUser);
int projectCount = projectService.countSharedProjectsByUser(idUser);

JsonObject result = new JsonObject();
JsonArray jsonProjects = new JsonArray();

for (ProjectRecord project : projects) {
jsonProjects.add(projectConverter.toListJson(project));
}
Expand All @@ -113,16 +120,23 @@ public Response get(@QueryParam("sort") TableSort sort, @QueryParam("order") Tab
@Detail("Get project by id")
@Name("Get project by id")
@Produces("application/json")
public Response get(@HeaderParam("X-Authorization") String authorization, @HeaderParam("X-Timestamp") Long timestamp, @PathParam("id") Long idProject) {
public Response get(
@HeaderParam("X-Authorization") String authorization,
@HeaderParam("X-Timestamp") Long timestamp,
@PathParam("id") Long idProject) {

LOG.info("REST: /get/" + idProject.toString() + "/");

try {
ProjectRecord project = projectService.getProject(idProject);

if (project == null) {
return Response.status(Response.Status.NOT_FOUND).build();
}

JsonObject result = projectConverter.toJson(project);

JsonObject result = projectConverter.toJson(project, false);
LOG.info("REST: /get/" + idProject.toString() + "/ returning project {}.", project.getId());

return Response.ok(result.toString()).build();
}
catch (Exception e) {
Expand All @@ -136,7 +150,10 @@ public Response get(@HeaderParam("X-Authorization") String authorization, @Heade
@Detail("Get project by id for editor")
@Name("Get project by id for editor")
@Produces("application/json")
public Response getEditor(@HeaderParam("X-Authorization") String authorization, @HeaderParam("X-Timestamp") Long timestamp, @PathParam("id") Long idProject) {
public Response getEditor(
@HeaderParam("X-Authorization") String authorization,
@HeaderParam("X-Timestamp") Long timestamp,
@PathParam("id") Long idProject) {

LOG.info("REST get project id {} for the editor", idProject);

Expand All @@ -148,10 +165,7 @@ public Response getEditor(@HeaderParam("X-Authorization") String authorization,
return Response.status(Response.Status.NOT_FOUND).build();
}

LOG.info("REST: GET project/shared/editor/id - converting project to JSON");
JsonObject result = projectConverter.toJson(project);

LOG.info("REST: GET project/shared/editor/id - getting project code");
JsonObject result = projectConverter.toJson(project, false);
result.addProperty("code", project.getCode());

LOG.info("Returning meta data on project {}", idProject);
Expand Down
Loading