#2 -- Add inference dtos #22

Merged
romanov73 merged 7 commits from 2-execute-rules into master 2025-03-03 22:28:52 +04:00
6 changed files with 100 additions and 63 deletions
Showing only changes of commit efd0cb66c7 - Show all commits

View File

@ -29,13 +29,13 @@ public class ProjectVariableService {
if (projectId == null || projectId == 0) { if (projectId == null || projectId == 0) {
return Collections.emptyList(); return Collections.emptyList();
} }
return variableRepository.findInputByProject(projectService.getById(projectId)); return variableRepository.getInputByProject(projectService.getById(projectId));
} }
public List<Variable> getOutputByProjectId(Integer projectId) { public List<Variable> getOutputByProjectId(Integer projectId) {
if (projectId == null || projectId == 0) { if (projectId == null || projectId == 0) {
return Collections.emptyList(); return Collections.emptyList();
} }
return variableRepository.findOutputByProject(projectService.getById(projectId)); return variableRepository.getOutputByProject(projectService.getById(projectId));
} }
} }

View File

@ -71,6 +71,22 @@ public class FuzzyRuleController {
return variableService.getAllDtoByProject(projectId); return variableService.getAllDtoByProject(projectId);
} }
@ResponseBody
@GetMapping("/getInputVariables/{projectId}")
public List<VariableDto> getInputVariables(@PathVariable("projectId") Integer projectId,
final HttpServletResponse response) {
response.addHeader("Cache-Control", "max-age=60, must-revalidate, no-transform");
return variableService.getInputVariablesDtoByProject(projectId);
}
@ResponseBody
@GetMapping("/getOutputVariables/{projectId}")
public List<VariableDto> getOutputVariables(@PathVariable("projectId") Integer projectId,
final HttpServletResponse response) {
response.addHeader("Cache-Control", "max-age=60, must-revalidate, no-transform");
return variableService.getOutputVariablesDtoByProject(projectId);
}
@ResponseBody @ResponseBody
@GetMapping("/getFuzzyTerms/{variableId}") @GetMapping("/getFuzzyTerms/{variableId}")
public List<FuzzyTerm> getTerms(@PathVariable("variableId") Integer variableId, public List<FuzzyTerm> getTerms(@PathVariable("variableId") Integer variableId,

View File

@ -15,8 +15,8 @@ public interface VariableRepository extends JpaRepository<Variable, Integer> {
List<Variable> getByProject(Project project); List<Variable> getByProject(Project project);
@Query("SELECT v FROM Variable v WHERE v.project = :project AND v.input = true") @Query("SELECT v FROM Variable v WHERE v.project = :project AND v.input = true")
List<Variable> findInputByProject(@Param("project") Project project); List<Variable> getInputByProject(@Param("project") Project project);
@Query("SELECT v FROM Variable v WHERE v.project = :project AND v.input = false") @Query("SELECT v FROM Variable v WHERE v.project = :project AND v.input = false")
List<Variable> findOutputByProject(@Param("project") Project project); List<Variable> getOutputByProject(@Param("project") Project project);
} }

View File

@ -80,4 +80,18 @@ public class VariableService {
public void checkIsCurrentUserVariableWithThrow(Variable variable) { public void checkIsCurrentUserVariableWithThrow(Variable variable) {
projectService.checkIsCurrentUserProjectWithThrow(variable.getProject()); projectService.checkIsCurrentUserProjectWithThrow(variable.getProject());
} }
public List<VariableDto> getInputVariablesDtoByProject(Integer projectId) {
return variableRepository.getInputByProject(projectService.getById(projectId))
.stream()
.map(VariableDto::new)
.toList();
}
public List<VariableDto> getOutputVariablesDtoByProject(Integer projectId) {
return variableRepository.getOutputByProject(projectService.getById(projectId))
.stream()
.map(VariableDto::new)
.toList();
}
} }

View File

