Skip to content

final #5

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
22 changes: 22 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,26 @@
<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,8 +1,17 @@
package com.epam.edu.spring.core.template;

import com.epam.edu.spring.core.template.configuration.MainConfiguration;
import com.epam.edu.spring.core.template.repository.ItemRepository;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class SpringCoreTemplate {

public static void main(String[] args) {
public static void main(String[] args) throws Exception {

AnnotationConfigApplicationContext context
= new AnnotationConfigApplicationContext(MainConfiguration.class);

System.out.println(context);

}

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

import com.epam.edu.spring.core.template.entity.Color;
import com.epam.edu.spring.core.template.entity.ColorFactory;
import org.springframework.context.annotation.*;

@Lazy
@Configuration
public class InitializerConfiguration {

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

@Bean
@Scope("prototype")
public Color getColor() throws Exception {
return colorFactory().getObject();
}

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

import com.epam.edu.spring.core.template.entity.Color;
import com.epam.edu.spring.core.template.repository.ItemRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;


@Configuration
@PropertySource("classpath:application.properties")
@ComponentScan(basePackages = "com.epam.edu.spring.core.template")
@Import({RepositoryConfiguration.class, InitializerConfiguration.class})
public class MainConfiguration {

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

@Autowired
private RepositoryConfiguration repositoryConfiguration;

@Autowired
private InitializerConfiguration initializerConfiguration;

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

@Bean
public Color getColor() throws Exception {
return initializerConfiguration.getColor();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,29 @@
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.*;

import java.util.ArrayList;
import java.util.LinkedList;


@Configuration
@ComponentScan(basePackages = "com.epam.edu.spring.core.template.repository")
public class RepositoryConfiguration {

@Bean
@Scope("singleton")
public ItemRepository arrayListItemRepository() {

return new ArrayListItemRepository(new ArrayList<>());
}

@Bean
@Scope("singleton")
public ItemRepository linkedListItemRepository() {
return new LinkedListItemRepository(new LinkedList<>());
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
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,48 @@
package com.epam.edu.spring.core.template.entity;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.util.Random;


@Component
public class ColorFactory implements FactoryBean<Color> {

private int factoryId;
private int colorId;

@Override
public Color getObject() throws Exception {
Random random = new Random();
int randomNumber = random.ints(0, Color.values().length)
.limit(1)
.findFirst()
.getAsInt();

Color[] colors = Color.values();
return colors[randomNumber];
}

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

public int getFactoryId() {
return factoryId;
}

public void setFactoryId(int factoryId) {
this.factoryId = factoryId;
}

public int getColorId() {
return colorId;
}

public void setColorId(int colorId) {
this.colorId = colorId;
}
}
18 changes: 18 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
@@ -1,5 +1,7 @@
package com.epam.edu.spring.core.template.entity;

import java.util.Objects;

public class Item {

private long id;
Expand Down Expand Up @@ -45,4 +47,20 @@ public Color getColor() {
public void setColor(Color color) {
this.color = color;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Item item = (Item) o;
return id == item.id &&
Double.compare(item.price, price) == 0 &&
Objects.equals(name, item.name) &&
color == item.color;
}

@Override
public int hashCode() {
return Objects.hash(id, name, price, color);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,57 @@

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.ArrayList;


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

private final ArrayList<Item> listItem;

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

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

@Override
public boolean createItem(Item item) {
return false;
for (Item itemInList : listItem) {
if (itemInList.equals(item)) {
return false;
}
}
listItem.add(item);
return true;
}

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

long getInitialSequence() {
return this.initialSequence;
}

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

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

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

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

private final LinkedList<Item> listItem;

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

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

@Override
public boolean createItem(Item item) {
return false;
for (Item itemInList : listItem) {
if (itemInList.equals(item)) {
return false;
}
}
listItem.add(item);
return true;
}

void setInitialSequence(int val) {
//TODO
this.initialSequence = new Random().nextInt(1) + 100;
}

long getInitialSequence() {
return this.initialSequence;
}

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

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

public class SimpleItemService implements ItemService {

private ItemService itemService;
private ItemValidator itemValidator;
private final ItemService itemService;

private final ItemValidator itemValidator;

@Autowired
public SimpleItemService(ItemService itemService, ItemValidator itemValidator) {
this.itemService = itemService;
this.itemValidator = itemValidator;
}

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

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

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



public class SimpleItemValidator implements ItemValidator {

@Override
Expand Down
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=array
Loading