From 972284fad3e18b9fdde1e554bdddb2294891e2a3 Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Thu, 20 Feb 2025 13:52:14 +0400 Subject: [PATCH] #5 -- Fix save variables --- .../ru/ulstu/fc/project/model/Project.java | 7 +++--- .../controller/InferenceMvcController.java | 8 +++---- .../fc/rule/controller/RuleController.java | 14 +++++------ .../java/ru/ulstu/fc/rule/model/Variable.java | 24 ++++++++++++------- .../rule/service/FuzzyInferenceService.java | 20 ++++++++-------- .../fc/rule/service/VariableService.java | 2 +- src/main/resources/templates/var/edit.html | 2 +- 7 files changed, 42 insertions(+), 35 deletions(-) diff --git a/src/main/java/ru/ulstu/fc/project/model/Project.java b/src/main/java/ru/ulstu/fc/project/model/Project.java index 4725550..f071540 100644 --- a/src/main/java/ru/ulstu/fc/project/model/Project.java +++ b/src/main/java/ru/ulstu/fc/project/model/Project.java @@ -1,19 +1,20 @@ package ru.ulstu.fc.project.model; +import java.util.Date; + +import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; import jakarta.persistence.ManyToOne; import jakarta.validation.constraints.NotEmpty; import ru.ulstu.fc.core.model.BaseEntity; import ru.ulstu.fc.user.model.User; -import java.util.Date; - @Entity public class Project extends BaseEntity { @NotEmpty(message = "Текст новости не может быть пустым") private String name; private Date createDate = new Date(); - @ManyToOne + @ManyToOne(cascade = CascadeType.MERGE) private User user; public Project() { diff --git a/src/main/java/ru/ulstu/fc/rule/controller/InferenceMvcController.java b/src/main/java/ru/ulstu/fc/rule/controller/InferenceMvcController.java index 0c37cf9..07fe4dd 100644 --- a/src/main/java/ru/ulstu/fc/rule/controller/InferenceMvcController.java +++ b/src/main/java/ru/ulstu/fc/rule/controller/InferenceMvcController.java @@ -46,19 +46,19 @@ public class InferenceMvcController { private List getAgeValues() { Variable var = new Variable("Age"); - var.getTerms().addAll(Arrays.asList( + var.getFuzzyTerms().addAll(Arrays.asList( new FuzzyTerm("молодой", 30.0), new FuzzyTerm("средний", 45.0), new FuzzyTerm("старый", 60.0))); - return var.getTerms(); + return var.getFuzzyTerms(); } private List getIncomeValues() { Variable var = new Variable("Income"); - var.getTerms().addAll(Arrays.asList( + var.getFuzzyTerms().addAll(Arrays.asList( new FuzzyTerm("небольшой", 20000.0), new FuzzyTerm("средний", 90000.0), new FuzzyTerm("высокий", 200000.0))); - return var.getTerms(); + return var.getFuzzyTerms(); } } diff --git a/src/main/java/ru/ulstu/fc/rule/controller/RuleController.java b/src/main/java/ru/ulstu/fc/rule/controller/RuleController.java index 093feeb..602bf68 100644 --- a/src/main/java/ru/ulstu/fc/rule/controller/RuleController.java +++ b/src/main/java/ru/ulstu/fc/rule/controller/RuleController.java @@ -7,15 +7,15 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; -import ru.ulstu.fc.rule.model.VariableForm; -import ru.ulstu.fc.rule.service.VariableService; +import ru.ulstu.fc.rule.model.FuzzyRuleForm; +import ru.ulstu.fc.rule.service.FuzzyRuleService; @Controller @RequestMapping("rule") public class RuleController { - private final VariableService ruleService; + private final FuzzyRuleService ruleService; - public RuleController(VariableService ruleService) { + public RuleController(FuzzyRuleService ruleService) { this.ruleService = ruleService; } @@ -24,7 +24,7 @@ public class RuleController { @PathVariable(value = "ruleId") Integer id, Model model) { model.addAttribute("projectId", projectId); model.addAttribute("rule", - new VariableForm(id, (id != null && id != 0) + new FuzzyRuleForm(id, (id != null && id != 0) ? ruleService.getById(id).getProject().getId() : projectId)); @@ -32,13 +32,13 @@ public class RuleController { } @PostMapping(value = "save", params = "save") - public String save(VariableForm ruleForm, Model model) { + public String save(FuzzyRuleForm ruleForm, Model model) { model.addAttribute("rule", ruleService.save(ruleForm)); return "redirect:/project/edit/" + ruleForm.getProjectId(); } @PostMapping(value = "save", params = "delete") - public String delete(VariableForm ruleForm) { + public String delete(FuzzyRuleForm ruleForm) { if (ruleForm != null && ruleForm.getId() != null) { ruleService.delete(ruleForm); } diff --git a/src/main/java/ru/ulstu/fc/rule/model/Variable.java b/src/main/java/ru/ulstu/fc/rule/model/Variable.java index a78a798..c58cb77 100644 --- a/src/main/java/ru/ulstu/fc/rule/model/Variable.java +++ b/src/main/java/ru/ulstu/fc/rule/model/Variable.java @@ -3,7 +3,11 @@ package ru.ulstu.fc.rule.model; import java.util.ArrayList; import java.util.List; +import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import ru.ulstu.fc.core.model.BaseEntity; import ru.ulstu.fc.project.model.Project; @@ -11,10 +15,12 @@ import ru.ulstu.fc.project.model.Project; @Entity public class Variable extends BaseEntity { private String name; + @ManyToOne private Project project; - private boolean isInput; - @OneToMany - private List terms = new ArrayList<>(); + private boolean isInput = true; + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JoinColumn(name = "variable_id", unique = true) + private List fuzzyTerms = new ArrayList<>(); public Variable() { } @@ -23,9 +29,9 @@ public class Variable extends BaseEntity { this.name = name; } - public Variable(String name, List terms) { + public Variable(String name, List fuzzyTerms) { this.name = name; - this.terms = terms; + this.fuzzyTerms = fuzzyTerms; } public String getName() { @@ -36,12 +42,12 @@ public class Variable extends BaseEntity { this.name = name; } - public List getTerms() { - return terms; + public List getFuzzyTerms() { + return fuzzyTerms; } - public void setTerms(List terms) { - this.terms = terms; + public void setFuzzyTerms(List fuzzyTerms) { + this.fuzzyTerms = fuzzyTerms; } public Project getProject() { diff --git a/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java b/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java index 30c053b..9b904cf 100644 --- a/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java +++ b/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java @@ -45,15 +45,15 @@ public class FuzzyInferenceService { final InputVariable input = new InputVariable(); input.setName(variable.getName()); input.setDescription(""); - input.setRange(0, variable.getTerms().get(variable.getTerms().size() - 1).getValue()); + input.setRange(0, variable.getFuzzyTerms().get(variable.getFuzzyTerms().size() - 1).getValue()); input.setEnabled(true); input.setLockValueInRange(false); double prev = 0; - for (int i = 0; i < variable.getTerms().size(); i++) { - Triangle term = new Triangle(variable.getTerms().get(i).getDescription(), + for (int i = 0; i < variable.getFuzzyTerms().size(); i++) { + Triangle term = new Triangle(variable.getFuzzyTerms().get(i).getDescription(), prev, - variable.getTerms().get(i).getValue(), - variable.getTerms().get(i).getValue() + variable.getTerms().get(i).getValue() - prev); + variable.getFuzzyTerms().get(i).getValue(), + variable.getFuzzyTerms().get(i).getValue() + variable.getFuzzyTerms().get(i).getValue() - prev); prev = term.getVertexB(); input.addTerm(term); } @@ -64,19 +64,19 @@ public class FuzzyInferenceService { final OutputVariable output = new OutputVariable(); output.setName(variable.getName()); output.setDescription(""); - output.setRange(0, variable.getTerms().get(variable.getTerms().size() - 1).getValue()); + output.setRange(0, variable.getFuzzyTerms().get(variable.getFuzzyTerms().size() - 1).getValue()); output.setEnabled(true); output.setAggregation(new Maximum()); output.setDefuzzifier(new WeightedAverage()); output.setDefaultValue(Double.NaN); output.setLockValueInRange(false); double prev = 0; - for (int i = 0; i < variable.getTerms().size(); i++) { + for (int i = 0; i < variable.getFuzzyTerms().size(); i++) { Triangle term = new Triangle( - variable.getTerms().get(i).getDescription(), + variable.getFuzzyTerms().get(i).getDescription(), prev, - variable.getTerms().get(i).getValue(), - variable.getTerms().get(i).getValue() + variable.getTerms().get(i).getValue() - prev); + variable.getFuzzyTerms().get(i).getValue(), + variable.getFuzzyTerms().get(i).getValue() + variable.getFuzzyTerms().get(i).getValue() - prev); prev = term.getVertexB(); output.addTerm(term); } 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 22d1c4d..8ce8003 100644 --- a/src/main/java/ru/ulstu/fc/rule/service/VariableService.java +++ b/src/main/java/ru/ulstu/fc/rule/service/VariableService.java @@ -23,7 +23,7 @@ public class VariableService { .orElseThrow(() -> new RuntimeException("Variable not found by id")); } - public Object save(VariableForm variableForm) { + public Variable save(VariableForm variableForm) { Variable variable; if (variableForm.getId() == null || variableForm.getId() == 0) { variable = new Variable(); diff --git a/src/main/resources/templates/var/edit.html b/src/main/resources/templates/var/edit.html index 44d956a..c514ab9 100644 --- a/src/main/resources/templates/var/edit.html +++ b/src/main/resources/templates/var/edit.html @@ -8,7 +8,7 @@

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

-
+