ItEr20S04ArquitecturaServidorItEr19S04: Renamed interfaces with prefix "I*".

This commit is contained in:
Manuel Rego Casasnovas 2009-08-03 13:13:14 +02:00 committed by Óscar González Fernández
parent 8b2a7c0647
commit 884b2de18a
54 changed files with 875 additions and 184 deletions

View file

@ -4,6 +4,6 @@ package org.navalplanner.business.common;
* Represents some work done inside a transaction <br />
* @author oscar @param <T>
*/
public interface OnTransaction<T> {
public interface IOnTransaction<T> {
public T execute();
}

View file

@ -2,7 +2,7 @@ package org.navalplanner.business.orders.services;
import java.util.List;
import org.navalplanner.business.common.OnTransaction;
import org.navalplanner.business.common.IOnTransaction;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.entities.Order;
@ -23,6 +23,6 @@ public interface IOrderService {
Order find(Long workerId) throws InstanceNotFoundException;
public <T> T onTransaction(OnTransaction<T> onTransaction);
public <T> T onTransaction(IOnTransaction<T> onTransaction);
}

View file

@ -2,7 +2,7 @@ package org.navalplanner.business.orders.services;
import java.util.List;
import org.navalplanner.business.common.OnTransaction;
import org.navalplanner.business.common.IOnTransaction;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.daos.IOrderDAO;
@ -63,7 +63,7 @@ public class OrderService implements IOrderService {
}
@Override
public <T> T onTransaction(OnTransaction<T> onTransaction) {
public <T> T onTransaction(IOnTransaction<T> onTransaction) {
return onTransaction.execute();
}

View file

@ -11,8 +11,8 @@ import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.entities.ICriterionType;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@ -31,10 +31,10 @@ public class CriterionsBootstrap implements ICriterionsBootstrap {
private static final Log LOG = LogFactory.getLog(CriterionsBootstrap.class);
@Autowired
private CriterionService criterionService;
private ICriterionService criterionService;
@Autowired
private CriterionTypeService criterionTypeService;
private ICriterionTypeService criterionTypeService;
@Autowired
private List<ICriterionTypeProvider> providers;

View file

@ -7,7 +7,7 @@ import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.springframework.beans.factory.annotation.Autowired;
/**

View file

@ -4,7 +4,7 @@ import java.util.Set;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.hibernate.validator.NotEmpty;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -22,7 +22,7 @@ public class CriterionType implements ICriterionType<Criterion> {
private long version;
@Autowired
CriterionTypeService criterionTypeService;
ICriterionTypeService criterionTypeService;
@NotEmpty
private String name;

View file

@ -39,13 +39,13 @@ public abstract class Resource {
public abstract String getDescription();
private interface Predicate {
private interface IPredicate {
public boolean accepts(CriterionSatisfaction satisfaction);
}
public class Query {
private List<Predicate> predicates = new ArrayList<Predicate>();
private List<IPredicate> predicates = new ArrayList<IPredicate>();
private boolean sort = false;
private Query() {
@ -53,7 +53,7 @@ public abstract class Resource {
}
public Query from(final ICriterionType<?> type) {
return withNewPredicate(new Predicate() {
return withNewPredicate(new IPredicate() {
@Override
public boolean accepts(CriterionSatisfaction satisfaction) {
@ -62,7 +62,7 @@ public abstract class Resource {
});
}
private Query withNewPredicate(Predicate newPredicate) {
private Query withNewPredicate(IPredicate newPredicate) {
predicates.add(newPredicate);
return this;
}
@ -76,7 +76,7 @@ public abstract class Resource {
}
public Query enforcedInAll(final Interval interval) {
return withNewPredicate(new Predicate() {
return withNewPredicate(new IPredicate() {
@Override
public boolean accepts(CriterionSatisfaction satisfaction) {
@ -86,7 +86,7 @@ public abstract class Resource {
}
public Query overlapsWith(final Interval interval) {
return withNewPredicate(new Predicate() {
return withNewPredicate(new IPredicate() {
@Override
public boolean accepts(CriterionSatisfaction satisfaction) {
@ -96,7 +96,7 @@ public abstract class Resource {
}
public Query from(final ICriterion criterion) {
return withNewPredicate(new Predicate() {
return withNewPredicate(new IPredicate() {
@Override
public boolean accepts(CriterionSatisfaction satisfaction) {
@ -123,7 +123,7 @@ public abstract class Resource {
private boolean isAcceptedByAllPredicates(
CriterionSatisfaction criterionSatisfaction) {
for (Predicate predicate : predicates) {
for (IPredicate predicate : predicates) {
if (!predicate.accepts(criterionSatisfaction))
return false;
}
@ -131,7 +131,7 @@ public abstract class Resource {
}
public Query current() {
return withNewPredicate(new Predicate() {
return withNewPredicate(new IPredicate() {
@Override
public boolean accepts(CriterionSatisfaction satisfaction) {
@ -153,7 +153,7 @@ public abstract class Resource {
}
public Query oneOf(final Collection<? extends ICriterionType<?>> types) {
return withNewPredicate(new Predicate() {
return withNewPredicate(new IPredicate() {
@Override
public boolean accepts(CriterionSatisfaction satisfaction) {

View file

@ -4,7 +4,7 @@ import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.navalplanner.business.common.OnTransaction;
import org.navalplanner.business.common.IOnTransaction;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.Criterion;
@ -18,7 +18,7 @@ import org.navalplanner.business.resources.entities.Resource;
* Services for {@link Criterion} <br />
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
public interface CriterionService {
public interface ICriterionService {
List<Criterion> list();
@ -57,6 +57,6 @@ public interface CriterionService {
Criterion load(Criterion criterion);
<T> T onTransaction(OnTransaction<T> onTransaction);
<T> T onTransaction(IOnTransaction<T> onTransaction);
}

View file

@ -10,7 +10,7 @@ import org.navalplanner.business.resources.entities.CriterionType;
* Services for {@link CriterionType} <br />
* @author Diego Pino García <dpino@igalia.com>
*/
public interface CriterionTypeService {
public interface ICriterionTypeService {
void createIfNotExists(CriterionType criterionType) throws ValidationException;

View file

@ -13,7 +13,7 @@ import org.navalplanner.business.resources.entities.Worker;
* Interface for the resource management service.
* @author Fernando Bellas Permuy <fbellas@udc.es>
*/
public interface ResourceService {
public interface IResourceService {
/**
* It updates or inserts the resource passed as a parameter. If the resource

View file

@ -7,7 +7,7 @@ import java.util.List;
import org.apache.commons.lang.Validate;
import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.common.OnTransaction;
import org.navalplanner.business.common.IOnTransaction;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.daos.ICriterionDAO;
@ -20,9 +20,9 @@ import org.navalplanner.business.resources.entities.ICriterionOnData;
import org.navalplanner.business.resources.entities.ICriterionType;
import org.navalplanner.business.resources.entities.Interval;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ResourceService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.navalplanner.business.resources.services.IResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.ApplicationContext;
@ -31,7 +31,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* Implementation of {@link CriterionService} using {@link CriterionDAO} <br />
* Implementation of {@link ICriterionService} using {@link CriterionDAO} <br />
* @author Óscar González Fernández <ogonzalez@igalia.com>
* @author Fernando Bellas Permuy <fbellas@udc.es>
* @author Diego Pino García <dpino@igalia.com>
@ -39,16 +39,16 @@ import org.springframework.transaction.annotation.Transactional;
@Service
@Scope(BeanDefinition.SCOPE_SINGLETON)
@Transactional
public class CriterionServiceImpl implements CriterionService {
public class CriterionServiceImpl implements ICriterionService {
@Autowired
private ICriterionDAO criterionDAO;
@Autowired
private ResourceService resourceService;
private IResourceService resourceService;
@Autowired
private CriterionTypeService criterionTypeService;
private ICriterionTypeService criterionTypeService;
public boolean exists(Criterion criterion) {
return criterionDAO.exists(criterion.getId())
@ -159,7 +159,7 @@ public class CriterionServiceImpl implements CriterionService {
@Override
public ICriterionOnData empower(final ICriterion criterion) {
final CriterionService criterionService = getProxifiedCriterionService();
final ICriterionService criterionService = getProxifiedCriterionService();
return new ICriterionOnData() {
@Override
public boolean isSatisfiedBy(Resource resource) {
@ -191,9 +191,9 @@ public class CriterionServiceImpl implements CriterionService {
// this is a hack to avoid using the this variable in empower method. The
// this instance is not proxified because spring uses an transparent proxy,
// so it doesn't open the transacion
private CriterionService getProxifiedCriterionService() {
return (CriterionService) applicationContext.getBeansOfType(
CriterionService.class).values().iterator().next();
private ICriterionService getProxifiedCriterionService() {
return (ICriterionService) applicationContext.getBeansOfType(
ICriterionService.class).values().iterator().next();
}
@Override
@ -232,7 +232,7 @@ public class CriterionServiceImpl implements CriterionService {
}
@Transactional(readOnly = true)
public <T> T onTransaction(OnTransaction<T> onTransaction) {
public <T> T onTransaction(IOnTransaction<T> onTransaction) {
return onTransaction.execute();
}

View file

@ -8,18 +8,18 @@ import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
import org.navalplanner.business.resources.daos.impl.CriterionTypeDAO;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* Implementation of {@link CriterionTypeService} using {@link CriterionTypeDAO} <br />
* Implementation of {@link ICriterionTypeService} using {@link CriterionTypeDAO} <br />
* @author Diego Pino García <dpino@igalia.com>
*/
@Transactional
@Component
public class CriterionTypeServiceImpl implements CriterionTypeService {
public class CriterionTypeServiceImpl implements ICriterionTypeService {
@Autowired
private ICriterionTypeDAO criterionTypeDAO;

View file

@ -11,8 +11,8 @@ import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.entities.ICriterion;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ResourceService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.navalplanner.business.resources.services.IResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@ -27,7 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
@Service
@Scope(BeanDefinition.SCOPE_SINGLETON)
@Transactional
public class ResourceServiceImpl implements ResourceService {
public class ResourceServiceImpl implements IResourceService {
@Autowired
private IResourceDAO resourceDao;
@ -36,7 +36,7 @@ public class ResourceServiceImpl implements ResourceService {
private ICriterionsBootstrap criterionsBootstrap;
@Autowired
private CriterionTypeService criterionTypeService;
private ICriterionTypeService criterionTypeService;
@Transactional

View file

@ -16,7 +16,7 @@ import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.navalplanner.business.common.OnTransaction;
import org.navalplanner.business.common.IOnTransaction;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.entities.HoursGroup;
@ -30,7 +30,7 @@ import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.planner.services.ITaskElementService;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.navalplanner.business.test.resources.daos.CriterionSatisfactionDAOTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.NotTransactional;
@ -65,7 +65,7 @@ public class OrderServiceTest {
private ITaskElementService taskElementService;
@Autowired
private CriterionService criterionService;
private ICriterionService criterionService;
@Autowired
private SessionFactory sessionFactory;
@ -167,7 +167,7 @@ public class OrderServiceTest {
}
orderService.save(order);
orderService.onTransaction(new OnTransaction<Void>() {
orderService.onTransaction(new IOnTransaction<Void>() {
@Override
public Void execute() {
@ -228,7 +228,7 @@ public class OrderServiceTest {
hoursGroup.setWorkingHours(3);
leaf.addHoursGroup(hoursGroup);
orderService.save(order);
orderService.onTransaction(new OnTransaction<Void>() {
orderService.onTransaction(new IOnTransaction<Void>() {
@Override
public Void execute() {
@ -281,7 +281,7 @@ public class OrderServiceTest {
orderService.save(order);
orderService.onTransaction(new OnTransaction<Void>() {
orderService.onTransaction(new IOnTransaction<Void>() {
@Override
public Void execute() {

View file

@ -0,0 +1,327 @@
package org.navalplanner.business.test.orders.services;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertFalse;
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 java.util.Set;
import java.util.UUID;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.navalplanner.business.common.OnTransaction;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.orders.entities.HoursGroup;
import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.orders.entities.OrderElement;
import org.navalplanner.business.orders.entities.OrderLine;
import org.navalplanner.business.orders.entities.OrderLineGroup;
import org.navalplanner.business.orders.services.IOrderService;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.planner.services.ITaskElementService;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.test.resources.daos.CriterionSatisfactionDAOTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.NotTransactional;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
/**
* Tests for {@link Order}. <br />
* @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 OrderServiceTest {
private static Order createValidOrder() {
Order order = new Order();
order.setDescription("description");
order.setCustomer("blabla");
order.setInitDate(CriterionSatisfactionDAOTest.year(2000));
order.setName("name");
order.setResponsible("responsible");
return order;
}
@Autowired
private IOrderService orderService;
@Autowired
private ITaskElementService taskElementService;
@Autowired
private CriterionService criterionService;
@Autowired
private SessionFactory sessionFactory;
private Session getSession() {
return sessionFactory.getCurrentSession();
}
@Test
public void testCreation() throws ValidationException {
Order order = createValidOrder();
orderService.save(order);
assertTrue(orderService.exists(order));
}
@Test
public void testListing() throws Exception {
List<Order> list = orderService.getOrders();
orderService.save(createValidOrder());
assertThat(orderService.getOrders().size(), equalTo(list.size() + 1));
}
@Test
public void testRemove() throws Exception {
Order order = createValidOrder();
orderService.save(order);
assertTrue(orderService.exists(order));
orderService.remove(order);
assertFalse(orderService.exists(order));
}
@Test
public void removingOrderWithAssociatedTasksDeletesThem()
throws ValidationException, InstanceNotFoundException {
Order order = createValidOrder();
OrderLine orderLine = new OrderLine();
orderLine.setName("bla");
orderLine.setCode("00000000");
orderLine.setWorkHours(10);
order.add(orderLine);
orderService.save(order);
taskElementService.convertToScheduleAndSave(order);
getSession().flush();
getSession().evict(order);
Order reloaded = orderService.find(order.getId());
OrderElement e = reloaded.getOrderElements().iterator().next();
assertThat(e.getTaskElements().size(), equalTo(1));
Set<TaskElement> taskElements = e.getTaskElements();
for (TaskElement t : taskElements) {
if (t instanceof Task) {
Task task = (Task) t;
task.getHoursGroup().dontPoseAsTransientObjectAnymore();
}
}
orderService.remove(reloaded);
assertFalse(orderService.exists(reloaded));
}
@Test(expected = ValidationException.class)
public void shouldSendValidationExceptionIfEndDateIsBeforeThanStartingDate()
throws ValidationException {
Order order = createValidOrder();
order.setEndDate(CriterionSatisfactionDAOTest.year(0));
orderService.save(order);
}
@Test
public void testFind() throws Exception {
Order order = createValidOrder();
orderService.save(order);
assertThat(orderService.find(order.getId()), notNullValue());
}
@Test
@NotTransactional
public void testOrderPreserved() throws ValidationException,
InstanceNotFoundException {
final Order order = createValidOrder();
final OrderElement[] containers = new OrderLineGroup[10];
for (int i = 0; i < containers.length; i++) {
containers[i] = new OrderLineGroup();
containers[i].setName("bla");
containers[i].setCode("000000000");
order.add(containers[i]);
}
OrderLineGroup container = (OrderLineGroup) containers[0];
final OrderElement[] orderElements = new OrderElement[10];
for (int i = 0; i < orderElements.length; i++) {
OrderLine leaf = createValidLeaf("bla");
orderElements[i] = leaf;
container.add(leaf);
}
for (int i = 1; i < containers.length; i++) {
OrderLineGroup orderLineGroup = (OrderLineGroup) containers[i];
OrderLine leaf = createValidLeaf("foo");
orderLineGroup.add(leaf);
}
orderService.save(order);
orderService.onTransaction(new OnTransaction<Void>() {
@Override
public Void execute() {
try {
Order reloaded = orderService.find(order.getId());
List<OrderElement> elements = reloaded.getOrderElements();
for (int i = 0; i < containers.length; i++) {
assertThat(elements.get(i).getId(),
equalTo(containers[i].getId()));
}
OrderLineGroup container = (OrderLineGroup) reloaded
.getOrderElements().iterator().next();
List<OrderElement> children = container.getChildren();
for (int i = 0; i < orderElements.length; i++) {
assertThat(children.get(i).getId(),
equalTo(orderElements[i].getId()));
}
for (int i = 1; i < containers.length; i++) {
OrderLineGroup orderLineGroup = (OrderLineGroup) containers[i];
assertThat(orderLineGroup.getChildren().size(),
equalTo(1));
}
return null;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
orderService.remove(order);
}
private OrderLine createValidLeaf(String parameter) {
OrderLine result = new OrderLine();
result.setName(parameter);
result.setCode("000000000");
HoursGroup hoursGroup = HoursGroup.create(result);
hoursGroup.setWorkingHours(0);
result.addHoursGroup(hoursGroup);
return result;
}
@Test
@NotTransactional
public void testAddingOrderElement() throws Exception {
final Order order = createValidOrder();
OrderLineGroup container = new OrderLineGroup();
container.setName("bla");
container.setCode("000000000");
OrderLine leaf = new OrderLine();
leaf.setName("leaf");
leaf.setCode("000000000");
container.add(leaf);
order.add(container);
HoursGroup hoursGroup = HoursGroup.create(leaf);
hoursGroup.setWorkingHours(3);
leaf.addHoursGroup(hoursGroup);
orderService.save(order);
orderService.onTransaction(new OnTransaction<Void>() {
@Override
public Void execute() {
try {
Order reloaded = orderService.find(order.getId());
assertFalse(order == reloaded);
assertThat(reloaded.getOrderElements().size(), equalTo(1));
OrderLineGroup containerReloaded = (OrderLineGroup) reloaded
.getOrderElements().get(0);
assertThat(containerReloaded.getHoursGroups().size(),
equalTo(1));
assertThat(containerReloaded.getChildren().size(),
equalTo(1));
OrderElement leaf = containerReloaded.getChildren().get(0);
assertThat(leaf.getHoursGroups().size(), equalTo(1));
orderService.remove(order);
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}
return null;
}
});
}
@Test
@NotTransactional
public void testManyToManyHoursGroupCriterionMapping() throws Exception {
final Order order = createValidOrder();
OrderLine orderLine = new OrderLine();
orderLine.setName("Order element");
orderLine.setCode("000000000");
order.add(orderLine);
HoursGroup hoursGroup = HoursGroup.create(orderLine);
hoursGroup.setWorkingHours(10);
HoursGroup hoursGroup2 = HoursGroup.create(orderLine);
hoursGroup2.setWorkingHours(5);
orderLine.addHoursGroup(hoursGroup);
orderLine.addHoursGroup(hoursGroup2);
CriterionType criterionType = new CriterionType("test");
Criterion criterion = new Criterion("Test" + UUID.randomUUID(),
criterionType);
criterionService.save(criterion);
hoursGroup.addCriterion(criterion);
hoursGroup2.addCriterion(criterion);
orderService.save(order);
orderService.onTransaction(new OnTransaction<Void>() {
@Override
public Void execute() {
try {
Order reloaded = orderService.find(order.getId());
List<OrderElement> orderElements = reloaded
.getOrderElements();
assertThat(orderElements.size(), equalTo(1));
List<HoursGroup> hoursGroups = orderElements.get(0)
.getHoursGroups();
assertThat(hoursGroups.size(), equalTo(2));
Set<Criterion> criterions = hoursGroups.get(0)
.getCriterions();
assertThat(criterions.size(), equalTo(1));
Criterion criterion = criterions.iterator().next();
assertThat(criterion.getType().getName(), equalTo("test"));
} catch (InstanceNotFoundException e) {
throw new RuntimeException(e);
}
return null;
}
});
}
@Test(expected = ValidationException.class)
public void testAtLeastOneHoursGroup() throws Exception {
Order order = createValidOrder();
OrderLine orderLine = new OrderLine();
orderLine.setName("foo");
orderLine.setCode("000000000");
order.add(orderLine);
orderService.save(order);
}
}

View file

@ -8,7 +8,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.navalplanner.business.resources.bootstrap.ICriterionsBootstrap;
import org.navalplanner.business.resources.entities.WorkingRelationship;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@ -24,7 +24,7 @@ public class CriterionsBootstrapTest {
private ICriterionsBootstrap criterionsBootstrap;
@Autowired
private CriterionService criterionService;
private ICriterionService criterionService;
@Test
public void testBootstrap() throws Exception {

View file

@ -16,7 +16,7 @@ import org.hibernate.validator.InvalidStateException;
import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.navalplanner.business.common.OnTransaction;
import org.navalplanner.business.common.IOnTransaction;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.Criterion;
@ -29,9 +29,9 @@ import org.navalplanner.business.resources.entities.Interval;
import org.navalplanner.business.resources.entities.PredefinedCriterionTypes;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ResourceService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.navalplanner.business.resources.services.IResourceService;
import org.navalplanner.business.test.resources.daos.CriterionDAOTest;
import org.navalplanner.business.test.resources.daos.CriterionSatisfactionDAOTest;
import org.navalplanner.business.test.resources.entities.ResourceTest;
@ -43,7 +43,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
/**
* Test cases for {@link CriterionService} <br />
* Test cases for {@link ICriterionService} <br />
* @author Óscar González Fernández <ogonzalez@igalia.com>
* @author Diego Pino García <dpino@igalia.com>
*/
@ -54,13 +54,13 @@ import org.springframework.transaction.annotation.Transactional;
public class CriterionServiceTest {
@Autowired
private CriterionService criterionService;
private ICriterionService criterionService;
@Autowired
private CriterionTypeService criterionTypeService;
private ICriterionTypeService criterionTypeService;
@Autowired
private ResourceService resourceService;
private IResourceService resourceService;
@Autowired
private SessionFactory sessionFactory;
@ -257,7 +257,7 @@ public class CriterionServiceTest {
worker1.addSatisfaction(new CriterionWithItsType(criterion.getType(), criterion));
resourceService.saveResource(worker1);
Resource workerReloaded = criterionService
.onTransaction(new OnTransaction<Resource>() {
.onTransaction(new IOnTransaction<Resource>() {
@Override
public Resource execute() {

View file

@ -9,7 +9,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.test.context.ContextConfiguration;
@ -20,7 +20,7 @@ import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONF
import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE;
/**
* Test cases for {@link CriterionTypeService} <br />
* Test cases for {@link ICriterionTypeService} <br />
* @author Diego Pino García <dpino@igalia.com>
* @author Javier Moran Rúa <jmoran@igalia.com>
*/
@ -31,7 +31,7 @@ import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING
public class CriterionTypeServiceTest {
@Autowired
private CriterionTypeService criterionTypeService;
private ICriterionTypeService criterionTypeService;
public CriterionType createValidCriterionType() {
String unique = UUID.randomUUID().toString();

View file

@ -23,8 +23,8 @@ import org.navalplanner.business.resources.entities.ICriterion;
import org.navalplanner.business.resources.entities.ICriterionType;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.ResourceService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.navalplanner.business.resources.services.IResourceService;
import org.navalplanner.business.test.resources.daos.CriterionDAOTest;
import org.navalplanner.business.test.resources.entities.CriterionTest;
import org.springframework.beans.factory.annotation.Autowired;
@ -45,13 +45,13 @@ import org.springframework.transaction.annotation.Transactional;
public class ResourceServiceTest {
@Autowired
private ResourceService resourceService;
private IResourceService resourceService;
@Autowired
private IResourceDAO resourceDao;
@Autowired
private CriterionService criterionService;
private ICriterionService criterionService;
@Test
public void testRemoveResource() throws InstanceNotFoundException {

View file

@ -7,7 +7,7 @@ import java.util.Date;
import org.zkoss.ganttz.util.Interval;
public class DatesMapperOnInterval implements DatesMapper {
public class DatesMapperOnInterval implements IDatesMapper {
private final int horizontalSize;
private final Interval stubInterval;
private long millisecondsPerPixel;

View file

@ -16,9 +16,9 @@ import org.zkoss.ganttz.data.Task;
import org.zkoss.ganttz.util.MenuBuilder;
import org.zkoss.ganttz.util.WeakReferencedListeners;
import org.zkoss.ganttz.util.MenuBuilder.ItemAction;
import org.zkoss.ganttz.util.WeakReferencedListeners.ListenerNotification;
import org.zkoss.ganttz.util.WeakReferencedListeners.IListenerNotification;
import org.zkoss.ganttz.util.zoom.ZoomLevel;
import org.zkoss.ganttz.util.zoom.ZoomLevelChangedListener;
import org.zkoss.ganttz.util.zoom.IZoomLevelChangedListener;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.ext.AfterCompose;
import org.zkoss.zul.Menupopup;
@ -71,9 +71,9 @@ public class DependencyList extends XulElement implements AfterCompose {
private static final Log LOG = LogFactory.getLog(DependencyList.class);
private ZoomLevelChangedListener listener;
private IZoomLevelChangedListener listener;
private final WeakReferencedListeners<DependencyRemovedListener> dependencyRemovedListeners = WeakReferencedListeners
private final WeakReferencedListeners<IDependencyRemovedListener> dependencyRemovedListeners = WeakReferencedListeners
.create();
public DependencyList() {
@ -118,7 +118,7 @@ public class DependencyList extends XulElement implements AfterCompose {
@Override
public void afterCompose() {
if (listener == null) {
listener = new ZoomLevelChangedListener() {
listener = new IZoomLevelChangedListener() {
@Override
public void zoomLevelChanged(ZoomLevel detailLevel) {
for (DependencyComponent dependencyComponent : getDependencyComponents()) {
@ -148,11 +148,11 @@ public class DependencyList extends XulElement implements AfterCompose {
Event event) {
removeChild(choosen);
dependencyRemovedListeners
.fireEvent(new ListenerNotification<DependencyRemovedListener>() {
.fireEvent(new IListenerNotification<IDependencyRemovedListener>() {
@Override
public void doNotify(
DependencyRemovedListener listener) {
IDependencyRemovedListener listener) {
listener.dependenceRemoved(choosen);
}
@ -164,7 +164,7 @@ public class DependencyList extends XulElement implements AfterCompose {
}
public void addDependencyRemovedListener(
DependencyRemovedListener removedListener) {
IDependencyRemovedListener removedListener) {
dependencyRemovedListeners.addListener(removedListener);
}

View file

@ -2,7 +2,7 @@ package org.zkoss.ganttz;
import java.util.Date;
public interface DatesMapper {
public interface IDatesMapper {
int toPixels(Date date);

View file

@ -3,7 +3,7 @@
*/
package org.zkoss.ganttz;
public interface DependencyAddedListener {
public interface IDependencyAddedListener {
public void dependenceAdded(DependencyComponent dependencyComponent);
}

View file

@ -10,7 +10,7 @@ package org.zkoss.ganttz;
* @author Óscar González Fernández <ogonzalez@igalia.com>
*
*/
public interface DependencyRemovedListener {
public interface IDependencyRemovedListener {
public void dependenceRemoved(DependencyComponent dependencyComponent);

View file

@ -25,9 +25,9 @@ public class Planner extends XulElement {
private static final Log LOG = LogFactory.getLog(Planner.class);
private DependencyAddedListener dependencyAddedListener;
private IDependencyAddedListener dependencyAddedListener;
private GanttDiagramGraph diagramGraph = new GanttDiagramGraph();
private DependencyRemovedListener dependencyRemovedListener;
private IDependencyRemovedListener dependencyRemovedListener;
private LeftPane leftPane;
private GanttPanel ganttPanel;
@ -84,7 +84,7 @@ public class Planner extends XulElement {
public void registerListeners() {
TaskList taskList = getTaskList();
dependencyAddedListener = new DependencyAddedListener() {
dependencyAddedListener = new IDependencyAddedListener() {
@Override
public void dependenceAdded(DependencyComponent dependencyComponent) {
@ -95,7 +95,7 @@ public class Planner extends XulElement {
}
};
taskList.addDependencyListener(dependencyAddedListener);
dependencyRemovedListener = new DependencyRemovedListener() {
dependencyRemovedListener = new IDependencyRemovedListener() {
@Override
public void dependenceRemoved(

View file

@ -182,7 +182,7 @@ public class TaskComponent extends Div implements AfterCompose {
private String _color;
private List<WeakReference<DependencyAddedListener>> dependencyListeners = new LinkedList<WeakReference<DependencyAddedListener>>();
private List<WeakReference<IDependencyAddedListener>> dependencyListeners = new LinkedList<WeakReference<IDependencyAddedListener>>();
private boolean isTopLevel;
@ -201,19 +201,19 @@ public class TaskComponent extends Div implements AfterCompose {
return null;
}
public void addDependencyListener(DependencyAddedListener listener) {
dependencyListeners.add(new WeakReference<DependencyAddedListener>(
public void addDependencyListener(IDependencyAddedListener listener) {
dependencyListeners.add(new WeakReference<IDependencyAddedListener>(
listener));
}
private void fireDependenceAdded(DependencyComponent dependencyComponent) {
ArrayList<DependencyAddedListener> active = new ArrayList<DependencyAddedListener>();
ArrayList<IDependencyAddedListener> active = new ArrayList<IDependencyAddedListener>();
synchronized (this) {
ListIterator<WeakReference<DependencyAddedListener>> iterator = dependencyListeners
ListIterator<WeakReference<IDependencyAddedListener>> iterator = dependencyListeners
.listIterator();
while (iterator.hasNext()) {
WeakReference<DependencyAddedListener> next = iterator.next();
DependencyAddedListener listener = next.get();
WeakReference<IDependencyAddedListener> next = iterator.next();
IDependencyAddedListener listener = next.get();
if (listener == null) {
iterator.remove();
} else {
@ -221,7 +221,7 @@ public class TaskComponent extends Div implements AfterCompose {
}
}
}
for (DependencyAddedListener listener : active) {
for (IDependencyAddedListener listener : active) {
listener.dependenceAdded(dependencyComponent);
}
}
@ -299,7 +299,7 @@ public class TaskComponent extends Div implements AfterCompose {
response("depkey", new AuInvoke(this, "addDependency"));
}
private DatesMapper getMapper() {
private IDatesMapper getMapper() {
return getTaskList().getMapper();
}

View file

@ -0,0 +1,364 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.zkoss.ganttz;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.zkoss.ganttz.data.Task;
import org.zkoss.ganttz.data.TaskContainer;
import org.zkoss.lang.Objects;
import org.zkoss.xml.HTMLs;
import org.zkoss.zk.au.AuRequest;
import org.zkoss.zk.au.Command;
import org.zkoss.zk.au.ComponentCommand;
import org.zkoss.zk.au.out.AuInvoke;
import org.zkoss.zk.mesg.MZk;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.UiException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.ext.AfterCompose;
import org.zkoss.zul.Div;
/**
* @author javi
*/
public class TaskComponent extends Div implements AfterCompose {
private static final int HEIGHT_PER_TASK = 10;
private static final String STANDARD_TASK_COLOR = "#007bbe";
private static Pattern pixelsSpecificationPattern = Pattern
.compile("\\s*(\\d+)px\\s*;?\\s*");
private static int stripPx(String pixels) {
Matcher matcher = pixelsSpecificationPattern.matcher(pixels);
if (!matcher.matches())
throw new IllegalArgumentException("pixels " + pixels
+ " is not valid. It must be "
+ pixelsSpecificationPattern.pattern());
return Integer.valueOf(matcher.group(1));
}
private static Command _updatecmd = new ComponentCommand(
"onUpdatePosition", 0) {
protected void process(AuRequest request) {
final TaskComponent ta = (TaskComponent) request.getComponent();
if (ta == null) {
throw new UiException(MZk.ILLEGAL_REQUEST_COMPONENT_REQUIRED,
this);
}
String[] requestData = request.getData();
if ((requestData != null) && (requestData.length != 2)) {
throw new UiException(MZk.ILLEGAL_REQUEST_WRONG_DATA,
new Object[] { Objects.toString(requestData), this });
} else {
ta.doUpdatePosition(requestData[0], requestData[1]);
Events.postEvent(new Event(getId(), ta, request.getData()));
}
}
};
private static Command _updatewidthcmd = new ComponentCommand(
"onUpdateWidth", 0) {
protected void process(AuRequest request) {
final TaskComponent ta = (TaskComponent) request.getComponent();
if (ta == null) {
throw new UiException(MZk.ILLEGAL_REQUEST_COMPONENT_REQUIRED,
this);
}
String[] requestData = request.getData();
if ((requestData != null) && (requestData.length != 1)) {
throw new UiException(MZk.ILLEGAL_REQUEST_WRONG_DATA,
new Object[] { Objects.toString(requestData), this });
} else {
ta.doUpdateSize(requestData[0]);
Events.postEvent(new Event(getId(), ta, request.getData()));
}
}
};
private static Command _adddependencycmd = new ComponentCommand(
"onAddDependency", 0) {
protected void process(AuRequest request) {
final TaskComponent taskComponent = (TaskComponent) request.getComponent();
if (taskComponent == null) {
throw new UiException(MZk.ILLEGAL_REQUEST_COMPONENT_REQUIRED,
this);
}
String[] requestData = request.getData();
if ((requestData != null) && (requestData.length != 1)) {
throw new UiException(MZk.ILLEGAL_REQUEST_WRONG_DATA,
new Object[] { Objects.toString(requestData), this });
} else {
taskComponent.doAddDependency(requestData[0]);
Events.postEvent(new Event(getId(), taskComponent, request.getData()));
}
}
};
public static TaskComponent asTaskComponent(Task task, TaskList taskList,
boolean isTopLevel) {
final TaskComponent result;
if (task.isContainer()) {
result = TaskContainerComponent
.asTask((TaskContainer) task, taskList);
} else {
result = new TaskComponent(task);
}
result.isTopLevel = isTopLevel;
return result;
}
public static TaskComponent asTaskComponent(Task task, TaskList taskList) {
return asTaskComponent(task, taskList, true);
}
public TaskComponent(Task task) {
setHeight(HEIGHT_PER_TASK + "px");
setContext("idContextMenuTaskAssigment");
this.task = task;
setColor(STANDARD_TASK_COLOR);
setId(UUID.randomUUID().toString());
}
protected String calculateClass() {
return "box";
}
protected void updateClass() {
response(null, new AuInvoke(this, "setClass",
new Object[] { calculateClass() }));
}
public void afterCompose() {
updateProperties();
if (propertiesListener == null) {
propertiesListener = new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (isInPage()) {
updateProperties();
}
}
};
}
this.task
.addFundamentalPropertiesChangeListener(propertiesListener);
updateClass();
}
private String _color;
private List<WeakReference<DependencyAddedListener>> dependencyListeners = new LinkedList<WeakReference<DependencyAddedListener>>();
private boolean isTopLevel;
private final Task task;
private PropertyChangeListener propertiesListener;
public Task getTask() {
return task;
}
public String getTaskName() {
return task.getName();
}
public String getLength() {
return null;
}
public void addDependencyListener(DependencyAddedListener listener) {
dependencyListeners.add(new WeakReference<DependencyAddedListener>(
listener));
}
private void fireDependenceAdded(DependencyComponent dependencyComponent) {
ArrayList<DependencyAddedListener> active = new ArrayList<DependencyAddedListener>();
synchronized (this) {
ListIterator<WeakReference<DependencyAddedListener>> iterator = dependencyListeners
.listIterator();
while (iterator.hasNext()) {
WeakReference<DependencyAddedListener> next = iterator.next();
DependencyAddedListener listener = next.get();
if (listener == null) {
iterator.remove();
} else {
active.add(listener);
}
}
}
for (DependencyAddedListener listener : active) {
listener.dependenceAdded(dependencyComponent);
}
}
public Command getCommand(String cmdId) {
Command c = null;
if ("updatePosition".equals(cmdId))
c = _updatecmd;
else if ("updateSize".equals(cmdId))
c = _updatewidthcmd;
else if ("addDependency".equals(cmdId))
c = _adddependencycmd;
return c;
}
// Command action to do
void doUpdatePosition(String leftX, String topY) {
this.task.setBeginDate(getMapper().toDate(stripPx(leftX)));
}
void doUpdateSize(String size) {
int pixels = stripPx(size);
this.task.setLengthMilliseconds(getMapper().toMilliseconds(pixels));
}
void doAddDependency(String destinyTaskId) {
DependencyComponent dependencyComponent = new DependencyComponent(this,
((TaskComponent) getFellow(destinyTaskId)));
if (getPlanner().canAddDependency(dependencyComponent.getDependency())) {
fireDependenceAdded(dependencyComponent);
}
}
public String getColor() {
return _color;
}
public void setColor(String color) {
if ((color != null) && (color.length() == 0)) {
color = null;
}
if (!Objects.equals(_color, color)) {
_color = color;
}
}
/*
* We override the method of getRealStyle to put the color property as part
* of the style
*/
protected String getRealStyle() {
final StringBuffer sb = new StringBuffer(super.getRealStyle());
if (getColor() != null) {
HTMLs.appendStyle(sb, "background-color", getColor());
}
HTMLs.appendStyle(sb, "position", "absolute");
return sb.toString();
}
/*
* We send a response to the client to create the arrow we are going to use
* to create the dependency
*/
public void addDependency() {
response("depkey", new AuInvoke(this, "addDependency"));
}
private DatesMapper getMapper() {
return getTaskList().getMapper();
}
public TaskList getTaskList() {
return (TaskList) getParent();
}
public Planner getPlanner() {
return getTaskList().getPlanner();
}
@Override
public void setParent(Component parent) {
if (parent != null && !(parent instanceof TaskList))
throw new UiException("Unsupported parent for rows: " + parent);
super.setParent(parent);
}
public void zoomChanged() {
updateProperties();
}
private void updateProperties() {
setLeft("0");
setLeft(getMapper().toPixels(this.task.getBeginDate()) + "px");
setWidth("0");
setWidth(getMapper().toPixels(this.task.getLengthMilliseconds())
+ "px");
smartUpdate("name", this.task.getName());
DependencyList dependencyList = getDependencyList();
if (dependencyList != null) {
dependencyList.redrawDependenciesConnectedTo(this);
}
}
private DependencyList getDependencyList() {
return getPlanner().getDependencyList();
}
private boolean isInPage() {
return getParent() != null;
}
void publishTaskComponents(Map<Task, TaskComponent> resultAccumulated) {
resultAccumulated.put(getTask(), this);
publishDescendants(resultAccumulated);
}
protected void publishDescendants(Map<Task, TaskComponent> resultAccumulated) {
}
protected void remove() {
getDependencyList().taskRemoved(this.getTask());
this.detach();
}
public boolean isTopLevel() {
return isTopLevel;
}
}

View file

@ -20,7 +20,7 @@ import org.zkoss.ganttz.data.Task;
import org.zkoss.ganttz.util.MenuBuilder;
import org.zkoss.ganttz.util.MenuBuilder.ItemAction;
import org.zkoss.ganttz.util.zoom.ZoomLevel;
import org.zkoss.ganttz.util.zoom.ZoomLevelChangedListener;
import org.zkoss.ganttz.util.zoom.IZoomLevelChangedListener;
import org.zkoss.zk.au.out.AuInvoke;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
@ -37,9 +37,9 @@ public class TaskList extends XulElement implements AfterCompose {
private static final int HEIGHT_PER_ROW = 20; /* 30 */
private List<WeakReference<DependencyAddedListener>> listeners = new LinkedList<WeakReference<DependencyAddedListener>>();
private List<WeakReference<IDependencyAddedListener>> listeners = new LinkedList<WeakReference<IDependencyAddedListener>>();
private ZoomLevelChangedListener zoomLevelChangedListener;
private IZoomLevelChangedListener zoomLevelChangedListener;
private Menupopup contextMenu;
@ -93,10 +93,10 @@ public class TaskList extends XulElement implements AfterCompose {
addContextMenu(taskComponent);
addListenerForTaskComponentEditForm(taskComponent);
ListIterator<WeakReference<DependencyAddedListener>> iterator = listeners
ListIterator<WeakReference<IDependencyAddedListener>> iterator = listeners
.listIterator();
while (iterator.hasNext()) {
DependencyAddedListener listener = iterator.next().get();
IDependencyAddedListener listener = iterator.next().get();
if (listener != null) {
taskComponent.addDependencyListener(listener);
} else {
@ -208,7 +208,7 @@ public class TaskList extends XulElement implements AfterCompose {
return getGanttPanel().getTimeTracker();
}
DatesMapper getMapper() {
IDatesMapper getMapper() {
return getTimeTracker().getMapper();
}
@ -236,8 +236,8 @@ public class TaskList extends XulElement implements AfterCompose {
return getTaskComponents().size();
}
public void addDependencyListener(DependencyAddedListener listener) {
listeners.add(new WeakReference<DependencyAddedListener>(listener));
public void addDependencyListener(IDependencyAddedListener listener) {
listeners.add(new WeakReference<IDependencyAddedListener>(listener));
for (TaskComponent taskComponent : getTaskComponents()) {
taskComponent.addDependencyListener(listener);
}
@ -249,7 +249,7 @@ public class TaskList extends XulElement implements AfterCompose {
addTaskComponent(TaskComponent.asTaskComponent(task, this), false);
}
if (zoomLevelChangedListener == null) {
zoomLevelChangedListener = new ZoomLevelChangedListener() {
zoomLevelChangedListener = new IZoomLevelChangedListener() {
@Override
public void zoomLevelChanged(ZoomLevel detailLevel) {
for (TaskComponent taskComponent : getTaskComponents()) {

View file

@ -14,7 +14,7 @@ import java.util.ListIterator;
import org.zkoss.ganttz.util.Interval;
import org.zkoss.ganttz.util.zoom.TimeTrackerState;
import org.zkoss.ganttz.util.zoom.ZoomLevel;
import org.zkoss.ganttz.util.zoom.ZoomLevelChangedListener;
import org.zkoss.ganttz.util.zoom.IZoomLevelChangedListener;
import org.zkoss.ganttz.util.zoom.TimeTrackerState.DetailItem;
import org.zkoss.zk.au.out.AuInvoke;
import org.zkoss.zk.ui.HtmlMacroComponent;
@ -30,9 +30,9 @@ public class TimeTracker extends HtmlMacroComponent {
.year(2012));
}
private List<WeakReference<ZoomLevelChangedListener>> zoomListeners = new LinkedList<WeakReference<ZoomLevelChangedListener>>();
private List<WeakReference<IZoomLevelChangedListener>> zoomListeners = new LinkedList<WeakReference<IZoomLevelChangedListener>>();
private DatesMapper datesMapper = null;
private IDatesMapper datesMapper = null;
private Collection<DetailItem> detailsFirstLevelCached = null;
@ -51,9 +51,9 @@ public class TimeTracker extends HtmlMacroComponent {
this.detailLevel = ZoomLevel.DETAIL_ONE;
}
public void addZoomListener(ZoomLevelChangedListener listener) {
public void addZoomListener(IZoomLevelChangedListener listener) {
zoomListeners
.add(new WeakReference<ZoomLevelChangedListener>(listener));
.add(new WeakReference<IZoomLevelChangedListener>(listener));
}
public void scrollHorizontalPercentage(int displacement) {
@ -62,10 +62,10 @@ public class TimeTracker extends HtmlMacroComponent {
}
private void fireZoomChanged(ZoomLevel detailLevel) {
ListIterator<WeakReference<ZoomLevelChangedListener>> listIterator = zoomListeners
ListIterator<WeakReference<IZoomLevelChangedListener>> listIterator = zoomListeners
.listIterator();
while (listIterator.hasNext()) {
ZoomLevelChangedListener listener = listIterator.next().get();
IZoomLevelChangedListener listener = listIterator.next().get();
if (listener == null) {
listIterator.remove();
} else {
@ -135,7 +135,7 @@ public class TimeTracker extends HtmlMacroComponent {
return detailLevel;
}
public DatesMapper getMapper() {
public IDatesMapper getMapper() {
if (datesMapper == null) {
datesMapper = new DatesMapperOnInterval(getHorizontalSize(),
getRealInterval());

View file

@ -7,7 +7,7 @@ import java.util.Date;
import java.util.List;
import org.zkoss.ganttz.util.WeakReferencedListeners;
import org.zkoss.ganttz.util.WeakReferencedListeners.ListenerNotification;
import org.zkoss.ganttz.util.WeakReferencedListeners.IListenerNotification;
/**
* This class contains the information of a task container. It can be modified
@ -147,7 +147,7 @@ public class TaskContainer extends Task {
}
if (valueChanged) {
expandListeners
.fireEvent(new ListenerNotification<IExpandListener>() {
.fireEvent(new IListenerNotification<IExpandListener>() {
@Override
public void doNotify(IExpandListener listener) {

View file

@ -7,7 +7,7 @@ import java.util.ListIterator;
public class WeakReferencedListeners<T> {
public interface ListenerNotification<T> {
public interface IListenerNotification<T> {
void doNotify(T listener);
@ -30,7 +30,7 @@ public class WeakReferencedListeners<T> {
}
public synchronized void fireEvent(
ListenerNotification<? super T> notification) {
IListenerNotification<? super T> notification) {
ListIterator<WeakReference<T>> listIterator = listeners.listIterator();
ArrayList<T> active = new ArrayList<T>();
while (listIterator.hasNext()) {

View file

@ -1,7 +1,7 @@
package org.zkoss.ganttz.util.zoom;
public interface ZoomLevelChangedListener {
public interface IZoomLevelChangedListener {
public void zoomLevelChanged(ZoomLevel detailLevel);

View file

@ -17,24 +17,24 @@ import org.springframework.stereotype.Component;
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class ConverterFactory implements IConverterFactory {
private Map<Class<?>, Converter<?>> convertersByType = new HashMap<Class<?>, Converter<?>>();
private Map<Class<?>, IConverter<?>> convertersByType = new HashMap<Class<?>, IConverter<?>>();
@Autowired
public ConverterFactory(List<Converter<?>> converters) {
for (Converter<?> converter : converters) {
public ConverterFactory(List<IConverter<?>> converters) {
for (IConverter<?> converter : converters) {
convertersByType.put(converter.getType(), converter);
}
}
@Override
public <T> Converter<? super T> getConverterFor(Class<T> klass) {
public <T> IConverter<? super T> getConverterFor(Class<T> klass) {
if (convertersByType.containsKey(klass))
return (Converter<? super T>) convertersByType.get(klass);
return (IConverter<? super T>) convertersByType.get(klass);
for (Class<?> registeredKlass : convertersByType.keySet()) {
if (registeredKlass.isAssignableFrom(klass)) {
Converter<?> result = convertersByType.get(registeredKlass);
IConverter<?> result = convertersByType.get(registeredKlass);
convertersByType.put(klass, result);
return (Converter<? super T>) result;
return (IConverter<? super T>) result;
}
}
throw new RuntimeException("not found converter for " + klass);

View file

@ -5,7 +5,7 @@ package org.navalplanner.web.common.converters;
* back <br />
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
public interface Converter<T> {
public interface IConverter<T> {
Class<T> getType();

View file

@ -7,6 +7,6 @@ package org.navalplanner.web.common.converters;
*/
public interface IConverterFactory {
<T> Converter<? super T> getConverterFor(Class<T> klass);
<T> IConverter<? super T> getConverterFor(Class<T> klass);
}

View file

@ -9,12 +9,12 @@ import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
* A {@link Converter} for {@link Order} <br />
* A {@link IConverter} for {@link Order} <br />
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
@Component
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class OrderConverter implements Converter<Order> {
public class OrderConverter implements IConverter<Order> {
@Autowired
private IOrderService orderService;

View file

@ -2,22 +2,22 @@ package org.navalplanner.web.common.converters;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.services.ResourceService;
import org.navalplanner.business.resources.services.IResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
/**
* A {@link Converter} for {@link Resource} <br />
* A {@link IConverter} for {@link Resource} <br />
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
@Component
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class ResourceConverter implements Converter<Resource> {
public class ResourceConverter implements IConverter<Resource> {
@Autowired
private ResourceService resourceService;
private IResourceService resourceService;
@Override
public Resource asObject(String stringRepresentation) {

View file

@ -13,7 +13,7 @@ import org.springframework.transaction.annotation.Transactional;
@Component
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class WorkReportTypeConverter implements Converter<WorkReportType> {
public class WorkReportTypeConverter implements IConverter<WorkReportType> {
@Autowired
private IWorkReportTypeDAO workReportTypeDAO;

View file

@ -12,7 +12,7 @@ import org.zkoss.zk.ui.Executions;
*/
@Component
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class DefaultExecutorRetriever implements ExecutorRetriever {
public class DefaultExecutorRetriever implements IExecutorRetriever {
@Override
public Execution getCurrent() {

View file

@ -6,7 +6,7 @@ import org.zkoss.zk.ui.Execution;
* It's used for retrieving the current {@link Execution} object <br />
* @author Óscar González Fernández <ogonzalez@igalia.com>
*/
public interface ExecutorRetriever {
public interface IExecutorRetriever {
public Execution getCurrent();

View file

@ -13,7 +13,7 @@ import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.Validate;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.navalplanner.web.common.converters.Converter;
import org.navalplanner.web.common.converters.IConverter;
import org.navalplanner.web.common.converters.IConverterFactory;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Page;
@ -43,7 +43,7 @@ public class URLHandler<T> {
}
}
private final ExecutorRetriever executorRetriever;
private final IExecutorRetriever executorRetriever;
private Map<String, EntryPointMetadata> metadata = new HashMap<String, EntryPointMetadata>();
@ -52,7 +52,7 @@ public class URLHandler<T> {
private final IConverterFactory converterFactory;
public URLHandler(IConverterFactory converterFactory,
ExecutorRetriever executorRetriever,
IExecutorRetriever executorRetriever,
Class<T> interfaceDefiningEntryPoints) {
Validate.isTrue(interfaceDefiningEntryPoints.isInterface());
this.converterFactory = converterFactory;
@ -89,7 +89,7 @@ public class URLHandler<T> {
String[] stringRepresentations = new String[parameterNames.length];
for (int i = 0; i < types.length; i++) {
Class<?> type = types[i];
Converter<?> converterFor = converterFactory.getConverterFor(type);
IConverter<?> converterFor = converterFactory.getConverterFor(type);
stringRepresentations[i] = converterFor
.asStringUngeneric(values[i]);
}
@ -213,7 +213,7 @@ public class URLHandler<T> {
for (int i = 0; i < parameterTypes.length; i++) {
Object argumentName = linkToStateAnnotation.value()[i];
String parameterValue = matrixParams.get(argumentName);
Converter<?> converter = converterFactory
IConverter<?> converter = converterFactory
.getConverterFor(parameterTypes[i]);
result[i] = converter.asObject(parameterValue);
}

View file

@ -18,7 +18,7 @@ import org.springframework.stereotype.Component;
public class URLHandlerRegistry implements IURLHandlerRegistry {
@Autowired
private ExecutorRetriever executorRetriever;
private IExecutorRetriever executorRetriever;
@Autowired
private IConverterFactory converterFactory;

View file

@ -13,8 +13,8 @@ import org.navalplanner.business.resources.bootstrap.ICriterionsBootstrap;
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@ -39,10 +39,10 @@ public class OrderElementModel implements IOrderElementModel {
private ICriterionsBootstrap criterionsBootstrap;
@Autowired
private CriterionService criterionService;
private ICriterionService criterionService;
@Autowired
private CriterionTypeService criterionTypeService;
private ICriterionTypeService criterionTypeService;
private Map<String, CriterionType> mapCriterionTypes = new HashMap<String, CriterionType>();

View file

@ -18,8 +18,8 @@ import org.navalplanner.business.orders.services.IOrderService;
import org.navalplanner.business.planner.services.ITaskElementService;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@ -37,10 +37,10 @@ import org.springframework.transaction.annotation.Transactional;
public class OrderModel implements IOrderModel {
@Autowired
CriterionService criterionService;
ICriterionService criterionService;
@Autowired
CriterionTypeService criterionTypeService;
ICriterionTypeService criterionTypeService;
private static final Map<CriterionType, List<Criterion>> mapCriterions = new HashMap<CriterionType, List<Criterion>>();

View file

@ -9,7 +9,7 @@ import org.zkoss.ganttz.adapters.PlannerConfiguration;
*/
public interface IOrderPlanningModel {
public interface ConfigurationOnTransaction {
public interface IConfigurationOnTransaction {
public void use(PlannerConfiguration<TaskElement> configuration);
}
@ -17,6 +17,6 @@ public interface IOrderPlanningModel {
ResourceAllocationController resourceAllocationController,
EditTaskController editTaskController,
SplittingController splittingController,
ConfigurationOnTransaction onTransaction);
IConfigurationOnTransaction onTransaction);
}

View file

@ -4,7 +4,7 @@ import org.navalplanner.business.orders.entities.Order;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.web.common.entrypoints.IURLHandlerRegistry;
import org.navalplanner.web.common.entrypoints.URLHandler;
import org.navalplanner.web.planner.IOrderPlanningModel.ConfigurationOnTransaction;
import org.navalplanner.web.planner.IOrderPlanningModel.IConfigurationOnTransaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@ -53,7 +53,7 @@ public class OrderPlanningController implements
public void showSchedule(Order order) {
model.createConfiguration(order, resourceAllocationController,
editTaskController, splittingController,
new ConfigurationOnTransaction() {
new IConfigurationOnTransaction() {
@Override
public void use(PlannerConfiguration<TaskElement> configuration) {

View file

@ -49,7 +49,7 @@ public abstract class OrderPlanningModel implements IOrderPlanningModel {
ResourceAllocationController resourceAllocationController,
EditTaskController editTaskController,
SplittingController splittingController,
ConfigurationOnTransaction onTransaction) {
IConfigurationOnTransaction onTransaction) {
Order orderReloaded = reload(order);
if (!orderReloaded.isSomeTaskElementScheduled())
throw new IllegalArgumentException("the order " + order

View file

@ -5,7 +5,7 @@ import java.util.List;
import org.navalplanner.business.planner.entities.Task;
import org.navalplanner.business.planner.entities.TaskElement;
import org.navalplanner.business.planner.entities.TaskGroup;
import org.navalplanner.web.planner.SplittingController.ActionOnOk;
import org.navalplanner.web.planner.SplittingController.IActionOnOk;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@ -34,7 +34,7 @@ public class SplitTaskCommand implements ISplitTaskCommand {
int[] shares = createTwoEqualShares(taskElement);
splittingController.show(
ShareBean.toShareBeans(task.getName(), shares), task
.getWorkHours(), new ActionOnOk() {
.getWorkHours(), new IActionOnOk() {
@Override
public void doOkAction(ShareBean[] shares) {

View file

@ -17,7 +17,7 @@ import org.zkoss.zul.api.Grid;
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class SplittingController extends GenericForwardComposer {
private ActionOnOk curentAction;
private IActionOnOk curentAction;
private Window window;
private Grid sharesListing;
@ -26,12 +26,12 @@ public class SplittingController extends GenericForwardComposer {
private List<ShareBean> sharesList;
private Integer totalHours;
public interface ActionOnOk {
public interface IActionOnOk {
public void doOkAction(ShareBean[] shares);
}
public void show(List<ShareBean> initialSharesList, Integer totalHours,
ActionOnOk ok) {
IActionOnOk ok) {
this.sharesList = initialSharesList;
this.totalHours = totalHours;
this.curentAction = ok;

View file

@ -18,9 +18,9 @@ import org.navalplanner.business.resources.entities.CriterionWithItsType;
import org.navalplanner.business.resources.entities.ICriterionType;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ResourceService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.navalplanner.business.resources.services.IResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@ -44,13 +44,13 @@ public class CriterionsModel implements ICriterionsModel {
private ICriterionsBootstrap criterionsBootstrap;
@Autowired
private CriterionService criterionService;
private ICriterionService criterionService;
@Autowired
private CriterionTypeService criterionTypeService;
private ICriterionTypeService criterionTypeService;
@Autowired
private ResourceService resourceService;
private IResourceService resourceService;
private ICriterionType<?> criterionType;

View file

@ -6,7 +6,7 @@ import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.navalplanner.web.common.IMessagesForUser;
import org.navalplanner.web.common.Level;
import org.navalplanner.web.common.MessagesForUser;
@ -53,7 +53,7 @@ public class WorkerCRUDController extends GenericForwardComposer implements
private LocalizationsController localizationsForCreationController;
private CriterionService criterionService;
private ICriterionService criterionService;
private WorkRelationshipsController editWorkRelationship;

View file

@ -23,8 +23,8 @@ import org.navalplanner.business.resources.entities.Interval;
import org.navalplanner.business.resources.entities.PredefinedCriterionTypes;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.ResourceService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.navalplanner.business.resources.services.IResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@ -40,19 +40,19 @@ import org.springframework.transaction.annotation.Transactional;
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class WorkerModel implements IWorkerModel {
private final ResourceService resourceService;
private final IResourceService resourceService;
private final ICriterionType<?>[] laboralRelatedTypes = {
PredefinedCriterionTypes.LEAVE,
PredefinedCriterionTypes.WORK_RELATIONSHIP };
private Worker worker;
private ClassValidator<Worker> workerValidator;
private final CriterionService criterionService;
private final ICriterionService criterionService;
private IMultipleCriterionActiveAssigner localizationsAssigner;
@Autowired
public WorkerModel(ResourceService resourceService,
CriterionService criterionService) {
public WorkerModel(IResourceService resourceService,
ICriterionService criterionService) {
Validate.notNull(resourceService);
Validate.notNull(criterionService);
this.resourceService = resourceService;
@ -224,7 +224,7 @@ public class WorkerModel implements IWorkerModel {
IMultipleCriterionActiveAssigner {
private final Resource resource;
private final ICriterionType<?> type;
private final CriterionService criterionService;
private final ICriterionService criterionService;
private List<CriterionSatisfaction> history;
private List<Criterion> initialCriterionsNotAssigned;
private Set<CriterionSatisfaction> initialActive;
@ -234,7 +234,7 @@ public class WorkerModel implements IWorkerModel {
private Set<CriterionSatisfaction> added = new HashSet<CriterionSatisfaction>();
public MultipleCriterionActiveAssigner(
CriterionService criterionService, Resource resource,
ICriterionService criterionService, Resource resource,
ICriterionType<?> type) {
Validate
.isTrue(

View file

@ -10,7 +10,7 @@ import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.services.CriterionTypeService;
import org.navalplanner.business.resources.services.ICriterionTypeService;
import org.navalplanner.business.workreports.daos.WorkReportTypeDAO;
import org.navalplanner.business.workreports.entities.WorkReportType;
import org.springframework.beans.factory.annotation.Autowired;
@ -29,7 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
public class WorkReportTypeModel implements IWorkReportTypeModel {
@Autowired
private CriterionTypeService criterionTypeService;
private ICriterionTypeService criterionTypeService;
private WorkReportType workReportType;

View file

@ -13,8 +13,8 @@ import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.PredefinedCriterionTypes;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.business.resources.services.CriterionService;
import org.navalplanner.business.resources.services.ResourceService;
import org.navalplanner.business.resources.services.ICriterionService;
import org.navalplanner.business.resources.services.IResourceService;
import org.navalplanner.web.resources.worker.WorkerModel;
/**
@ -26,8 +26,8 @@ public class WorkerModelTest {
@Test
public void testWorkerValid() throws ValidationException,
InstanceNotFoundException {
ResourceService resourceServiceMock = createMock(ResourceService.class);
CriterionService criterionServiceMock = createMock(CriterionService.class);
IResourceService resourceServiceMock = createMock(IResourceService.class);
ICriterionService criterionServiceMock = createMock(ICriterionService.class);
Worker workerToReturn = new Worker();
workerToReturn.setDailyHours(2);
workerToReturn.setFirstName("firstName");
@ -54,8 +54,8 @@ public class WorkerModelTest {
@Test(expected = ValidationException.class)
public void testWorkerInvalid() throws ValidationException,
InstanceNotFoundException {
ResourceService resourceServiceMock = createMock(ResourceService.class);
CriterionService criterionServiceMock = createMock(CriterionService.class);
IResourceService resourceServiceMock = createMock(IResourceService.class);
ICriterionService criterionServiceMock = createMock(ICriterionService.class);
Worker workerToReturn = new Worker();
// expectations
Collection<Criterion> criterions = new ArrayList<Criterion>();