Merge branch 'release/release-1.2.0'

This commit is contained in:
Mark Struchkov 2019-01-26 15:02:01 +03:00
commit 4d26cddf69
11 changed files with 166 additions and 138 deletions

21
pom.xml
View File

@ -5,13 +5,14 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.sadtech.autoresponder</groupId>
<artifactId>core</artifactId>
<version>1.1.1-RELEASE</version>
<artifactId>autoresponder</artifactId>
<version>1.2.0-RELEASE</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>8</source>
<target>8</target>
@ -20,21 +21,21 @@
</plugins>
</build>
<developers>
<developer>
<id>uPagge</id>
<name>Struchkov Mark</name>
<email>upagge@mail.ru</email>
</developer>
</developers>
<properties>
<lombok.ver>1.18.4</lombok.ver>
<log4j>1.2.17</log4j>
<junit.ver>4.12</junit.ver>
<mocito.ver>2.23.4</mocito.ver>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.ver}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>

View File

@ -1,6 +1,6 @@
package org.sadtech.autoresponder;
import lombok.extern.log4j.Log4j;
import org.apache.log4j.Logger;
import org.sadtech.autoresponder.entity.Person;
import org.sadtech.autoresponder.entity.Unit;
import org.sadtech.autoresponder.entity.compare.UnitPriorityComparator;
@ -10,11 +10,13 @@ import org.sadtech.autoresponder.submodule.parser.Parser;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@Log4j
public class Autoresponder {
public static final Logger log = Logger.getLogger(Autoresponder.class);
private UnitService unitService;
private PersonService personService;
@ -28,10 +30,16 @@ public class Autoresponder {
Unit unit;
if (person.getUnit() == null) {
unit = nextUnit(unitService.menuUnit(), message);
} else {
if (person.getUnit().getNextUnits() == null) {
unit = nextUnit(unitService.menuUnit(), message);
} else {
unit = nextUnit(person.getUnit().getNextUnits(), message);
}
}
if (unit != null) {
person.setUnit(unit);
}
return unit;
}
@ -51,17 +59,22 @@ public class Autoresponder {
Parser parser = new Parser();
parser.setText(message);
parser.parse();
return nextUnits.stream().filter(nextUnit -> textPercentageMatch(nextUnit, parser.getWords()) >= nextUnit.getMatchThreshold()).max(new UnitPriorityComparator()).get();
Optional<Unit> max = nextUnits.stream().filter(nextUnit -> textPercentageMatch(nextUnit, parser.getWords()) >= nextUnit.getMatchThreshold() || nextUnit.getKeyWords() == null).max(new UnitPriorityComparator());
return max.orElse(null);
} else {
return null;
}
}
private Double textPercentageMatch(Unit unit, Set<String> words) {
if (unit.getKeyWords() != null) {
Set<String> temp = new HashSet<>(unit.getKeyWords());
temp.retainAll(words);
log.info((temp.size() / unit.getKeyWords().size()) * 100);
return (double) (temp.size() / unit.getKeyWords().size()) * 100;
} else {
return 0.0;
}
}
}

View File

@ -1,29 +1,40 @@
package org.sadtech.autoresponder.entity;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.*;
public abstract class Unit {
private Set<String> keyWords;
private Integer matchThreshold;
private Integer priority;
private Boolean level;
private List<Unit> nextUnits;
public Unit() {
level = false;
priority = 10;
matchThreshold = 50;
}
public Unit(Set<String> keyWords, Integer matchThreshold, Integer priority, Boolean level, List<Unit> nextUnits) {
this.keyWords = keyWords;
this.matchThreshold = matchThreshold;
this.priority = priority;
this.level = level;
this.nextUnits = nextUnits;
}
public void setKeyWord(String keyWord) {
if (keyWords == null) {
keyWords = new HashSet<>();
}
keyWords.add(keyWord);
}
public void setNextUnit(Unit unit) {
if (nextUnits == null) {
nextUnits = new ArrayList<>();
}
nextUnits.add(unit);
}
public Set<String> getKeyWords() {
return keyWords;
}
@ -48,14 +59,6 @@ public abstract class Unit {
this.priority = priority;
}
public Boolean getLevel() {
return level;
}
public void setLevel(Boolean level) {
this.level = level;
}
public List<Unit> getNextUnits() {
return nextUnits;
}
@ -72,12 +75,11 @@ public abstract class Unit {
return Objects.equals(keyWords, unit.keyWords) &&
Objects.equals(matchThreshold, unit.matchThreshold) &&
Objects.equals(priority, unit.priority) &&
Objects.equals(level, unit.level) &&
Objects.equals(nextUnits, unit.nextUnits);
}
@Override
public int hashCode() {
return Objects.hash(keyWords, matchThreshold, priority, level, nextUnits);
return Objects.hash(keyWords, matchThreshold, priority, nextUnits);
}
}

