package org.xcolab.client.contest; import org.xcolab.client.contest.pojo.templates.PlanSectionDefinition; import org.xcolab.client.contest.pojo.templates.PlanSectionDefinitionDto; import org.xcolab.client.contest.pojo.templates.PlanTemplate; import org.xcolab.client.contest.pojo.templates.PlanTemplateDto; import org.xcolab.client.contest.pojo.templates.PlanTemplateSection; import org.xcolab.client.contest.pojo.templates.PlanTemplateSectionDto; import org.xcolab.client.proposals.exceptions.PlanTemplateNotFoundException; import org.xcolab.util.http.caching.CacheName; import org.xcolab.util.http.client.RestResource1; import org.xcolab.util.http.client.RestService; import org.xcolab.util.http.dto.DtoUtil; import org.xcolab.util.http.exceptions.EntityNotFoundException; import java.util.HashMap; import java.util.List; import java.util.Map; public class PlanTemplateClient { private static final Map<RestService, PlanTemplateClient> instances = new HashMap<>(); private final RestService contestService; private final RestResource1<PlanTemplateDto, Long> planTemplateResource; private final RestResource1<PlanSectionDefinitionDto, Long> planSectionDefinitionResource; private final RestResource1<PlanTemplateSectionDto, Long> planTemplateSectionResource; private PlanTemplateClient(RestService contestService) { this.contestService = contestService; planTemplateResource = new RestResource1<>(this.contestService, "planTemplates", PlanTemplateDto.TYPES); planSectionDefinitionResource = new RestResource1<>(this.contestService, "planSectionDefinitions", PlanSectionDefinitionDto.TYPES); planTemplateSectionResource = new RestResource1<>(this.contestService, "planTemplateSections", PlanTemplateSectionDto.TYPES); } public static PlanTemplateClient fromService(RestService contestService) { return instances.computeIfAbsent(contestService, PlanTemplateClient::new); } public PlanTemplate getPlanTemplate(long id) { try { return planTemplateResource.get(id) .executeChecked().toPojo(contestService); } catch (EntityNotFoundException e) { throw new PlanTemplateNotFoundException(id); } } public List<PlanTemplate> getPlanTemplates() { return DtoUtil.toPojos(planTemplateResource.list() .execute(), contestService); } public Boolean deletePlanTemplate(Long id_) { return planTemplateResource.delete(id_).execute(); } public PlanTemplate createPlanTemplate(PlanTemplate planTemplate) { return planTemplateResource.create(new PlanTemplateDto(planTemplate)) .execute().toPojo(contestService); } public boolean updatePlanTemplate(PlanTemplate planTemplate) { return planTemplateResource.update(new PlanTemplateDto(planTemplate), planTemplate.getId_()) .execute(); } public PlanSectionDefinition getPlanSectionDefinition(long id) { return planSectionDefinitionResource.get(id) .withCache(CacheName.MISC_REQUEST) .execute().toPojo(contestService); } public boolean updatePlanSectionDefinition(PlanSectionDefinition planSectionDefinition) { return planSectionDefinitionResource.update( new PlanSectionDefinitionDto(planSectionDefinition), planSectionDefinition.getId_()) .execute(); } public PlanSectionDefinition createPlanSectionDefinition( PlanSectionDefinition planSectionDefinition) { return planSectionDefinitionResource .create(new PlanSectionDefinitionDto(planSectionDefinition)) .execute().toPojo(contestService); } public List<PlanSectionDefinition> getPlanSectionDefinitionByPlanTemplateId(Long planTemplateId, Boolean weight) { return DtoUtil.toPojos(planSectionDefinitionResource.list() .optionalQueryParam("planTemplateId", planTemplateId) .optionalQueryParam("weight", ((weight == null) ? (false) : weight)) .execute(), contestService); } public Boolean deletePlanSectionDefinition(Long id) { return planSectionDefinitionResource.delete(id).execute(); } public Boolean deletePlanTemplateSection(Long planTemplateId, Long planSectionDefinitionId) { return planTemplateSectionResource.service("deletePlanTemplateSection", Boolean.class) .queryParam("planTemplateId", planTemplateId) .queryParam("planSectionDefinitionId", planSectionDefinitionId) .delete(); } public List<PlanTemplateSection> getPlanTemplateSectionByPlanTemplateId(Long planTemplateId) { return DtoUtil.toPojos(planTemplateSectionResource.list() .optionalQueryParam("planTemplateId", planTemplateId) .execute(), contestService); } public PlanTemplateSection createPlanTemplateSection(PlanTemplateSection planTemplateSection) { return planTemplateSectionResource.create(new PlanTemplateSectionDto(planTemplateSection)) .execute().toPojo(contestService); } public boolean updatePlanTemplateSection(PlanTemplateSection planTemplateSection) { return planTemplateSectionResource.service("updateTemplateSection",Boolean.class) .post(new PlanTemplateSectionDto(planTemplateSection)); } public List<PlanTemplateSection> getPlanTemplateSectionByPlanSectionDefinitionId(Long planSectionId) { return DtoUtil.toPojos(planTemplateSectionResource.list() .optionalQueryParam("planSectionId", planSectionId) .execute(), contestService); } }