diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 0000000..ca5e558 --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,28 @@ + + + + bms-prototype + org.ridelab.bms + 1.0-SNAPSHOT + + 4.0.0 + + jar + common + + + + ch.qos.logback + logback-classic + 1.2.3 + + + org.apache.commons + commons-lang3 + 3.7 + + + + diff --git a/common/src/main/java/org/ridelab/bms/common/five/Five.java b/common/src/main/java/org/ridelab/bms/common/five/Five.java new file mode 100644 index 0000000..1223cd8 --- /dev/null +++ b/common/src/main/java/org/ridelab/bms/common/five/Five.java @@ -0,0 +1,42 @@ +package org.ridelab.bms.common.five; + +import lombok.AccessLevel; +import lombok.experimental.FieldDefaults; +import lombok.experimental.UtilityClass; + +/** + * @see Five + */ +@UtilityClass +@FieldDefaults(level = AccessLevel.PUBLIC) +public class Five { + + int five() { + return 5; + } + + boolean isFive(int n) { + return five() == n; + } + + String esperanto() { + return "kvin"; + } + + String greek() { + return "πέντε"; + } + + String pinyin() { + return "wǔ"; + } + + String morseCode() { + return "....."; + } + + String oclock() { + return "\uD83D\uDD54"; + } + +} diff --git a/common/src/test/java/org/ridelab/bms/common/five/FiveTest.java b/common/src/test/java/org/ridelab/bms/common/five/FiveTest.java new file mode 100644 index 0000000..d33d805 --- /dev/null +++ b/common/src/test/java/org/ridelab/bms/common/five/FiveTest.java @@ -0,0 +1,35 @@ +package org.ridelab.bms.common.five; + +import org.apache.commons.lang3.StringUtils; +import org.junit.Test; +import org.ridelab.bms.common.five.Five; + +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +public class FiveTest { + + @Test + public void five() { + assertEquals(5, Five.five()); + } + + @Test + public void isFive() { + assertTrue(Five.isFive(5)); + assertFalse(Five.isFive(6)); + } + + @Test + public void multilingual() { + assertTrue(StringUtils.isNoneBlank( + Five.esperanto(), + Five.greek(), + Five.pinyin(), + Five.morseCode(), + Five.oclock() + )); + } + +} diff --git a/data-schema/pom.xml b/data-schema/pom.xml new file mode 100644 index 0000000..fba5bd7 --- /dev/null +++ b/data-schema/pom.xml @@ -0,0 +1,23 @@ + + + + bms-prototype + org.ridelab.bms + 1.0-SNAPSHOT + + 4.0.0 + + jar + data-schema + + + + org.ridelab.bms + common + 1.0-SNAPSHOT + + + + diff --git a/data-schema/src/main/java/org/ridelab/bms/entity/Item.java b/data-schema/src/main/java/org/ridelab/bms/entity/Item.java new file mode 100644 index 0000000..3f85de1 --- /dev/null +++ b/data-schema/src/main/java/org/ridelab/bms/entity/Item.java @@ -0,0 +1,13 @@ +package org.ridelab.bms.entity; + +import lombok.Value; + +@Value(staticConstructor = "of") +public class Item { + + String name; + + long id; + +} + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..f8d413f --- /dev/null +++ b/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + org.ridelab.bms + bms-prototype + pom + 1.0-SNAPSHOT + + + common + data-schema + service + + + + utf-8 + + + + + org.projectlombok + lombok + 1.16.18 + + + junit + junit + 4.12 + test + + + org.jetbrains + annotations + 15.0 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + utf-8 + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.9.1 + + + + + diff --git a/scripts/ci.sh b/scripts/ci.sh index 5c46f24..b7bad0b 100755 --- a/scripts/ci.sh +++ b/scripts/ci.sh @@ -4,4 +4,6 @@ scripts/lint-docs.sh +mvn clean test + echo -e "\033[0;32mFinished\033[m" diff --git a/service/pom.xml b/service/pom.xml new file mode 100644 index 0000000..66338d0 --- /dev/null +++ b/service/pom.xml @@ -0,0 +1,28 @@ + + + + bms-prototype + org.ridelab.bms + 1.0-SNAPSHOT + + 4.0.0 + + jar + service + + + + org.ridelab.bms + common + 1.0-SNAPSHOT + + + org.ridelab.bms + data-schema + 1.0-SNAPSHOT + + + + diff --git a/service/src/main/java/org/ridelab/bms/service/ItemService.java b/service/src/main/java/org/ridelab/bms/service/ItemService.java new file mode 100644 index 0000000..468e45c --- /dev/null +++ b/service/src/main/java/org/ridelab/bms/service/ItemService.java @@ -0,0 +1,25 @@ +package org.ridelab.bms.service; + +import org.ridelab.bms.entity.Item; + +import java.util.Optional; + +public interface ItemService { + + /** + * Find one by id + * + * @param id id + * @return found item + */ + Optional findOneById(long id); + + /** + * Find all by name + * + * @param name name + * @return found items + */ + Iterable findAllByName(String name); + +} diff --git a/service/src/main/java/org/ridelab/bms/service/impl/ItemServiceImpl.java b/service/src/main/java/org/ridelab/bms/service/impl/ItemServiceImpl.java new file mode 100644 index 0000000..440cac5 --- /dev/null +++ b/service/src/main/java/org/ridelab/bms/service/impl/ItemServiceImpl.java @@ -0,0 +1,50 @@ +package org.ridelab.bms.service.impl; + +import lombok.extern.slf4j.Slf4j; +import lombok.val; +import org.apache.commons.lang3.RandomUtils; +import org.ridelab.bms.entity.Item; +import org.ridelab.bms.service.ItemService; + +import java.util.Comparator; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +@Slf4j +public class ItemServiceImpl implements ItemService { + + @Override + public Optional findOneById(long id) { + + if (id < 0) { + + logger.debug("Can't find item with negative id {}", id); + + return Optional.empty(); + + } else { + + val item = Item.of("nothing", id); + + logger.debug("Found item {}", item); + + return Optional.of(item); + } + } + + @Override + public Iterable findAllByName(String name) { + + val items = IntStream.range(1, RandomUtils.nextInt(5, 10)). + mapToObj(i -> Item.of(name, RandomUtils.nextInt())). + sorted(Comparator.comparingLong(Item::getId)). + collect(Collectors.toList()); + + logger.debug("Found items {}", items.size(), items); + + return items; + } + +} + diff --git a/service/src/test/java/org/ridelab/bms/service/ItemServiceTest.java b/service/src/test/java/org/ridelab/bms/service/ItemServiceTest.java new file mode 100644 index 0000000..f28658d --- /dev/null +++ b/service/src/test/java/org/ridelab/bms/service/ItemServiceTest.java @@ -0,0 +1,33 @@ +package org.ridelab.bms.service; + +import lombok.val; +import org.junit.Test; +import org.ridelab.bms.service.impl.ItemServiceImpl; + +import static org.junit.Assert.*; + +public class ItemServiceTest { + + private final ItemService itemService = new ItemServiceImpl(); + + @Test + public void getOneById() { + val result = itemService.findOneById(1L); + assertTrue(result.isPresent()); + assertEquals(1L, result.get().getId()); + } + + @Test + public void getOneByIdNonexistent() { + val result = itemService.findOneById(-1L); + assertFalse(result.isPresent()); + } + + @Test + public void findAllByName() { + val result = itemService.findAllByName("nothing"); + assertTrue(result.iterator().hasNext()); + assertEquals("nothing", result.iterator().next().getName()); + } + +}