Author: bleny Date: 2013-09-02 17:46:28 +0200 (Mon, 02 Sep 2013) New Revision: 408 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: fix NPE found in logs Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/StorageTransferAction.java Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/StorageTransferAction.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/StorageTransferAction.java 2013-09-02 15:18:31 UTC (rev 407) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/StorageTransferAction.java 2013-09-02 15:46:28 UTC (rev 408) @@ -34,6 +34,7 @@ import com.franciaflex.magalie.services.service.StorageTransferService; import com.franciaflex.magalie.web.MagalieActionSupport; import com.franciaflex.magalie.web.MagalieSession; +import com.google.common.base.Optional; import com.google.common.collect.Iterables; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -49,7 +50,8 @@ @Results({ @Result(name="success", type="redirectAction", params = { "actionName", "storage-transfer-location!input"}), - @Result(name="error", type="redirectAction", params = { "actionName", "storage-transfer-location!input"}) + @Result(name="error", type="redirectAction", params = { "actionName", "storage-transfer-location!input"}), + @Result(name="choose-stored-article", type="redirectAction", params = { "actionName", "storage-transfer-location!input", "originId", "%{origin.id}"}) }) public class StorageTransferAction extends MagalieActionSupport { @@ -108,8 +110,17 @@ if (storedArticleId != null) { - storedArticle = Iterables.find(storedArticles, JpaEntities.entityHasId(storedArticleId)); + // dans un cas très rare, on risque la NPE si l'article a déjà sorti de l'emplacement par un autre utilisateur + // dans ce cas, on retourne à la liste de choix + // XXX brendan 02/09/13 c'est arrivé une seule fois, à voir si on conserve ce comportement qui ne devrait pratiquement jamais arrivé + Optional<StoredArticle> storedArticleOptional = Iterables.tryFind(storedArticles, JpaEntities.entityHasId(storedArticleId)); + if (storedArticleOptional.isPresent()) { + + storedArticle = storedArticleOptional.get(); + + } + } Company company = session.getBuilding().getCompany(); @@ -123,6 +134,13 @@ prepare(); + if (storedArticleId != null && storedArticle == null) { + if (log.isWarnEnabled()) { + log.warn("stored article " + storedArticleId + " was not available, ask user to choose another"); + } + return "choose-stored-article"; + } + // default value if (storedArticle != null) { quantity = storedArticle.getQuantity();