diff --git a/src/main/java/ru/ulstu/fc/project/repository/RuleRepository.java b/src/main/java/ru/ulstu/fc/project/repository/RuleRepository.java deleted file mode 100644 index 6369ff5..0000000 --- a/src/main/java/ru/ulstu/fc/project/repository/RuleRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package ru.ulstu.fc.project.repository; - -import java.util.List; - -import org.springframework.data.jpa.repository.JpaRepository; - -import ru.ulstu.fc.rule.model.Rule; - -public interface RuleRepository extends JpaRepository { - - List findByProjectId(Integer projectId); -} diff --git a/src/main/java/ru/ulstu/fc/project/service/ProjectRulesService.java b/src/main/java/ru/ulstu/fc/project/service/ProjectRulesService.java index 5d00690..9b17e2c 100644 --- a/src/main/java/ru/ulstu/fc/project/service/ProjectRulesService.java +++ b/src/main/java/ru/ulstu/fc/project/service/ProjectRulesService.java @@ -1,21 +1,28 @@ package ru.ulstu.fc.project.service; +import java.util.Collections; import java.util.List; import org.springframework.stereotype.Service; -import ru.ulstu.fc.project.repository.RuleRepository; -import ru.ulstu.fc.rule.model.Rule; +import ru.ulstu.fc.rule.repository.RuleRepository; +import ru.ulstu.fc.rule.model.FuzzyRule; @Service public class ProjectRulesService { private final RuleRepository ruleRepository; + private final ProjectService projectService; - public ProjectRulesService(RuleRepository ruleRepository) { + public ProjectRulesService(RuleRepository ruleRepository, + ProjectService projectService) { this.ruleRepository = ruleRepository; + this.projectService = projectService; } - public List getByProjectId(Integer projectId) { - return ruleRepository.findByProjectId(projectId); + public List getByProjectId(Integer projectId) { + if (projectId == null || projectId == 0) { + return Collections.emptyList(); + } + return ruleRepository.findByProject(projectService.getById(projectId)); } } 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 6107baa..55c31e2 100644 --- a/src/main/java/ru/ulstu/fc/rule/controller/RuleController.java +++ b/src/main/java/ru/ulstu/fc/rule/controller/RuleController.java @@ -7,7 +7,7 @@ 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.Rule; +import ru.ulstu.fc.rule.model.FuzzyRule; import ru.ulstu.fc.rule.model.RuleForm; import ru.ulstu.fc.rule.service.RuleService; @@ -27,7 +27,7 @@ public class RuleController { model.addAttribute("rule", new RuleForm((id != null && id != 0) ? ruleService.getById(id) - : new Rule())); + : new FuzzyRule())); return "rule/edit"; } diff --git a/src/main/java/ru/ulstu/fc/rule/model/Antecedent.java b/src/main/java/ru/ulstu/fc/rule/model/Antecedent.java index 7df29b5..dbf82f6 100644 --- a/src/main/java/ru/ulstu/fc/rule/model/Antecedent.java +++ b/src/main/java/ru/ulstu/fc/rule/model/Antecedent.java @@ -4,11 +4,12 @@ import jakarta.persistence.Entity; import jakarta.persistence.ManyToOne; import ru.ulstu.fc.core.model.BaseEntity; -@Entity + public class Antecedent extends BaseEntity { @ManyToOne private Variable variable; - private String value; + @ManyToOne + private Term term; public Variable getVariable() { return variable; @@ -16,10 +17,11 @@ public class Antecedent extends BaseEntity { public void setVariable(Variable variable) { this.variable = variable; } - public String getValue() { - return value; + public Term getTerm() { + return term; } - public void setValue(String value) { - this.value = value; + public void setTerm(Term term) { + this.term = term; } + } diff --git a/src/main/java/ru/ulstu/fc/rule/model/Consequent.java b/src/main/java/ru/ulstu/fc/rule/model/Consequent.java index ae4148c..36d894a 100644 --- a/src/main/java/ru/ulstu/fc/rule/model/Consequent.java +++ b/src/main/java/ru/ulstu/fc/rule/model/Consequent.java @@ -4,7 +4,7 @@ import jakarta.persistence.Entity; import jakarta.persistence.ManyToOne; import ru.ulstu.fc.core.model.BaseEntity; -@Entity + public class Consequent extends BaseEntity { @ManyToOne private Variable variable; diff --git a/src/main/java/ru/ulstu/fc/rule/model/FuzzyRule.java b/src/main/java/ru/ulstu/fc/rule/model/FuzzyRule.java new file mode 100644 index 0000000..bc730ce --- /dev/null +++ b/src/main/java/ru/ulstu/fc/rule/model/FuzzyRule.java @@ -0,0 +1,32 @@ +package ru.ulstu.fc.rule.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.ManyToOne; +import ru.ulstu.fc.core.model.BaseEntity; +import ru.ulstu.fc.project.model.Project; + +@Entity +public class FuzzyRule extends BaseEntity { + @ManyToOne + private Project project; + private String content; + + public FuzzyRule() { + } + + public Project getProject() { + return project; + } + + public void setProject(Project project) { + this.project = project; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } +} diff --git a/src/main/java/ru/ulstu/fc/rule/model/Rule.java b/src/main/java/ru/ulstu/fc/rule/model/Rule.java deleted file mode 100644 index cb071cb..0000000 --- a/src/main/java/ru/ulstu/fc/rule/model/Rule.java +++ /dev/null @@ -1,47 +0,0 @@ -package ru.ulstu.fc.rule.model; - -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import ru.ulstu.fc.core.model.BaseEntity; -import ru.ulstu.fc.project.model.Project; - -@Entity -public class Rule extends BaseEntity { - @ManyToOne - private Project project; - @OneToMany - private List antecedents; //TODO: AND / OR? - @ManyToOne - private Consequent consequent; - - public Rule() { - } - - public Project getProject() { - return project; - } - - public void setProject(Project project) { - this.project = project; - } - - public List getAntecedents() { - return antecedents; - } - - public void setAntecedents(List antecedents) { - this.antecedents = antecedents; - } - - public Consequent getConsequent() { - return consequent; - } - - public void setConsequent(Consequent consequent) { - this.consequent = consequent; - } - -} diff --git a/src/main/java/ru/ulstu/fc/rule/model/RuleForm.java b/src/main/java/ru/ulstu/fc/rule/model/RuleForm.java index e9d8629..faa83cc 100644 --- a/src/main/java/ru/ulstu/fc/rule/model/RuleForm.java +++ b/src/main/java/ru/ulstu/fc/rule/model/RuleForm.java @@ -3,11 +3,12 @@ package ru.ulstu.fc.rule.model; public class RuleForm { private Integer id; private Integer projectId; + private String value; public RuleForm() { } - public RuleForm(Rule rule) { + public RuleForm(FuzzyRule rule) { this.projectId = (rule == null || rule.getProject() == null) ? null : rule.getProject().getId(); @@ -28,5 +29,13 @@ public class RuleForm { public void setProjectId(Integer projectId) { this.projectId = projectId; } - + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } diff --git a/src/main/java/ru/ulstu/fc/rule/model/Term.java b/src/main/java/ru/ulstu/fc/rule/model/Term.java new file mode 100644 index 0000000..17ffeb3 --- /dev/null +++ b/src/main/java/ru/ulstu/fc/rule/model/Term.java @@ -0,0 +1,16 @@ +package ru.ulstu.fc.rule.model; + +import jakarta.persistence.Entity; +import ru.ulstu.fc.core.model.BaseEntity; + +public class Term extends BaseEntity { + private String description; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} 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 57c07a6..a130457 100644 --- a/src/main/java/ru/ulstu/fc/rule/model/Variable.java +++ b/src/main/java/ru/ulstu/fc/rule/model/Variable.java @@ -7,7 +7,6 @@ import jakarta.persistence.Entity; import jakarta.persistence.OneToMany; import ru.ulstu.fc.core.model.BaseEntity; -@Entity public class Variable extends BaseEntity { private String name; @OneToMany diff --git a/src/main/java/ru/ulstu/fc/rule/model/VariableValue.java b/src/main/java/ru/ulstu/fc/rule/model/VariableValue.java index e3d4fe4..097a577 100644 --- a/src/main/java/ru/ulstu/fc/rule/model/VariableValue.java +++ b/src/main/java/ru/ulstu/fc/rule/model/VariableValue.java @@ -3,7 +3,6 @@ package ru.ulstu.fc.rule.model; import jakarta.persistence.Entity; import ru.ulstu.fc.core.model.BaseEntity; -@Entity public class VariableValue extends BaseEntity { private String fuzzyTerm; private Double value; diff --git a/src/main/java/ru/ulstu/fc/rule/repository/RuleRepository.java b/src/main/java/ru/ulstu/fc/rule/repository/RuleRepository.java new file mode 100644 index 0000000..a41bea7 --- /dev/null +++ b/src/main/java/ru/ulstu/fc/rule/repository/RuleRepository.java @@ -0,0 +1,13 @@ +package ru.ulstu.fc.rule.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; + +import ru.ulstu.fc.project.model.Project; +import ru.ulstu.fc.rule.model.FuzzyRule; + +public interface RuleRepository extends JpaRepository { + + List findByProject(Project project); +} 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 5f1b72c..f11e02a 100644 --- a/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java +++ b/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java @@ -98,6 +98,7 @@ public class FuzzyInferenceService { mamdani.setImplication(new AlgebraicProduct()); mamdani.setActivation(new General()); rules.forEach(r -> mamdani.addRule(Rule.parse(r, engine))); + mamdani.addRule(new Rule()); return mamdani; } diff --git a/src/main/java/ru/ulstu/fc/rule/service/RuleService.java b/src/main/java/ru/ulstu/fc/rule/service/RuleService.java index 929892a..10033ea 100644 --- a/src/main/java/ru/ulstu/fc/rule/service/RuleService.java +++ b/src/main/java/ru/ulstu/fc/rule/service/RuleService.java @@ -2,9 +2,9 @@ package ru.ulstu.fc.rule.service; import org.springframework.stereotype.Service; -import ru.ulstu.fc.project.repository.RuleRepository; +import ru.ulstu.fc.rule.repository.RuleRepository; import ru.ulstu.fc.project.service.ProjectService; -import ru.ulstu.fc.rule.model.Rule; +import ru.ulstu.fc.rule.model.FuzzyRule; import ru.ulstu.fc.rule.model.RuleForm; @Service @@ -17,7 +17,7 @@ public class RuleService { this.projectService = projectService; } - public Rule getById(Integer id) { + public FuzzyRule getById(Integer id) { return ruleRepository .findById(id) .orElseThrow(() -> new RuntimeException("Rule not found by id")); @@ -25,14 +25,14 @@ public class RuleService { public Object save(RuleForm ruleForm) { if (ruleForm.getId() == null) { - Rule rule = new Rule(); + FuzzyRule rule = new FuzzyRule(); rule.setProject(projectService.getById(ruleForm.getProjectId())); - // rule.set... + rule.setContent(ruleForm.getValue()); return ruleRepository.save(rule); } - Rule dbRule = getById(ruleForm.getId()); + FuzzyRule dbRule = getById(ruleForm.getId()); dbRule.setProject(projectService.getById(ruleForm.getProjectId())); - // dbRule.set ... + dbRule.setContent(ruleForm.getValue()); return ruleRepository.save(dbRule); } diff --git a/src/main/resources/templates/rule/edit.html b/src/main/resources/templates/rule/edit.html index 81b03d1..ed2f9a3 100644 --- a/src/main/resources/templates/rule/edit.html +++ b/src/main/resources/templates/rule/edit.html @@ -12,8 +12,17 @@
- - + + +

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