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
32 changes: 32 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,36 @@
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<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.13</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
<scope>test</scope>

</dependency>

</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -1,9 +1,30 @@
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.ItemRepository;
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);

ItemRepository itemService = context.getBean("itemRepository", ItemRepository.class);

Item item1 = new Item(1, "Car", 100, context.getBean("colorFactory", Color.class));
Item item2 = new Item(2, "Bus", 200, context.getBean("colorFactory", Color.class));
Item item3 = new Item(3, "Airplane", 2000, context.getBean("colorFactory", Color.class));

}
itemService.createItem(item1);
itemService.createItem(item2);
itemService.createItem(item3);

System.out.println(itemService.getById(1) + " initialSequence: " + itemService.getInitialSequence());
System.out.println(itemService.getById(2) + " initialSequence: " + itemService.getInitialSequence());
System.out.println(itemService.getById(3) + " initialSequence: " + itemService.getInitialSequence());
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,22 @@
package com.epam.edu.spring.core.template.configuration;

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

import java.util.Random;

@Configuration
public class InitializerConfiguration {

@Bean
@Scope("prototype")
@Lazy
public Color colorFactory() {
return Color.values()[new Random().nextInt(Color.values().length)];
}


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

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

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

}
Original file line number Diff line number Diff line change
@@ -1,4 +1,36 @@
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.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 itemRepositoryImplementationType;

@Bean
public ArrayListItemRepository arrayListItemRepository() {
return new ArrayListItemRepository();
}

@Bean
public LinkedListItemRepository linkedListItemRepository() {
return new LinkedListItemRepository();
}

@Bean
public ItemRepository itemRepository() {
if (itemRepositoryImplementationType.equals("linked")) {
return linkedListItemRepository();
} else {
return arrayListItemRepository();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package com.epam.edu.spring.core.template.entity;

public enum Color {

Red, Orange, Green, Blue, Indigo, Violet
}
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 @@ -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
@@ -1,28 +1,48 @@
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> itemArrayList = new ArrayList<>();

@Value("${initial.sequence}")
private long initialSequence = super.initialSequence;


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

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


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

void setHolder() {
//TODO
holder = itemArrayList;
}

public long getInitialSequence() {
return initialSequence;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ public interface ItemRepository {

boolean createItem(Item item);

long getInitialSequence();

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,43 @@

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 {

private final LinkedList<Item> itemLinkedList = new LinkedList<>();

private long initialSequence = new Random().nextLong();

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

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

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

void setHolder() {
//TODO
holder = this.itemLinkedList;
}

public long getInitialSequence() {
return initialSequence;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,30 @@

public class SimpleItemService implements ItemService {


private ItemRepository itemRepository;
private ItemValidator itemValidator;

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

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

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

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

@Override
public boolean createItem(Item item) {
return false;
return itemValidator.isItemValid(item) && itemRepository.createItem(item);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ public class SimpleItemValidator implements ItemValidator {

@Override
public boolean isItemValid(Item item) {
return false;
return item != null;
}
}
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