ItEr16S12CreacionProxectoPlanificacion: Creating hibernate mappings, service, dao classes and associated tests.

Moving entities test classes to the right package.
This commit is contained in:
Óscar González Fernández 2009-07-07 21:37:11 +02:00 committed by Javier Moran Rua
parent 6ba76c5515
commit 36a8654bdd
15 changed files with 298 additions and 4 deletions

View file

@ -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> {
}

View file

@ -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 {
}

View file

@ -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;
}
}

View file

@ -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;
/**

View file

@ -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;
}
}

View file

@ -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);
}

View file

@ -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);
}
}
}

View file

@ -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>

View file

@ -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>

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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());
}
}

View file

@ -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