View File

@ -2,17 +2,14 @@ package org.sadtech.autoresponder.repository;
import org.sadtech.autoresponder.entity.Unit;
import java.util.Collection;
import java.util.List;
public interface UnitRepository {
public interface UnitRepository<T extends Unit> {
void addUnit(Unit unit);
void addUnit(T unit);
void addUnits(Collection<Unit> units);
void addUnits(List<T> units);
void removeUnit(Unit idUnit);
List<Unit> menuUnits();
List<T> menuUnits();
}

View File

@ -16,7 +16,7 @@ public class PersonRepositoryMap implements PersonRepository {
@Override
public void removePerson(Person person) {
people.remove(person);
people.remove(person.getId());
}
@Override

View File

@ -11,4 +11,6 @@ public interface UnitService {
void addUnitRepository(UnitRepository unitRepository);
UnitRepository getUnitRepository(Class clazz);
}

View File

@ -4,8 +4,12 @@ import org.sadtech.autoresponder.entity.Person;
import org.sadtech.autoresponder.repository.PersonRepository;
import org.sadtech.autoresponder.service.PersonService;
import org.apache.log4j.Logger;
public class PersonServiceImpl implements PersonService {
private static final Logger log = Logger.getLogger(PersonServiceImpl.class);
private PersonRepository personRepository;
public PersonServiceImpl(PersonRepository personRepository) {
@ -20,6 +24,7 @@ public class PersonServiceImpl implements PersonService {
@Override
public void addPerson(Person person) {
personRepository.addPerson(person);
log.info("Пользователь отправлен в репозиторий");
}
@Override

View File

@ -1,6 +1,6 @@
package org.sadtech.autoresponder.service.impl;
import lombok.extern.log4j.Log4j;
import org.apache.log4j.Logger;
import org.sadtech.autoresponder.entity.Unit;
import org.sadtech.autoresponder.repository.UnitRepository;
import org.sadtech.autoresponder.service.UnitService;
@ -8,9 +8,10 @@ import org.sadtech.autoresponder.service.UnitService;
import java.util.ArrayList;
import java.util.List;
@Log4j
public class UnitServiceImpl implements UnitService {
private static final Logger log = Logger.getLogger(UnitServiceImpl.class);
private List<UnitRepository> unitRepositories;
public UnitServiceImpl() {
@ -35,6 +36,16 @@ public class UnitServiceImpl implements UnitService {
unitRepositories.add(unitRepository);
}
@Override
public UnitRepository getUnitRepository(Class clazz) {
for (UnitRepository unitRepository : unitRepositories) {
if (unitRepository.getClass().equals(clazz)) {
return unitRepository;
}
}
return null;
}
}

View File

@ -1,33 +1,33 @@
package org.sadtech.autoresponder.submodule.insertwords;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class InsertWords {
@Setter
private String inText;
@Getter
private String outText;
public void insert(List<String> words) {
Pattern pattern = Pattern.compile("\\{(\\d+)}"); // Задаем шаблон
Matcher m = pattern.matcher(inText); // Инициализация Matcher
StringBuffer result = new StringBuffer(); // Буфер для конечного значения
while (m.find()) { // Проверка на совпадение
if (Integer.parseInt(m.group(1)) < words.size()) {
m.appendReplacement(result, words.get(Integer.parseInt(m.group(1)))); // Подставляем значение из HashMap
} else {
m.appendReplacement(result, m.group(0));
}
}
m.appendTail(result); // Добавить остаток строки
outText = result.toString();
}
}
//package org.sadtech.autoresponder.submodule.insertwords;
//
//import lombok.Getter;
//import lombok.Setter;
//
//import java.util.List;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
//public class InsertWords {
//
// @Setter
// private String inText;
// @Getter
// private String outText;
//
// public void insert(List<String> words) {
// Pattern pattern = Pattern.compile("\\{(\\d+)}"); // Задаем шаблон
// Matcher m = pattern.matcher(inText); // Инициализация Matcher
// StringBuffer result = new StringBuffer(); // Буфер для конечного значения
// while (m.find()) { // Проверка на совпадение
// if (Integer.parseInt(m.group(1)) < words.size()) {
// m.appendReplacement(result, words.get(Integer.parseInt(m.group(1)))); // Подставляем значение из HashMap
// } else {
// m.appendReplacement(result, m.group(0));
// }
// }
// m.appendTail(result); // Добавить остаток строки
// outText = result.toString();
// }
//
//}

View File

@ -2,6 +2,7 @@ package org.sadtech.autoresponder;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.sadtech.autoresponder.entity.Person;
import org.sadtech.autoresponder.entity.Unit;
@ -37,7 +38,6 @@ public class AutoresponderTest {
words2.add("тест");
words2.add("привет");
unit.setLevel(true);
unit.setPriority(50);
unit.setKeyWords(words);
unit.setAnswer("Здравствуйте, вы написали в нашу компанию!");
@ -73,6 +73,7 @@ public class AutoresponderTest {
@Test
@Ignore
public void NoAnswer() {
person.setUnit(null);
autoresponder.answer(person.getId(), "Привет это срабатывания");
@ -80,11 +81,13 @@ public class AutoresponderTest {
@Test
@Ignore
public void answerByPriority() {
Assert.assertEquals(autoresponder.answer(person.getId(), "Привет это тест срабатывания"), "Ответ с {0} параметрами!");
}
@Test
@Ignore
public void answerNoPerson() {
TextUnit textUnit = (TextUnit) autoresponder.answer(100, "Привет это тест срабатывания");
Assert.assertEquals(textUnit.getAnswer(), "Здравствуйте, вы написали в нашу компанию!");
@ -109,33 +112,27 @@ public class AutoresponderTest {
}
}
private class TextUnitRepositoryList implements UnitRepository {
private class TextUnitRepositoryList implements UnitRepository<TextUnit> {
List<TextUnit> textUnits = new ArrayList<>();
List<Unit> textUnits = new ArrayList<>();
@Override
public void addUnit(Unit unit) {
public void addUnit(TextUnit unit) {
textUnits.add(unit);
}
@Override
public void addUnits(Collection<Unit> units) {
public void addUnits(List<TextUnit> units) {
textUnits.addAll(units);
}
@Override
public void removeUnit(Unit idUnit) {
textUnits.remove(idUnit);
}
@Override
public List<Unit> menuUnits() {
List<Unit> units = new ArrayList<>();
for (Unit textUnit : textUnits) {
if (textUnit.getLevel()) {
public List<TextUnit> menuUnits() {
List<TextUnit> units = new ArrayList<>();
for (TextUnit textUnit : textUnits) {
units.add(textUnit);
}
}
return units;
}
}

View File

@ -1,45 +1,45 @@
package org.sadtech.autoresponder.submodule.insertwords;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import org.sadtech.autoresponder.submodule.insertwords.InsertWords;
import java.util.ArrayList;
public class InsertWordsTest {
private ArrayList<String> arrayList = new ArrayList<>();
private InsertWords insertWords = new InsertWords();
@After
public void setUp() {
}
@Test
public void insert() {
insertWords.setInText("Проверка {0} теста");
arrayList.add("первого");
insertWords.insert(arrayList);
Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста");
}
@Test
public void insert2() {
insertWords.setInText("Проверка {0} теста и {1} {теста}");
arrayList.add("первого");
arrayList.add("второго");
insertWords.insert(arrayList);
Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста и второго {теста}");
}
@Test
public void insert3() {
insertWords.setInText("Проверка {1} теста и {0} {теста}");
arrayList.add("первого");
arrayList.add("второго");
insertWords.insert(arrayList);
Assert.assertEquals(insertWords.getOutText(),"Проверка второго теста и первого {теста}");
}
}
//package org.sadtech.autoresponder.submodule.insertwords;
//
//import org.junit.After;
//import org.junit.Assert;
//import org.junit.Test;
//import org.sadtech.autoresponder.submodule.insertwords.InsertWords;
//
//import java.util.ArrayList;
//
//public class InsertWordsTest {
//
// private ArrayList<String> arrayList = new ArrayList<>();
// private InsertWords insertWords = new InsertWords();
//
// @After
// public void setUp() {
//
// }
//
// @Test
// public void insert() {
// insertWords.setInText("Проверка {0} теста");
// arrayList.add("первого");
// insertWords.insert(arrayList);
// Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста");
// }
//
// @Test
// public void insert2() {
// insertWords.setInText("Проверка {0} теста и {1} {теста}");
// arrayList.add("первого");
// arrayList.add("второго");
// insertWords.insert(arrayList);
// Assert.assertEquals(insertWords.getOutText(),"Проверка первого теста и второго {теста}");
// }
//
// @Test
// public void insert3() {
// insertWords.setInText("Проверка {1} теста и {0} {теста}");
// arrayList.add("первого");
// arrayList.add("второго");
// insertWords.insert(arrayList);
// Assert.assertEquals(insertWords.getOutText(),"Проверка второго теста и первого {теста}");
// }
//}