Skip to content
Open

done #14

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,60 @@
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.2.1.RELEASE</spring.version>
<junit.jupiter.version>5.5.2</junit.jupiter.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.22.0</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.1.1.RELEASE</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.1.RELEASE</version>
<scope>compile</scope>
</dependency>

</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.epam.edu.spring.core.template.service;
package com.epam.edu.spring.core.template;

import com.epam.edu.spring.core.template.entity.Item;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.epam.edu.spring.core.template;

import com.epam.edu.spring.core.template.entity.Item;
import com.epam.edu.spring.core.template.repository.ItemRepository;
import com.epam.edu.spring.core.template.validator.ItemValidator;
import org.springframework.beans.factory.annotation.Autowired;

public class SimpleItemService implements ItemService {

private ItemRepository itemRepository;
private ItemValidator itemValidator;
@Autowired
public SimpleItemService(ItemRepository itemRepository, ItemValidator itemValidator) {
this.itemRepository = itemRepository;
this.itemValidator = itemValidator;
}


public void setItemValidator(ItemValidator itemValidator) {
this.itemValidator = itemValidator;
}

public SimpleItemService(ItemRepository itemRepository) {
this.itemRepository = itemRepository;
}

public void setItemRepository(ItemRepository itemRepository) {
this.itemRepository = itemRepository;
}

@Override
public Item getById(long id) {
return itemRepository.getById(id);
}

@Override
public boolean createItem(Item item) {
if(itemValidator.isItemValid(item)) {
return itemRepository.createItem(item);
}
return false;
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,28 @@
package com.epam.edu.spring.core.template;

import com.epam.edu.spring.core.template.configuration.InitializerConfiguration;
import com.epam.edu.spring.core.template.configuration.MainConfiguration;
import com.epam.edu.spring.core.template.entity.Item;
import com.epam.edu.spring.core.template.factory.ColorFactory;
import com.epam.edu.spring.core.template.validator.SimpleItemValidator;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class SpringCoreTemplate {

public static void main(String[] args) {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(MainConfiguration.class);

ColorFactory colorFactory = context.getBean(ColorFactory.class);
System.out.println(colorFactory.getColor());
SimpleItemService simpleItemService = context.getBean(SimpleItemService.class);
simpleItemService.createItem(new Item(1, "itemOne", 22, colorFactory.getColor()));
System.out.println(simpleItemService.getById(1));


for (String beanName : context.getBeanDefinitionNames()) {
System.out.println(beanName);
}
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,19 @@
package com.epam.edu.spring.core.template.configuration;

import com.epam.edu.spring.core.template.factory.ColorFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.*;



@ComponentScan
public class InitializerConfiguration {

@Bean
@Lazy
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public ColorFactory colorFactory(){
return new ColorFactory();
}

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
package com.epam.edu.spring.core.template.configuration;

import org.springframework.context.annotation.Import;

@Import({RepositoryConfiguration.class, InitializerConfiguration.class})
public class MainConfiguration {

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,44 @@
package com.epam.edu.spring.core.template.configuration;


import com.epam.edu.spring.core.template.repository.ArrayListItemRepository;
import com.epam.edu.spring.core.template.repository.ItemRepository;
import com.epam.edu.spring.core.template.repository.LinkedListItemRepository;
import com.epam.edu.spring.core.template.ItemService;
import com.epam.edu.spring.core.template.SimpleItemService;
import com.epam.edu.spring.core.template.validator.ItemValidator;
import com.epam.edu.spring.core.template.validator.SimpleItemValidator;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;


@Configuration
@PropertySource("classpath:application.properties")
public class RepositoryConfiguration {

@Value("${item.repository.implementation}")
String implementation;

@Bean
public ItemRepository itemRepository() {
return implementation.equals("array") ? arrayListItemRepository() : linkedListItemRepository();
}
@Bean
public ArrayListItemRepository arrayListItemRepository() {
return new ArrayListItemRepository();
}
@Bean
public LinkedListItemRepository linkedListItemRepository() {
return new LinkedListItemRepository();
}
@Bean
public ItemService itemService() {
return new SimpleItemService(itemRepository(), itemValidator());
}
@Bean
public ItemValidator itemValidator() {
return new SimpleItemValidator();
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.epam.edu.spring.core.template.entity;

public enum Color {
YELLOW, BLUE, RED, ORANGE, WHITE, BLACK

}
10 changes: 10 additions & 0 deletions src/main/java/com/epam/edu/spring/core/template/entity/Item.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,14 @@ public Color getColor() {
public void setColor(Color color) {
this.color = color;
}

@Override
public String toString() {
return "Item{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
", color=" + color +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.epam.edu.spring.core.template.factory;

import com.epam.edu.spring.core.template.entity.Color;
import org.springframework.beans.factory.FactoryBean;

import java.util.Random;


public class ColorFactory implements FactoryBean<Color> {

@Override
public Color getObject() {
Color[] colors = Color.values();
return colors[new Random().nextInt(colors.length)];
}

@Override
public Class<?> getObjectType() {
return Color.class;
}

public Color getColor() {
return getObject();
}

@Override
public boolean isSingleton() {
return false;
}
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,52 @@
package com.epam.edu.spring.core.template.repository;

import com.epam.edu.spring.core.template.entity.Item;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;

import javax.annotation.PostConstruct;
import java.util.ArrayList;

/**
* Репозиторий, основанный на классе ArrayList.
* initialSequence должен браться из application.properties
*/
@Repository
public class ArrayListItemRepository extends AbstractRepository<Item> implements ItemRepository {


@Override
public Item getById(long id) {
if(!holder.isEmpty()) {
for(Item item : holder) {
if(item.getId() == id) {
return item;
}
}
}
return null;
}

@Override
public boolean createItem(Item item) {
return false;
}
if(!(holder.isEmpty())) {
for (Item el : holder) {
if (el.getId() == item.getId()) {
return false;
}
}
}
holder.add(item);
return true;

}

@Value("${initial.sequence}")
void setInitialSequence(int val) {
//TODO
initialSequence = val;
}

@PostConstruct
void setHolder() {
//TODO
this.holder = new ArrayList<>();
}
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,47 @@
package com.epam.edu.spring.core.template.repository;

import com.epam.edu.spring.core.template.entity.Item;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import javax.annotation.PostConstruct;
import java.util.LinkedList;


/**
* Репозиторий, основанный на классе LinkedList.
* initialSequence должен случайно генерироваться из диапазона от 1 до 100
*/
@Repository
public class LinkedListItemRepository extends AbstractRepository<Item> implements ItemRepository {

@Override
public Item getById(long id) {
for(Item item : holder) {
if(item.getId() == id) {
return item;
}
}
return null;
}

@Override
public boolean createItem(Item item) {
return false;
if(!holder.isEmpty()) {
for(Item createItem : holder) {
if(createItem.getId() == item.getId()) {
return false;
}
}
}
holder.add(item);
return true;
}

void setInitialSequence(int val) {
//TODO
@Value(value = "#{ T(java.lang.Math).random() * 100 + 1 }")
public void setInitialSequence(int val) {
this.initialSequence = val;
}

@PostConstruct
void setHolder() {
//TODO
this.holder = new LinkedList<>();
}
}
Loading