use of io.gravitee.rest.api.model.plan.PlanQuery in project gravitee-management-rest-api by gravitee-io.
the class PlanServiceImpl method createOrUpdatePlan.
@Override
public PlanEntity createOrUpdatePlan(PlanEntity planEntity, final String environmentId) {
PlanEntity resultPlanEntity;
if (planEntity.getId() != null) {
try {
findById(planEntity.getId());
resultPlanEntity = update(UpdatePlanEntity.from(planEntity));
} catch (PlanNotFoundException npe) {
resultPlanEntity = create(NewPlanEntity.from(planEntity));
}
} else {
PlanQuery query = new PlanQuery.Builder().api(planEntity.getApi()).name(planEntity.getName()).security(planEntity.getSecurity()).build();
List<PlanEntity> planEntities = search(query).stream().filter(dbPlan -> !PlanStatus.CLOSED.equals(dbPlan.getStatus())).collect(toList());
if (planEntities.isEmpty()) {
resultPlanEntity = create(NewPlanEntity.from(planEntity));
} else if (planEntities.size() == 1) {
UpdatePlanEntity updatePlanEntity = UpdatePlanEntity.from(planEntity);
updatePlanEntity.setId(planEntities.get(0).getId());
resultPlanEntity = update(updatePlanEntity);
} else {
logger.error("Not able to identify the plan to update: {}. Too much plan with the same name", planEntity.getName());
throw new TechnicalManagementException("Not able to identify the plan to update: " + planEntity.getName() + ". Too much plan with the same name");
}
}
return resultPlanEntity;
}
Aggregations