Skip to content

Доработал тесты #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
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
8 changes: 7 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,13 @@
<groupId>com.epam.edu</groupId>
<artifactId>spring-core-template</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,24 @@
package com.epam.edu.spring.core.template;

public class SpringCoreTemplate {
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.repository.ItemRepository;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public static void main(String[] args) {
public class SpringCoreTemplate {

}
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfiguration.class);
ItemRepository repository = ctx.getBean(ItemRepository.class);
System.out.println("All items:");
for (Item item : repository.getList()) {
System.out.println(item.getName() + " " + item.getColor() + " " + item.getPrice());
}
double absoluteCost = 0;
for (Item item : repository.getList()) {
absoluteCost += item.getPrice();
}
System.out.println("\nTotal cost: " + absoluteCost);
}

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

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.LOCAL_VARIABLE})
public @interface InjectRandomInt {
int min();

int max();
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,37 @@
package com.epam.edu.spring.core.template.bpp;

public class InjectRandomIntBeanPostProcessor {
import com.epam.edu.spring.core.template.annotation.InjectRandomInt;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
import org.springframework.util.ReflectionUtils;

import java.lang.reflect.Field;
import java.util.Random;

@Component
public class InjectRandomIntBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) {
Field[] fields = bean.getClass().getDeclaredFields();
for (Field field : fields) {
InjectRandomInt annotation = field.getAnnotation(InjectRandomInt.class);
if (annotation != null) {
int min = annotation.min();
int max = annotation.max();

Random rnd = new Random();
int randomValue = min + rnd.nextInt(max - min);
field.setAccessible(true);
ReflectionUtils.setField(field, bean, randomValue);

}
}
return bean;
}

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
return null;
}

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

import java.util.ArrayList;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

public class ColorFactory {

private ResourceBundle prop = ResourceBundle.getBundle("application");
ArrayList<String> colors = new ArrayList<>();

public void initColors() {

String color;
int colorNumber = 0;
while (true) {
try {
color = prop.getString("colors.value[" + colorNumber + "]");
} catch (MissingResourceException e) {
break;
}
colors.add(color);
colorNumber++;
}

}

public List<String> getColors() {
return colors;
}
}
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 org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;

import javax.annotation.Resource;
import java.util.ResourceBundle;

@Configuration
public class InitializerConfiguration {
public static String listName;

@Bean(initMethod = "initColors")
public ColorFactory colorFact() {
return new ColorFactory();
}


@Lazy
@Resource
@Bean
public ItemRepository itemRepository(RepositoryConfiguration rep) {

try {
listName = ResourceBundle.getBundle("application").getString("item.repository.implementation");
} catch (Exception e) {
listName = "array";
}

if (listName.equals("linked")) {
return new LinkedListItemRepository(rep.getList());
} else {
return new ArrayListItemRepository(rep.getList());
}


}


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

import com.epam.edu.spring.core.template.bpp.InjectRandomIntBeanPostProcessor;
import com.epam.edu.spring.core.template.entity.Item;
import com.epam.edu.spring.core.template.service.SimpleItemService;
import org.springframework.context.annotation.*;

import javax.annotation.Resource;

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

@Resource
@Bean
public SimpleItemService simpleItemService(ColorFactory colorFactory) {
return new SimpleItemService(colorFactory);
}

@Lazy
@Bean
@Scope(scopeName = "prototype")
public Item item(SimpleItemService simpleItemService) {
return simpleItemService.getAndCreateNewItem();
}

@Bean
public RepositoryConfiguration repositoryConfiguration(SimpleItemService simpleItemService, ColorFactory colorFactory) {
RepositoryConfiguration repositoryConfiguration = new RepositoryConfiguration();
boolean colorIsOver = false;

while (!colorIsOver) {
try {
repositoryConfiguration.addToList(simpleItemService.getAndCreateNewItem());
} catch (Exception e) {
colorIsOver = true;
}


}
return repositoryConfiguration;

}

}
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.entity.Item;

import java.util.ArrayList;


public class RepositoryConfiguration {
private static ArrayList<Item> list = new ArrayList<>();

public void addToList(Item item) {
list.add(item);
}

public ArrayList<Item> getList() {
return list;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
/**
* Абстрактный класс для хранения сущностей.
* ID сущности генерируется, исходя из initialSequence
*
* @param <T>
*/
public abstract class AbstractRepository<T> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,42 @@

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

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

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

public ArrayList<Item> getList() {
return items;
}

public ArrayListItemRepository(List<Item> items) {
this.items = (ArrayList<Item>) items;
}

@Override
public Item getById(long id) {
return null;
return (Item) items.stream().filter(item -> item.getId() == id);

}

@Override
public boolean createItem(Item item) {
return false;
return items.add(item);
}

void setInitialSequence(int val) {
//TODO
this.initialSequence = val;
}

void setHolder() {
//TODO
this.iterator = items.listIterator();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

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

import java.util.List;

public interface ItemRepository {

Item getById(long id);

boolean createItem(Item item);

List<Item> getList();
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,45 @@
package com.epam.edu.spring.core.template.repository;

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

import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

/**
* Репозиторий, основанный на классе LinkedList.
* initialSequence должен случайно генерироваться из диапазона от 1 до 100
*/
public class LinkedListItemRepository extends AbstractRepository<Item> implements ItemRepository {
private LinkedList<Item> items;
private ListIterator<Item> iterator;
@InjectRandomInt(min = 0, max = 100)
private int initialSequence;

public LinkedListItemRepository(List<Item> items) {
this.items = (LinkedList<Item>) items;
}

public LinkedList<Item> getList() {
return items;
}

@Override
public Item getById(long id) {
return null;
return (Item) items.stream().filter(item -> item.getId() == id);
}

@Override
public boolean createItem(Item item) {
return false;
return items.add(item);
}

void setInitialSequence(int val) {
//TODO
this.initialSequence = val;
}

void setHolder() {
//TODO
this.iterator = items.listIterator();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,33 @@
package com.epam.edu.spring.core.template.service;

import com.epam.edu.spring.core.template.annotation.InjectRandomInt;
import com.epam.edu.spring.core.template.configuration.ColorFactory;
import com.epam.edu.spring.core.template.entity.Item;
import com.epam.edu.spring.core.template.repository.ItemRepository;

public class SimpleItemService implements ItemService {
ItemRepository repository;
ColorFactory colorFactory;
int id = -1;
@InjectRandomInt(min = 10, max = 1000)
int price;

public SimpleItemService(ColorFactory colorFactory) {
this.colorFactory = colorFactory;
}

public Item getAndCreateNewItem() {
id++;
return new Item(id, "Item", price, colorFactory.getColors().get(id));
}

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

@Override
public boolean createItem(Item item) {
return false;
}
}
Loading