package com.getit.todoapp.domain;
import com.getit.todoapp.repository.TodoRepository;
import com.getit.todoapp.service.TodoService;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.roo.addon.dod.RooDataOnDemand;
import org.springframework.stereotype.Component;
@Component
@Configurable
@RooDataOnDemand(entity = Todo.class)
public class TodoDataOnDemand {
private Random rnd = new SecureRandom();
private List<Todo> data;
@Autowired
UserinfoDataOnDemand userinfoDataOnDemand;
@Autowired
TodoService todoService;
@Autowired
TodoRepository todoRepository;
public Todo getNewTransientTodo(int index) {
Todo obj = new Todo();
setIsCompleted(obj, index);
setName(obj, index);
setPriority(obj, index);
setTargetDate(obj, index);
return obj;
}
public void setIsCompleted(Todo obj, int index) {
Boolean isCompleted = Boolean.TRUE;
obj.setIsCompleted(isCompleted);
}
public void setName(Todo obj, int index) {
String name = "name_" + index;
obj.setName(name);
}
public void setPriority(Todo obj, int index) {
Priority priority = Priority.class.getEnumConstants()[0];
obj.setPriority(priority);
}
public void setTargetDate(Todo obj, int index) {
Date targetDate = new GregorianCalendar(Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().get(Calendar.DAY_OF_MONTH), Calendar.getInstance().get(Calendar.HOUR_OF_DAY), Calendar.getInstance().get(Calendar.MINUTE), Calendar.getInstance().get(Calendar.SECOND) + new Double(Math.random() * 1000).intValue()).getTime();
obj.setTargetDate(targetDate);
}
public Todo getSpecificTodo(int index) {
init();
if (index < 0) {
index = 0;
}
if (index > (data.size() - 1)) {
index = data.size() - 1;
}
Todo obj = data.get(index);
Long id = obj.getId();
return todoService.findTodo(id);
}
public Todo getRandomTodo() {
init();
Todo obj = data.get(rnd.nextInt(data.size()));
Long id = obj.getId();
return todoService.findTodo(id);
}
public boolean modifyTodo(Todo obj) {
return false;
}
public void init() {
int from = 0;
int to = 10;
data = todoService.findTodoEntries(from, to);
if (data == null) {
throw new IllegalStateException("Find entries implementation for 'Todo' illegally returned null");
}
if (!data.isEmpty()) {
return;
}
data = new ArrayList<Todo>();
for (int i = 0; i < 10; i++) {
Todo obj = getNewTransientTodo(i);
try {
todoService.saveTodo(obj);
} catch (final ConstraintViolationException e) {
final StringBuilder msg = new StringBuilder();
for (Iterator<ConstraintViolation<?>> iter = e.getConstraintViolations().iterator(); iter.hasNext();) {
final ConstraintViolation<?> cv = iter.next();
msg.append("[").append(cv.getRootBean().getClass().getName()).append(".").append(cv.getPropertyPath()).append(": ").append(cv.getMessage()).append(" (invalid value = ").append(cv.getInvalidValue()).append(")").append("]");
}
throw new IllegalStateException(msg.toString(), e);
}
todoRepository.flush();
data.add(obj);
}
}
}