Добавил возможность устанавливать юниты, которые всегда будут участвовать в обработке. Добавил возможность устанавливать юнит для ответов, когда никакой юнит для ответа не найден
This commit is contained in:
parent
2a9413ab46
commit
6d9454fd03
@ -13,6 +13,8 @@ public @interface Unit {
|
|||||||
|
|
||||||
String value() default "";
|
String value() default "";
|
||||||
|
|
||||||
boolean mainUnit() default false;
|
boolean main() default false;
|
||||||
|
|
||||||
|
boolean global() default false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -31,4 +31,6 @@ public interface StorylineService<T extends Message> {
|
|||||||
|
|
||||||
Optional<MainUnit> getUnitByName(String unitName);
|
Optional<MainUnit> getUnitByName(String unitName);
|
||||||
|
|
||||||
|
void setDefaultUnit(String unitName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -80,6 +80,10 @@ public class GeneralAutoResponder<T extends Message> {
|
|||||||
this.errorHandler = errorHandler;
|
this.errorHandler = errorHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDefaultUnit(String unitName) {
|
||||||
|
storyLineService.setDefaultUnit(unitName);
|
||||||
|
}
|
||||||
|
|
||||||
public void processingNewMessage(T newMessage) {
|
public void processingNewMessage(T newMessage) {
|
||||||
if (newMessage != null) {
|
if (newMessage != null) {
|
||||||
final boolean state = personSettingService.getStateProcessingByPersonId(newMessage.getPersonId()).orElse(true);
|
final boolean state = personSettingService.getStateProcessingByPersonId(newMessage.getPersonId()).orElse(true);
|
||||||
@ -107,7 +111,8 @@ public class GeneralAutoResponder<T extends Message> {
|
|||||||
modifiable.forEach(m -> m.change(message));
|
modifiable.forEach(m -> m.change(message));
|
||||||
}
|
}
|
||||||
final Set<MainUnit> units = storyLineService.getNextUnitByPersonId(message.getPersonId());
|
final Set<MainUnit> units = storyLineService.getNextUnitByPersonId(message.getPersonId());
|
||||||
final Optional<MainUnit> optAnswer = Responder.nextUnit(message.getText(), units);
|
final Optional<MainUnit> optAnswer = Responder.nextUnit(message.getText(), units)
|
||||||
|
.or(storyLineService::getDefaultUnit);
|
||||||
if (optAnswer.isPresent()) {
|
if (optAnswer.isPresent()) {
|
||||||
final MainUnit answer = optAnswer.get();
|
final MainUnit answer = optAnswer.get();
|
||||||
if (checkPermission(answer.getAccessibility(), message)) {
|
if (checkPermission(answer.getAccessibility(), message)) {
|
||||||
|
@ -12,8 +12,8 @@ import java.util.Set;
|
|||||||
|
|
||||||
public class Storyline {
|
public class Storyline {
|
||||||
|
|
||||||
private MainUnit defaultUnit;
|
|
||||||
private final Set<MainUnit> startingUnits = new HashSet<>();
|
private final Set<MainUnit> startingUnits = new HashSet<>();
|
||||||
|
private final Set<MainUnit> globalUnits = new HashSet<>();
|
||||||
private final Map<String, MainUnit> units = new HashMap<>();
|
private final Map<String, MainUnit> units = new HashMap<>();
|
||||||
|
|
||||||
public Storyline(Set<MainUnit> startingUnits, Map<String, MainUnit> units) {
|
public Storyline(Set<MainUnit> startingUnits, Map<String, MainUnit> units) {
|
||||||
@ -21,12 +21,12 @@ public class Storyline {
|
|||||||
this.units.putAll(units);
|
this.units.putAll(units);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDefaultUnit(MainUnit defaultUnit) {
|
public void addGlobalUnits(Set<MainUnit> globalUnits) {
|
||||||
this.defaultUnit = defaultUnit;
|
this.globalUnits.addAll(globalUnits);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<MainUnit> getDefaultUnit() {
|
public Set<MainUnit> getGlobalUnits() {
|
||||||
return Optional.ofNullable(defaultUnit);
|
return globalUnits;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2,9 +2,8 @@ package dev.struchkov.godfather.core;
|
|||||||
|
|
||||||
import dev.struchkov.godfather.context.domain.UnitDefinition;
|
import dev.struchkov.godfather.context.domain.UnitDefinition;
|
||||||
import dev.struchkov.godfather.context.domain.annotation.Unit;
|
import dev.struchkov.godfather.context.domain.annotation.Unit;
|
||||||
import dev.struchkov.godfather.context.exception.UnitConfigException;
|
|
||||||
import dev.struchkov.godfather.context.domain.unit.LazyUnit;
|
|
||||||
import dev.struchkov.godfather.context.domain.unit.MainUnit;
|
import dev.struchkov.godfather.context.domain.unit.MainUnit;
|
||||||
|
import dev.struchkov.godfather.context.exception.UnitConfigException;
|
||||||
import dev.struchkov.haiti.utils.Inspector;
|
import dev.struchkov.haiti.utils.Inspector;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -31,7 +30,9 @@ public class StorylineMaker {
|
|||||||
|
|
||||||
private final Map<String, UnitDefinition> unitDefinitions = new HashMap<>();
|
private final Map<String, UnitDefinition> unitDefinitions = new HashMap<>();
|
||||||
private final Map<String, MainUnit> unitMap = new HashMap<>();
|
private final Map<String, MainUnit> unitMap = new HashMap<>();
|
||||||
|
|
||||||
private final Set<String> mainUnits = new HashSet<>();
|
private final Set<String> mainUnits = new HashSet<>();
|
||||||
|
private final Set<String> globalUnits = new HashSet<>();
|
||||||
|
|
||||||
public StorylineMaker(List<Object> unitConfigurations) {
|
public StorylineMaker(List<Object> unitConfigurations) {
|
||||||
this.configurations.addAll(unitConfigurations);
|
this.configurations.addAll(unitConfigurations);
|
||||||
@ -50,7 +51,10 @@ public class StorylineMaker {
|
|||||||
try {
|
try {
|
||||||
createUnitMap();
|
createUnitMap();
|
||||||
final Set<MainUnit> mainUnit = getMainUnit();
|
final Set<MainUnit> mainUnit = getMainUnit();
|
||||||
return new Storyline(mainUnit, unitMap);
|
final Set<MainUnit> globalUnit = getGlobalUnit();
|
||||||
|
final Storyline storyline = new Storyline(mainUnit, unitMap);
|
||||||
|
storyline.addGlobalUnits(globalUnit);
|
||||||
|
return storyline;
|
||||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
}
|
}
|
||||||
@ -64,6 +68,12 @@ public class StorylineMaker {
|
|||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Set<MainUnit> getGlobalUnit() {
|
||||||
|
return globalUnits.stream()
|
||||||
|
.map(unitMap::get)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
|
||||||
private void createUnitMap() throws IllegalAccessException, InvocationTargetException {
|
private void createUnitMap() throws IllegalAccessException, InvocationTargetException {
|
||||||
for (UnitDefinition unitDefinition : unitDefinitions.values()) {
|
for (UnitDefinition unitDefinition : unitDefinitions.values()) {
|
||||||
if (!unitMap.containsKey(unitDefinition.getName())) {
|
if (!unitMap.containsKey(unitDefinition.getName())) {
|
||||||
@ -118,9 +128,12 @@ public class StorylineMaker {
|
|||||||
unitDefinition.setMethod(method);
|
unitDefinition.setMethod(method);
|
||||||
unitDefinition.setObjectConfig(config);
|
unitDefinition.setObjectConfig(config);
|
||||||
|
|
||||||
if (unitConfig.mainUnit()) {
|
if (unitConfig.main()) {
|
||||||
mainUnits.add(unitName);
|
mainUnits.add(unitName);
|
||||||
}
|
}
|
||||||
|
if (unitConfig.global()) {
|
||||||
|
globalUnits.add(unitName);
|
||||||
|
}
|
||||||
|
|
||||||
final Parameter[] nextUnits = method.getParameters();
|
final Parameter[] nextUnits = method.getParameters();
|
||||||
if (nextUnits.length > 0) {
|
if (nextUnits.length > 0) {
|
||||||
|
@ -27,6 +27,7 @@ public class StorylineMailService implements StorylineService<Mail> {
|
|||||||
private final UnitPointerService unitPointerService;
|
private final UnitPointerService unitPointerService;
|
||||||
private final StorylineRepository storylineRepository;
|
private final StorylineRepository storylineRepository;
|
||||||
private final Storyline storyLine;
|
private final Storyline storyLine;
|
||||||
|
private String defaultUnitName;
|
||||||
|
|
||||||
public StorylineMailService(
|
public StorylineMailService(
|
||||||
UnitPointerService unitPointerService,
|
UnitPointerService unitPointerService,
|
||||||
@ -60,8 +61,9 @@ public class StorylineMailService implements StorylineService<Mail> {
|
|||||||
if (optMainUnits.isEmpty()) {
|
if (optMainUnits.isEmpty()) {
|
||||||
storylineRepository.cleanHistoryByPersonId(personId);
|
storylineRepository.cleanHistoryByPersonId(personId);
|
||||||
}
|
}
|
||||||
return optMainUnits
|
final Set<MainUnit> nextUnits = optMainUnits.orElse(storyLine.getStartingUnits());
|
||||||
.orElse(storyLine.getStartingUnits());
|
nextUnits.addAll(storyLine.getGlobalUnits());
|
||||||
|
return nextUnits;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -88,7 +90,13 @@ public class StorylineMailService implements StorylineService<Mail> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<MainUnit> getDefaultUnit() {
|
public Optional<MainUnit> getDefaultUnit() {
|
||||||
return storyLine.getDefaultUnit();
|
if (defaultUnitName == null) return Optional.empty();
|
||||||
|
return storyLine.getUnit(defaultUnitName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDefaultUnit(String defaultUnit) {
|
||||||
|
defaultUnitName = defaultUnit;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO [22.06.2022]: Временное решение для ленивой инициализации
|
//TODO [22.06.2022]: Временное решение для ленивой инициализации
|
||||||
|
Loading…
Reference in New Issue
Block a user