From f4d4bddff61bde22fe32b756e4e1bfcc53fe0e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 4 May 2011 18:57:05 +0200 Subject: [PATCH] [Bug #648] Add new more lenient decimal box It always supports dot and comma as decimal separator. FEA: ItEr74S04BugFixing --- .../web/common/LenientDecimalBox.java | 64 +++++++++++++++++++ .../web/planner/allocation/AllocationRow.java | 3 +- .../ResourceAllocationController.java | 3 +- 3 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/common/LenientDecimalBox.java diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/LenientDecimalBox.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/LenientDecimalBox.java new file mode 100644 index 000000000..596afbe7b --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/LenientDecimalBox.java @@ -0,0 +1,64 @@ +/* + * This file is part of NavalPlan + * + * Copyright (C) 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.navalplanner.web.common; + +import java.math.BigDecimal; +import java.text.DecimalFormatSymbols; + +import org.zkoss.util.Locales; +import org.zkoss.zk.ui.WrongValueException; +import org.zkoss.zul.Decimalbox; + +/** + * Same behavior as a {@link Decimalbox}, but it always interprets , and + * . as decimals separators. So you can use both freely as decimal + * separators. + * + * @author Óscar González Fernández + * + */ +public class LenientDecimalBox extends Decimalbox { + + public LenientDecimalBox() { + super(); + } + + public LenientDecimalBox(BigDecimal value) throws WrongValueException { + super(value); + } + + @Override + protected Object coerceFromString(String value) throws WrongValueException { + return super + .coerceFromString(interpretCommasAndPointsAsDecimalSeparator(value)); + } + + private String interpretCommasAndPointsAsDecimalSeparator(String value) { + if (value == null) { + return null; + } + final DecimalFormatSymbols symbols = new DecimalFormatSymbols( + Locales.getCurrent()); + + char decimalSeparator = symbols.getDecimalSeparator(); + return value.replace('.', decimalSeparator).replace(',', + decimalSeparator); + } + +} diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRow.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRow.java index aed7422f6..6558d7b3c 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRow.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRow.java @@ -58,6 +58,7 @@ import org.navalplanner.business.workingday.EffortDuration; import org.navalplanner.business.workingday.EffortDuration.IEffortFrom; import org.navalplanner.business.workingday.ResourcesPerDay; import org.navalplanner.web.common.EffortDurationBox; +import org.navalplanner.web.common.LenientDecimalBox; import org.navalplanner.web.common.Util; import org.navalplanner.web.planner.allocation.ResourceAllocationController.DerivedAllocationColumn; import org.zkoss.zk.au.out.AuWrongValue; @@ -272,7 +273,7 @@ public abstract class AllocationRow { private EffortDurationBox effortInput = new EffortDurationBox(); - private final Decimalbox intendedResourcesPerDayInput = new Decimalbox(); + private final Decimalbox intendedResourcesPerDayInput = new LenientDecimalBox(); private ResourcesPerDay editedValue; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java index 57788e662..a9ddd1191 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java @@ -40,6 +40,7 @@ import org.navalplanner.business.resources.entities.ResourceEnum; import org.navalplanner.web.I18nHelper; import org.navalplanner.web.common.EffortDurationBox; import org.navalplanner.web.common.IMessagesForUser; +import org.navalplanner.web.common.LenientDecimalBox; import org.navalplanner.web.common.Util; import org.navalplanner.web.common.components.AllocationSelector; import org.navalplanner.web.common.components.NewAllocationSelector; @@ -154,7 +155,7 @@ public class ResourceAllocationController extends GenericForwardComposer { @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); - allResourcesPerDay = new Decimalbox(); + allResourcesPerDay = new LenientDecimalBox(); allResourcesPerDay.setWidth("80px"); initAllocationLabels(); makeReadyInputsForCalculationTypes();