Skip to content
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
20 changes: 20 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,25 @@
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.1.RELEASE</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>

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

import com.epam.edu.spring.core.template.configuration.MainConfiguration;
import com.epam.edu.spring.core.template.entity.Color;
import com.epam.edu.spring.core.template.entity.Item;
import com.epam.edu.spring.core.template.repository.ArrayListItemRepository;
import com.epam.edu.spring.core.template.repository.LinkedListItemRepository;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class SpringCoreTemplate {

public static void main(String[] args) {
System.out.println("hello word");

}
AnnotationConfigApplicationContext context
= new AnnotationConfigApplicationContext(MainConfiguration.class);

//ArrayListItemRepository a = (ArrayListItemRepository) context.getBean("itemRepository");
LinkedListItemRepository l = (LinkedListItemRepository) context.getBean("itemRepository");

Item item = new Item(1, "Pasha", 20000000, Color.GREEN);
l.createItem(item);
Item pasha = l.getById(1);

System.out.println(pasha);

Item item2 = new Item(2, "Masha", 10000000, Color.YELLOW);

context.close();

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


import com.epam.edu.spring.core.template.entity.ColorFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;

@Configuration
public class InitializerConfiguration {

@Bean
@Lazy
@Scope("prototype")
public ColorFactory colorFactory() {
return new ColorFactory();
}

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

import com.epam.edu.spring.core.template.repository.ItemRepository;
import com.epam.edu.spring.core.template.service.ItemService;
import com.epam.edu.spring.core.template.service.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.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;

@PropertySource("application.properties")
@Import({RepositoryConfiguration.class, InitializerConfiguration.class})
public class MainConfiguration {

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

@Autowired
RepositoryConfiguration repositoryConfiguration;
@Autowired
InitializerConfiguration initializerConfiguration;

@Bean
public ItemRepository itemRepository() {
if (implementation.equals("linked")) {
return repositoryConfiguration.linkedListItemRepository();
}
return repositoryConfiguration.arrayListItemRepository();
}

@Bean
public ItemValidator itemValidator(){
return new SimpleItemValidator();
}

@Bean
public ItemService itemService(){
return new SimpleItemService(itemRepository(), itemValidator());
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,24 @@
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 java.util.ArrayList;
import java.util.LinkedList;

@Configuration
public class RepositoryConfiguration {

@Bean
public ItemRepository arrayListItemRepository() {
return new ArrayListItemRepository(new ArrayList<>());
}
@Bean
public ItemRepository linkedListItemRepository() {
return new LinkedListItemRepository(new LinkedList<>());
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
package com.epam.edu.spring.core.template.entity;

public enum Color {
RED,
BLUE,
GREEN,
BROWN,
YELLOW,
PINK;


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

import org.springframework.beans.factory.FactoryBean;
import java.util.Random;


public class ColorFactory implements FactoryBean<Color> {

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

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

@Override
public boolean isSingleton() {
return false;
}

public Color getColor(){
return Color.values()[new Random().nextInt(Color.values().length)];
}

}
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
Expand Up @@ -7,6 +7,7 @@
* ID сущности генерируется, исходя из initialSequence
* @param <T>
*/

public abstract class AbstractRepository<T> {

protected long initialSequence = 0;
Expand All @@ -15,6 +16,10 @@ public abstract class AbstractRepository<T> {

abstract void setInitialSequence(int val);

public long getInitialSequence() {
return initialSequence;
}

abstract void setHolder();

}
Original file line number Diff line number Diff line change
@@ -1,28 +1,51 @@
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 java.util.ArrayList;

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

// private final ArrayList<Item> listItem;
@Value("${initial.sequence}")
public long initialSequence;

public ArrayListItemRepository(ArrayList<Item> listItem) {
this.holder = listItem;
}

@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;
for (Item itemInList : holder) {
if (itemInList.getId() == item.getId()) {
return false;
}
}
holder.add(item);
return true;
}

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


void setHolder() {
//TODO
this.holder = new ArrayList<>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,51 @@

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

import java.util.LinkedList;
import java.util.Random;

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

public LinkedListItemRepository(LinkedList<Item> listItem) {
this.holder = listItem;
}

@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;
for (Item itemInList : holder) {
if (itemInList.getId() == item.getId()) {
return false;
}
}
holder.add(item);
return true;
}

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

@Override
public long getInitialSequence() {
return initialSequence;
}

void setHolder() {
//TODO
this.holder = new LinkedList<>();
}
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,37 @@
package com.epam.edu.spring.core.template.service;

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;
import org.springframework.stereotype.Component;

@Component
public class SimpleItemService implements ItemService {

private ItemService itemService;
private ItemValidator itemValidator;
private ItemRepository repository;

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

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

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

@Override
public boolean createItem(Item item) {
if (itemValidator.isItemValid(item))
return repository.createItem(item);
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

public class SimpleItemValidator implements ItemValidator {

//допустим нельзя создовать имена с пробелами
// и price имеет ограничения в 5 000 000
@Override
public boolean isItemValid(Item item) {
return false;
return !item.getName().contains(" ") && !(item.getPrice() > 50000000);
}
}
2 changes: 1 addition & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
initial.sequence=42
item.repository.implementation=
item.repository.implementation=linked
Loading