diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/AvailabilityCalculator.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/AvailabilityCalculator.java
index e17e51e35..ee7c5e68b 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/AvailabilityCalculator.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/AvailabilityCalculator.java
@@ -20,7 +20,6 @@
package org.navalplanner.business.planner.entities;
import java.util.Collection;
-import java.util.Date;
import java.util.List;
import org.joda.time.LocalDate;
@@ -81,14 +80,14 @@ public class AvailabilityCalculator {
AvailabilityTimeLine result = AvailabilityTimeLine.allValid();
LocalDate previousEnd = null;
for (CriterionSatisfaction each : satisfactions) {
- LocalDate startDate = asLocal(each.getStartDate());
+ LocalDate startDate = each.getStartDate();
assert startDate != null : "satisfactions start date is not null";
if (previousEnd == null) {
result.invalidUntil(startDate);
} else {
result.invalidAt(previousEnd, startDate);
}
- previousEnd = asLocal(each.getEndDate());
+ previousEnd = each.getEndDate();
if (previousEnd == null) {
break;
}
@@ -99,8 +98,4 @@ public class AvailabilityCalculator {
return result;
}
- private static LocalDate asLocal(Date date) {
- return date != null ? LocalDate.fromDateFields(date) : null;
- }
-
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java
index 65626ea0e..7afc2758b 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java
@@ -221,7 +221,7 @@ public class GenericResourceAllocation extends
public boolean isSelectable(Resource resource, LocalDate day) {
ICriterion compoundCriterion = CriterionCompounder.buildAnd(
criterions).getResult();
- return compoundCriterion.isSatisfiedBy(resource, toDate(day));
+ return compoundCriterion.isSatisfiedBy(resource, day);
}
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java
index 9aa60d6eb..d652e20a9 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Criterion.java
@@ -26,7 +26,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
-import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -38,6 +37,7 @@ import org.hibernate.validator.AssertTrue;
import org.hibernate.validator.NotEmpty;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Valid;
+import org.joda.time.LocalDate;
import org.navalplanner.business.common.IntegrationEntity;
import org.navalplanner.business.common.Registry;
import org.navalplanner.business.planner.entities.GenericResourceAllocation;
@@ -240,13 +240,13 @@ public class Criterion extends IntegrationEntity implements ICriterion {
}
@Override
- public boolean isSatisfiedBy(Resource resource, Date start, Date end) {
+ public boolean isSatisfiedBy(Resource resource, LocalDate start, LocalDate end) {
return !resource.query().from(this).enforcedInAll(
Interval.range(start, end)).result().isEmpty();
}
@Override
- public boolean isSatisfiedBy(Resource resource, Date atThisDate) {
+ public boolean isSatisfiedBy(Resource resource, LocalDate atThisDate) {
return !resource.query().from(this).enforcedInAll(
Interval.point(atThisDate)).result().isEmpty();
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionCompounder.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionCompounder.java
index 939c3beda..b4f64041c 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionCompounder.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionCompounder.java
@@ -22,10 +22,11 @@ package org.navalplanner.business.resources.entities;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Date;
import java.util.LinkedList;
import java.util.List;
+import org.joda.time.LocalDate;
+
/**
* Compounds some {@link ICriterion} into one
* @author Óscar González Fernández
@@ -70,12 +71,12 @@ public class CriterionCompounder {
}
@Override
- public boolean isSatisfiedBy(Resource resource, Date start, Date end) {
+ public boolean isSatisfiedBy(Resource resource, LocalDate start, LocalDate end) {
return !criterion.isSatisfiedBy(resource, start, end);
}
@Override
- public boolean isSatisfiedBy(Resource resource, Date atThisDate) {
+ public boolean isSatisfiedBy(Resource resource, LocalDate atThisDate) {
return !criterion.isSatisfiedBy(resource, atThisDate);
}
}
@@ -98,7 +99,7 @@ public class CriterionCompounder {
return false;
}
- public boolean isSatisfiedBy(Resource resource, Date start, Date end) {
+ public boolean isSatisfiedBy(Resource resource, LocalDate start, LocalDate end) {
for (ICriterion criterion : criterions) {
if (criterion.isSatisfiedBy(resource, start, end)) {
return true;
@@ -108,7 +109,7 @@ public class CriterionCompounder {
}
@Override
- public boolean isSatisfiedBy(Resource resource, Date atThisDate) {
+ public boolean isSatisfiedBy(Resource resource, LocalDate atThisDate) {
for (ICriterion criterion : criterions) {
if (criterion.isSatisfiedBy(resource, atThisDate)) {
return true;
@@ -152,7 +153,7 @@ public class CriterionCompounder {
}
@Override
- public boolean isSatisfiedBy(Resource resource, Date start, Date end) {
+ public boolean isSatisfiedBy(Resource resource, LocalDate start, LocalDate end) {
for (ICriterion criterion : criterions) {
if (!criterion.isSatisfiedBy(resource, start, end)) {
return false;
@@ -162,7 +163,7 @@ public class CriterionCompounder {
}
@Override
- public boolean isSatisfiedBy(Resource resource, Date atThisDate) {
+ public boolean isSatisfiedBy(Resource resource, LocalDate atThisDate) {
for (ICriterion criterion : criterions) {
if (!criterion.isSatisfiedBy(resource, atThisDate)) {
return false;
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionSatisfaction.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionSatisfaction.java
index 4c28351f5..1f6ee5276 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionSatisfaction.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/CriterionSatisfaction.java
@@ -21,13 +21,13 @@
package org.navalplanner.business.resources.entities;
import java.util.Comparator;
-import java.util.Date;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.validator.AssertTrue;
import org.hibernate.validator.NotNull;
+import org.joda.time.LocalDate;
import org.navalplanner.business.common.IntegrationEntity;
import org.navalplanner.business.common.Registry;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
@@ -57,12 +57,10 @@ public class CriterionSatisfaction extends IntegrationEntity {
return create(new CriterionSatisfaction());
}
- public static CriterionSatisfaction create(Date startDate,
+ public static CriterionSatisfaction create(LocalDate startDate,
Criterion criterion, Resource resource) {
-
return create(
new CriterionSatisfaction(startDate, criterion, resource));
-
}
public static CriterionSatisfaction create(Criterion criterion,
@@ -76,10 +74,10 @@ public class CriterionSatisfaction extends IntegrationEntity {
* @throws InstanceNotFoundException if criterion type or criterion does
* not exist
*/
- public static CriterionSatisfaction createUnvalidated(
- String code, String criterionTypeName, String criterionName,
- Resource resource, Date startDate, Date finishDate)
- throws InstanceNotFoundException {
+ public static CriterionSatisfaction createUnvalidated(String code,
+ String criterionTypeName, String criterionName, Resource resource,
+ LocalDate startDate, LocalDate finishDate)
+ throws InstanceNotFoundException {
ICriterionTypeDAO criterionTypeDAO =
Registry.getCriterionTypeDAO();
@@ -110,7 +108,7 @@ public class CriterionSatisfaction extends IntegrationEntity {
* not exist
*/
public void updateUnvalidated(String criterionTypeName,
- String criterionName, Date startDate, Date finishDate)
+ String criterionName, LocalDate startDate, LocalDate finishDate)
throws InstanceNotFoundException {
CriterionType criterionType = null;
@@ -149,7 +147,7 @@ public class CriterionSatisfaction extends IntegrationEntity {
}
- private CriterionSatisfaction(Date startDate, Criterion criterion,
+ private CriterionSatisfaction(LocalDate startDate, Criterion criterion,
Resource resource) {
Validate.notNull(startDate, "startDate must be not null");
Validate.notNull(criterion, "criterion must be not null");
@@ -167,9 +165,9 @@ public class CriterionSatisfaction extends IntegrationEntity {
}
}
- private Date startDate;
+ private LocalDate startDate;
- private Date finishDate;
+ private LocalDate finishDate;
private Criterion criterion;
@@ -192,16 +190,12 @@ public class CriterionSatisfaction extends IntegrationEntity {
}
@NotNull(message="criterion satisfaction's start date not specified")
- public Date getStartDate() {
- return startDate != null ? new Date(startDate.getTime()) : null;
+ public LocalDate getStartDate() {
+ return startDate;
}
- public Date getEndDate() {
- if (isFinished()) {
- return new Date(finishDate.getTime());
- } else {
- return null;
- }
+ public LocalDate getEndDate() {
+ return finishDate;
}
public Interval getInterval() {
@@ -227,11 +221,11 @@ public class CriterionSatisfaction extends IntegrationEntity {
}
public boolean isCurrent() {
- Date now = new Date();
- return isEnforcedAt(now);
+ LocalDate today = new LocalDate();
+ return isEnforcedAt(today);
}
- public boolean isEnforcedAt(Date date) {
+ public boolean isEnforcedAt(LocalDate date) {
return getInterval().contains(date);
}
@@ -239,30 +233,31 @@ public class CriterionSatisfaction extends IntegrationEntity {
return getInterval().includes(interval);
}
- public void finish(Date finish) {
+ public void finish(LocalDate finish) {
Validate.notNull(finish);
Validate.isTrue(getStartDate() == null
- || getStartDate().equals(finish) || getStartDate().before(finish));
- Validate.isTrue(finishDate == null || isNewObject() ||
- getEndDate().equals(finish) || getEndDate().before(finish));
- this.finishDate = new Date(finish.getTime());
+ || getStartDate().compareTo(finish) <= 0);
+ Validate.isTrue(finishDate == null || isNewObject()
+ || getEndDate().equals(finish) || getEndDate().isBefore(finish));
+ this.finishDate = finish;
}
public boolean isFinished() {
return finishDate != null;
}
- public void setEndDate(Date date) {
- if(date != null) {
+ public void setEndDate(LocalDate date) {
+ if (date != null) {
finish(date);
}
this.finishDate = date;
}
- public void setStartDate(Date date) {
+ public void setStartDate(LocalDate date) {
if(date != null){
- Validate.isTrue(startDate == null || isNewObject() ||
- getStartDate().equals(date) || getStartDate().after(date));
+ Validate.isTrue(startDate == null || isNewObject()
+ || getStartDate().equals(date)
+ || getStartDate().isAfter(date));
}
startDate = date;
}
@@ -307,7 +302,7 @@ public class CriterionSatisfaction extends IntegrationEntity {
return true;
}
- return (finishDate.after(startDate) || startDate.equals(finishDate));
+ return (finishDate.isAfter(startDate) || startDate.equals(finishDate));
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/ICriterion.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/ICriterion.java
index f30347ea7..776dc9f19 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/ICriterion.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/ICriterion.java
@@ -20,7 +20,8 @@
package org.navalplanner.business.resources.entities;
-import java.util.Date;
+
+import org.joda.time.LocalDate;
/**
* It's a predicate that can be applied on resources
@@ -30,8 +31,8 @@ public interface ICriterion {
boolean isSatisfiedBy(Resource resource);
- boolean isSatisfiedBy(Resource resource, Date start, Date end);
+ boolean isSatisfiedBy(Resource resource, LocalDate start, LocalDate end);
- boolean isSatisfiedBy(Resource resource, Date atThisDate);
+ boolean isSatisfiedBy(Resource resource, LocalDate atThisDate);
}
\ No newline at end of file
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Interval.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Interval.java
index 89e9f5d20..66fa8b728 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Interval.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Interval.java
@@ -20,28 +20,29 @@
package org.navalplanner.business.resources.entities;
-import java.util.Date;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.joda.time.LocalDate;
/**
* Represents a time interval
* @author Óscar González Fernández
*/
public abstract class Interval {
- protected final Date start;
- protected final Date end;
+ protected final LocalDate start;
- public static Interval from(Date start) {
+ protected final LocalDate end;
+
+ public static Interval from(LocalDate start) {
return new OpenEndedInterval(start);
}
- public static Interval point(Date date) {
+ public static Interval point(LocalDate date) {
return new Point(date);
}
- public static Interval range(Date start, Date end) {
+ public static Interval range(LocalDate start, LocalDate end) {
Validate.notNull(start, "start date must be not null");
if (end == null) {
return from(start);
@@ -52,7 +53,7 @@ public abstract class Interval {
return new Range(start, end);
}
- protected Interval(Date start, Date end) {
+ protected Interval(LocalDate start, LocalDate end) {
Validate.notNull(start, "start date must be not null");
if (end != null) {
Validate.isTrue(start.compareTo(end) <= 0,
@@ -62,7 +63,7 @@ public abstract class Interval {
this.end = end;
}
- public abstract boolean contains(Date date);
+ public abstract boolean contains(LocalDate date);
@Override
public boolean equals(Object obj) {
@@ -79,7 +80,7 @@ public abstract class Interval {
return new HashCodeBuilder().append(start).append(end).toHashCode();
}
- private boolean dateEquals(Date date1, Date date2) {
+ private boolean dateEquals(LocalDate date1, LocalDate date2) {
return date1 == date2
|| (date1 != null && date2 != null && date1.equals(date2));
}
@@ -88,30 +89,30 @@ public abstract class Interval {
public abstract boolean overlapsWith(Interval interval);
- public boolean before(Date date) {
- return start.before(date);
+ public boolean before(LocalDate date) {
+ return start.isBefore(date);
}
- public Date getStart() {
- return new Date(start.getTime());
+ public LocalDate getStart() {
+ return start;
}
- public Date getEnd() {
- return end != null ? new Date(end.getTime()) : null;
+ public LocalDate getEnd() {
+ return end;
}
}
class Range extends Interval {
- Range(Date start, Date end) {
+ Range(LocalDate start, LocalDate end) {
super(start, end);
Validate.notNull(start);
Validate.notNull(end);
}
@Override
- public boolean contains(Date date) {
+ public boolean contains(LocalDate date) {
return date.compareTo(start) >= 0 && date.compareTo(end) < 0;
}
@@ -122,7 +123,7 @@ class Range extends Interval {
return point.overlapsWith(this);
}
return start.compareTo(included.start) <= 0 && included.end != null
- && end.after(included.end);
+ && end.isAfter(included.end);
}
@Override
@@ -147,12 +148,12 @@ class Range extends Interval {
}
class OpenEndedInterval extends Interval {
- OpenEndedInterval(Date start) {
+ OpenEndedInterval(LocalDate start) {
super(start, null);
}
@Override
- public boolean contains(Date date) {
+ public boolean contains(LocalDate date) {
return date.compareTo(start) >= 0;
}
@@ -163,8 +164,8 @@ class OpenEndedInterval extends Interval {
@Override
public boolean overlapsWith(Interval interval) {
- return start.before(interval.start) || interval.end == null
- || start.before(interval.end);
+ return start.isBefore(interval.start) || interval.end == null
+ || start.isBefore(interval.end);
}
@Override
@@ -175,12 +176,12 @@ class OpenEndedInterval extends Interval {
class Point extends Interval {
- Point(Date date) {
+ Point(LocalDate date) {
super(date, date);
}
@Override
- public boolean contains(Date date) {
+ public boolean contains(LocalDate date) {
return start.equals(date);
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/MachineWorkerAssignment.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/MachineWorkerAssignment.java
index 350e9f1e1..be50c6ef9 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/MachineWorkerAssignment.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/MachineWorkerAssignment.java
@@ -22,6 +22,7 @@ package org.navalplanner.business.resources.entities;
import java.util.Date;
+import org.joda.time.LocalDate;
import org.navalplanner.business.common.BaseEntity;
import org.navalplanner.business.util.deepcopy.OnCopy;
import org.navalplanner.business.util.deepcopy.Strategy;
@@ -85,4 +86,19 @@ public class MachineWorkerAssignment extends BaseEntity {
return worker;
}
+ public LocalDate getStart() {
+ return asLocalDate(startDate);
+ }
+
+ public LocalDate getFinish() {
+ return asLocalDate(finishDate);
+ }
+
+ private LocalDate asLocalDate(Date date) {
+ if (date == null) {
+ return null;
+ }
+ return LocalDate.fromDateFields(date);
+ }
+
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/MachineWorkersConfigurationUnit.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/MachineWorkersConfigurationUnit.java
index 47105e65b..8db94c2d6 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/MachineWorkersConfigurationUnit.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/MachineWorkersConfigurationUnit.java
@@ -152,10 +152,9 @@ public class MachineWorkersConfigurationUnit extends BaseEntity {
if ((each.getWorker().getId().equals(worker.getId()))
&& (each.getId() != assignment.getId())) {
if (each.getFinishDate() != null) {
- range = Interval.range(each.getStartDate(), each
- .getFinishDate());
+ range = Interval.range(each.getStart(), each.getFinish());
} else {
- range = Interval.from(each.getStartDate());
+ range = Interval.from(each.getStart());
}
if ((range == null) || (interval.overlapsWith(range))) {
assigned = true;
@@ -191,10 +190,9 @@ public class MachineWorkersConfigurationUnit extends BaseEntity {
for (MachineWorkerAssignment each : workerAssignments) {
if (each.getStartDate() != null) {
if (each.getFinishDate() != null) {
- range = Interval.range(each.getStartDate(), each
- .getFinishDate());
+ range = Interval.range(each.getStart(), each.getFinish());
} else {
- range = Interval.from(each.getStartDate());
+ range = Interval.from(each.getStart());
}
if (((range == null)
&& existsWorkerAssignmentWithSameWorker(each) || (existsWorkerAssignmentWithSameWorker(
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java
index a9565b59b..88545684e 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java
@@ -27,7 +27,6 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
-import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
@@ -267,11 +266,11 @@ public abstract class Resource extends IntegrationEntity {
return this;
}
- public Query at(Date date) {
+ public Query at(LocalDate date) {
return enforcedInAll(Interval.point(date));
}
- public Query between(Date start, Date end) {
+ public Query between(LocalDate start, LocalDate end) {
return enforcedInAll(Interval.range(start, end));
}
@@ -415,7 +414,8 @@ public abstract class Resource extends IntegrationEntity {
public CriterionSatisfaction addSatisfaction(
CriterionWithItsType criterionWithItsType) {
- return addSatisfaction(criterionWithItsType, Interval.from(new Date()));
+ LocalDate today = new LocalDate();
+ return addSatisfaction(criterionWithItsType, Interval.from(today));
}
private static class EnsureSatisfactionIsCorrect {
@@ -516,11 +516,12 @@ public abstract class Resource extends IntegrationEntity {
public List finish(
CriterionWithItsType criterionWithItsType) {
- return finishEnforcedAt(criterionWithItsType.getCriterion(), new Date());
+ LocalDate today = new LocalDate();
+ return finishEnforcedAt(criterionWithItsType.getCriterion(), today);
}
public List finishEnforcedAt(Criterion criterion,
- Date date) {
+ LocalDate date) {
ArrayList result = new ArrayList();
for (CriterionSatisfaction criterionSatisfaction : query().from(
criterion).at(date).result()) {
@@ -898,11 +899,7 @@ public abstract class Resource extends IntegrationEntity {
private boolean satisfiesCriterionAt(ICriterion criterionToSatisfy,
LocalDate current) {
- return criterionToSatisfy.isSatisfiedBy(this, asDate(current));
- }
-
- private Date asDate(LocalDate date) {
- return date.toDateTimeAtStartOfDay().toDateTime().toDate();
+ return criterionToSatisfy.isSatisfiedBy(this, current);
}
public void addUnvalidatedSatisfaction(CriterionSatisfaction
diff --git a/navalplanner-business/src/main/resources/db.changelog-initial.xml b/navalplanner-business/src/main/resources/db.changelog-initial.xml
index d35562498..77bce0b0d 100644
--- a/navalplanner-business/src/main/resources/db.changelog-initial.xml
+++ b/navalplanner-business/src/main/resources/db.changelog-initial.xml
@@ -52,4 +52,10 @@
+
+ Change types of start and finish date to date for criterion satisfaction table
+
+
+
+
diff --git a/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml b/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml
index ed482d6ef..405d0ef23 100644
--- a/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml
+++ b/navalplanner-business/src/main/resources/org/navalplanner/business/resources/entities/Resources.hbm.xml
@@ -145,8 +145,10 @@
-
-
+
+
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java
index 65bc8bed5..ae9b334b7 100644
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/AddAdvanceAssignmentsToOrderElementTest.java
@@ -114,7 +114,8 @@ public class AddAdvanceAssignmentsToOrderElementTest {
.setupVersionUsing(scenarioManager, order);
order.useSchedulingDataFor(orderVersion);
order.setDescription("description");
- order.setInitDate(CriterionSatisfactionDAOTest.year(2000));
+ order.setInitDate(CriterionSatisfactionDAOTest.year(2000)
+ .toDateTimeAtStartOfDay().toDate());
order.setName("name");
order.setResponsible("responsible");
order.setCode("code");
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java
index 0ca6c8f67..ef6531ae1 100644
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java
@@ -38,7 +38,6 @@ import static org.navalplanner.business.workingday.EffortDuration.zero;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -143,8 +142,9 @@ public class GenericResourceAllocationTest {
}
private void setupIsSatisfiedByAll(Criterion criterion) {
- expect(criterion.isSatisfiedBy(isA(Resource.class), isA(Date.class)))
- .andReturn(true).anyTimes();
+ expect(
+ criterion.isSatisfiedBy(isA(Resource.class),
+ isA(LocalDate.class))).andReturn(true).anyTimes();
}
private void givenWorkersWithoutLoadAndWithoutCalendar() {
@@ -199,7 +199,7 @@ public class GenericResourceAllocationTest {
private org.navalplanner.business.resources.entities.Interval fromVeryEarlyTime() {
return org.navalplanner.business.resources.entities.Interval
- .from(new Date(0));
+ .from(new LocalDate(0, 1, 1));
}
private void givenCalendarsForResources(int capacity1, int capacity2,
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/CriterionSatisfactionDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/CriterionSatisfactionDAOTest.java
index 190bbf1e9..08c36b4ae 100644
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/CriterionSatisfactionDAOTest.java
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/CriterionSatisfactionDAOTest.java
@@ -27,9 +27,7 @@ import static junit.framework.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.Calendar;
-import java.util.Date;
-
+import org.joda.time.LocalDate;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
@@ -109,20 +107,12 @@ public class CriterionSatisfactionDAOTest {
satisfactionDAO.save(criterionSatisfaction);
}
- public static Date year(int year) {
- Calendar calendar = Calendar.getInstance();
- calendar.clear();
- calendar.set(Calendar.YEAR, year);
- return calendar.getTime();
+ public static LocalDate year(int year) {
+ return new LocalDate(year, 1, 1);
}
- public static Date date(int year,int month, int day) {
- Calendar calendar = Calendar.getInstance();
- calendar.clear();
- calendar.set(Calendar.YEAR, year);
- calendar.set(Calendar.MONTH, month);
- calendar.set(Calendar.DAY_OF_MONTH, day);
- return calendar.getTime();
+ public static LocalDate date(int year, int month, int day) {
+ return new LocalDate(year, month, day);
}
@Test
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/ResourceDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/ResourceDAOTest.java
index 4dfae8071..7d589a696 100644
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/ResourceDAOTest.java
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/daos/ResourceDAOTest.java
@@ -29,8 +29,6 @@ import static org.junit.Assert.assertThat;
import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_FILE;
import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
@@ -39,6 +37,7 @@ import java.util.Set;
import java.util.UUID;
import org.hibernate.SessionFactory;
+import org.joda.time.LocalDate;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.navalplanner.business.calendars.entities.ResourceCalendar;
@@ -148,19 +147,14 @@ public class ResourceDAOTest {
private Worker createAndSaveResourceSatisfyingAllCriterions(final Collection criterions) {
Worker result = givenValidWorker();
-
- SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
- try {
- Interval interval = Interval.range(sdf.parse("01/01/1970"), null);
- Set satisfactions = new HashSet();
- for (Criterion each: criterions) {
- satisfactions.add(CriterionSatisfaction.create(each, result, interval));
- }
- result.addSatisfactions(satisfactions);
- resourceDAO.save(result);
- } catch (ParseException e) {
-
+ Interval interval = Interval.range(new LocalDate(1970, 1, 1), null);
+ Set satisfactions = new HashSet();
+ for (Criterion each : criterions) {
+ satisfactions.add(CriterionSatisfaction.create(each, result,
+ interval));
}
+ result.addSatisfactions(satisfactions);
+ resourceDAO.save(result);
return result;
}
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/CriterionSatisfactionTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/CriterionSatisfactionTest.java
index 5e65363d1..901e2f377 100644
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/CriterionSatisfactionTest.java
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/CriterionSatisfactionTest.java
@@ -29,9 +29,9 @@ import static org.navalplanner.business.test.resources.daos.CriterionSatisfactio
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Date;
import java.util.List;
+import org.joda.time.LocalDate;
import org.junit.Test;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
@@ -50,20 +50,17 @@ public class CriterionSatisfactionTest {
final Criterion criterion = CriterionDAOTest.createValidCriterion();
Worker worker = Worker.create("firstName", "surName", "2333232");
CriterionSatisfaction criterionSatisfaction = CriterionSatisfaction.create(year(2000), criterion, worker);
- Date end = year(2006);
+ LocalDate end = year(2006);
criterionSatisfaction.finish(end);
assertTrue(criterionSatisfaction.isFinished());
assertEquals(end, criterionSatisfaction.getEndDate());
- criterionSatisfaction.getEndDate().setTime(end.getTime() + 2000);
- assertEquals("endDate must be well encapsulated", end,
- criterionSatisfaction.getEndDate());
}
@Test
public void canFinishWhenItStarted() throws Exception {
final Criterion criterion = CriterionDAOTest.createValidCriterion();
Worker worker = Worker.create("firstName", "surName", "2333232");
- Date start = year(2000);
+ LocalDate start = year(2000);
CriterionSatisfaction criterionSatisfaction = CriterionSatisfaction.create(start, criterion, worker);
criterionSatisfaction.finish(start);
assertTrue(criterionSatisfaction.isFinished());
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/CriterionTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/CriterionTest.java
index 665147b60..b564d20b6 100644
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/CriterionTest.java
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/CriterionTest.java
@@ -27,10 +27,10 @@ import static org.navalplanner.business.resources.entities.CriterionCompounder.b
import static org.navalplanner.business.resources.entities.CriterionCompounder.not;
import java.util.Arrays;
-import java.util.Date;
import java.util.HashSet;
import java.util.List;
+import org.joda.time.LocalDate;
import org.junit.Test;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionCompounder;
@@ -207,12 +207,12 @@ public class CriterionTest {
}
@Override
- public boolean isSatisfiedBy(Resource resource, Date start, Date end) {
+ public boolean isSatisfiedBy(Resource resource, LocalDate start, LocalDate end) {
return isSatisfiedBy(resource);
}
@Override
- public boolean isSatisfiedBy(Resource resource, Date atThisDate) {
+ public boolean isSatisfiedBy(Resource resource, LocalDate atThisDate) {
return isSatisfiedBy(resource);
}
};
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/IntervalTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/IntervalTest.java
index de5e278f8..56282aac0 100644
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/IntervalTest.java
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/IntervalTest.java
@@ -25,8 +25,6 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.navalplanner.business.test.resources.daos.CriterionSatisfactionDAOTest.year;
-import java.util.Date;
-
import org.junit.Test;
import org.navalplanner.business.resources.entities.Interval;
import org.navalplanner.business.test.resources.daos.CriterionSatisfactionDAOTest;
@@ -82,9 +80,8 @@ public class IntervalTest {
Interval range = Interval.range(year(1990), year(2000));
assertTrue(range.contains(year(1990)));
assertFalse(range.contains(year(2000)));
- assertFalse(range.contains(new Date(year(1990).getTime() - 1)));
- assertFalse(range.contains(new Date(year(1990).getTime() - 1)));
- assertFalse(range.contains(new Date(year(2000).getTime() + 1)));
+ assertFalse(range.contains(year(1990).minusDays(1)));
+ assertFalse(range.contains(year(2000).plusDays(1)));
}
@Test
diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/ResourceTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/ResourceTest.java
index e339a7dc3..65a7ca4b7 100644
--- a/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/ResourceTest.java
+++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/resources/entities/ResourceTest.java
@@ -34,7 +34,6 @@ import static org.navalplanner.business.workingday.EffortDuration.hours;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Date;
import java.util.HashSet;
import java.util.List;
@@ -243,7 +242,7 @@ public class ResourceTest {
assertThat(worker.getCurrentSatisfactionsFor(criterion).size(),
equalTo(0));
assertFalse(criterion.isSatisfiedBy(worker));
- Interval fromNow = Interval.from(new Date());
+ Interval fromNow = Interval.from(new LocalDate());
assertTrue(worker.canAddSatisfaction(new CriterionWithItsType(
criterionType, criterion), fromNow));
worker.addSatisfaction(new CriterionWithItsType(criterionType,
@@ -490,8 +489,9 @@ public class ResourceTest {
};
CriterionWithItsType criterionWithItsType = new CriterionWithItsType(
type, criterion);
- assertFalse(worker.canAddSatisfaction(criterionWithItsType, Interval
- .from(new Date())));
+ LocalDate today = new LocalDate();
+ assertFalse(worker.canAddSatisfaction(criterionWithItsType,
+ Interval.from(today)));
worker.addSatisfaction(criterionWithItsType);
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/machine/AssignedMachineCriterionsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/machine/AssignedMachineCriterionsModel.java
index 312524378..db681829d 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/machine/AssignedMachineCriterionsModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/machine/AssignedMachineCriterionsModel.java
@@ -23,7 +23,6 @@ package org.navalplanner.web.resources.machine;
import static org.navalplanner.web.I18nHelper._;
import java.util.ArrayList;
-import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -390,11 +389,9 @@ public class AssignedMachineCriterionsModel extends IntegrationEntityModel
.getCriterionSatisfaction();
Criterion newCriterion = satisfactionDTO.getCriterionWithItsType()
.getCriterion();
- Date newStartDate = satisfactionDTO.getStartDate();
- Date newEndDate = satisfactionDTO.getEndDate();
satisfaction.setCriterion(newCriterion);
- satisfaction.setStartDate(newStartDate);
- satisfaction.setEndDate(newEndDate);
+ satisfaction.setStartDate(satisfactionDTO.getStart());
+ satisfaction.setEndDate(satisfactionDTO.getEnd());
}
@Override
@@ -442,9 +439,9 @@ public class AssignedMachineCriterionsModel extends IntegrationEntityModel
if (satisfactionDTO.isIsDeleted()) {
satisfaction.setIsDeleted(true);
} else {
- satisfaction.setStartDate(satisfactionDTO.getStartDate());
+ satisfaction.setStartDate(satisfactionDTO.getStart());
if (satisfactionDTO.getEndDate() != null) {
- satisfaction.finish(satisfactionDTO.getEndDate());
+ satisfaction.finish(satisfactionDTO.getEnd());
}
}
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/AssignedCriterionsModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/AssignedCriterionsModel.java
index b0f4ee5e0..a8b63d1bb 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/AssignedCriterionsModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/AssignedCriterionsModel.java
@@ -369,9 +369,9 @@ public class AssignedCriterionsModel extends IntegrationEntityModel implements
if (satisfactionDTO.isIsDeleted()) {
satisfaction.setIsDeleted(true);
} else {
- satisfaction.setStartDate(satisfactionDTO.getStartDate());
+ satisfaction.setStartDate(satisfactionDTO.getStart());
if (satisfactionDTO.getEndDate() != null) {
- satisfaction.finish(satisfactionDTO.getEndDate());
+ satisfaction.finish(satisfactionDTO.getEnd());
}
}
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/CriterionSatisfactionDTO.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/CriterionSatisfactionDTO.java
index b8a9b32b8..b7afd83f0 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/CriterionSatisfactionDTO.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/CriterionSatisfactionDTO.java
@@ -30,6 +30,7 @@ import java.util.List;
import java.util.Set;
import org.hibernate.validator.NotNull;
+import org.joda.time.LocalDate;
import org.navalplanner.business.INewObject;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
@@ -63,9 +64,9 @@ public class CriterionSatisfactionDTO implements INewObject {
private String criterionAndType;
@NotNull
- private Date startDate;
+ private LocalDate startDate;
- private Date endDate;
+ private LocalDate endDate;
@NotNull
private CriterionWithItsType criterionWithItsType;
@@ -80,13 +81,13 @@ public class CriterionSatisfactionDTO implements INewObject {
this.setNewObject(true);
this.state = "";
this.criterionAndType = "";
- this.startDate = new Date();
+ this.startDate = new LocalDate();
this.endDate = null;
}
public CriterionSatisfactionDTO(CriterionSatisfaction criterionSatisfaction) {
- this.setStartDate(criterionSatisfaction.getStartDate());
- this.setEndDate(criterionSatisfaction.getEndDate());
+ this.startDate = criterionSatisfaction.getStartDate();
+ this.endDate = criterionSatisfaction.getEndDate();
this.state = "";
this.criterionAndType = "";
this.setCriterionSatisfaction(criterionSatisfaction);
@@ -132,11 +133,26 @@ public class CriterionSatisfactionDTO implements INewObject {
}
public Date getStartDate() {
- return startDate != null ? new Date(startDate.getTime()) : null;
+ return asDate(startDate);
+ }
+
+ public LocalDate getStart() {
+ return startDate;
+ }
+
+ public LocalDate getEnd() {
+ return endDate;
}
public Date getEndDate() {
- return endDate != null ? new Date(endDate.getTime()) : null;
+ return asDate(endDate);
+ }
+
+ private Date asDate(LocalDate localDate) {
+ if (localDate == null) {
+ return null;
+ }
+ return localDate.toDateTimeAtStartOfDay().toDate();
}
public CriterionSatisfaction getCriterionSatisfaction() {
@@ -164,11 +180,11 @@ public class CriterionSatisfactionDTO implements INewObject {
}
public void setStartDate(Date startDate) {
- this.startDate = startDate;
+ this.startDate = asLocalDate(startDate);
}
public void setEndDate(Date endDate) {
- this.endDate = endDate;
+ this.endDate = asLocalDate(endDate);
}
public void setIsDeleted(boolean isDeleted) {
@@ -194,7 +210,7 @@ public class CriterionSatisfactionDTO implements INewObject {
return false;
}
- public boolean isPreviousStartDate(Date startDate){
+ public boolean isPreviousStartDate(LocalDate startDate) {
if (newObject) {
return true;
}
@@ -207,7 +223,11 @@ public class CriterionSatisfactionDTO implements INewObject {
return false;
}
- public boolean isGreaterStartDate(Date endDate){
+ public boolean isPreviousStartDate(Date value) {
+ return isPreviousStartDate(asLocalDate(value));
+ }
+
+ public boolean isGreaterStartDate(Date endDate) {
if (getStartDate() == null || endDate == null) {
return true;
}
@@ -217,7 +237,7 @@ public class CriterionSatisfactionDTO implements INewObject {
return false;
}
- public boolean isPostEndDate(Date endDate){
+ public boolean isPostEndDate(LocalDate endDate) {
if (newObject) {
return true;
}
@@ -233,6 +253,17 @@ public class CriterionSatisfactionDTO implements INewObject {
return false;
}
+ public boolean isPostEndDate(Date value) {
+ return isPostEndDate(asLocalDate(value));
+ }
+
+ private LocalDate asLocalDate(Date value) {
+ if (value == null) {
+ return null;
+ }
+ return LocalDate.fromDateFields(value);
+ }
+
public String getCriterionAndType() {
if (criterionWithItsType == null) {
return criterionAndType;
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java
index 4b990f77d..f9a75fcc0 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java
@@ -25,7 +25,6 @@ import static org.navalplanner.web.I18nHelper._;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -33,6 +32,7 @@ import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.Validate;
+import org.joda.time.LocalDate;
import org.navalplanner.business.calendars.daos.IBaseCalendarDAO;
import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.calendars.entities.CalendarData;
@@ -437,7 +437,8 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel
}
private CriterionSatisfaction createSatisfactionFor(Criterion criterion) {
- return CriterionSatisfaction.create(new Date(), criterion, resource);
+ return CriterionSatisfaction.create(new LocalDate(), criterion,
+ resource);
}
@Override
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceConverter.java b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceConverter.java
index 89ac28fb2..4487754ea 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceConverter.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/ws/resources/impl/ResourceConverter.java
@@ -167,8 +167,8 @@ public class ResourceConverter {
StringUtils.trim(criterionSatisfactionDTO.criterionTypeName),
StringUtils.trim(criterionSatisfactionDTO.criterionName),
resource,
- DateConverter.toDate(criterionSatisfactionDTO.startDate),
- DateConverter.toDate(criterionSatisfactionDTO.endDate));
+ DateConverter.toLocalDate(criterionSatisfactionDTO.startDate),
+ DateConverter.toLocalDate(criterionSatisfactionDTO.endDate));
} catch (InstanceNotFoundException e) {
@@ -340,8 +340,8 @@ public class ResourceConverter {
criterionSatisfaction.updateUnvalidated(
StringUtils.trim(criterionSatisfactionDTO.criterionTypeName),
StringUtils.trim(criterionSatisfactionDTO.criterionName),
- DateConverter.toDate(criterionSatisfactionDTO.startDate),
- DateConverter.toDate(criterionSatisfactionDTO.endDate));
+ DateConverter.toLocalDate(criterionSatisfactionDTO.startDate),
+ DateConverter.toLocalDate(criterionSatisfactionDTO.endDate));
} catch (InstanceNotFoundException e) {