Skip to content

Commit

Permalink
Merge pull request #576 from mauroz77/master
Browse files Browse the repository at this point in the history
Removing summary status logic from project mapper.
  • Loading branch information
mauroz77 authored May 15, 2020
2 parents 4a62ae8 + bb800bd commit 9e2ae75
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@
import org.gentar.audit.history.HistoryService;
import org.gentar.biology.plan.Plan;
import org.gentar.biology.plan.PlanStatusManager;
import org.gentar.biology.plan.attempt.phenotyping.PhenotypingAttempt;
import org.gentar.biology.plan.attempt.phenotyping.stage.PhenotypingStage;
import org.gentar.biology.project.ProjectService;
import org.springframework.stereotype.Component;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;
import java.util.Set;

/**
* Class with the logic to save a plan in the system.
Expand All @@ -23,27 +21,32 @@ public class PlanCreator
private EntityManager entityManager;
private HistoryService<Plan> historyService;
private PlanStatusManager planStatusManager;
private ProjectService projectService;

public PlanCreator(
EntityManager entityManager,
HistoryService<Plan> historyService,
PlanStatusManager planStatusManager)
PlanStatusManager planStatusManager,
ProjectService projectService)
{
this.entityManager = entityManager;
this.historyService = historyService;
this.planStatusManager = planStatusManager;
this.projectService = projectService;
}

/**
* Create a project in the system and keep trace of the event in the history.
* @param plan Object with the project information before it is saved in database.
* @return Created project.
*/
@Transactional
public Plan createPlan(Plan plan)
{
setStatusAndSummaryStatus(plan);
Plan createdPlan = savePlan(plan);
registerCreationInHistory(createdPlan);
updateProjectDueToChangesInChild(plan);
return createdPlan;
}

Expand Down Expand Up @@ -78,4 +81,14 @@ private String buildPin(Long id)
identifier = "PIN:" + identifier;
return identifier;
}

/**
* The creation in the plan can lead to changes in the project (summary status or
* assignment status, for instance). So we need to notify the project about this.
* @param plan Plan that was created.
*/
private void updateProjectDueToChangesInChild(Plan plan)
{
projectService.checkForUpdates(plan.getProject());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public History updatePlan(Plan originalPlan, Plan newPlan)
History history = detectTrackOfChanges(originalPlan, newPlan);
saveChanges(newPlan);
saveTrackOfChanges(history);
projectService.checkForUpdates(newPlan.getProject());
updateProjectDueToChangesInChild(newPlan);
return history;
}

Expand Down Expand Up @@ -113,4 +113,14 @@ private void saveTrackOfChanges(History history)
{
historyService.saveTrackOfChanges(history);
}

/**
* The modification in the plan can lead to changes in the project (summary status or
* assignment status, for instance). So we need to notify the project about this.
* @param plan Plan that was updated.
*/
private void updateProjectDueToChangesInChild(Plan plan)
{
projectService.checkForUpdates(plan.getProject());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,10 @@ public void calculateSummaryStatus(Project project)
{
summaryStatus = getMostAdvancedSummaryStatusFromPlans(project);
}
setAndLogNewSummaryStatus(project, summaryStatus);
if (summaryStatus != null)
{
setAndLogNewSummaryStatus(project, summaryStatus);
}
}

private Status getMostAdvancedSummaryStatusFromPlans(Project project)
Expand Down
9 changes: 5 additions & 4 deletions impc_prod_tracker/rest-api/src/main/asciidoc/restapi.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -220,12 +220,13 @@ include::{snippets}/projects/allProjectsWithFilter/http-response.adoc[]

==== Create a project

Currently the rules to be able to create a project are:
In order to create a project, it's necessary to create also a plan attached to it.

TODO!!!: <<Verify which rules still aply>>
===== Example Request

Curl:
include::{snippets}/projects/createProject/request-body.adoc[]

- A user from a consortium can create a project without a plan associated with it.
- A user from a work unit can create a project with a plan associated with it.



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,17 @@ public Plan toEntity(PlanDTO planDTO)
{
Plan plan = entityMapper.toTarget(planDTO, Plan.class);
setEvent(plan, planDTO);
plan.setProject(projectService.getProjectByTpn(planDTO.getTpn()));
Project project = projectService.getProjectByTpn(planDTO.getTpn());
plan.setProject(project);
// Making the association explicit.
if (project.getPlans() == null)
{
Set<Plan> plans = new HashSet<>();

project.setPlans(plans);
}
project.getPlans().add(plan);

Set<Funder> funders = new HashSet<>(funderMapper.toEntities(planDTO.getFunderNames()));
plan.setFunders(funders);
plan.setWorkUnit(workUnitMapper.toEntity(planDTO.getWorkUnitName()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ public ProjectDtoToEntityMapper(
public Project toEntity(ProjectDTO projectDTO)
{
Project project = entityMapper.toTarget(projectDTO, Project.class);
setSummaryStatus(project, projectDTO);
setProjectIntention(project, projectDTO);
setPrivacy(project, projectDTO);
setConsortia(project, projectDTO);
Expand All @@ -75,17 +74,6 @@ private void setSpecies(Project project, ProjectDTO projectDTO)
project.setSpecies(species);
}

private void setSummaryStatus(Project project, ProjectDTO projectDTO)
{
if (projectDTO.getSummaryStatusName() == null) {
project.setSummaryStatus(
summaryStatusMapper.toEntity("Plan Created"));
} else {
project.setSummaryStatus(
summaryStatusMapper.toEntity(projectDTO.getSummaryStatusName()));
}
}

private void setProjectIntention(Project project, ProjectDTO projectDTO)
{
List<ProjectIntention> projectIntentions =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,8 @@
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.core.StringContains.containsString;
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

class ProjectControllerTest extends ControllerTestTemplate
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,5 @@
<PLAN_STATUS_STAMP/>
<PLAN_SUMMARY_STATUS_STAMP/>
<ASSIGNMENT_STATUS_STAMP/>
<PROJECT_SUMMARY_STATUS_STAMP/>
</dataset>

0 comments on commit 9e2ae75

Please sign in to comment.