diff --git a/NEWS.rst b/NEWS.rst index 6013809ce..85473bdf1 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -30,6 +30,7 @@ Changes * Update Maven Surfire Plugin * Update Maven Cobertura Plugin * Update Maven Liquibase Plugin +* Update Maven Tomcat Plugin * Update Slf4j API * Update Slf4j Simple diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/AutoAdapter.java b/ganttzk/src/main/java/org/zkoss/ganttz/adapters/AutoAdapter.java deleted file mode 100644 index 82357808f..000000000 --- a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/AutoAdapter.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * This file is part of LibrePlan - * - * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e - * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package org.zkoss.ganttz.adapters; - -import java.util.ArrayList; -import java.util.List; - -import org.zkoss.ganttz.data.ITaskFundamentalProperties; - -/** - * @author Óscar González Fernández - */ -public class AutoAdapter implements - IAdapterToTaskFundamentalProperties { - - @Override - public ITaskFundamentalProperties adapt(ITaskFundamentalProperties object) { - return object; - } - - @Override - public List> getOutcomingDependencies( - ITaskFundamentalProperties object) { - return new ArrayList>(); - } - - @Override - public List> getIncomingDependencies( - ITaskFundamentalProperties object) { - return new ArrayList>(); - } - - @Override - public void addDependency( - DomainDependency dependency) { - // do nothing - } - - @Override - public boolean canAddDependency( - DomainDependency dependency) { - return true; - } - - @Override - public void removeDependency( - DomainDependency dependency) { - //do nothing - } - - @Override - public void doRemovalOf(ITaskFundamentalProperties object) { - // do nothing - } - -} diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/IAdapterToTaskFundamentalProperties.java b/ganttzk/src/main/java/org/zkoss/ganttz/adapters/IAdapterToTaskFundamentalProperties.java index d0e1febea..d7960f285 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/IAdapterToTaskFundamentalProperties.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/adapters/IAdapterToTaskFundamentalProperties.java @@ -27,22 +27,23 @@ import org.zkoss.ganttz.data.ITaskFundamentalProperties; /** * Converts a domain object into a {@link ITaskFundamentalProperties} + * * @author Óscar González Fernández */ public interface IAdapterToTaskFundamentalProperties { - public ITaskFundamentalProperties adapt(T object); + ITaskFundamentalProperties adapt(T object); - public List> getOutcomingDependencies(T object); + List> getOutcomingDependencies(T object); - public List> getIncomingDependencies(T object); + List> getIncomingDependencies(T object); - public void doRemovalOf(T object); + void doRemovalOf(T object); - public boolean canAddDependency(DomainDependency dependency); + boolean canAddDependency(DomainDependency dependency); - public void addDependency(DomainDependency dependency); + void addDependency(DomainDependency dependency); - public void removeDependency(DomainDependency dependency); + void removeDependency(DomainDependency dependency); } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java index d4a224e8d..40da128d8 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java @@ -34,97 +34,98 @@ import org.zkoss.ganttz.data.constraint.Constraint; */ public interface ITaskFundamentalProperties { - public interface IUpdatablePosition { + interface IUpdatablePosition { - public void setBeginDate(GanttDate beginDate); + void setBeginDate(GanttDate beginDate); - public void setEndDate(GanttDate endDate); + void setEndDate(GanttDate endDate); - public void resizeTo(GanttDate endDate); + void resizeTo(GanttDate endDate); - public void moveTo(GanttDate newStart); + void moveTo(GanttDate newStart); } /** * The position modifications must be wrapped inside this */ - public interface IModifications { - public void doIt(IUpdatablePosition position); + interface IModifications { + void doIt(IUpdatablePosition position); } - public void doPositionModifications(IModifications modifications); - public String getName(); + void doPositionModifications(IModifications modifications); - public void setName(String name); + String getName(); - public GanttDate getBeginDate(); + void setName(String name); + + GanttDate getBeginDate(); /** * The deadline associated to the task. It can return null if has no * deadline associated */ - public Date getDeadline(); + Date getDeadline(); - public void setDeadline(Date date); + void setDeadline(Date date); - public GanttDate getConsolidatedline(); + GanttDate getConsolidatedline(); - public GanttDate getEndDate(); + GanttDate getEndDate(); - public String getNotes(); + String getNotes(); - public void setNotes(String notes); + void setNotes(String notes); - public GanttDate getHoursAdvanceBarEndDate(); + GanttDate getHoursAdvanceBarEndDate(); - public GanttDate getMoneyCostBarEndDate(); + GanttDate getMoneyCostBarEndDate(); BigDecimal getMoneyCostBarPercentage(); - public GanttDate getAdvanceBarEndDate(); + GanttDate getAdvanceBarEndDate(); - public BigDecimal getHoursAdvanceBarPercentage(); + BigDecimal getHoursAdvanceBarPercentage(); - public BigDecimal getAdvancePercentage(); + BigDecimal getAdvancePercentage(); - public String getTooltipText(); + String getTooltipText(); - public String getLabelsText(); + String getLabelsText(); - public String getResourcesText(); + String getResourcesText(); - public List> getStartConstraints(); + List> getStartConstraints(); - public List> getEndConstraints(); + List> getEndConstraints(); - public boolean isSubcontracted(); + boolean isSubcontracted(); - public boolean isLimiting(); + boolean isLimiting(); - public boolean isLimitingAndHasDayAssignments(); + boolean isLimitingAndHasDayAssignments(); - public boolean hasConsolidations(); + boolean hasConsolidations(); - public boolean canBeExplicitlyResized(); + boolean canBeExplicitlyResized(); - public String getAssignedStatus(); + String getAssignedStatus(); - public boolean isFixed(); + boolean isFixed(); - public String updateTooltipText(); + String updateTooltipText(); - public List> getCurrentLengthConstraint(); + List> getCurrentLengthConstraint(); - public GanttDate getAdvanceBarEndDate(String progressType); + GanttDate getAdvanceBarEndDate(String progressType); String updateTooltipText(String progressType); boolean isManualAnyAllocation(); - public boolean belongsClosedProject(); + boolean belongsClosedProject(); - public boolean isRoot(); + boolean isRoot(); boolean isUpdatedFromTimesheets(); @@ -132,9 +133,9 @@ public interface ITaskFundamentalProperties { Date getLastTimesheetDate(); - public String getCode(); + String getCode(); - public String getProjectCode(); + String getProjectCode(); /** * Calculates whether the project is within the estimated hours or not and diff --git a/ganttzk/src/test/java/org/zkoss/ganttz/data/constraint/ConstraintOnComparableValuesTest.java b/ganttzk/src/test/java/org/zkoss/ganttz/data/constraint/ConstraintOnComparableValuesTest.java index c8335eb98..f70e3dc80 100644 --- a/ganttzk/src/test/java/org/zkoss/ganttz/data/constraint/ConstraintOnComparableValuesTest.java +++ b/ganttzk/src/test/java/org/zkoss/ganttz/data/constraint/ConstraintOnComparableValuesTest.java @@ -34,41 +34,36 @@ public class ConstraintOnComparableValuesTest { private Constraint biggerOrEqualThanNow = biggerOrEqualThan(now); - private Constraint equalToNow = ConstraintOnComparableValues - . equalTo(now); + private Constraint equalToNow = ConstraintOnComparableValues.equalTo(now); @Test public void canCreateConstraintBiggerThan() { - assertThat(biggerOrEqualThanNow.applyTo(now), equalTo(new Date(now - .getTime()))); + assertThat(biggerOrEqualThanNow.applyTo(now), equalTo(new Date(now.getTime()))); } @Test public void biggerOrEqualThanNullLeaveValuesUnmodified() { - Constraint biggerThanNull = ConstraintOnComparableValues - . biggerOrEqualThan(null); + Constraint biggerThanNull = ConstraintOnComparableValues.biggerOrEqualThan(null); Date eraStart = new Date(0); - assertThat(biggerThanNull.applyConstraintTo(new Date(0)), - equalTo(eraStart)); + + assertThat(biggerThanNull.applyConstraintTo(new Date(0)), equalTo(eraStart)); } @Test public void applyingBiggerOrEqualThanConstraintToNullNotFails() { - assertThat(biggerOrEqualThanNow.applyTo(null), equalTo(new Date(now - .getTime()))); + assertThat(biggerOrEqualThanNow.applyTo(null), equalTo(new Date(now.getTime()))); } @Test public void canCreateConstraintEqualTo(){ - assertThat(equalToNow.applyTo(new Date(now.getTime() + 1000)), - equalTo(now)); + assertThat(equalToNow.applyTo(new Date(now.getTime() + 1000)), equalTo(now)); } @Test public void equalToNullLeaveValuesUnmodified() { - Constraint equalToNull = ConstraintOnComparableValues - . equalTo(null); + Constraint equalToNull = ConstraintOnComparableValues.equalTo(null); Date value = new Date(now.getTime() + 1000); + assertThat(equalToNull.applyTo(value), equalTo(value)); } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/TaskElementAdapter.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/TaskElementAdapter.java index 62991d78f..f058efce3 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/TaskElementAdapter.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/TaskElementAdapter.java @@ -29,14 +29,17 @@ import static org.zkoss.ganttz.data.constraint.ConstraintOnComparableValues.less import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; -import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.HashSet; + + import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.Validate; @@ -114,51 +117,49 @@ public class TaskElementAdapter { private static final Log LOG = LogFactory.getLog(TaskElementAdapter.class); - public static List> getStartConstraintsFor( - TaskElement taskElement, LocalDate orderInitDate) { - if (taskElement instanceof ITaskPositionConstrained) { + public static List> getStartConstraintsFor(TaskElement taskElement, LocalDate orderInitDate) { + if ( taskElement instanceof ITaskPositionConstrained ) { ITaskPositionConstrained task = (ITaskPositionConstrained) taskElement; - TaskPositionConstraint startConstraint = task - .getPositionConstraint(); - final PositionConstraintType constraintType = startConstraint - .getConstraintType(); + TaskPositionConstraint startConstraint = task.getPositionConstraint(); + final PositionConstraintType constraintType = startConstraint.getConstraintType(); + switch (constraintType) { - case AS_SOON_AS_POSSIBLE: - if (orderInitDate != null) { - return Collections - .singletonList(biggerOrEqualThan(toGantt(orderInitDate))); - } - return Collections.emptyList(); - case START_IN_FIXED_DATE: - return Collections - .singletonList(equalTo(toGantt(startConstraint - .getConstraintDate()))); - case START_NOT_EARLIER_THAN: - return Collections - .singletonList(biggerOrEqualThan(toGantt(startConstraint - .getConstraintDate()))); + case AS_SOON_AS_POSSIBLE: + if ( orderInitDate != null ) { + return Collections.singletonList(biggerOrEqualThan(toGantt(orderInitDate))); + } + return Collections.emptyList(); + + case START_IN_FIXED_DATE: + return Collections.singletonList(equalTo(toGantt(startConstraint.getConstraintDate()))); + + case START_NOT_EARLIER_THAN: + return Collections.singletonList(biggerOrEqualThan(toGantt(startConstraint.getConstraintDate()))); } } + return Collections.emptyList(); } - public static List> getEndConstraintsFor( - TaskElement taskElement, LocalDate deadline) { - if (taskElement instanceof ITaskPositionConstrained) { + public static List> getEndConstraintsFor(TaskElement taskElement, LocalDate deadline) { + if ( taskElement instanceof ITaskPositionConstrained ) { ITaskPositionConstrained task = (ITaskPositionConstrained) taskElement; TaskPositionConstraint endConstraint = task.getPositionConstraint(); PositionConstraintType type = endConstraint.getConstraintType(); + switch (type) { - case AS_LATE_AS_POSSIBLE: - if (deadline != null) { - return Collections - .singletonList(lessOrEqualThan(toGantt(deadline))); - } - case FINISH_NOT_LATER_THAN: - GanttDate date = toGantt(endConstraint.getConstraintDate()); - return Collections.singletonList(lessOrEqualThan(date)); + case AS_LATE_AS_POSSIBLE: + if ( deadline != null ) { + return Collections.singletonList(lessOrEqualThan(toGantt(deadline))); + } + + case FINISH_NOT_LATER_THAN: + GanttDate date = toGantt(endConstraint.getConstraintDate()); + + return Collections.singletonList(lessOrEqualThan(date)); } } + return Collections.emptyList(); } @@ -166,31 +167,33 @@ public class TaskElementAdapter { return toGantt(date, null); } - public static GanttDate toGantt(IntraDayDate date, - EffortDuration dayCapacity) { - if (date == null) { + public static GanttDate toGantt(IntraDayDate date, EffortDuration dayCapacity) { + if ( date == null ) { return null; } - if (dayCapacity == null) { + + if ( dayCapacity == null ) { // a sensible default dayCapacity = EffortDuration.hours(8); } + return new GanttDateAdapter(date, dayCapacity); } public static GanttDate toGantt(LocalDate date) { - if (date == null) { + if ( date == null ) { return null; } + return GanttDate.createFrom(date); } public static IntraDayDate toIntraDay(GanttDate date) { - if (date == null) { + if ( date == null ) { return null; } - return date.byCases(new Cases( - GanttDateAdapter.class) { + + return date.byCases(new Cases(GanttDateAdapter.class) { @Override public IntraDayDate on(LocalDateBased localDate) { @@ -204,20 +207,22 @@ public class TaskElementAdapter { }); } - public IAdapterToTaskFundamentalProperties createForCompany( - Scenario currentScenario) { + public IAdapterToTaskFundamentalProperties createForCompany(Scenario currentScenario) { Adapter result = new Adapter(); result.useScenario(currentScenario); result.setPreventCalculateResourcesText(true); + return result; } public IAdapterToTaskFundamentalProperties createForOrder( Scenario currentScenario, Order order, PlanningState planningState) { + Adapter result = new Adapter(planningState); result.useScenario(currentScenario); result.setInitDate(asLocalDate(order.getInitDate())); result.setDeadline(asLocalDate(order.getDeadline())); + return result; } @@ -256,8 +261,7 @@ public class TaskElementAdapter { static class GanttDateAdapter extends CustomDate { - private static final int DAY_MILLISECONDS = (int) Days.days(1) - .toStandardDuration().getMillis(); + private static final int DAY_MILLISECONDS = (int) Days.days(1).toStandardDuration().getMillis(); private final IntraDayDate date; private final Duration workingDayDuration; @@ -268,10 +272,12 @@ public class TaskElementAdapter { } protected int compareToCustom(CustomDate customType) { - if (customType instanceof GanttDateAdapter) { + if ( customType instanceof GanttDateAdapter ) { GanttDateAdapter other = (GanttDateAdapter) customType; + return this.date.compareTo(other.date); } + throw new RuntimeException("incompatible type: " + customType); } @@ -300,10 +306,12 @@ public class TaskElementAdapter { @Override protected boolean isEqualsToCustom(CustomDate customType) { - if (customType instanceof GanttDateAdapter) { + if ( customType instanceof GanttDateAdapter ) { GanttDateAdapter other = (GanttDateAdapter) customType; + return this.date.equals(other.date); } + return false; } @@ -318,35 +326,34 @@ public class TaskElementAdapter { EffortDuration effortDuration = date.getEffortDuration(); Duration durationInDay = calculateDurationInDayFor(effortDuration); int pixelsInsideDay = datesMapper.toPixels(durationInDay); + return pixesUntilDate + pixelsInsideDay; } private Duration calculateDurationInDayFor(EffortDuration effortDuration) { - if (workingDayDuration.getStandardSeconds() == 0) { + if ( workingDayDuration.getStandardSeconds() == 0 ) { return Duration.ZERO; } + Fraction fraction = fractionOfWorkingDayFor(effortDuration); try { - return new Duration(fraction.multiplyBy( - Fraction.getFraction(DAY_MILLISECONDS, 1)).intValue()); + return new Duration(fraction.multiplyBy(Fraction.getFraction(DAY_MILLISECONDS, 1)).intValue()); } catch (ArithmeticException e) { // if fraction overflows use floating point arithmetic - return new Duration( - (int) (fraction.doubleValue() * DAY_MILLISECONDS)); + return new Duration((int) (fraction.doubleValue() * DAY_MILLISECONDS)); } } @SuppressWarnings("unchecked") private Fraction fractionOfWorkingDayFor(EffortDuration effortDuration) { Duration durationInDay = toMilliseconds(effortDuration); - // cast to int is safe because there are not enough seconds in - // day - // to overflow + + // cast to int is safe because there are not enough seconds in day to overflow Fraction fraction = Fraction.getFraction( (int) durationInDay.getStandardSeconds(), (int) workingDayDuration.getStandardSeconds()); - return (Fraction) Collections.min(Arrays.asList(fraction, - Fraction.ONE)); + + return Collections.min(Arrays.asList(fraction, Fraction.ONE)); } private static Duration toMilliseconds(EffortDuration duration) { @@ -355,12 +362,11 @@ public class TaskElementAdapter { } /** - * Responsible of adaptating a {@link TaskElement} into a - * {@link ITaskFundamentalProperties}
+ * Responsible of adaptation a {@link TaskElement} into a {@link ITaskFundamentalProperties}
+ * * @author Óscar González Fernández */ - public class Adapter implements - IAdapterToTaskFundamentalProperties { + public class Adapter implements IAdapterToTaskFundamentalProperties { private Scenario scenario; @@ -407,8 +413,7 @@ public class TaskElementAdapter { private final Scenario currentScenario; - protected TaskElementWrapper(Scenario currentScenario, - TaskElement taskElement) { + protected TaskElementWrapper(Scenario currentScenario, TaskElement taskElement) { Validate.notNull(currentScenario); this.currentScenario = currentScenario; this.taskElement = taskElement; @@ -441,11 +446,11 @@ public class TaskElementAdapter { @Override public void moveTo(GanttDate newStart) { - if (taskElement instanceof ITaskPositionConstrained) { + if ( taskElement instanceof ITaskPositionConstrained ) { ITaskPositionConstrained task = (ITaskPositionConstrained) taskElement; GanttDate newEnd = inferEndFrom(newStart); - if (task.getPositionConstraint() - .isConstraintAppliedToStart()) { + + if ( task.getPositionConstraint().isConstraintAppliedToStart() ) { setBeginDate(newStart); } else { setEndDate(newEnd); @@ -488,21 +493,21 @@ public class TaskElementAdapter { @Override public GanttDate getBeginDate() { IntraDayDate start = taskElement.getIntraDayStartDate(); + return toGantt(start); } private GanttDate toGantt(IntraDayDate date) { BaseCalendar calendar = taskElement.getCalendar(); - if (calendar == null) { + if ( calendar == null ) { return TaskElementAdapter.toGantt(date); } - return TaskElementAdapter.toGantt(date, calendar - .getCapacityOn(PartialDay.wholeDay(date.getDate()))); + + return TaskElementAdapter.toGantt(date, calendar.getCapacityOn(PartialDay.wholeDay(date.getDate()))); } @Override - public void doPositionModifications( - final IModifications modifications) { + public void doPositionModifications(final IModifications modifications) { reentranceGuard.entranceRequested(new IReentranceCases() { @Override @@ -510,17 +515,16 @@ public class TaskElementAdapter { transactionService.runOnReadOnlyTransaction(asTransaction(modifications)); } - IOnTransaction asTransaction( - final IModifications modifications) { + IOnTransaction asTransaction(final IModifications modifications) { return new IOnTransaction() { @Override public Void execute() { - if (planningState != null) { - planningState - .reassociateResourcesWithSession(); + if ( planningState != null ) { + planningState.reassociateResourcesWithSession(); } modifications.doIt(position); + return null; } }; @@ -543,16 +547,14 @@ public class TaskElementAdapter { } private void updateTaskPositionConstraint(GanttDate endDate) { - if (taskElement instanceof ITaskPositionConstrained) { + if ( taskElement instanceof ITaskPositionConstrained ) { ITaskPositionConstrained task = (ITaskPositionConstrained) taskElement; - PositionConstraintType constraintType = task - .getPositionConstraint().getConstraintType(); - if (constraintType - .compareTo(PositionConstraintType.FINISH_NOT_LATER_THAN) == 0 - || constraintType - .compareTo(PositionConstraintType.AS_LATE_AS_POSSIBLE) == 0) { - task.explicityMoved(taskElement.getIntraDayStartDate(), - toIntraDay(endDate)); + PositionConstraintType constraintType = task.getPositionConstraint().getConstraintType(); + + if ( constraintType.compareTo(PositionConstraintType.FINISH_NOT_LATER_THAN) == 0 || + constraintType.compareTo(PositionConstraintType.AS_LATE_AS_POSSIBLE) == 0) { + + task.explicityMoved(taskElement.getIntraDayStartDate(), toIntraDay(endDate)); } } } @@ -565,26 +567,27 @@ public class TaskElementAdapter { @Override public BigDecimal getHoursAdvanceBarPercentage() { OrderElement orderElement = taskElement.getOrderElement(); - if (orderElement == null) { + if ( orderElement == null ) { return BigDecimal.ZERO; } - EffortDuration totalChargedEffort = orderElement - .getSumChargedEffort() != null ? orderElement - .getSumChargedEffort().getTotalChargedEffort() + boolean cond = orderElement.getSumChargedEffort() != null; + + EffortDuration totalChargedEffort = cond ? orderElement.getSumChargedEffort().getTotalChargedEffort() : EffortDuration.zero(); EffortDuration estimatedEffort = taskElement.getSumOfAssignedEffort(); - if(estimatedEffort.isZero()) { + if( estimatedEffort.isZero() ) { estimatedEffort = EffortDuration.hours(orderElement.getWorkHours()); - if(estimatedEffort.isZero()) { + + if( estimatedEffort.isZero() ) { return BigDecimal.ZERO; } } - return new BigDecimal(totalChargedEffort.divivedBy( - estimatedEffort).doubleValue()).setScale(2, - RoundingMode.HALF_UP); + + return new BigDecimal(totalChargedEffort.divivedBy(estimatedEffort).doubleValue()) + .setScale(2, RoundingMode.HALF_UP); } @Override @@ -592,9 +595,8 @@ public class TaskElementAdapter { return calculateLimitDateProportionalToTaskElementSize(getMoneyCostBarPercentage()); } - private GanttDate calculateLimitDateProportionalToTaskElementSize( - BigDecimal proportion) { - if (proportion.compareTo(BigDecimal.ZERO) == 0) { + private GanttDate calculateLimitDateProportionalToTaskElementSize(BigDecimal proportion) { + if ( proportion.compareTo(BigDecimal.ZERO) == 0 ) { return getBeginDate(); } @@ -602,8 +604,8 @@ public class TaskElementAdapter { IntraDayDate end = taskElement.getIntraDayEndDate(); EffortDuration effortBetween = start.effortUntil(end); - int seconds = new BigDecimal(effortBetween.getSeconds()) - .multiply(proportion).toBigInteger().intValue(); + int seconds = new BigDecimal(effortBetween.getSeconds()).multiply(proportion).toBigInteger().intValue(); + return TaskElementAdapter.toGantt( start.addEffort(EffortDuration.seconds(seconds)), EffortDuration.hours(8)); @@ -611,57 +613,51 @@ public class TaskElementAdapter { @Override public BigDecimal getMoneyCostBarPercentage() { - return MoneyCostCalculator.getMoneyCostProportion( - getMoneyCost(), getBudget()); + return MoneyCostCalculator.getMoneyCostProportion(getMoneyCost(), getBudget()); } private BigDecimal getBudget() { - if ((taskElement == null) - || (taskElement.getOrderElement() == null)) { + if ( (taskElement == null) || (taskElement.getOrderElement() == null) ) { return BigDecimal.ZERO; } + return taskElement.getOrderElement().getBudget(); } private BigDecimal getTotalCalculatedBudget() { - if ((taskElement == null) - || (taskElement.getOrderElement() == null)) { + if ( (taskElement == null) || (taskElement.getOrderElement() == null) ) { return BigDecimal.ZERO; } - return transactionService - .runOnReadOnlyTransaction(new IOnTransaction() { + + return transactionService.runOnReadOnlyTransaction(new IOnTransaction() { @Override public BigDecimal execute() { - return taskElement.getOrderElement() - .getTotalBudget(); + return taskElement.getOrderElement().getTotalBudget(); } }); } private BigDecimal getMoneyCost() { - if ((taskElement == null) - || (taskElement.getOrderElement() == null)) { + if ( (taskElement == null) || (taskElement.getOrderElement() == null) ) { return BigDecimal.ZERO; } - return transactionService - .runOnReadOnlyTransaction(new IOnTransaction() { + + return transactionService.runOnReadOnlyTransaction(new IOnTransaction() { @Override public BigDecimal execute() { - return moneyCostCalculator.getTotalMoneyCost(taskElement - .getOrderElement()); + return moneyCostCalculator.getTotalMoneyCost(taskElement.getOrderElement()); } }); } private BigDecimal getHoursMoneyCost() { - if ((taskElement == null) || (taskElement.getOrderElement() == null)) { + if ( (taskElement == null) || (taskElement.getOrderElement() == null) ) { return BigDecimal.ZERO; } - return transactionService - .runOnReadOnlyTransaction(new IOnTransaction() { + return transactionService.runOnReadOnlyTransaction(new IOnTransaction() { @Override public BigDecimal execute() { return moneyCostCalculator.getHoursMoneyCost(taskElement.getOrderElement()); @@ -670,16 +666,14 @@ public class TaskElementAdapter { } private BigDecimal getExpensesMoneyCost() { - if ((taskElement == null) || (taskElement.getOrderElement() == null)) { + if ( (taskElement == null) || (taskElement.getOrderElement() == null) ) { return BigDecimal.ZERO; } - return transactionService - .runOnReadOnlyTransaction(new IOnTransaction() { + return transactionService.runOnReadOnlyTransaction(new IOnTransaction() { @Override public BigDecimal execute() { - return moneyCostCalculator.getExpensesMoneyCost(taskElement - .getOrderElement()); + return moneyCostCalculator.getExpensesMoneyCost(taskElement.getOrderElement()); } }); } @@ -691,10 +685,10 @@ public class TaskElementAdapter { private GanttDate getAdvanceBarEndDate(ProgressType progressType) { BigDecimal advancePercentage = BigDecimal.ZERO; - if (taskElement.getOrderElement() != null) { - advancePercentage = taskElement - .getAdvancePercentage(progressType); + if ( taskElement.getOrderElement() != null ) { + advancePercentage = taskElement.getAdvancePercentage(progressType); } + return getAdvanceBarEndDate(advancePercentage); } @@ -704,17 +698,14 @@ public class TaskElementAdapter { } private boolean isTaskRoot(TaskElement taskElement) { - return taskElement instanceof TaskGroup - && taskElement.getParent() == null; + return taskElement instanceof TaskGroup && taskElement.getParent() == null; } private ProgressType getProgressTypeFromConfiguration() { - return transactionService - .runOnReadOnlyTransaction(new IOnTransaction() { + return transactionService.runOnReadOnlyTransaction(new IOnTransaction() { @Override public ProgressType execute() { - return configurationDAO.getConfiguration() - .getProgressType(); + return configurationDAO.getConfiguration().getProgressType(); } }); } @@ -725,17 +716,16 @@ public class TaskElementAdapter { @Override public String getTooltipText() { - if (taskElement.isMilestone() - || taskElement.getOrderElement() == null) { + if ( taskElement.isMilestone() || taskElement.getOrderElement() == null ) { return ""; } - return transactionService - .runOnReadOnlyTransaction(new IOnTransaction() { + + return transactionService.runOnReadOnlyTransaction(new IOnTransaction() { @Override public String execute() { - orderElementDAO.reattach(taskElement - .getOrderElement()); + orderElementDAO.reattach(taskElement.getOrderElement()); + return buildTooltipText(); } }); @@ -743,17 +733,16 @@ public class TaskElementAdapter { @Override public String getLabelsText() { - if (taskElement.isMilestone() - || taskElement.getOrderElement() == null) { + if ( taskElement.isMilestone() || taskElement.getOrderElement() == null ) { return ""; } - return transactionService - .runOnReadOnlyTransaction(new IOnTransaction() { + + return transactionService.runOnReadOnlyTransaction(new IOnTransaction() { @Override public String execute() { - orderElementDAO.reattach(taskElement - .getOrderElement()); + orderElementDAO.reattach(taskElement.getOrderElement()); + return buildLabelsText(); } }); @@ -761,99 +750,101 @@ public class TaskElementAdapter { @Override public String getResourcesText() { - if (isPreventCalculateResourcesText() - || taskElement.getOrderElement() == null) { + if ( isPreventCalculateResourcesText() || taskElement.getOrderElement() == null ) { return ""; } try { - return transactionService - .runOnAnotherReadOnlyTransaction(new IOnTransaction() { + return transactionService.runOnAnotherReadOnlyTransaction(new IOnTransaction() { + @Override + public String execute() { + orderElementDAO.reattach(taskElement.getOrderElement()); + + if ( taskElement.isSubcontracted() ) { + externalCompanyDAO.reattach(taskElement.getSubcontractedCompany()); + } + + return buildResourcesText(); + } + }); - @Override - public String execute() { - orderElementDAO.reattach(taskElement - .getOrderElement()); - if (taskElement.isSubcontracted()) { - externalCompanyDAO.reattach(taskElement - .getSubcontractedCompany()); - } - return buildResourcesText(); - } - }); } catch (Exception e) { LOG.error("error calculating resources text", e); + return ""; } } - private Set