ItEr16S12CreacionProxectoPlanificacion: Creating hibernate mappings, service, dao classes and associated tests.
Moving entities test classes to the right package.
This commit is contained in:
parent
6ba76c5515
commit
36a8654bdd
15 changed files with 298 additions and 4 deletions
|
|
@ -0,0 +1,11 @@
|
|||
package org.navalplanner.business.planner.daos;
|
||||
|
||||
import org.navalplanner.business.common.daos.IGenericDao;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*/
|
||||
public interface ITaskElementDao extends IGenericDao<TaskElement, Long> {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package org.navalplanner.business.planner.daos;
|
||||
|
||||
import org.navalplanner.business.common.daos.impl.GenericDaoHibernate;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*/
|
||||
@Repository
|
||||
@Scope(BeanDefinition.SCOPE_SINGLETON)
|
||||
public class TaskElementDao extends GenericDaoHibernate<TaskElement, Long>
|
||||
implements ITaskElementDao {
|
||||
|
||||
}
|
||||
|
|
@ -19,6 +19,10 @@ public class Dependency {
|
|||
return dependency;
|
||||
}
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long version;
|
||||
|
||||
private TaskElement origin;
|
||||
|
||||
private TaskElement destination;
|
||||
|
|
@ -53,4 +57,12 @@ public class Dependency {
|
|||
public Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public Long getVersion() {
|
||||
return version;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package org.navalplanner.business.planner.entities;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.hibernate.validator.NotNull;
|
||||
import org.navalplanner.business.orders.entities.HoursGroup;
|
||||
|
||||
/**
|
||||
|
|
@ -12,6 +13,7 @@ public class Task extends TaskElement {
|
|||
return new Task(hoursGroup);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private HoursGroup hoursGroup;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -12,6 +12,11 @@ import org.navalplanner.business.orders.entities.OrderElement;
|
|||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*/
|
||||
public abstract class TaskElement {
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long version;
|
||||
|
||||
private Date startDate;
|
||||
|
||||
private Date endDate;
|
||||
|
|
@ -68,4 +73,12 @@ public abstract class TaskElement {
|
|||
}
|
||||
}
|
||||
|
||||
public Long getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
package org.navalplanner.business.planner.services;
|
||||
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*/
|
||||
public interface ITaskElementService {
|
||||
|
||||
void save(TaskElement task);
|
||||
|
||||
TaskElement findById(Long id);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
package org.navalplanner.business.planner.services;
|
||||
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.navalplanner.business.planner.daos.ITaskElementDao;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*/
|
||||
@Service
|
||||
@Scope(BeanDefinition.SCOPE_SINGLETON)
|
||||
@Transactional
|
||||
public class TaskElementService implements ITaskElementService {
|
||||
|
||||
@Autowired
|
||||
private ITaskElementDao taskElementDao;
|
||||
|
||||
@Override
|
||||
public void save(TaskElement task) {
|
||||
taskElementDao.save(task);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskElement findById(Long id) {
|
||||
try {
|
||||
return taskElementDao.find(id);
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -26,6 +26,9 @@
|
|||
<value>
|
||||
org/navalplanner/business/orders/entities/Orders.hbm.xml
|
||||
</value>
|
||||
<value>
|
||||
org/navalplanner/business/planner/entities/Tasks.hbm.xml
|
||||
</value>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,53 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
||||
<hibernate-mapping package="org.navalplanner.business.planner.entities"
|
||||
default-access="field">
|
||||
<class name="TaskElement">
|
||||
<id name="id">
|
||||
<generator class="native"></generator>
|
||||
</id>
|
||||
<version name="version" type="long"></version>
|
||||
|
||||
<property name="startDate" type="timestamp" />
|
||||
<property name="endDate" type="timestamp" />
|
||||
|
||||
<set name="dependenciesWithThisOrigin">
|
||||
<key column="ORIGIN"></key>
|
||||
<one-to-many class="Dependency" />
|
||||
</set>
|
||||
|
||||
<set name="dependenciesWithThisDestination" cascade="all">
|
||||
<key column="DESTINATION"></key>
|
||||
<one-to-many class="Dependency" />
|
||||
</set>
|
||||
|
||||
<joined-subclass name="Task">
|
||||
<key column="TASK_ELEMENT_ID"></key>
|
||||
</joined-subclass>
|
||||
|
||||
<joined-subclass name="TaskGroup">
|
||||
<key column="TASK_ELEMENT_ID"></key>
|
||||
<list name="taskElements" cascade="all">
|
||||
<key column="parent" not-null="false"></key>
|
||||
<index column="positionInParent"></index>
|
||||
<one-to-many class="TaskElement" />
|
||||
</list>
|
||||
</joined-subclass>
|
||||
</class>
|
||||
<class name="Dependency">
|
||||
<id name="id">
|
||||
<generator class="native"></generator>
|
||||
</id>
|
||||
<version name="version" type="long"></version>
|
||||
<many-to-one class="TaskElement" name="origin"
|
||||
column="ORIGIN" />
|
||||
<many-to-one class="TaskElement" name="destination"
|
||||
column="DESTINATION" />
|
||||
<property name="type">
|
||||
<type name="org.hibernate.type.EnumType">
|
||||
<param name="enumClass">org.navalplanner.business.planner.entities.Dependency$Type</param>
|
||||
</type>
|
||||
</property>
|
||||
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package org.navalplanner.business.test.planner;
|
||||
package org.navalplanner.business.test.planner.entities;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package org.navalplanner.business.test.planner;
|
||||
package org.navalplanner.business.test.planner.entities;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.junit.Assert.assertSame;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package org.navalplanner.business.test.planner;
|
||||
package org.navalplanner.business.test.planner.entities;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package org.navalplanner.business.test.planner;
|
||||
package org.navalplanner.business.test.planner.entities;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
package org.navalplanner.business.test.planner.services;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE;
|
||||
import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.navalplanner.business.orders.entities.HoursGroup;
|
||||
import org.navalplanner.business.planner.entities.Dependency;
|
||||
import org.navalplanner.business.planner.entities.Task;
|
||||
import org.navalplanner.business.planner.entities.TaskElement;
|
||||
import org.navalplanner.business.planner.entities.TaskGroup;
|
||||
import org.navalplanner.business.planner.entities.Dependency.Type;
|
||||
import org.navalplanner.business.planner.services.ITaskElementService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||
*/
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE,
|
||||
BUSINESS_SPRING_CONFIG_TEST_FILE })
|
||||
@Transactional
|
||||
public class TaskElementServiceTest {
|
||||
|
||||
@Autowired
|
||||
private ITaskElementService taskElementService;
|
||||
|
||||
@Autowired
|
||||
private SessionFactory sessionFactory;
|
||||
|
||||
@Test
|
||||
public void canSaveTask() {
|
||||
Task task = createValidTask();
|
||||
taskElementService.save(task);
|
||||
flushAndEvict(task);
|
||||
TaskElement fromDB = taskElementService.findById(task.getId());
|
||||
assertThat(fromDB.getId(), equalTo(task.getId()));
|
||||
assertThat(fromDB, is(Task.class));
|
||||
checkProperties(task, fromDB);
|
||||
}
|
||||
|
||||
private Task createValidTask() {
|
||||
return Task.createTask(new HoursGroup());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void afterSavingTheVersionIsIncreased() {
|
||||
Task task = createValidTask();
|
||||
assertNull(task.getVersion());
|
||||
taskElementService.save(task);
|
||||
assertNotNull(task.getVersion());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canSaveTaskGroup() {
|
||||
TaskGroup taskGroup = new TaskGroup();
|
||||
taskElementService.save(taskGroup);
|
||||
flushAndEvict(taskGroup);
|
||||
TaskElement reloaded = taskElementService.findById(taskGroup.getId());
|
||||
assertThat(reloaded.getId(), equalTo(taskGroup.getId()));
|
||||
assertThat(reloaded, is(TaskGroup.class));
|
||||
checkProperties(taskGroup, reloaded);
|
||||
}
|
||||
|
||||
private void checkProperties(TaskElement inMemory, TaskElement fromDB) {
|
||||
assertThat(fromDB.getStartDate(), equalTo(inMemory.getStartDate()));
|
||||
assertThat(fromDB.getEndDate(), equalTo(inMemory.getEndDate()));
|
||||
}
|
||||
|
||||
private void flushAndEvict(Object entity) {
|
||||
sessionFactory.getCurrentSession().flush();
|
||||
sessionFactory.getCurrentSession().evict(entity);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void savingGroupSavesAssociatedTaskElements() {
|
||||
Task child1 = createValidTask();
|
||||
Task child2 = createValidTask();
|
||||
TaskGroup taskGroup = new TaskGroup();
|
||||
taskGroup.addTaskElement(child1);
|
||||
taskGroup.addTaskElement(child2);
|
||||
taskElementService.save(taskGroup);
|
||||
flushAndEvict(taskGroup);
|
||||
TaskGroup reloaded = (TaskGroup) taskElementService.findById(taskGroup
|
||||
.getId());
|
||||
List<TaskElement> taskElements = reloaded.getTaskElements();
|
||||
assertThat(taskElements.size(), equalTo(2));
|
||||
assertThat(taskElements.get(0).getId(), equalTo(child1.getId()));
|
||||
assertThat(taskElements.get(1).getId(), equalTo(child2.getId()));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void savingTaskElementSavesAssociatedDependencies() {
|
||||
Task child1 = createValidTask();
|
||||
Task child2 = createValidTask();
|
||||
TaskGroup taskGroup = new TaskGroup();
|
||||
taskGroup.addTaskElement(child1);
|
||||
taskGroup.addTaskElement(child2);
|
||||
Dependency dependency = Dependency.createDependency(child1, child2,
|
||||
Type.START_END);
|
||||
taskElementService.save(taskGroup);
|
||||
flushAndEvict(taskGroup);
|
||||
TaskGroup reloaded = (TaskGroup) taskElementService.findById(taskGroup
|
||||
.getId());
|
||||
assertThat(reloaded.getTaskElements().get(0)
|
||||
.getDependenciesWithThisOrigin().size(), equalTo(1));
|
||||
assertTrue(reloaded.getTaskElements().get(0)
|
||||
.getDependenciesWithThisDestination().isEmpty());
|
||||
|
||||
assertThat(reloaded.getTaskElements().get(1)
|
||||
.getDependenciesWithThisDestination().size(), equalTo(1));
|
||||
assertTrue(reloaded.getTaskElements().get(1)
|
||||
.getDependenciesWithThisOrigin().isEmpty());
|
||||
}
|
||||
}
|
||||
|
|
@ -36,6 +36,9 @@
|
|||
</value>
|
||||
<value>
|
||||
org/navalplanner/business/orders/entities/Orders.hbm.xml
|
||||
</value>
|
||||
<value>
|
||||
org/navalplanner/business/planner/entities/Tasks.hbm.xml
|
||||
</value>
|
||||
<value>
|
||||
TestEntities.hbm.xml
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue