diff --git a/src/main/java/ru/ulstu/fc/rule/controller/FuzzyTermController.java b/src/main/java/ru/ulstu/fc/rule/controller/FuzzyTermController.java new file mode 100644 index 0000000..8a5eac0 --- /dev/null +++ b/src/main/java/ru/ulstu/fc/rule/controller/FuzzyTermController.java @@ -0,0 +1,55 @@ +package ru.ulstu.fc.rule.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import jakarta.validation.Valid; +import ru.ulstu.fc.rule.model.FuzzyTermForm; +import ru.ulstu.fc.rule.service.FuzzyTermService; + +@Controller +@RequestMapping("fuzzyTerm") +public class FuzzyTermController { + private final FuzzyTermService fuzzyTermService; + + public FuzzyTermController(FuzzyTermService fuzzyTermService) { + this.fuzzyTermService = fuzzyTermService; + } + + @GetMapping("/edit/{projectId}/{variableId}/{fuzzyTermId}") + public String edit(@PathVariable(value = "projectId") Integer projectId, + @PathVariable(value = "variableId") Integer variableId, + @PathVariable(value = "fuzzyTermId") Integer fuzzyTermId, Model model) { + model.addAttribute("projectId", projectId); + model.addAttribute("variableId", variableId); + model.addAttribute("fuzzyTermForm", + (fuzzyTermId == null || fuzzyTermId == 0) + ? new FuzzyTermForm(fuzzyTermId, projectId, variableId) + : new FuzzyTermForm(fuzzyTermId, projectId, variableId, fuzzyTermService.getById(fuzzyTermId))); + model.addAttribute("fuzzyTerms", fuzzyTermService.getByVariableId(variableId)); + return "fuzzyTerm/edit"; + } + + @PostMapping(value = "save", params = "save") + public String save(@Valid FuzzyTermForm fuzzyTermForm, BindingResult result, Model model) { + if (result.hasErrors()) { + model.addAttribute("projectId", fuzzyTermForm.getProjectId()); + return "fuzzyTerm/edit"; + } + fuzzyTermService.save(fuzzyTermForm); + return "redirect:/variable/edit/" + fuzzyTermForm.getProjectId() + "/" + fuzzyTermForm.getVariableId(); + } + + @PostMapping(value = "save", params = "delete") + public String delete(FuzzyTermForm fuzzyTermForm) { + if (fuzzyTermForm != null && fuzzyTermForm.getId() != null) { + fuzzyTermService.delete(fuzzyTermForm); + } + return "redirect:/variable/edit/" + fuzzyTermForm.getProjectId() + "/" + fuzzyTermForm.getVariableId(); + } +} diff --git a/src/main/java/ru/ulstu/fc/rule/controller/VariableController.java b/src/main/java/ru/ulstu/fc/rule/controller/VariableController.java index 565dbff..9fba9b9 100644 --- a/src/main/java/ru/ulstu/fc/rule/controller/VariableController.java +++ b/src/main/java/ru/ulstu/fc/rule/controller/VariableController.java @@ -10,33 +10,38 @@ import org.springframework.web.bind.annotation.RequestMapping; import jakarta.validation.Valid; import ru.ulstu.fc.rule.model.VariableForm; +import ru.ulstu.fc.rule.service.FuzzyTermService; import ru.ulstu.fc.rule.service.VariableService; @Controller -@RequestMapping("var") +@RequestMapping("variable") public class VariableController { private final VariableService variableService; + private final FuzzyTermService termService; - public VariableController(VariableService variableService) { + public VariableController(VariableService variableService, + FuzzyTermService termService) { this.variableService = variableService; + this.termService = termService; } - @GetMapping("/edit/{projectId}/{varId}") + @GetMapping("/edit/{projectId}/{variableId}") public String edit(@PathVariable(value = "projectId") Integer projectId, - @PathVariable(value = "varId") Integer id, Model model) { + @PathVariable(value = "variableId") Integer variableId, Model model) { model.addAttribute("projectId", projectId); model.addAttribute("variableForm", - (id != null && id != 0) - ? new VariableForm(id, variableService.getById(id)) - : new VariableForm(id, projectId)); - return "var/edit"; + (variableId == null || variableId == 0) + ? new VariableForm(variableId, projectId) + : new VariableForm(variableId, variableService.getById(variableId))); + model.addAttribute("fuzzyTerms", termService.getByVariableId(variableId)); + return "variable/edit"; } @PostMapping(value = "save", params = "save") public String save(@Valid VariableForm variableForm, BindingResult result, Model model) { if (result.hasErrors()) { model.addAttribute("projectId", variableForm.getProjectId()); - return "var/edit"; + return "variable/edit"; } variableService.save(variableForm); return "redirect:/project/edit/" + variableForm.getProjectId(); diff --git a/src/main/java/ru/ulstu/fc/rule/model/FuzzyTerm.java b/src/main/java/ru/ulstu/fc/rule/model/FuzzyTerm.java index 19c4308..7e8d278 100644 --- a/src/main/java/ru/ulstu/fc/rule/model/FuzzyTerm.java +++ b/src/main/java/ru/ulstu/fc/rule/model/FuzzyTerm.java @@ -8,7 +8,7 @@ public class FuzzyTerm extends BaseEntity { private String description; private Double crispValue; - public FuzzyTerm() { + public FuzzyTerm() { } public FuzzyTerm(String description, Double value) { diff --git a/src/main/java/ru/ulstu/fc/rule/model/FuzzyTermForm.java b/src/main/java/ru/ulstu/fc/rule/model/FuzzyTermForm.java new file mode 100644 index 0000000..755fda3 --- /dev/null +++ b/src/main/java/ru/ulstu/fc/rule/model/FuzzyTermForm.java @@ -0,0 +1,71 @@ +package ru.ulstu.fc.rule.model; + +public class FuzzyTermForm { + private Integer projectId; + private Integer variableId; + private Integer id; + private String description; + private Double crispValue; + + public FuzzyTermForm() { + } + + public FuzzyTermForm(String description, Double value) { + this.description = description; + this.crispValue = value; + } + + public FuzzyTermForm(Integer id, Integer projectId, Integer variableId) { + this.projectId = projectId; + this.variableId = variableId; + this.id = id; + } + + public FuzzyTermForm(Integer id, Integer projectId, Integer variableId, FuzzyTerm fuzzyTerm) { + this.id = id; + this.projectId = projectId; + this.variableId = variableId; + this.crispValue = fuzzyTerm.getCrispValue(); + this.description = fuzzyTerm.getDescription(); + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Double getCrispValue() { + return crispValue; + } + + public void setCrispValue(Double crispValue) { + this.crispValue = crispValue; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getProjectId() { + return projectId; + } + + public void setProjectId(Integer projectId) { + this.projectId = projectId; + } + + public Integer getVariableId() { + return variableId; + } + + public void setVariableId(Integer variableId) { + this.variableId = variableId; + } +} diff --git a/src/main/java/ru/ulstu/fc/rule/repository/FuzzyTermRepository.java b/src/main/java/ru/ulstu/fc/rule/repository/FuzzyTermRepository.java new file mode 100644 index 0000000..4aa4f2c --- /dev/null +++ b/src/main/java/ru/ulstu/fc/rule/repository/FuzzyTermRepository.java @@ -0,0 +1,9 @@ +package ru.ulstu.fc.rule.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import ru.ulstu.fc.rule.model.FuzzyTerm; + +public interface FuzzyTermRepository extends JpaRepository { + +} diff --git a/src/main/java/ru/ulstu/fc/rule/service/FuzzyTermService.java b/src/main/java/ru/ulstu/fc/rule/service/FuzzyTermService.java new file mode 100644 index 0000000..5561836 --- /dev/null +++ b/src/main/java/ru/ulstu/fc/rule/service/FuzzyTermService.java @@ -0,0 +1,55 @@ +package ru.ulstu.fc.rule.service; + +import java.util.Collections; +import java.util.List; + +import org.springframework.stereotype.Service; + +import ru.ulstu.fc.rule.model.FuzzyTerm; +import ru.ulstu.fc.rule.model.FuzzyTermForm; +import ru.ulstu.fc.rule.repository.FuzzyTermRepository; + +@Service +public class FuzzyTermService { + private final FuzzyTermRepository fuzzyTermRepository; + private final VariableService variableService; + + public FuzzyTermService(FuzzyTermRepository fuzzyTermRepository, + VariableService variableService) { + this.fuzzyTermRepository = fuzzyTermRepository; + this.variableService = variableService; + } + + public FuzzyTerm getById(Integer id) { + return fuzzyTermRepository + .findById(id) + .orElseThrow(() -> new RuntimeException("Term not found by id")); + } + + public FuzzyTerm save(FuzzyTermForm fuzzyTermForm) { + FuzzyTerm term; + if (fuzzyTermForm.getId() == null || fuzzyTermForm.getId() == 0) { + term = new FuzzyTerm(); + } else { + term = getById(fuzzyTermForm.getId()); + } + term.setDescription(fuzzyTermForm.getDescription()); + term.setCrispValue(fuzzyTermForm.getCrispValue()); + FuzzyTerm ft = fuzzyTermRepository.save(term); + variableService.addFuzzyTerm(fuzzyTermForm.getVariableId(), ft); + return ft; + + } + + public void delete(FuzzyTermForm fuzzyTermForm) { + getById(fuzzyTermForm.getId()); + fuzzyTermRepository.deleteById(fuzzyTermForm.getId()); + } + + public List getByVariableId(Integer variableId) { + if (variableId == null || variableId == 0) { + return Collections.emptyList(); + } + return variableService.getById(variableId).getFuzzyTerms(); + } +} diff --git a/src/main/java/ru/ulstu/fc/rule/service/VariableService.java b/src/main/java/ru/ulstu/fc/rule/service/VariableService.java index 322d5c7..c07e397 100644 --- a/src/main/java/ru/ulstu/fc/rule/service/VariableService.java +++ b/src/main/java/ru/ulstu/fc/rule/service/VariableService.java @@ -3,6 +3,7 @@ package ru.ulstu.fc.rule.service; import org.springframework.stereotype.Service; import ru.ulstu.fc.project.service.ProjectService; +import ru.ulstu.fc.rule.model.FuzzyTerm; import ru.ulstu.fc.rule.model.Variable; import ru.ulstu.fc.rule.model.VariableForm; import ru.ulstu.fc.rule.repository.VariableRepository; @@ -40,4 +41,10 @@ public class VariableService { getById(ruleForm.getId()); variableRepository.deleteById(ruleForm.getId()); } + + public void addFuzzyTerm(Integer variableId, FuzzyTerm ft) { + Variable var = getById(variableId); + var.getFuzzyTerms().add(ft); + variableRepository.save(var); + } } diff --git a/src/main/resources/templates/fuzzyTerm/edit.html b/src/main/resources/templates/fuzzyTerm/edit.html new file mode 100644 index 0000000..84837f9 --- /dev/null +++ b/src/main/resources/templates/fuzzyTerm/edit.html @@ -0,0 +1,54 @@ + + + + Редактирование терма + + +
+

Редактирование терма:

+
+ + + +
+ + +

+ Не может быть пустым +

+
+ +
+ + +

+ Не может быть пустым +

+
+ + + + Отмена +
+
+ diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 1208e58..b1a1070 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -28,7 +28,7 @@ th:field="*{ageValue}" data-width="90%"> @@ -43,7 +43,7 @@ th:field="*{incomeValue}" data-width="90%"> diff --git a/src/main/resources/templates/project/edit.html b/src/main/resources/templates/project/edit.html index bfca1c3..0f3c2fb 100644 --- a/src/main/resources/templates/project/edit.html +++ b/src/main/resources/templates/project/edit.html @@ -34,13 +34,13 @@ - Добавить преременную + Добавить преременную

Список правил

diff --git a/src/main/resources/templates/var/edit.html b/src/main/resources/templates/var/edit.html deleted file mode 100644 index 37722ba..0000000 --- a/src/main/resources/templates/var/edit.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - Редактирование переменной - - -
-

Редактирование переменной:

-
- - -
- - -

- Не может быть пустым -

-
- -
- - -
- - - - Отмена -
-
- diff --git a/src/main/resources/templates/variable/edit.html b/src/main/resources/templates/variable/edit.html new file mode 100644 index 0000000..a1775b5 --- /dev/null +++ b/src/main/resources/templates/variable/edit.html @@ -0,0 +1,54 @@ + + + + + Редактирование переменной + + +
+

Редактирование переменной:

+
+ + +
+ + +

+ Не может быть пустым +

+
+ +
+ + +
+ + + + Отмена + +
+
+
+

Список термов

+
+
+
+ + + +
+
+
+ Добавить терм +
+
+
+
+ + \ No newline at end of file