@ -62,15 +62,12 @@ function errorHandler(response, callBack, errorCallBack) {
} }
/* exported getFromRest */ /* exported getFromRest */
function getFromRest(url, callBack) { async function getFromRest(url) {
$.ajax({ return await $.ajax({
url: url, url: url,
method: 'get', method: 'get',
cache: true, cache: true,
dataType: 'json', dataType: 'json'
success: function (response) {
errorHandler(response, callBack);
}
}); });
} }
@ -112,60 +109,63 @@ function fillSelect(selectElement, values, selectedVal) {
$(selectElement).append($("<option />").val(value.id).text(value.name)); $(selectElement).append($("<option />").val(value.id).text(value.name));
}); });
$(selectElement).children().each(function () { $(selectElement).children().each(function () {
if ($(this).text() == selectedVal) { if ($(this).text() === selectedVal) {
$(this).prop('selected', true); $(this).prop('selected', true);
} }
}); });
} }
function fillFuzzyTerms(variablesElement, fuzzyTermsElement, termVal) { async function fillFuzzyTerms(variablesElement, fuzzyTermsElement, termVal) {
getFromRest("/rule/getFuzzyTerms/" + $(variablesElement).val(), function (fuzzyTerms) { let fuzzyTerms = await getFromRest("/rule/getFuzzyTerms/" + $(variablesElement).val());
let fuzzyTermsData = []; let fuzzyTermsData = [];
$.each(fuzzyTerms, function (key, value) { $.each(fuzzyTerms, function (key, value) {
fuzzyTermsData.push({ fuzzyTermsData.push({
id: value.id, id: value.id,
name: value.description name: value.description
});
}); });
fillSelect(fuzzyTermsElement, fuzzyTermsData, termVal);
$(fuzzyTermsElement).selectpicker("refresh");
$(fuzzyTermsElement).trigger("change");
}); });
fillSelect(fuzzyTermsElement, fuzzyTermsData, termVal);
} }
function fillVariables(projectId, variablesElement, variableVal) { async function fillVariables(projectId, variablesElement, variableVal, cls) {
getFromRest("/rule/getVariables/" + projectId, function (variables) { let url = '/rule/';
let variablesData = []; if (cls === 'inputVar') {
$.each(variables, function (key, value) { url += 'getInputVariables/';
variablesData.push({ } else {
id: value.id, url += 'getOutputVariables/';
name: value.name }
}); let variables = await getFromRest(url + projectId);
let variablesData = [];
$.each(variables, function (key, value) {
variablesData.push({
id: value.id,
name: value.name
}); });
fillSelect(variablesElement, variablesData, variableVal);
$(variablesElement).selectpicker("refresh");
$(variablesElement).trigger("change");
}); });
fillSelect(variablesElement, variablesData, variableVal);
} }
function variableValueChanged(variablesElement, fuzzyTermsElement) { async function variableValueChanged(variablesElement, fuzzyTermsElement) {
fillFuzzyTerms(variablesElement, fuzzyTermsElement); await fillFuzzyTerms(variablesElement, fuzzyTermsElement);
} $(".selectpicker").selectpicker("refresh");
function fuzzyTermsValueChanged() {
createRule(); createRule();
} }
function createVariableSelect(cls, projectId, variableVal) { function fuzzyTermsValueChanged() {
$(".selectpicker").selectpicker("refresh");
createRule();
}
async function createVariableSelect(cls, projectId, variableVal) {
let variablesElement = $("<select class='selectpicker " + cls + " m-2' data-live-search='true data-width='70%'></select>"); let variablesElement = $("<select class='selectpicker " + cls + " m-2' data-live-search='true data-width='70%'></select>");
fillVariables(projectId, variablesElement, variableVal); await fillVariables(projectId, variablesElement, variableVal, cls);
return variablesElement; return variablesElement;
} }
function createFuzzyTermsSelect(cls, variablesElement, termVal) { async function createFuzzyTermsSelect(cls, variablesElement, termVal) {
let fuzzyTermsElement = $("<select class='selectpicker " + cls + " m-2' data-live-search='true data-width='70%'></select>"); let fuzzyTermsElement = $("<select class='selectpicker " + cls + " m-2' data-live-search='true data-width='70%'></select>");
if ($(variablesElement).val()) { if ($(variablesElement).val()) {
fillFuzzyTerms(variablesElement, fuzzyTermsElement, termVal); await fillFuzzyTerms(variablesElement, fuzzyTermsElement, termVal);
} }
return fuzzyTermsElement; return fuzzyTermsElement;
} }
@ -180,15 +180,15 @@ function removeConsequent(buttonElement) {
fuzzyTermsValueChanged(); fuzzyTermsValueChanged();
} }
function addAntecedent(parentElement, projectId, variableVal, termVal) { async function addAntecedent(parentElement, projectId, variableVal, termVal) {
let rowElement = $("<div class='row'></div>"); let rowElement = $("<div class='row'></div>");
if ($(parentElement).find('.row').length) { if ($(parentElement).find('.row').length) {
$(rowElement).append("<label class='col col-md-1 m-2'>И</label>"); $(rowElement).append("<label class='col col-md-1 m-2'>И</label>");
} else { } else {
$(rowElement).append("<label class='col col-md-1 m-2'> </label>"); $(rowElement).append("<label class='col col-md-1 m-2'> </label>");
} }
let variablesElement = createVariableSelect('inputVar', projectId, variableVal); let variablesElement = await createVariableSelect('inputVar', projectId, variableVal);
let fuzzyTermsElement = createFuzzyTermsSelect('inputVal', variablesElement, termVal); let fuzzyTermsElement = await createFuzzyTermsSelect('inputVal', variablesElement, termVal);
$(variablesElement).on("change", function () { $(variablesElement).on("change", function () {
variableValueChanged(variablesElement, fuzzyTermsElement) variableValueChanged(variablesElement, fuzzyTermsElement)
}); });
@ -204,17 +204,17 @@ function addAntecedent(parentElement, projectId, variableVal, termVal) {
$(parentElement).append(rowElement); $(parentElement).append(rowElement);
} }
function addConsequent(parentElement, projectId, variableVal, termVal) { async function addConsequent(parentElement, projectId, variableVal, termVal) {
let rowElement = $("<div class='row'></div>"); let rowElement = $("<div class='row'></div>");
if ($(parentElement).find('.row').length) { if ($(parentElement).find('.row').length) {
$(rowElement).append("<label class='col col-md-1 m-2'>И</label>"); $(rowElement).append("<label class='col col-md-1 m-2'>И</label>");
} else { } else {
$(rowElement).append("<label class='col col-md-1 m-2'> </label>"); $(rowElement).append("<label class='col col-md-1 m-2'> </label>");
} }
let variablesElement = createVariableSelect('outVar', projectId, variableVal); let variablesElement = await createVariableSelect('outVar', projectId, variableVal);
let fuzzyTermsElement = createFuzzyTermsSelect('outVal', variablesElement, termVal); let fuzzyTermsElement = await createFuzzyTermsSelect('outVal', variablesElement, termVal);
$(variablesElement).on("change", function () { $(variablesElement).on("change", async function () {
variableValueChanged(variablesElement, fuzzyTermsElement) await variableValueChanged(variablesElement, fuzzyTermsElement)
}); });
$(fuzzyTermsElement).on("change", function () { $(fuzzyTermsElement).on("change", function () {
fuzzyTermsValueChanged() fuzzyTermsValueChanged()
@ -228,18 +228,31 @@ function addConsequent(parentElement, projectId, variableVal, termVal) {
$(parentElement).append(rowElement); $(parentElement).append(rowElement);
} }
function addAntecedentFromRule(parentElement, projectId, ruleContent) { async function addAntecedentFromRule(parentElement, projectId, ruleContent) {
let antecedentComponents = getRuleComponents(getAntecedent(ruleContent)); let antecedentComponents = getRuleComponents(getAntecedent(ruleContent));
for (let i = 0; i < antecedentComponents.length; i++) { for (let i = 0; i < antecedentComponents.length; i++) {
let a = antecedentComponents[i]; let a = antecedentComponents[i];
addAntecedent(parentElement, projectId, getVariable(a), getVariableValue(a)); await addAntecedent(parentElement, projectId, getVariable(a), getVariableValue(a));
} }
} }
function addConsequentFromRule(parentElement, projectId, ruleContent) { async function addConsequentFromRule(parentElement, projectId, ruleContent) {
let consequentComponents = getRuleComponents(getConsequent(ruleContent)); let consequentComponents = getRuleComponents(getConsequent(ruleContent));
for (let i = 0; i < consequentComponents.length; i++) { for (let i = 0; i < consequentComponents.length; i++) {
let c = consequentComponents[i]; let c = consequentComponents[i];
addConsequent(parentElement, projectId, getVariable(c), getVariableValue(c)); await addConsequent(parentElement, projectId, getVariable(c), getVariableValue(c));
} }
} }
async function initSelects() {
let ruleContentEl = $('#ruleContent');
let projectIdEl = $('#projectId');
if ($(ruleContentEl).val()) {
await addAntecedentFromRule($('#rulesAntecedent'), $(projectIdEl).val(), $(ruleContentEl).val());
await addConsequentFromRule($('#rulesConsequent'), $(projectIdEl).val(), $(ruleContentEl).val());
} else {
await addAntecedent($('#rulesAntecedent'), $(projectIdEl).val());
await addConsequent($('#rulesConsequent'), $(projectIdEl).val());
}
$(".selectpicker").selectpicker("refresh");
}

View File

@ -50,15 +50,9 @@
</div> </div>
<script type="text/javascript" src="/js/fuzzyRule.js"></script> <script type="text/javascript" src="/js/fuzzyRule.js"></script>
<script type="text/javascript"> <script type="text/javascript">
let ruleContentEl = $('#ruleContent'); (async () => {
let projectIdEl = $('#projectId'); await initSelects();
if ($(ruleContentEl).val()) { })();
addAntecedentFromRule($('#rulesAntecedent'), $(projectIdEl).val(), $(ruleContentEl).val());
addConsequentFromRule($('#rulesConsequent'), $(projectIdEl).val(), $(ruleContentEl).val());
} else {
addAntecedent($('#rulesAntecedent'), $(projectIdEl).val());
addConsequent($('#rulesConsequent'), $(projectIdEl).val());
}
</script> </script>
</form> </form>
</div> </div>