Franciaflex-magalie-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- 438 discussions
r37 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/dao magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa magalie-services/src/main/java/com/franciaflex/magalie/services magalie-services/src/test/java/com/franciaflex/magalie magalie-web/src/main/java/com/franciaflex/magalie/web/action magalie-web/src/main/webapp/WEB-INF/content
by bleny@users.forge.codelutin.com 25 Mar '13
by bleny@users.forge.codelutin.com 25 Mar '13
25 Mar '13
Author: bleny
Date: 2013-03-25 16:13:20 +0100 (Mon, 25 Mar 2013)
New Revision: 37
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
refs #2204: Page de rapport Magalie, start
Added:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieReport.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ReportService.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ReportAction.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUsersService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SiteErrorsService.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/FakeMagalieServiceContext.java
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java 2013-03-25 14:46:07 UTC (rev 36)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java 2013-03-25 15:13:20 UTC (rev 37)
@@ -2,6 +2,8 @@
import com.franciaflex.magalie.entity.MagalieUser;
+import java.util.List;
+
/**
* @author bleny
*/
@@ -9,4 +11,6 @@
MagalieUser findByLogin(String login);
+ List<MagalieUser> findAll();
+
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java 2013-03-25 14:46:07 UTC (rev 36)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java 2013-03-25 15:13:20 UTC (rev 37)
@@ -27,4 +27,11 @@
MagalieUser onlyElement = Iterables.getOnlyElement(resultList, null);
return onlyElement;
}
+
+ @Override
+ public List<MagalieUser> findAll() {
+ Query query = entityManager.createQuery("from MagalieUser mu order by mu.login");
+ List<MagalieUser> resultList = query.getResultList();
+ return resultList;
+ }
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java 2013-03-25 14:46:07 UTC (rev 36)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java 2013-03-25 15:13:20 UTC (rev 37)
@@ -85,7 +85,7 @@
double quantity = 0;
- Date orderDate = serviceContext.getDate();
+ Date orderDate = serviceContext.getNow();
for (StoredArticle storedArticle : sortedStoredArticles) {
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-25 14:46:07 UTC (rev 36)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-25 15:13:20 UTC (rev 37)
@@ -77,7 +77,7 @@
}
@Override
- public Date getDate() {
+ public Date getNow() {
Date now = new Date();
return now;
}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieReport.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieReport.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieReport.java 2013-03-25 15:13:20 UTC (rev 37)
@@ -0,0 +1,24 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.entity.MagalieUser;
+
+import java.util.Date;
+import java.util.List;
+
+public class MagalieReport {
+
+ protected Date reportDate;
+ private List<MagalieUser> allMagalieUsers;
+
+ public void setReportDate(Date reportDate) {
+ this.reportDate = reportDate;
+ }
+
+ public void setAllMagalieUsers(List<MagalieUser> allMagalieUsers) {
+ this.allMagalieUsers = allMagalieUsers;
+ }
+
+ public List<MagalieUser> getAllMagalieUsers() {
+ return allMagalieUsers;
+ }
+}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-25 14:46:07 UTC (rev 36)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-25 15:13:20 UTC (rev 37)
@@ -39,7 +39,7 @@
*/
public interface MagalieServiceContext {
- Date getDate();
+ Date getNow();
<E extends MagalieService> E newService(Class<E> serviceClass);
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUsersService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUsersService.java 2013-03-25 14:46:07 UTC (rev 36)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUsersService.java 2013-03-25 15:13:20 UTC (rev 37)
@@ -4,6 +4,8 @@
import com.franciaflex.magalie.entity.MagalieUser;
import com.google.common.base.Preconditions;
+import java.util.List;
+
public class MagalieUsersService implements MagalieService {
protected MagalieServiceContext serviceContext;
@@ -25,4 +27,13 @@
}
+ public List<MagalieUser> getAllMagalieUsers() {
+
+ MagalieUserDao dao = serviceContext.getMagalieUserDao();
+
+ List<MagalieUser> allMagalieUsers = dao.findAll();
+
+ return allMagalieUsers;
+
+ }
}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ReportService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ReportService.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ReportService.java 2013-03-25 15:13:20 UTC (rev 37)
@@ -0,0 +1,35 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.entity.MagalieUser;
+
+import java.util.Date;
+import java.util.List;
+
+public class ReportService implements MagalieService {
+
+ protected MagalieServiceContext serviceContext;
+
+ @Override
+ public void setServiceContext(MagalieServiceContext serviceContext) {
+ this.serviceContext = serviceContext;
+ }
+
+ public MagalieReport getReport() {
+
+ MagalieReport magalieReport = new MagalieReport();
+
+ Date now = serviceContext.getNow();
+
+ magalieReport.setReportDate(now);
+
+ MagalieUsersService magalieUsersService = serviceContext.newService(MagalieUsersService.class);
+
+ List<MagalieUser> allMagalieUsers = magalieUsersService.getAllMagalieUsers();
+
+ magalieReport.setAllMagalieUsers(allMagalieUsers);
+
+ return magalieReport;
+
+ }
+
+}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SiteErrorsService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SiteErrorsService.java 2013-03-25 14:46:07 UTC (rev 36)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SiteErrorsService.java 2013-03-25 15:13:20 UTC (rev 37)
@@ -35,7 +35,7 @@
newSiteError.setSite(site);
- Date reportDate = serviceContext.getDate();
+ Date reportDate = serviceContext.getNow();
newSiteError.setReportDate(reportDate);
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/FakeMagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/FakeMagalieServiceContext.java 2013-03-25 14:46:07 UTC (rev 36)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/FakeMagalieServiceContext.java 2013-03-25 15:13:20 UTC (rev 37)
@@ -14,7 +14,7 @@
protected Date date;
@Override
- public Date getDate() {
+ public Date getNow() {
Preconditions.checkState(date != null, "you must provide a date before running service test");
if (log.isTraceEnabled()) {
log.trace("injecting fake date in service: " + date);
Added: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ReportAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ReportAction.java (rev 0)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/ReportAction.java 2013-03-25 15:13:20 UTC (rev 37)
@@ -0,0 +1,29 @@
+package com.franciaflex.magalie.web.action;
+
+import com.franciaflex.magalie.services.MagalieReport;
+import com.franciaflex.magalie.services.ReportService;
+import com.franciaflex.magalie.web.MagalieActionSupport;
+
+public class ReportAction extends MagalieActionSupport {
+
+ protected ReportService service;
+
+ protected MagalieReport report;
+
+ public void setService(ReportService service) {
+ this.service = service;
+ }
+
+ @Override
+ public String execute() {
+
+ report = service.getReport();
+
+ return SUCCESS;
+
+ }
+
+ public MagalieReport getReport() {
+ return report;
+ }
+}
Added: trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp (rev 0)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/report.jsp 2013-03-25 15:13:20 UTC (rev 37)
@@ -0,0 +1,51 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+<head>
+ <title>Rapport MagaLiE</title>
+</head>
+
+<h1>Rapport MagaLiE</h1>
+
+<section>
+ <h2>Utilisateurs connus</h2>
+
+ <table class="table">
+ <thead>
+ <tr>
+ <th>
+ Id
+ </th>
+ <th>
+ login
+ </th>
+ <th>
+ nom
+ </th>
+ <th>
+ permis ?
+ </th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <s:iterator value="report.allMagalieUsers" var="magalieUser">
+ <tr>
+ <td>
+ <s:property value="id" />
+ </td>
+ <td>
+ <s:property value="login" />
+ </td>
+ <td>
+ <s:property value="name" />
+ </td>
+ <td>
+ <s:property value="driverLicenseOwner" />
+ </td>
+ </tr>
+ </s:iterator>
+ </tbody>
+
+ </table>
+</section>
\ No newline at end of file
1
0
25 Mar '13
Author: bleny
Date: 2013-03-25 15:46:07 +0100 (Mon, 25 Mar 2013)
New Revision: 36
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
introduce services and view for fulfil kanaban
Added:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StorageMovements.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementOrderDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementOrderDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovementOrder.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/FulfilKanbanService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieBarcodeService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUsersService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementTask.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/InvalidMagalieBarcodeException.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/MagalieException.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/fulfil-kanban-input.jsp
Removed:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieException.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequiredDriverLicenceException.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/UnavailableArticleException.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/ArticleDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaArticleDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/AbstractJpaEntity.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java
trunk/magalie-persistence/src/main/resources/magalie.properties
trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/RequestedItemServiceTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/index.jsp
trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp
trunk/pom.xml
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StorageMovements.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StorageMovements.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StorageMovements.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,20 @@
+package com.franciaflex.magalie;
+
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.StorageMovement;
+import com.google.common.base.Function;
+
+public class StorageMovements {
+
+ protected static class GetArticleFunction implements Function<StorageMovement, Article> {
+
+ @Override
+ public Article apply(StorageMovement storageMovement) {
+ return storageMovement.getArticle();
+ }
+ }
+
+ public static Function<StorageMovement, Article> getArticleFunction() {
+ return new GetArticleFunction();
+ }
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/ArticleDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/ArticleDao.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/ArticleDao.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -7,4 +7,6 @@
*/
public interface ArticleDao extends Dao<Article> {
+ Article findByCode(String articleCode);
+
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -7,4 +7,6 @@
*/
public interface MagalieUserDao extends Dao<MagalieUser> {
+ MagalieUser findByLogin(String login);
+
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementDao.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementDao.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -12,6 +12,4 @@
List<StorageMovement> findAllByArticle(Article article);
- void persistAll(Iterable<StorageMovement> storageMovements);
-
}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementOrderDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementOrderDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementOrderDao.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,7 @@
+package com.franciaflex.magalie.dao;
+
+import com.franciaflex.magalie.entity.StorageMovementOrder;
+
+public interface StorageMovementOrderDao extends Dao<StorageMovementOrder> {
+
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaArticleDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaArticleDao.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaArticleDao.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -2,8 +2,10 @@
import com.franciaflex.magalie.dao.ArticleDao;
import com.franciaflex.magalie.entity.Article;
+import com.google.common.collect.Iterables;
import javax.persistence.EntityManager;
+import javax.persistence.Query;
public class JpaArticleDao extends AbstractJpaDao<Article> implements ArticleDao {
@@ -15,4 +17,16 @@
protected Class<Article> getEntityClass() {
return Article.class;
}
+
+ @Override
+ public Article findByCode(String articleCode) {
+ Query query = entityManager.createQuery("from article a where a.code = :code");
+ query.setParameter("code", articleCode);
+ Article article = (Article)
+ Iterables.getOnlyElement(
+ query.getResultList(),
+ null
+ );
+ return article;
+ }
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -2,8 +2,11 @@
import com.franciaflex.magalie.dao.MagalieUserDao;
import com.franciaflex.magalie.entity.MagalieUser;
+import com.google.common.collect.Iterables;
import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import java.util.List;
public class JpaMagalieUserDao extends AbstractJpaDao<MagalieUser> implements MagalieUserDao {
@@ -15,4 +18,13 @@
protected Class<MagalieUser> getEntityClass() {
return MagalieUser.class;
}
+
+ @Override
+ public MagalieUser findByLogin(String login) {
+ Query query = entityManager.createQuery("from magalieUser mu where mu.login = login");
+ query.setParameter("login", login);
+ List<MagalieUser> resultList = query.getResultList();
+ MagalieUser onlyElement = Iterables.getOnlyElement(resultList, null);
+ return onlyElement;
+ }
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -26,13 +26,4 @@
return query.getResultList();
}
- @Override
- public void persistAll(Iterable<StorageMovement> storageMovements) {
- // EntityTransaction transaction = entityManager.getTransaction();
- // transaction.begin();
- for (StorageMovement storageMovement : storageMovements) {
- persist(storageMovement);
- }
- // transaction.commit();
- }
}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementOrderDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementOrderDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementOrderDao.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,19 @@
+package com.franciaflex.magalie.dao.jpa;
+
+import com.franciaflex.magalie.dao.StorageMovementOrderDao;
+import com.franciaflex.magalie.entity.StorageMovementOrder;
+
+import javax.persistence.EntityManager;
+
+public class JpaStorageMovementOrderDao extends AbstractJpaDao<StorageMovementOrder> implements StorageMovementOrderDao {
+
+ public JpaStorageMovementOrderDao(EntityManager entityManager) {
+ super(entityManager);
+ }
+
+ @Override
+ protected Class<StorageMovementOrder> getEntityClass() {
+ return StorageMovementOrder.class;
+ }
+
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/AbstractJpaEntity.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/AbstractJpaEntity.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/AbstractJpaEntity.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -13,6 +13,7 @@
if (this == o) return true;
if (!(o instanceof AbstractJpaEntity)) return false;
AbstractJpaEntity that = (AbstractJpaEntity) o;
+ if (id == null && that.getId() == null) return false;
if (!id.equals(that.getId())) return false;
return Objects.equal(id, that.getId());
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -88,4 +88,24 @@
public boolean isConfirmed() {
return confirmDate != null;
}
+
+ public String getSiteId() {
+ return getSite().getId();
+ }
+
+ public boolean isDriverLicenseRequired() {
+ return getSite().isDriverLicenseRequired();
+ }
+
+ public String getStoreCode() {
+ return getSite().getStoreCode();
+ }
+
+ public String getLocationCode() {
+ return getSite().getLocationCode();
+ }
+
+ public String getSiteBarcode() {
+ return getSite().getBarcode();
+ }
}
Copied: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovementOrder.java (from rev 31, trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java)
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovementOrder.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovementOrder.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,104 @@
+package com.franciaflex.magalie.entity;
+
+/*
+ * #%L
+ * MagaLiE :: Services
+ * $Id:$
+ * $HeadURL:$
+ * %%
+ * Copyright (C) 2013 CodeLutin
+ * %%
+ * 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 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 <http://www.gnu.org/licenses/>.
+ * #L%
+ */
+
+import com.franciaflex.magalie.StorageMovements;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import java.util.Set;
+
+@Entity
+public class StorageMovementOrder extends AbstractJpaEntity {
+
+ @Id
+ @GeneratedValue
+ protected String id;
+
+ @Override
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ @OneToMany(cascade = CascadeType.ALL)
+ protected Set<StorageMovement> storageMovements;
+
+ public Set<StorageMovement> getStorageMovements() {
+ return storageMovements;
+ }
+
+ public void setStorageMovements(Set<StorageMovement> storageMovements) {
+ this.storageMovements = storageMovements;
+ }
+
+ public Set<StorageMovement> getSites() {
+ return storageMovements;
+ }
+
+ protected Set<Article> getArticles() {
+ Set<Article> articles =
+ Sets.newHashSet(
+ Iterables.transform(
+ getStorageMovements(),
+ StorageMovements.getArticleFunction()
+ )
+ );
+ return articles;
+ }
+
+ public Article getArticle() {
+ Article onlyElement = Iterables.getOnlyElement(getArticles());
+ return onlyElement;
+ }
+
+ public double getQuantity() {
+ double quantity = 0.;
+ for (StorageMovement storageMovement : storageMovements) {
+ quantity += storageMovement.getQuantity();
+ }
+ return quantity;
+ }
+
+ public void addStorageMovement(StorageMovement storageMovement) {
+ if (storageMovements == null) {
+ storageMovements = Sets.newLinkedHashSet();
+ }
+ storageMovements.add(storageMovement);
+ }
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Modified: trunk/magalie-persistence/src/main/resources/magalie.properties
===================================================================
--- trunk/magalie-persistence/src/main/resources/magalie.properties 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-persistence/src/main/resources/magalie.properties 2013-03-25 14:46:07 UTC (rev 36)
@@ -1,9 +1,9 @@
javax.persistence.jdbc.driver=org.h2.Driver
-javax.persistence.jdbc.url=jdbc:h2:file:/tmp/magalie/h2data
+javax.persistence.jdbc.url=jdbc:h2:file:/tmp/magalie/h2data;DB_CLOSE_ON_EXIT=FALSE
javax.persistence.jdbc.user=sa
javax.persistence.jdbc.password=
hibernate.dialect=org.hibernate.dialect.H2Dialect
-hibernate.hbm2ddl.auto=create-drop
+hibernate.hbm2ddl.auto=validate
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
Modified: trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java
===================================================================
--- trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -32,9 +32,9 @@
//// entityManager.persist(new SiteError());
//// entityManager.persist(new StorageMovement());
//
-// List<Site> sites = fixtures.fixture("sites");
+// List<Site> storageMovements = fixtures.fixture("storageMovements");
//
-// for (Site site : sites) {
+// for (Site site : storageMovements) {
//
// entityManager.persist(site);
//
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -2,12 +2,16 @@
import com.franciaflex.magalie.StoredArticles;
import com.franciaflex.magalie.dao.StorageMovementDao;
+import com.franciaflex.magalie.dao.StorageMovementOrderDao;
import com.franciaflex.magalie.dao.StoredArticleDao;
import com.franciaflex.magalie.entity.Article;
import com.franciaflex.magalie.entity.MagalieUser;
import com.franciaflex.magalie.entity.Site;
import com.franciaflex.magalie.entity.StorageMovement;
+import com.franciaflex.magalie.entity.StorageMovementOrder;
import com.franciaflex.magalie.entity.StoredArticle;
+import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
+import com.franciaflex.magalie.services.exception.UnavailableArticleException;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
@@ -32,7 +36,7 @@
this.serviceContext = serviceContext;
}
- public WithdrawTask withdrawArticle(MagalieUser magalieUser, Article article, double requestedQuantity) throws UnavailableArticleException, RequiredDriverLicenceException {
+ public StorageMovementTask withdrawArticle(MagalieUser magalieUser, Article article, double requestedQuantity) throws UnavailableArticleException, RequiredDriverLicenceException {
Preconditions.checkNotNull(magalieUser);
@@ -75,12 +79,12 @@
)
);
- WithdrawTask withdrawTask = new WithdrawTask(article, requestedQuantity);
+ StorageMovementOrder storageMovementOrder = new StorageMovementOrder();
+ StorageMovementTask storageMovementTask = new StorageMovementTask(storageMovementOrder);
+
double quantity = 0;
- List<StorageMovement> newStorageMovements = Lists.newLinkedList();
-
Date orderDate = serviceContext.getDate();
for (StoredArticle storedArticle : sortedStoredArticles) {
@@ -91,38 +95,38 @@
double quantityWithdrawn = Math.min(quantityLeft, quantityInSite);
- if (quantityWithdrawn > 0.) {
+ quantity += quantityWithdrawn;
- quantity += quantityWithdrawn;
+ StorageMovement newStorageMovement = new StorageMovement();
- StorageMovement newStorageMovement = new StorageMovement();
+ newStorageMovement.setArticle(article);
- newStorageMovement.setArticle(article);
+ newStorageMovement.setOrderDate(orderDate);
- newStorageMovement.setOrderDate(orderDate);
+ newStorageMovement.setMagalieUser(magalieUser);
- newStorageMovement.setMagalieUser(magalieUser);
+ newStorageMovement.setSite(storedArticle.getSite());
- newStorageMovement.setSite(storedArticle.getSite());
+ // we remove from the stock so negative number
+ newStorageMovement.setQuantity( -1. * quantityWithdrawn);
- // we remove from the stock so negative number
- newStorageMovement.setQuantity( -1. * quantityWithdrawn);
+ if (quantityWithdrawn > 0.) {
- newStorageMovements.add(newStorageMovement);
+ storageMovementOrder.addStorageMovement(newStorageMovement);
- }
+ } else {
- WithdrawArticleFromSiteTask withdrawArticleFromSiteTask = new WithdrawArticleFromSiteTask(storedArticle, quantityWithdrawn);
+ storageMovementTask.addExtraStorageMovement(newStorageMovement);
- withdrawTask.addWithdrawArticleFromSiteTask(withdrawArticleFromSiteTask);
+ }
}
- StorageMovementDao storageMovementDao = serviceContext.getStorageMovementDao();
+ StorageMovementOrderDao dao = serviceContext.getStorageMovementOrderDao();
- storageMovementDao.persistAll(newStorageMovements);
+ dao.persist(storageMovementOrder);
- return withdrawTask;
+ return storageMovementTask;
}
@@ -165,7 +169,7 @@
}
- // exclude sites reported in error
+ // exclude storageMovements reported in error
SiteErrorsService siteErrorsService = serviceContext.newService(SiteErrorsService.class);
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -7,12 +7,14 @@
import com.franciaflex.magalie.dao.RequestedArticleDao;
import com.franciaflex.magalie.dao.SiteErrorDao;
import com.franciaflex.magalie.dao.StorageMovementDao;
+import com.franciaflex.magalie.dao.StorageMovementOrderDao;
import com.franciaflex.magalie.dao.StoredArticleDao;
import com.franciaflex.magalie.dao.jpa.JpaArticleDao;
import com.franciaflex.magalie.dao.jpa.JpaMagalieUserDao;
import com.franciaflex.magalie.dao.jpa.JpaRequestedArticleDao;
import com.franciaflex.magalie.dao.jpa.JpaSiteErrorDao;
import com.franciaflex.magalie.dao.jpa.JpaStorageMovementDao;
+import com.franciaflex.magalie.dao.jpa.JpaStorageMovementOrderDao;
import com.franciaflex.magalie.dao.jpa.JpaStoredArticleDao;
import javax.persistence.EntityManager;
@@ -109,4 +111,9 @@
public SiteErrorDao getSiteErrorDao() {
return new JpaSiteErrorDao(entityManager);
}
+
+ @Override
+ public StorageMovementOrderDao getStorageMovementOrderDao() {
+ return new JpaStorageMovementOrderDao(entityManager);
+ }
}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/FulfilKanbanService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/FulfilKanbanService.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/FulfilKanbanService.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,52 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.MagalieUser;
+import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException;
+import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
+import com.franciaflex.magalie.services.exception.UnavailableArticleException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class FulfilKanbanService implements MagalieService {
+
+ private static final Log log = LogFactory.getLog(FulfilKanbanService.class);
+
+ protected MagalieServiceContext serviceContext;
+
+ @Override
+ public void setServiceContext(MagalieServiceContext serviceContext) {
+ this.serviceContext = serviceContext;
+ }
+
+ public StorageMovementTask fulfilKanbanTask(
+ String articleBarcode,
+ MagalieUser magalieUser) throws InvalidMagalieBarcodeException,
+ UnavailableArticleException,
+ RequiredDriverLicenceException {
+
+ if (log.isInfoEnabled()) {
+ log.info(magalieUser + " requested fulfil kanban with barcode " + articleBarcode);
+ }
+
+ MagalieBarcodeService magalieBarcodeService =
+ serviceContext.newService(MagalieBarcodeService.class);
+
+ Article article = magalieBarcodeService.getArticle(articleBarcode);
+
+ double quantityInKanban = article.getQuantityInKanban();
+
+ ArticleStorageService articleStorageService =
+ serviceContext.newService(ArticleStorageService.class);
+
+
+ StorageMovementTask storageMovementTask =
+ articleStorageService.withdrawArticle(
+ magalieUser,
+ article,
+ quantityInKanban);
+
+ return storageMovementTask;
+
+ }
+}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieBarcodeService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieBarcodeService.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieBarcodeService.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,59 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.dao.ArticleDao;
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Iterables;
+
+public class MagalieBarcodeService implements MagalieService {
+
+ protected MagalieServiceContext serviceContext;
+
+ protected static final String BARCODE_ELEMENTS_SEPARATOR = "_";
+
+ protected static final String ARTICLE_BARCODE_PREFIX = "ART";
+
+ @Override
+ public void setServiceContext(MagalieServiceContext serviceContext) {
+ this.serviceContext = serviceContext;
+ }
+
+ public Article getArticle(String articleBarcode) throws InvalidMagalieBarcodeException {
+
+ Iterable<String> split = Splitter.on(BARCODE_ELEMENTS_SEPARATOR).split(articleBarcode);
+
+ if (Iterables.size(split) != 2) {
+
+ throw new InvalidMagalieBarcodeException("Unexpected barcode format, 2 parts expected");
+
+ }
+
+ String prefix = Iterables.get(split, 0);
+
+ if ( ! ARTICLE_BARCODE_PREFIX.equals(prefix)) {
+
+ throw new InvalidMagalieBarcodeException(
+ "not an article barcode. expected prefix '"
+ + ARTICLE_BARCODE_PREFIX + ", '" + prefix + "' found.");
+
+ }
+
+ String articleCode = Iterables.get(split, 1);
+
+ ArticleDao articleDao = serviceContext.getArticleDao();
+
+ Article article = articleDao.findByCode(articleCode);
+
+ if (article == null) {
+
+ throw new InvalidMagalieBarcodeException(
+ "no article with code " + articleCode);
+
+ }
+
+ return article;
+
+ }
+
+}
Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieException.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieException.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieException.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -1,20 +0,0 @@
-package com.franciaflex.magalie.services;
-
-public class MagalieException extends Exception {
-
- public MagalieException() {
- }
-
- public MagalieException(String message) {
- super(message);
- }
-
- public MagalieException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public MagalieException(Throwable cause) {
- super(cause);
- }
-
-}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -29,6 +29,7 @@
import com.franciaflex.magalie.dao.RequestedArticleDao;
import com.franciaflex.magalie.dao.SiteErrorDao;
import com.franciaflex.magalie.dao.StorageMovementDao;
+import com.franciaflex.magalie.dao.StorageMovementOrderDao;
import com.franciaflex.magalie.dao.StoredArticleDao;
import java.util.Date;
@@ -56,4 +57,5 @@
SiteErrorDao getSiteErrorDao();
+ StorageMovementOrderDao getStorageMovementOrderDao();
}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUsersService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUsersService.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieUsersService.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,28 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.dao.MagalieUserDao;
+import com.franciaflex.magalie.entity.MagalieUser;
+import com.google.common.base.Preconditions;
+
+public class MagalieUsersService implements MagalieService {
+
+ protected MagalieServiceContext serviceContext;
+
+ @Override
+ public void setServiceContext(MagalieServiceContext serviceContext) {
+ this.serviceContext = serviceContext;
+ }
+
+ public MagalieUser getMagalieUser(String login) {
+
+ MagalieUserDao dao = serviceContext.getMagalieUserDao();
+
+ MagalieUser magalieUser = dao.findByLogin(login);
+
+ Preconditions.checkArgument(magalieUser != null, "there is no user with login '" + login + "'");
+
+ return magalieUser;
+
+ }
+
+}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -27,6 +27,8 @@
import com.franciaflex.magalie.dao.MagalieUserDao;
import com.franciaflex.magalie.entity.Article;
import com.franciaflex.magalie.entity.MagalieUser;
+import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
+import com.franciaflex.magalie.services.exception.UnavailableArticleException;
public class RequestedItemService implements MagalieService {
@@ -36,7 +38,7 @@
this.serviceContext = serviceContext;
}
- public WithdrawTask getWithdrawTask() throws RequiredDriverLicenceException, UnavailableArticleException {
+ public StorageMovementTask getWithdrawTask() throws RequiredDriverLicenceException, UnavailableArticleException {
ArticleStorageService articleStorageService = serviceContext.newService(ArticleStorageService.class);
@@ -48,13 +50,14 @@
Article article1 = articleDao.findById("article1");
- WithdrawTask withdrawTask = articleStorageService.withdrawArticle(
- alexandre,
- article1,
- 40.
- );
+ StorageMovementTask storageMovementTask =
+ articleStorageService.withdrawArticle(
+ alexandre,
+ article1,
+ 40.
+ );
- return withdrawTask;
+ return storageMovementTask;
}
}
Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequiredDriverLicenceException.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequiredDriverLicenceException.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequiredDriverLicenceException.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -1,58 +0,0 @@
-package com.franciaflex.magalie.services;
-
-import com.franciaflex.magalie.entity.Article;
-import com.franciaflex.magalie.entity.MagalieUser;
-
-public class RequiredDriverLicenceException extends MagalieException {
-
- protected Article article;
-
- protected MagalieUser magalieUser;
-
- protected double requestedQuantity;
-
- protected double accessibleQuantity;
-
- protected RequiredDriverLicenceException(String message) {
- super(message);
- }
-
- public static void throwIfRequestMoreThanAccessible(double requestedQuantity, double accessibleQuantity, MagalieUser magalieUser, Article article) throws RequiredDriverLicenceException {
-
- if (requestedQuantity > accessibleQuantity) {
-
- String message = "requested article " + article
- + " can not be retrieved since user " + magalieUser
- + " has no driver license";
-
- RequiredDriverLicenceException newException = new RequiredDriverLicenceException(message);
-
- newException.article = article;
-
- newException.magalieUser = magalieUser;
-
- newException.requestedQuantity = requestedQuantity;
-
- newException.accessibleQuantity = accessibleQuantity;
-
- throw newException;
-
- }
- }
-
- public Article getArticle() {
- return article;
- }
-
- public MagalieUser getMagalieUser() {
- return magalieUser;
- }
-
- public double getRequestedQuantity() {
- return requestedQuantity;
- }
-
- public double getAccessibleQuantity() {
- return accessibleQuantity;
- }
-}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementTask.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/StorageMovementTask.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,49 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.StorageMovement;
+import com.franciaflex.magalie.entity.StorageMovementOrder;
+import com.google.common.collect.Lists;
+import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
+
+import java.util.List;
+
+public class StorageMovementTask {
+
+ protected StorageMovementOrder storageMovementOrder;
+
+ protected List<StorageMovement> extraStorageMovements = Lists.newLinkedList();
+
+ public StorageMovementTask(StorageMovementOrder storageMovementOrder) {
+ this.storageMovementOrder = storageMovementOrder;
+ }
+
+ public double getQuantity() {
+ return storageMovementOrder.getQuantity();
+ }
+
+ public Article getArticle() {
+ return storageMovementOrder.getArticle();
+ }
+
+ public List<StorageMovement> getSites() {
+
+ List<StorageMovement> sites = Lists.newLinkedList();
+
+ sites.addAll(storageMovementOrder.getStorageMovements());
+
+ sites.addAll(extraStorageMovements);
+
+ return sites;
+
+ }
+
+ public void addExtraStorageMovement(StorageMovement extraStorageMovement) {
+ extraStorageMovements.add(extraStorageMovement);
+ }
+
+ @Override
+ public String toString() {
+ return ReflectionToStringBuilder.toString(this);
+ }
+}
Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/UnavailableArticleException.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/UnavailableArticleException.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/UnavailableArticleException.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -1,49 +0,0 @@
-package com.franciaflex.magalie.services;
-
-import com.franciaflex.magalie.entity.Article;
-
-public class UnavailableArticleException extends MagalieException {
-
- protected Article article;
-
- protected double availableQuantity;
-
- protected double requestedQuantity;
-
- protected UnavailableArticleException(String message) {
- super(message);
- }
-
- public static void throwIfRequestMoreThanAvailable(double requestedQuantity, double availableQuantity, Article article) throws UnavailableArticleException {
-
- if (requestedQuantity > availableQuantity) {
-
- String message = "requested article " + article
- + " is not available at expected quantity: requested = " + requestedQuantity
- + " available = " + availableQuantity;
-
- UnavailableArticleException newException = new UnavailableArticleException(message);
-
- newException.article = article;
-
- newException.availableQuantity = availableQuantity;
-
- newException.requestedQuantity = requestedQuantity;
-
- throw newException;
-
- }
- }
-
- public Article getArticle() {
- return article;
- }
-
- public double getAvailableQuantity() {
- return availableQuantity;
- }
-
- public double getRequestedQuantity() {
- return requestedQuantity;
- }
-}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -18,26 +18,8 @@
return quantity;
}
- public String getSiteId() {
- return storedArticle.getSite().getId();
- }
- public boolean isDriverLicenseRequired() {
- return storedArticle.getSite().isDriverLicenseRequired();
- }
- public String getStoreCode() {
- return storedArticle.getSite().getStoreCode();
- }
-
- public String getLocationCode() {
- return storedArticle.getSite().getLocationCode();
- }
-
- public String getSiteBarcode() {
- return storedArticle.getSite().getBarcode();
- }
-
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -1,80 +0,0 @@
-package com.franciaflex.magalie.services;
-
-/*
- * #%L
- * MagaLiE :: Services
- * $Id:$
- * $HeadURL:$
- * %%
- * Copyright (C) 2013 CodeLutin
- * %%
- * 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 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 <http://www.gnu.org/licenses/>.
- * #L%
- */
-
-import com.franciaflex.magalie.entity.Article;
-import com.google.common.collect.Sets;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-
-import java.util.Set;
-
-public class WithdrawTask {
-
- protected Set<WithdrawArticleFromSiteTask> sites;
-
- protected Article article;
-
- protected double quantity;
-
- public WithdrawTask(Article article, double quantity) {
- this.article = article;
- this.quantity = quantity;
- }
-
- public Set<WithdrawArticleFromSiteTask> getSites() {
- return sites;
- }
-
- public void setSites(Set<WithdrawArticleFromSiteTask> sites) {
- this.sites = sites;
- }
-
- public Article getArticle() {
- return article;
- }
-
- public void setArticle(Article article) {
- this.article = article;
- }
-
- public double getQuantity() {
- return quantity;
- }
-
- public void setQuantity(double quantity) {
- this.quantity = quantity;
- }
-
- public void addWithdrawArticleFromSiteTask(WithdrawArticleFromSiteTask withdrawArticleFromSiteTask) {
- if (sites == null) {
- sites = Sets.newLinkedHashSet();
- }
- sites.add(withdrawArticleFromSiteTask);
- }
-
- @Override
- public String toString() {
- return ToStringBuilder.reflectionToString(this);
- }
-}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/InvalidMagalieBarcodeException.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/InvalidMagalieBarcodeException.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/InvalidMagalieBarcodeException.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,8 @@
+package com.franciaflex.magalie.services.exception;
+
+public class InvalidMagalieBarcodeException extends MagalieException {
+
+ public InvalidMagalieBarcodeException(String message) {
+ super(message);
+ }
+}
Copied: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/MagalieException.java (from rev 31, trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieException.java)
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/MagalieException.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/MagalieException.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,20 @@
+package com.franciaflex.magalie.services.exception;
+
+public class MagalieException extends Exception {
+
+ public MagalieException() {
+ }
+
+ public MagalieException(String message) {
+ super(message);
+ }
+
+ public MagalieException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public MagalieException(Throwable cause) {
+ super(cause);
+ }
+
+}
Copied: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java (from rev 31, trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequiredDriverLicenceException.java)
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/RequiredDriverLicenceException.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,58 @@
+package com.franciaflex.magalie.services.exception;
+
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.MagalieUser;
+
+public class RequiredDriverLicenceException extends MagalieException {
+
+ protected Article article;
+
+ protected MagalieUser magalieUser;
+
+ protected double requestedQuantity;
+
+ protected double accessibleQuantity;
+
+ protected RequiredDriverLicenceException(String message) {
+ super(message);
+ }
+
+ public static void throwIfRequestMoreThanAccessible(double requestedQuantity, double accessibleQuantity, MagalieUser magalieUser, Article article) throws RequiredDriverLicenceException {
+
+ if (requestedQuantity > accessibleQuantity) {
+
+ String message = "requested article " + article
+ + " can not be retrieved since user " + magalieUser
+ + " has no driver license";
+
+ RequiredDriverLicenceException newException = new RequiredDriverLicenceException(message);
+
+ newException.article = article;
+
+ newException.magalieUser = magalieUser;
+
+ newException.requestedQuantity = requestedQuantity;
+
+ newException.accessibleQuantity = accessibleQuantity;
+
+ throw newException;
+
+ }
+ }
+
+ public Article getArticle() {
+ return article;
+ }
+
+ public MagalieUser getMagalieUser() {
+ return magalieUser;
+ }
+
+ public double getRequestedQuantity() {
+ return requestedQuantity;
+ }
+
+ public double getAccessibleQuantity() {
+ return accessibleQuantity;
+ }
+}
Copied: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java (from rev 31, trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/UnavailableArticleException.java)
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/exception/UnavailableArticleException.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,49 @@
+package com.franciaflex.magalie.services.exception;
+
+import com.franciaflex.magalie.entity.Article;
+
+public class UnavailableArticleException extends MagalieException {
+
+ protected Article article;
+
+ protected double availableQuantity;
+
+ protected double requestedQuantity;
+
+ protected UnavailableArticleException(String message) {
+ super(message);
+ }
+
+ public static void throwIfRequestMoreThanAvailable(double requestedQuantity, double availableQuantity, Article article) throws UnavailableArticleException {
+
+ if (requestedQuantity > availableQuantity) {
+
+ String message = "requested article " + article
+ + " is not available at expected quantity: requested = " + requestedQuantity
+ + " available = " + availableQuantity;
+
+ UnavailableArticleException newException = new UnavailableArticleException(message);
+
+ newException.article = article;
+
+ newException.availableQuantity = availableQuantity;
+
+ newException.requestedQuantity = requestedQuantity;
+
+ throw newException;
+
+ }
+ }
+
+ public Article getArticle() {
+ return article;
+ }
+
+ public double getAvailableQuantity() {
+ return availableQuantity;
+ }
+
+ public double getRequestedQuantity() {
+ return requestedQuantity;
+ }
+}
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -4,6 +4,9 @@
import com.franciaflex.magalie.entity.Article;
import com.franciaflex.magalie.entity.MagalieUser;
import com.franciaflex.magalie.entity.Site;
+import com.franciaflex.magalie.entity.StorageMovement;
+import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
+import com.franciaflex.magalie.services.exception.UnavailableArticleException;
import com.google.common.collect.Iterables;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -34,12 +37,12 @@
MagalieUser basile = fixture("basile");
Article article = fixture("article1");
- WithdrawTask withdrawTask;
+ StorageMovementTask storageMovementTask;
try {
- withdrawTask = service.withdrawArticle(basile, article, 100.);
+ storageMovementTask = service.withdrawArticle(basile, article, 100.);
if (log.isDebugEnabled()) {
- log.debug("withdrawTask = " + withdrawTask);
+ log.debug("storageMovementTask = " + storageMovementTask);
}
Assert.fail();
} catch (UnavailableArticleException e) {
@@ -55,12 +58,12 @@
MagalieUser basile = fixture("basile");
Article article = fixture("article1");
- WithdrawTask withdrawTask;
+ StorageMovementTask storageMovementTask;
try {
- withdrawTask = service.withdrawArticle(basile, article, 70.);
+ storageMovementTask = service.withdrawArticle(basile, article, 70.);
if (log.isDebugEnabled()) {
- log.debug("withdrawTask = " + withdrawTask);
+ log.debug("storageMovementTask = " + storageMovementTask);
}
Assert.fail();
} catch (RequiredDriverLicenceException e) {
@@ -76,12 +79,12 @@
MagalieUser basile = fixture("basile");
Article article = fixture("article1");
- WithdrawTask withdrawTask = null;
+ StorageMovementTask storageMovementTask = null;
try {
- withdrawTask = service.withdrawArticle(basile, article, 50.);
+ storageMovementTask = service.withdrawArticle(basile, article, 50.);
if (log.isDebugEnabled()) {
- log.debug("withdrawTask = " + withdrawTask);
+ log.debug("storageMovementTask = " + storageMovementTask);
}
} catch (RequiredDriverLicenceException e) {
if (log.isDebugEnabled()) {
@@ -95,7 +98,7 @@
Assert.fail();
}
- Assert.assertEquals(1, withdrawTask.getSites().size());
+ Assert.assertEquals(1, storageMovementTask.getSites().size());
}
@Test
@@ -103,12 +106,12 @@
MagalieUser alexandre = fixture("alexandre");
Article article = fixture("article1");
- WithdrawTask withdrawTask = null;
+ StorageMovementTask storageMovementTask = null;
try {
- withdrawTask = service.withdrawArticle(alexandre, article, 50.);
+ storageMovementTask = service.withdrawArticle(alexandre, article, 50.);
if (log.isDebugEnabled()) {
- log.debug("withdrawTask = " + withdrawTask);
+ log.debug("storageMovementTask = " + storageMovementTask);
}
} catch (RequiredDriverLicenceException e) {
if (log.isDebugEnabled()) {
@@ -122,11 +125,11 @@
Assert.fail();
}
- Assert.assertEquals(2, withdrawTask.getSites().size());
- WithdrawArticleFromSiteTask site1 = Iterables.get(withdrawTask.getSites(), 0, null);
- Assert.assertEquals(20., site1.getQuantity(), DELTA);
- WithdrawArticleFromSiteTask site2 = Iterables.get(withdrawTask.getSites(), 1, null);
- Assert.assertEquals(30., site2.getQuantity(), DELTA);
+ Assert.assertEquals(2, storageMovementTask.getSites().size());
+ StorageMovement site1 = Iterables.get(storageMovementTask.getSites(), 0, null);
+ Assert.assertEquals(-20., site1.getQuantity(), DELTA);
+ StorageMovement site2 = Iterables.get(storageMovementTask.getSites(), 1, null);
+ Assert.assertEquals(-30., site2.getQuantity(), DELTA);
}
@Test
@@ -137,20 +140,20 @@
Article article = fixture("article1");
- WithdrawTask withdrawTask = null;
+ StorageMovementTask storageMovementTask = null;
try {
- withdrawTask = service.withdrawArticle(alexandre, article, 30.);
+ storageMovementTask = service.withdrawArticle(alexandre, article, 30.);
if (log.isDebugEnabled()) {
- log.debug("withdrawTask = " + withdrawTask);
+ log.debug("storageMovementTask = " + storageMovementTask);
}
- Assert.assertEquals(2, withdrawTask.getSites().size());
- WithdrawArticleFromSiteTask site1 = Iterables.get(withdrawTask.getSites(), 0, null);
- Assert.assertEquals(20., site1.getQuantity(), DELTA);
- Assert.assertEquals("B2", site1.getLocationCode());
- WithdrawArticleFromSiteTask site2 = Iterables.get(withdrawTask.getSites(), 1, null);
- Assert.assertEquals(10., site2.getQuantity(), DELTA);
- Assert.assertEquals("A1", site2.getLocationCode());
+ Assert.assertEquals(2, storageMovementTask.getSites().size());
+ StorageMovement storageMovement1 = Iterables.get(storageMovementTask.getSites(), 0, null);
+ Assert.assertEquals(-20., storageMovement1.getQuantity(), DELTA);
+ Assert.assertEquals("B2", storageMovement1.getSite().getLocationCode());
+ StorageMovement storageMovement2 = Iterables.get(storageMovementTask.getSites(), 1, null);
+ Assert.assertEquals(-10., storageMovement2.getQuantity(), DELTA);
+ Assert.assertEquals("A1", storageMovement2.getSite().getLocationCode());
} catch (RequiredDriverLicenceException e) {
if (log.isDebugEnabled()) {
log.debug("exception raised = " + e);
@@ -164,14 +167,14 @@
}
try {
- withdrawTask = service.withdrawArticle(cathy, article, 30.);
+ storageMovementTask = service.withdrawArticle(cathy, article, 30.);
if (log.isDebugEnabled()) {
- log.debug("withdrawTask = " + withdrawTask);
+ log.debug("storageMovementTask = " + storageMovementTask);
}
- Assert.assertEquals(1, withdrawTask.getSites().size());
- WithdrawArticleFromSiteTask site1 = Iterables.get(withdrawTask.getSites(), 0, null);
- Assert.assertEquals(30., site1.getQuantity(), DELTA);
- Assert.assertEquals("A1", site1.getLocationCode());
+ Assert.assertEquals(1, storageMovementTask.getSites().size());
+ StorageMovement storageMovement = Iterables.get(storageMovementTask.getSites(), 0, null);
+ Assert.assertEquals(-30., storageMovement.getQuantity(), DELTA);
+ Assert.assertEquals("A1", storageMovement.getSite().getLocationCode());
} catch (RequiredDriverLicenceException e) {
if (log.isDebugEnabled()) {
log.debug("exception raised = " + e);
@@ -199,16 +202,16 @@
siteErrorsService.reportError(site2, alexandre);
try {
- WithdrawTask withdrawTask = service.withdrawArticle(cathy, article, 30.);
+ StorageMovementTask storageMovementTask = service.withdrawArticle(cathy, article, 30.);
if (log.isDebugEnabled()) {
- log.debug("withdrawTask = " + withdrawTask);
+ log.debug("storageMovementTask = " + storageMovementTask);
}
- Assert.assertEquals(1, withdrawTask.getSites().size());
- WithdrawArticleFromSiteTask site = Iterables.get(withdrawTask.getSites(), 0, null);
+ Assert.assertEquals(1, storageMovementTask.getSites().size());
+ StorageMovement storageMovement = Iterables.get(storageMovementTask.getSites(), 0, null);
Assert.assertNotEquals(
"site2 must not be returned because it was reported in error",
site2.getId(),
- site.getSiteId());
+ storageMovement.getSite().getId());
} catch (RequiredDriverLicenceException e) {
if (log.isDebugEnabled()) {
log.debug("exception raised = " + e);
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/RequestedItemServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/RequestedItemServiceTest.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/RequestedItemServiceTest.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -1,16 +1,19 @@
package com.franciaflex.magalie.services;
+import com.franciaflex.magalie.AbstractMagalieServiceTest;
import com.google.common.collect.Sets;
import org.junit.Test;
import java.util.Comparator;
import java.util.Set;
-public class RequestedItemServiceTest {
+public class RequestedItemServiceTest extends AbstractMagalieServiceTest {
@Test
public void testGetWithdrawTask() throws Exception {
+ getServiceContext();
+
Set<Double> doubles = Sets.newTreeSet(new Comparator<Double>() {
@Override
public int compare(Double o1, Double o2) {
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -24,9 +24,11 @@
*/
import com.franciaflex.magalie.MagalieApplicationConfig;
+import com.franciaflex.magalie.entity.MagalieUser;
import com.franciaflex.magalie.services.DefaultMagalieServiceContext;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
+import com.franciaflex.magalie.services.MagalieUsersService;
import com.google.common.base.Preconditions;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
@@ -82,7 +84,7 @@
} else if (MagalieSession.class.isAssignableFrom(propertyType)) {
- toInject = getMagalieSession(invocation);
+ toInject = getMagalieSession(invocation, serviceContext);
} else if (MagalieApplicationConfig.class.isAssignableFrom(propertyType)) {
@@ -113,7 +115,7 @@
}
- protected MagalieSession getMagalieSession(ActionInvocation invocation) {
+ protected MagalieSession getMagalieSession(ActionInvocation invocation, MagalieServiceContext serviceContext) {
MagalieSession session = (MagalieSession) invocation.getInvocationContext().getSession().get(MagalieSession.SESSION_PARAMETER);
@@ -121,6 +123,12 @@
session = new MagalieSession();
+ MagalieUsersService magalieUsersService = serviceContext.newService(MagalieUsersService.class);
+
+ MagalieUser magalieUser = magalieUsersService.getMagalieUser("ale");
+
+ session.setMagalieUser(magalieUser);
+
invocation.getInvocationContext().getSession().put(MagalieSession.SESSION_PARAMETER, session);
}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieSession.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -1,5 +1,7 @@
package com.franciaflex.magalie.web;
+import com.franciaflex.magalie.entity.MagalieUser;
+
import java.io.Serializable;
/**
@@ -14,5 +16,13 @@
*/
public static final String SESSION_PARAMETER = "magalieSession";
+ protected MagalieUser magalieUser;
+ public MagalieUser getMagalieUser() {
+ return magalieUser;
+ }
+
+ public void setMagalieUser(MagalieUser magalieUser) {
+ this.magalieUser = magalieUser;
+ }
}
Added: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java (rev 0)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/FulfilKanbanAction.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,81 @@
+package com.franciaflex.magalie.web.action;
+
+import com.franciaflex.magalie.entity.MagalieUser;
+import com.franciaflex.magalie.services.FulfilKanbanService;
+import com.franciaflex.magalie.services.StorageMovementTask;
+import com.franciaflex.magalie.services.exception.InvalidMagalieBarcodeException;
+import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
+import com.franciaflex.magalie.services.exception.UnavailableArticleException;
+import com.franciaflex.magalie.web.MagalieActionSupport;
+import com.franciaflex.magalie.web.MagalieSession;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts2.convention.annotation.Result;
+import org.apache.struts2.convention.annotation.Results;
+
+
+@Results({
+ @Result(name="success", type="redirect", location="/", params = { "" , "" })
+})
+public class FulfilKanbanAction extends MagalieActionSupport {
+
+ private static final Log log = LogFactory.getLog(FulfilKanbanAction.class);
+
+ protected MagalieSession session;
+
+ protected FulfilKanbanService service;
+
+ protected String articleBarcode;
+
+ protected StorageMovementTask storageMovementTask;
+
+ public void setArticleBarcode(String articleBarcode) {
+ this.articleBarcode = articleBarcode;
+ }
+
+ public void setService(FulfilKanbanService service) {
+ this.service = service;
+ }
+
+ @Override
+ public String execute() {
+
+ if (log.isDebugEnabled()) {
+ log.debug("article barcode is " + articleBarcode);
+ }
+
+ MagalieUser magalieUser = session.getMagalieUser();
+
+ try {
+
+ storageMovementTask = service.fulfilKanbanTask(articleBarcode, magalieUser);
+
+ } catch (InvalidMagalieBarcodeException e) {
+
+ addFieldError("articleBarcode", "Le code barre n'est pas un code valide");
+
+ return INPUT;
+
+ } catch (UnavailableArticleException e) {
+
+ addActionError("Cet article n'est pas disponible");
+
+ return INPUT;
+
+ } catch (RequiredDriverLicenceException e) {
+
+ addActionError("Un permis est nécessaire pour obtenir cet article");
+
+ return INPUT;
+
+ }
+
+ return SUCCESS;
+
+ }
+
+ public StorageMovementTask getStorageMovementTask() {
+ return storageMovementTask;
+ }
+
+}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-03-25 14:46:07 UTC (rev 36)
@@ -24,9 +24,9 @@
*/
import com.franciaflex.magalie.services.RequestedItemService;
-import com.franciaflex.magalie.services.RequiredDriverLicenceException;
-import com.franciaflex.magalie.services.UnavailableArticleException;
-import com.franciaflex.magalie.services.WithdrawTask;
+import com.franciaflex.magalie.services.StorageMovementTask;
+import com.franciaflex.magalie.services.exception.RequiredDriverLicenceException;
+import com.franciaflex.magalie.services.exception.UnavailableArticleException;
import com.franciaflex.magalie.web.MagalieActionSupport;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -39,7 +39,7 @@
protected RequestedItemService service;
- protected WithdrawTask withdrawTask;
+ protected StorageMovementTask storageMovementTask;
public void setService(RequestedItemService service) {
this.service = service;
@@ -53,13 +53,13 @@
}
- public WithdrawTask getWithdrawTask() {
- return withdrawTask;
+ public StorageMovementTask getStorageMovementTask() {
+ return storageMovementTask;
}
public String getModelAsJson() throws JSONException {
- String json = JSONUtil.serialize(getWithdrawTask());
+ String json = JSONUtil.serialize(getStorageMovementTask());
return json;
@@ -68,7 +68,7 @@
@Override
public String input() throws RequiredDriverLicenceException, UnavailableArticleException {
- withdrawTask = service.getWithdrawTask();
+ storageMovementTask = service.getWithdrawTask();
return INPUT;
Added: trunk/magalie-web/src/main/webapp/WEB-INF/content/fulfil-kanban-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/fulfil-kanban-input.jsp (rev 0)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/fulfil-kanban-input.jsp 2013-03-25 14:46:07 UTC (rev 36)
@@ -0,0 +1,14 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+
+<head>
+ <title>Traitement des kanbans</title>
+</head>
+
+<form class="form-horizontal">
+ <s:textfield name="articleBarcode" label="Article" inputAppendIcon="barcode" cssClass="input-small" />
+
+ <div class="btn-group">
+ <s:submit name="next" value="Suivant" cssClass="btn btn-primary btn-small" />
+ </div>
+</form>
\ No newline at end of file
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/index.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/index.jsp 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/index.jsp 2013-03-25 14:46:07 UTC (rev 36)
@@ -27,6 +27,7 @@
<%@ taglib prefix="sj" uri="/struts-jquery-tags" %>
<s:url namespace="/" action="withdraw-item!input" id="withdrawItemUrl"/>
+<s:url namespace="/" action="fulfil-kanban!input" id="fulfilKanbanUrl"/>
<header>
<dl class="dl-horizontal">
@@ -38,5 +39,5 @@
</header>
<s:a href="%{withdrawItemUrl}" cssClass="btn btn-block">Traiter listes à servir</s:a>
-<s:a href="" cssClass="btn btn-block">Traiter kanbans</s:a>
+<s:a href="%{fulfilKanbanUrl}" cssClass="btn btn-block">Traiter kanbans</s:a>
<s:a href="" cssClass="btn btn-block">Traiter les réceptions fournisseurs</s:a>
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-03-25 14:46:07 UTC (rev 36)
@@ -34,20 +34,20 @@
<header>
<dl class="dl-horizontal">
<dt>Réf.</dt>
- <dd><s:property value="withdrawTask.article.code" /></dd>
+ <dd><s:property value="storageMovementTask.article.code" /></dd>
<dt>Desc.</dt>
- <dd><s:property value="withdrawTask.article.description" /></dd>
+ <dd><s:property value="storageMovementTask.article.description" /></dd>
<dt>LàS</dt>
<dd>123456789</dd>
<dt>Prélev.</dt>
- <dd><span id="withdrawn">0</span> / <s:property value="withdrawTask.quantity" /> <s:property value="withdrawTask.article.unit" /></dd>
+ <dd><span id="withdrawn">0</span> / <s:property value="storageMovementTask.quantity" /> <s:property value="storageMovementTask.article.unit" /></dd>
</dl>
</header>
<section id="sites">
</section>
<form class="form-horizontal">
<s:textfield name="site" label="Empl." inputAppendIcon="barcode" cssClass="input-small" />
- <s:textfield name="quantity" label="Qté" inputAppend="%{withdrawTask.article.description}" cssClass="input-mini" />
+ <s:textfield name="quantity" label="Qté" inputAppend="%{storageMovementTask.article.unit}" cssClass="input-mini" />
<s:hidden name="model" />
<div class="btn-group">
@@ -60,6 +60,6 @@
<dt>Empl.</dt>
<dd data="locationCode"></dd>
<dt>Prélev.</dt>
- <dd><span data="withdrawn">0</span> / <span data="quantity"></span> <s:property value="withdrawTask.article.description" /></dd>
+ <dd><span data="withdrawn">0</span> / <span data="quantity"></span> <s:property value="storageMovementTask.article.unit" /></dd>
</dl>
</div>
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-03-22 16:03:14 UTC (rev 35)
+++ trunk/pom.xml 2013-03-25 14:46:07 UTC (rev 36)
@@ -209,7 +209,7 @@
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>${struts2Version}</version>
- <scope>runtime</scope>
+ <scope>compile</scope>
</dependency>
<dependency>
1
0
r35 - trunk/magalie-web/src/main/java/com/franciaflex/magalie/web
by bleny@users.forge.codelutin.com 22 Mar '13
by bleny@users.forge.codelutin.com 22 Mar '13
22 Mar '13
Author: bleny
Date: 2013-03-22 17:03:14 +0100 (Fri, 22 Mar 2013)
New Revision: 35
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
close EntityManagerFactory
Modified:
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java 2013-03-22 15:46:02 UTC (rev 34)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java 2013-03-22 16:03:14 UTC (rev 35)
@@ -13,7 +13,7 @@
public class MagalieJpaTransactionFilter extends JpaTransactionFilter {
- private EntityManagerFactory entityManagerFactory;
+ protected EntityManagerFactory entityManagerFactory;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
@@ -36,4 +36,11 @@
return entityManager;
}
+
+ @Override
+ public void destroy() {
+
+ entityManagerFactory.close();
+
+ }
}
1
0
r34 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie magalie-persistence/src/main/java/com/franciaflex/magalie/dao magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa magalie-persistence/src/main/resources magalie-services/src/main/java/com/franciaflex/magalie/services magalie-services/src/test/java/com/franciaflex/magalie/services
by bleny@users.forge.codelutin.com 22 Mar '13
by bleny@users.forge.codelutin.com 22 Mar '13
22 Mar '13
Author: bleny
Date: 2013-03-22 16:46:02 +0100 (Fri, 22 Mar 2013)
New Revision: 34
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
refs #2162: consider sites reported in errors
Added:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/SiteErrorDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaSiteErrorDao.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SiteErrorsService.java
Removed:
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/Site.java
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/JpaUtil.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/Sites.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StoredArticles.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java
trunk/magalie-persistence/src/main/resources/magalie.properties
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/JpaUtil.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/JpaUtil.java 2013-03-22 15:45:13 UTC (rev 33)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/JpaUtil.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -54,10 +54,13 @@
String h2dataPath = databaseFile.getAbsolutePath() + File.separator + "h2data";
- allJpaParameters.put(AvailableSettings.JDBC_URL, "jdbc:h2:file:" + h2dataPath);
+ String jdbcUrl = "jdbc:h2:file:" + h2dataPath;
+ allJpaParameters.put(AvailableSettings.JDBC_URL, jdbcUrl);
+
if (log.isTraceEnabled()) {
log.trace("will store H2 data in " + h2dataPath);
+ log.trace("jdbc url is\n" + jdbcUrl);
log.trace("allJpaParameters = " + allJpaParameters);
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/Sites.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/Sites.java 2013-03-22 15:45:13 UTC (rev 33)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/Sites.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -3,7 +3,9 @@
import com.franciaflex.magalie.entity.MagalieUser;
import com.franciaflex.magalie.entity.Site;
import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import java.util.Collection;
import java.util.Comparator;
public class Sites {
@@ -60,4 +62,8 @@
public static Comparator<Site> siteRequiringDriverLicenseFirstComparator() {
return new SiteRequiringDriverLicenseFirstComparator();
}
+
+ public static Predicate<Site> siteIsNotReportedInError(Collection<Site> allSitesInError) {
+ return Predicates.not(Predicates.in(allSitesInError));
+ }
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StoredArticles.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StoredArticles.java 2013-03-22 15:45:13 UTC (rev 33)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StoredArticles.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -9,6 +9,7 @@
import com.google.common.base.Predicates;
import com.google.common.collect.Ordering;
+import java.util.Collection;
import java.util.Comparator;
public class StoredArticles {
@@ -118,5 +119,7 @@
return new ArticleStoredInSitesRequiringDriverLicenseFirstComparator();
}
-
+ public static Predicate<StoredArticle> articleNotStoredInSiteReportedInError(Collection<Site> allSitesInError) {
+ return Predicates.compose(Sites.siteIsNotReportedInError(allSitesInError), getSiteFunction());
+ }
}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/SiteErrorDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/SiteErrorDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/SiteErrorDao.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -0,0 +1,17 @@
+package com.franciaflex.magalie.dao;
+
+import com.franciaflex.magalie.entity.Site;
+import com.franciaflex.magalie.entity.SiteError;
+
+import java.util.List;
+
+/**
+ * @author bleny
+ */
+public interface SiteErrorDao extends Dao<SiteError> {
+
+ SiteError findBySite(Site site);
+
+ List<Site> getAllSitesInError();
+
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java 2013-03-22 15:45:13 UTC (rev 33)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -4,6 +4,7 @@
import com.franciaflex.magalie.entity.AbstractJpaEntity;
import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
public abstract class AbstractJpaDao<E extends AbstractJpaEntity> implements Dao<E> {
@@ -23,7 +24,10 @@
@Override
public void persist(E entity) {
+ EntityTransaction transaction = entityManager.getTransaction();
+ transaction.begin();
entityManager.persist(entity);
+ transaction.commit();
}
@Override
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaSiteErrorDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaSiteErrorDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaSiteErrorDao.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -0,0 +1,40 @@
+package com.franciaflex.magalie.dao.jpa;
+
+import com.franciaflex.magalie.dao.SiteErrorDao;
+import com.franciaflex.magalie.entity.Site;
+import com.franciaflex.magalie.entity.SiteError;
+import com.google.common.collect.Iterables;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import java.util.List;
+
+public class JpaSiteErrorDao extends AbstractJpaDao<SiteError> implements SiteErrorDao {
+
+ public JpaSiteErrorDao(EntityManager entityManager) {
+ super(entityManager);
+ }
+
+ @Override
+ protected Class<SiteError> getEntityClass() {
+ return SiteError.class;
+ }
+
+ @Override
+ public SiteError findBySite(Site site) {
+ Query query = entityManager.createQuery("from SiteError se where se.site = :site");
+ query.setParameter("site", site);
+ SiteError siteError = (SiteError)
+ Iterables.getOnlyElement(
+ query.getResultList(),
+ null);
+ return siteError;
+ }
+
+ @Override
+ public List<Site> getAllSitesInError() {
+ Query query = entityManager.createQuery("select se.site from SiteError se");
+ List<Site> allSitesInError = query.getResultList();
+ return allSitesInError;
+ }
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java 2013-03-22 15:45:13 UTC (rev 33)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -5,7 +5,6 @@
import com.franciaflex.magalie.entity.StorageMovement;
import javax.persistence.EntityManager;
-import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import java.util.List;
@@ -29,11 +28,11 @@
@Override
public void persistAll(Iterable<StorageMovement> storageMovements) {
- EntityTransaction transaction = entityManager.getTransaction();
- transaction.begin();
+ // EntityTransaction transaction = entityManager.getTransaction();
+ // transaction.begin();
for (StorageMovement storageMovement : storageMovements) {
persist(storageMovement);
}
- transaction.commit();
+ // transaction.commit();
}
}
Modified: trunk/magalie-persistence/src/main/resources/magalie.properties
===================================================================
--- trunk/magalie-persistence/src/main/resources/magalie.properties 2013-03-22 15:45:13 UTC (rev 33)
+++ trunk/magalie-persistence/src/main/resources/magalie.properties 2013-03-22 15:46:02 UTC (rev 34)
@@ -6,5 +6,4 @@
hibernate.hbm2ddl.auto=create-drop
hibernate.show_sql=true
hibernate.format_sql=true
-hibernate.transaction.flush_before_completion=true
hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java 2013-03-22 15:45:13 UTC (rev 33)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -138,7 +138,7 @@
List<StorageMovement> storageMovements = storageMovementDao.findAllByArticle(article);
- ImmutableMap<Site,StoredArticle> storedArticlesBySite =
+ ImmutableMap<Site, StoredArticle> storedArticlesBySite =
Maps.uniqueIndex(
storedArticles,
StoredArticles.getSiteFunction()
@@ -165,8 +165,20 @@
}
- // TODO brendan 21/03/13 consider sites in error
+ // exclude sites reported in error
+ SiteErrorsService siteErrorsService = serviceContext.newService(SiteErrorsService.class);
+
+ List<Site> allSitesInError = siteErrorsService.getAllSitesInError();
+
+ storedArticles =
+ Lists.newArrayList(
+ Iterables.filter(
+ storedArticles,
+ StoredArticles.articleNotStoredInSiteReportedInError(allSitesInError)
+ )
+ );
+
return storedArticles;
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-22 15:45:13 UTC (rev 33)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -5,11 +5,13 @@
import com.franciaflex.magalie.dao.ArticleDao;
import com.franciaflex.magalie.dao.MagalieUserDao;
import com.franciaflex.magalie.dao.RequestedArticleDao;
+import com.franciaflex.magalie.dao.SiteErrorDao;
import com.franciaflex.magalie.dao.StorageMovementDao;
import com.franciaflex.magalie.dao.StoredArticleDao;
import com.franciaflex.magalie.dao.jpa.JpaArticleDao;
import com.franciaflex.magalie.dao.jpa.JpaMagalieUserDao;
import com.franciaflex.magalie.dao.jpa.JpaRequestedArticleDao;
+import com.franciaflex.magalie.dao.jpa.JpaSiteErrorDao;
import com.franciaflex.magalie.dao.jpa.JpaStorageMovementDao;
import com.franciaflex.magalie.dao.jpa.JpaStoredArticleDao;
@@ -102,4 +104,9 @@
public StorageMovementDao getStorageMovementDao() {
return new JpaStorageMovementDao(entityManager);
}
+
+ @Override
+ public SiteErrorDao getSiteErrorDao() {
+ return new JpaSiteErrorDao(entityManager);
+ }
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-22 15:45:13 UTC (rev 33)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -27,6 +27,7 @@
import com.franciaflex.magalie.dao.ArticleDao;
import com.franciaflex.magalie.dao.MagalieUserDao;
import com.franciaflex.magalie.dao.RequestedArticleDao;
+import com.franciaflex.magalie.dao.SiteErrorDao;
import com.franciaflex.magalie.dao.StorageMovementDao;
import com.franciaflex.magalie.dao.StoredArticleDao;
@@ -52,4 +53,7 @@
StorageMovementDao getStorageMovementDao();
MagalieApplicationConfig getMagalieApplicationConfig();
+
+ SiteErrorDao getSiteErrorDao();
+
}
Deleted: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/Site.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/Site.java 2013-03-22 15:45:13 UTC (rev 33)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/Site.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -1,86 +0,0 @@
-package com.franciaflex.magalie.services;
-
-/*
- * #%L
- * MagaLiE :: Services
- * $Id:$
- * $HeadURL:$
- * %%
- * Copyright (C) 2013 CodeLutin
- * %%
- * 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 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 <http://www.gnu.org/licenses/>.
- * #L%
- */
-
-public class Site {
-
- protected String name;
-
- protected String barcode;
-
- protected int available;
-
- protected int withdrawn;
-
- protected boolean used;
-
- public Site() {}
-
- public Site(String name, String barcode, int available) {
- this.name = name;
- this.barcode = barcode;
- this.available = available;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getBarcode() {
- return barcode;
- }
-
- public void setBarcode(String barcode) {
- this.barcode = barcode;
- }
-
- public int getAvailable() {
- return available;
- }
-
- public void setAvailable(int available) {
- this.available = available;
- }
-
- public int getWithdrawn() {
- return withdrawn;
- }
-
- public void setWithdrawn(int withdrawn) {
- this.withdrawn = withdrawn;
- }
-
- public boolean isUsed() {
- return used;
- }
-
- public void setUsed(boolean used) {
- this.used = used;
- }
-
-}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SiteErrorsService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SiteErrorsService.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/SiteErrorsService.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -0,0 +1,63 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.dao.SiteErrorDao;
+import com.franciaflex.magalie.entity.MagalieUser;
+import com.franciaflex.magalie.entity.Site;
+import com.franciaflex.magalie.entity.SiteError;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Date;
+import java.util.List;
+
+public class SiteErrorsService implements MagalieService {
+
+ private static final Log log = LogFactory.getLog(SiteErrorsService.class);
+
+ protected MagalieServiceContext serviceContext;
+
+ @Override
+ public void setServiceContext(MagalieServiceContext serviceContext) {
+ this.serviceContext = serviceContext;
+ }
+
+ public void reportError(Site site, MagalieUser magalieUser) {
+
+ SiteErrorDao siteErrorDao = serviceContext.getSiteErrorDao();
+
+ SiteError existingSiteError = siteErrorDao.findBySite(site);
+
+ if (existingSiteError == null) {
+
+ SiteError newSiteError = new SiteError();
+
+ newSiteError.setMagalieUser(magalieUser);
+
+ newSiteError.setSite(site);
+
+ Date reportDate = serviceContext.getDate();
+
+ newSiteError.setReportDate(reportDate);
+
+ siteErrorDao.persist(newSiteError);
+
+ } else {
+
+ if (log.isInfoEnabled()) {
+ log.info("error on site " + site + " already reported, nothing saved");
+ }
+
+ }
+
+ }
+
+ public List<Site> getAllSitesInError() {
+
+ SiteErrorDao siteErrorDao = serviceContext.getSiteErrorDao();
+
+ List<Site> allSitesInError = siteErrorDao.getAllSitesInError();
+
+ return allSitesInError;
+
+ }
+}
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java 2013-03-22 15:45:13 UTC (rev 33)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java 2013-03-22 15:46:02 UTC (rev 34)
@@ -3,6 +3,7 @@
import com.franciaflex.magalie.AbstractMagalieServiceTest;
import com.franciaflex.magalie.entity.Article;
import com.franciaflex.magalie.entity.MagalieUser;
+import com.franciaflex.magalie.entity.Site;
import com.google.common.collect.Iterables;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -184,5 +185,42 @@
}
}
+ @Test
+ public void testWithdrawArticleConsiderSitesInError() throws Exception {
+ MagalieUser alexandre = fixture("alexandre");
+ MagalieUser cathy = fixture("cathy");
+
+ Article article = fixture("article1");
+
+ // report site 2 in error
+ Site site2 = fixture("site2");
+ SiteErrorsService siteErrorsService = newService(SiteErrorsService.class);
+ siteErrorsService.reportError(site2, alexandre);
+
+ try {
+ WithdrawTask withdrawTask = service.withdrawArticle(cathy, article, 30.);
+ if (log.isDebugEnabled()) {
+ log.debug("withdrawTask = " + withdrawTask);
+ }
+ Assert.assertEquals(1, withdrawTask.getSites().size());
+ WithdrawArticleFromSiteTask site = Iterables.get(withdrawTask.getSites(), 0, null);
+ Assert.assertNotEquals(
+ "site2 must not be returned because it was reported in error",
+ site2.getId(),
+ site.getSiteId());
+ } catch (RequiredDriverLicenceException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.fail();
+ } catch (UnavailableArticleException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.fail();
+ }
+ }
+
+
}
1
0
r33 - trunk/magalie-web/src/main/webapp/WEB-INF/content
by bleny@users.forge.codelutin.com 22 Mar '13
by bleny@users.forge.codelutin.com 22 Mar '13
22 Mar '13
Author: bleny
Date: 2013-03-22 16:45:13 +0100 (Fri, 22 Mar 2013)
New Revision: 33
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
fix hardcoded unit in withdraw item input
Modified:
trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-03-22 13:19:12 UTC (rev 32)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-03-22 15:45:13 UTC (rev 33)
@@ -40,14 +40,14 @@
<dt>LàS</dt>
<dd>123456789</dd>
<dt>Prélev.</dt>
- <dd><span id="withdrawn">0</span> / <s:property value="withdrawTask.quantity" /> kg</dd>
+ <dd><span id="withdrawn">0</span> / <s:property value="withdrawTask.quantity" /> <s:property value="withdrawTask.article.unit" /></dd>
</dl>
</header>
<section id="sites">
</section>
<form class="form-horizontal">
<s:textfield name="site" label="Empl." inputAppendIcon="barcode" cssClass="input-small" />
- <s:textfield name="quantity" label="Qté" inputAppend="kg" cssClass="input-mini" />
+ <s:textfield name="quantity" label="Qté" inputAppend="%{withdrawTask.article.description}" cssClass="input-mini" />
<s:hidden name="model" />
<div class="btn-group">
@@ -60,6 +60,6 @@
<dt>Empl.</dt>
<dd data="locationCode"></dd>
<dt>Prélev.</dt>
- <dd><span data="withdrawn">0</span> / <span data="quantity"></span> kg</dd>
+ <dd><span data="withdrawn">0</span> / <span data="quantity"></span> <s:property value="withdrawTask.article.description" /></dd>
</dl>
</div>
1
0
r32 - in trunk: magalie-persistence/src/main/java/com/franciaflex/magalie/dao magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa magalie-services/src/main/java/com/franciaflex/magalie/services magalie-services/src/test/java/com/franciaflex/magalie magalie-services/src/test/java/com/franciaflex/magalie/services
by bleny@users.forge.codelutin.com 22 Mar '13
by bleny@users.forge.codelutin.com 22 Mar '13
22 Mar '13
Author: bleny
Date: 2013-03-22 14:19:12 +0100 (Fri, 22 Mar 2013)
New Revision: 32
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
refs #2162: consider already removed items
Added:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/FakeMagalieServiceContext.java
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/AbstractMagalieServiceTest.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/JpaEntityManagerRule.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java 2013-03-21 13:55:30 UTC (rev 31)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -14,5 +14,4 @@
boolean contains(E entity);
- void commit();
}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StorageMovementDao.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -0,0 +1,17 @@
+package com.franciaflex.magalie.dao;
+
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.StorageMovement;
+
+import java.util.List;
+
+/**
+ * @author bleny
+ */
+public interface StorageMovementDao extends Dao<StorageMovement> {
+
+ List<StorageMovement> findAllByArticle(Article article);
+
+ void persistAll(Iterable<StorageMovement> storageMovements);
+
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java 2013-03-21 13:55:30 UTC (rev 31)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -41,8 +41,4 @@
return entityManager.contains(entity);
}
- @Override
- public void commit() {
- entityManager.getTransaction().commit();
- }
}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStorageMovementDao.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -0,0 +1,39 @@
+package com.franciaflex.magalie.dao.jpa;
+
+import com.franciaflex.magalie.dao.StorageMovementDao;
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.StorageMovement;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Query;
+import java.util.List;
+
+public class JpaStorageMovementDao extends AbstractJpaDao<StorageMovement> implements StorageMovementDao {
+
+ public JpaStorageMovementDao(EntityManager entityManager) {
+ super(entityManager);
+ }
+
+ @Override
+ protected Class<StorageMovement> getEntityClass() {
+ return StorageMovement.class;
+ }
+
+ @Override
+ public List<StorageMovement> findAllByArticle(Article article) {
+ Query query = entityManager.createQuery("from StorageMovement sm where sm.article = :article");
+ query.setParameter("article", article);
+ return query.getResultList();
+ }
+
+ @Override
+ public void persistAll(Iterable<StorageMovement> storageMovements) {
+ EntityTransaction transaction = entityManager.getTransaction();
+ transaction.begin();
+ for (StorageMovement storageMovement : storageMovements) {
+ persist(storageMovement);
+ }
+ transaction.commit();
+ }
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java 2013-03-21 13:55:30 UTC (rev 31)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -23,7 +23,10 @@
public List<StoredArticle> findAllForArticle(Article article) {
Query query = entityManager.createQuery("from StoredArticle sa where sa.article = :article");
query.setParameter("article", article);
- List resultList = query.getResultList();
+ List<StoredArticle> resultList = query.getResultList();
+ for (StoredArticle storedArticle : resultList) {
+ entityManager.detach(storedArticle);
+ }
return resultList;
}
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java 2013-03-21 13:55:30 UTC (rev 31)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -1,18 +1,24 @@
package com.franciaflex.magalie.services;
import com.franciaflex.magalie.StoredArticles;
+import com.franciaflex.magalie.dao.StorageMovementDao;
import com.franciaflex.magalie.dao.StoredArticleDao;
import com.franciaflex.magalie.entity.Article;
import com.franciaflex.magalie.entity.MagalieUser;
+import com.franciaflex.magalie.entity.Site;
+import com.franciaflex.magalie.entity.StorageMovement;
import com.franciaflex.magalie.entity.StoredArticle;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import com.google.common.collect.Ordering;
import com.google.common.collect.Sets;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.util.Date;
import java.util.List;
import java.util.Set;
@@ -73,6 +79,10 @@
double quantity = 0;
+ List<StorageMovement> newStorageMovements = Lists.newLinkedList();
+
+ Date orderDate = serviceContext.getDate();
+
for (StoredArticle storedArticle : sortedStoredArticles) {
double quantityLeft = requestedQuantity - quantity;
@@ -85,9 +95,21 @@
quantity += quantityWithdrawn;
- // TODO brendan 18/03/13 enregistrer le mouvement
- // quantityInSite -= quantityWithdrawn;
+ StorageMovement newStorageMovement = new StorageMovement();
+ newStorageMovement.setArticle(article);
+
+ newStorageMovement.setOrderDate(orderDate);
+
+ newStorageMovement.setMagalieUser(magalieUser);
+
+ newStorageMovement.setSite(storedArticle.getSite());
+
+ // we remove from the stock so negative number
+ newStorageMovement.setQuantity( -1. * quantityWithdrawn);
+
+ newStorageMovements.add(newStorageMovement);
+
}
WithdrawArticleFromSiteTask withdrawArticleFromSiteTask = new WithdrawArticleFromSiteTask(storedArticle, quantityWithdrawn);
@@ -96,6 +118,10 @@
}
+ StorageMovementDao storageMovementDao = serviceContext.getStorageMovementDao();
+
+ storageMovementDao.persistAll(newStorageMovements);
+
return withdrawTask;
}
@@ -104,10 +130,45 @@
StoredArticleDao storedArticleDao = serviceContext.getStoredArticleDao();
- // TODO brendan 18/03/13 remove storage movement, remove sites in error
+ List<StoredArticle> storedArticles = storedArticleDao.findAllForArticle(article);
- return storedArticleDao.findAllForArticle(article);
+ // consider storage movements and compute actually available quantities
+ StorageMovementDao storageMovementDao = serviceContext.getStorageMovementDao();
+
+ List<StorageMovement> storageMovements = storageMovementDao.findAllByArticle(article);
+
+ ImmutableMap<Site,StoredArticle> storedArticlesBySite =
+ Maps.uniqueIndex(
+ storedArticles,
+ StoredArticles.getSiteFunction()
+ );
+
+ for (StorageMovement storageMovement : storageMovements) {
+
+ Site site = storageMovement.getSite();
+
+ StoredArticle storedArticle = storedArticlesBySite.get(site);
+
+ double actualQuantity = storedArticle.getQuantity() + storageMovement.getQuantity();
+
+ if (actualQuantity > 0.) {
+
+ storedArticle.setQuantity(actualQuantity);
+
+ } else {
+
+ // site is empty, do not include it as a site where you can take an article
+ storedArticles.remove(storedArticle);
+
+ }
+
+ }
+
+ // TODO brendan 21/03/13 consider sites in error
+
+ return storedArticles;
+
}
protected double getAvailableQuantity(Article article) {
@@ -147,4 +208,5 @@
return accessibleQuantity;
}
+
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-21 13:55:30 UTC (rev 31)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -3,17 +3,20 @@
import com.franciaflex.magalie.MagalieApplicationConfig;
import com.franciaflex.magalie.MagalieTechnicalException;
import com.franciaflex.magalie.dao.ArticleDao;
+import com.franciaflex.magalie.dao.MagalieUserDao;
import com.franciaflex.magalie.dao.RequestedArticleDao;
+import com.franciaflex.magalie.dao.StorageMovementDao;
import com.franciaflex.magalie.dao.StoredArticleDao;
import com.franciaflex.magalie.dao.jpa.JpaArticleDao;
import com.franciaflex.magalie.dao.jpa.JpaMagalieUserDao;
-import com.franciaflex.magalie.dao.MagalieUserDao;
import com.franciaflex.magalie.dao.jpa.JpaRequestedArticleDao;
+import com.franciaflex.magalie.dao.jpa.JpaStorageMovementDao;
import com.franciaflex.magalie.dao.jpa.JpaStoredArticleDao;
import javax.persistence.EntityManager;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
+import java.util.Date;
public class DefaultMagalieServiceContext implements MagalieServiceContext {
@@ -25,6 +28,7 @@
this.entityManager = entityManager;
}
+ @Override
public MagalieApplicationConfig getMagalieApplicationConfig() {
return magalieApplicationConfig;
}
@@ -69,6 +73,12 @@
}
@Override
+ public Date getDate() {
+ Date now = new Date();
+ return now;
+ }
+
+ @Override
public MagalieUserDao getMagalieUserDao() {
return new JpaMagalieUserDao(entityManager);
}
@@ -87,4 +97,9 @@
public ArticleDao getArticleDao() {
return new JpaArticleDao(entityManager);
}
+
+ @Override
+ public StorageMovementDao getStorageMovementDao() {
+ return new JpaStorageMovementDao(entityManager);
+ }
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-21 13:55:30 UTC (rev 31)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -23,16 +23,22 @@
* #L%
*/
+import com.franciaflex.magalie.MagalieApplicationConfig;
import com.franciaflex.magalie.dao.ArticleDao;
import com.franciaflex.magalie.dao.MagalieUserDao;
import com.franciaflex.magalie.dao.RequestedArticleDao;
+import com.franciaflex.magalie.dao.StorageMovementDao;
import com.franciaflex.magalie.dao.StoredArticleDao;
+import java.util.Date;
+
/**
* @author bleny
*/
public interface MagalieServiceContext {
+ Date getDate();
+
<E extends MagalieService> E newService(Class<E> serviceClass);
MagalieUserDao getMagalieUserDao();
@@ -42,4 +48,8 @@
RequestedArticleDao getRequestedArticleDao();
ArticleDao getArticleDao();
+
+ StorageMovementDao getStorageMovementDao();
+
+ MagalieApplicationConfig getMagalieApplicationConfig();
}
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/AbstractMagalieServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/AbstractMagalieServiceTest.java 2013-03-21 13:55:30 UTC (rev 31)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/AbstractMagalieServiceTest.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -1,13 +1,13 @@
package com.franciaflex.magalie;
import com.franciaflex.magalie.entity.AbstractJpaEntity;
-import com.franciaflex.magalie.services.DefaultMagalieServiceContext;
import com.franciaflex.magalie.services.MagalieService;
import com.franciaflex.magalie.services.MagalieServiceContext;
import com.google.common.collect.Lists;
import org.junit.Rule;
import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -22,7 +22,7 @@
protected JpaEntityManagerRule jpaEntityManagerRule;
- protected MagalieServiceContext serviceContext;
+ protected FakeMagalieServiceContext serviceContext;
protected static MagalieApplicationConfig getMagalieApplicationConfig() {
@@ -57,7 +57,7 @@
if (serviceContext == null) {
- DefaultMagalieServiceContext serviceContext = new DefaultMagalieServiceContext();
+ FakeMagalieServiceContext serviceContext = new FakeMagalieServiceContext();
serviceContext.setMagalieApplicationConfig(getMagalieApplicationConfig());
@@ -74,13 +74,17 @@
toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("articles"));
toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("storedArticles"));
+ EntityTransaction transaction = entityManager.getTransaction();
+
+ transaction.begin();
+
for (AbstractJpaEntity entity : toPersist) {
entityManager.persist(entity);
}
- entityManager.getTransaction().commit();
+ transaction.commit();
this.serviceContext = serviceContext;
Added: trunk/magalie-services/src/test/java/com/franciaflex/magalie/FakeMagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/FakeMagalieServiceContext.java (rev 0)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/FakeMagalieServiceContext.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -0,0 +1,29 @@
+package com.franciaflex.magalie;
+
+import com.franciaflex.magalie.services.DefaultMagalieServiceContext;
+import com.google.common.base.Preconditions;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.Date;
+
+public class FakeMagalieServiceContext extends DefaultMagalieServiceContext {
+
+ private static final Log log = LogFactory.getLog(FakeMagalieServiceContext.class);
+
+ protected Date date;
+
+ @Override
+ public Date getDate() {
+ Preconditions.checkState(date != null, "you must provide a date before running service test");
+ if (log.isTraceEnabled()) {
+ log.trace("injecting fake date in service: " + date);
+ }
+ return date;
+ }
+
+ public void setDate(Date date) {
+ this.date = date;
+ }
+
+}
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/JpaEntityManagerRule.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/JpaEntityManagerRule.java 2013-03-21 13:55:30 UTC (rev 31)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/JpaEntityManagerRule.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -65,11 +65,9 @@
entityManager = entityManagerFactory.createEntityManager();
if (log.isDebugEnabled()) {
- log.debug("created entityManager " + entityManager + " and opened transaction");
+ log.debug("created entityManager " + entityManager);
}
- entityManager.getTransaction().begin();
-
open = true;
}
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java 2013-03-21 13:55:30 UTC (rev 31)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java 2013-03-22 13:19:12 UTC (rev 32)
@@ -10,6 +10,9 @@
import org.junit.Before;
import org.junit.Test;
+import java.text.ParseException;
+import java.util.Date;
+
public class ArticleStorageServiceTest extends AbstractMagalieServiceTest {
private static final Log log = LogFactory.getLog(ArticleStorageServiceTest.class);
@@ -17,10 +20,12 @@
protected ArticleStorageService service;
@Before
- public void setUp() {
+ public void setUp() throws ParseException {
service = newService(ArticleStorageService.class);
+ serviceContext.setDate(new Date(1363948427576l));
+
}
@Test
@@ -123,4 +128,61 @@
Assert.assertEquals(30., site2.getQuantity(), DELTA);
}
+ @Test
+ public void testWithdrawArticleConsiderAlreadyRemovedItem() throws Exception {
+
+ MagalieUser alexandre = fixture("alexandre");
+ MagalieUser cathy = fixture("cathy");
+
+ Article article = fixture("article1");
+
+ WithdrawTask withdrawTask = null;
+
+ try {
+ withdrawTask = service.withdrawArticle(alexandre, article, 30.);
+ if (log.isDebugEnabled()) {
+ log.debug("withdrawTask = " + withdrawTask);
+ }
+ Assert.assertEquals(2, withdrawTask.getSites().size());
+ WithdrawArticleFromSiteTask site1 = Iterables.get(withdrawTask.getSites(), 0, null);
+ Assert.assertEquals(20., site1.getQuantity(), DELTA);
+ Assert.assertEquals("B2", site1.getLocationCode());
+ WithdrawArticleFromSiteTask site2 = Iterables.get(withdrawTask.getSites(), 1, null);
+ Assert.assertEquals(10., site2.getQuantity(), DELTA);
+ Assert.assertEquals("A1", site2.getLocationCode());
+ } catch (RequiredDriverLicenceException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.fail();
+ } catch (UnavailableArticleException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.fail();
+ }
+
+ try {
+ withdrawTask = service.withdrawArticle(cathy, article, 30.);
+ if (log.isDebugEnabled()) {
+ log.debug("withdrawTask = " + withdrawTask);
+ }
+ Assert.assertEquals(1, withdrawTask.getSites().size());
+ WithdrawArticleFromSiteTask site1 = Iterables.get(withdrawTask.getSites(), 0, null);
+ Assert.assertEquals(30., site1.getQuantity(), DELTA);
+ Assert.assertEquals("A1", site1.getLocationCode());
+ } catch (RequiredDriverLicenceException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.fail();
+ } catch (UnavailableArticleException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.fail();
+ }
+ }
+
+
}
1
0
r31 - in trunk: magalie-persistence magalie-persistence/src/main/java/com/franciaflex/magalie magalie-services/src/main/java/com/franciaflex/magalie/services magalie-services/src/test/java/com/franciaflex/magalie magalie-services/src/test/java/com/franciaflex/magalie/services magalie-web/src/main/java/com/franciaflex/magalie/web
by bleny@users.forge.codelutin.com 21 Mar '13
by bleny@users.forge.codelutin.com 21 Mar '13
21 Mar '13
Author: bleny
Date: 2013-03-21 14:55:30 +0100 (Thu, 21 Mar 2013)
New Revision: 31
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
introduce JUnit rule to open/close entityManager in each test, sandbox every test in a single H2 instance
Added:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/JpaUtil.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/AbstractMagalieServiceTest.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/JpaEntityManagerRule.java
Modified:
trunk/magalie-persistence/pom.xml
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/MagalieApplicationConfig.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java
Modified: trunk/magalie-persistence/pom.xml
===================================================================
--- trunk/magalie-persistence/pom.xml 2013-03-19 16:05:56 UTC (rev 30)
+++ trunk/magalie-persistence/pom.xml 2013-03-21 13:55:30 UTC (rev 31)
@@ -28,16 +28,19 @@
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
+ <scope>compile</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
+ <scope>compile</scope>
</dependency>
<dependency>
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/JpaUtil.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/JpaUtil.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/JpaUtil.java 2013-03-21 13:55:30 UTC (rev 31)
@@ -0,0 +1,70 @@
+package com.franciaflex.magalie;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import org.apache.commons.lang3.SystemUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hibernate.cfg.Environment;
+import org.hibernate.ejb.AvailableSettings;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import java.io.File;
+import java.util.Collections;
+import java.util.Map;
+
+public class JpaUtil {
+
+ private static final Log log = LogFactory.getLog(JpaUtil.class);
+
+ private JpaUtil() {}
+
+ protected static final ImmutableMap<String, String> JPA_H2_CONFIG =
+ ImmutableMap.of(
+ AvailableSettings.JDBC_DRIVER, org.h2.Driver.class.getName(),
+ AvailableSettings.JDBC_USER, "sa",
+ AvailableSettings.JDBC_PASSWORD, "",
+ Environment.DIALECT, org.hibernate.dialect.H2Dialect.class.getName(),
+ Environment.HBM2DDL_AUTO, "create"
+ );
+
+ public static EntityManagerFactory createTempEntityManagerFactory(String persistenceUnitName, String context) {
+
+ EntityManagerFactory tempEntityManagerFactory =
+ createTempEntityManagerFactory(
+ persistenceUnitName,
+ context, Collections.<String, String>emptyMap());
+
+ return tempEntityManagerFactory;
+
+ }
+
+ public static EntityManagerFactory createTempEntityManagerFactory(String persistenceUnitName, String context, Map<String, String> jpaParameters) {
+
+ Map<String, String> allJpaParameters = Maps.newHashMap();
+
+ allJpaParameters.putAll(jpaParameters);
+
+ allJpaParameters.putAll(JPA_H2_CONFIG);
+
+ File tempDirFile = SystemUtils.getJavaIoTmpDir();
+
+ File databaseFile = new File(tempDirFile, context);
+
+ String h2dataPath = databaseFile.getAbsolutePath() + File.separator + "h2data";
+
+ allJpaParameters.put(AvailableSettings.JDBC_URL, "jdbc:h2:file:" + h2dataPath);
+
+ if (log.isTraceEnabled()) {
+ log.trace("will store H2 data in " + h2dataPath);
+ log.trace("allJpaParameters = " + allJpaParameters);
+ }
+
+ EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName, allJpaParameters);
+
+ return entityManagerFactory;
+
+ }
+
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/MagalieApplicationConfig.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/MagalieApplicationConfig.java 2013-03-19 16:05:56 UTC (rev 30)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/MagalieApplicationConfig.java 2013-03-21 13:55:30 UTC (rev 31)
@@ -29,8 +29,8 @@
}
}
- public Map<String, Object> getJpaParameters() {
- Map<String, Object> jpaParameters = Maps.newHashMap();
+ public Map<String, String> getJpaParameters() {
+ Map<String, String> jpaParameters = Maps.newHashMap();
Properties hibernateProperties = applicationConfig.getOptionStartsWith("hibernate");
jpaParameters.putAll((Map) hibernateProperties);
Properties jpaProperties = applicationConfig.getOptionStartsWith("javax.persistence");
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-19 16:05:56 UTC (rev 30)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-21 13:55:30 UTC (rev 31)
@@ -1,5 +1,6 @@
package com.franciaflex.magalie.services;
+import com.franciaflex.magalie.MagalieApplicationConfig;
import com.franciaflex.magalie.MagalieTechnicalException;
import com.franciaflex.magalie.dao.ArticleDao;
import com.franciaflex.magalie.dao.RequestedArticleDao;
@@ -18,10 +19,20 @@
protected EntityManager entityManager;
+ protected MagalieApplicationConfig magalieApplicationConfig;
+
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
+ public MagalieApplicationConfig getMagalieApplicationConfig() {
+ return magalieApplicationConfig;
+ }
+
+ public void setMagalieApplicationConfig(MagalieApplicationConfig magalieApplicationConfig) {
+ this.magalieApplicationConfig = magalieApplicationConfig;
+ }
+
@Override
public <E extends MagalieService> E newService(Class<E> serviceClass) {
Added: trunk/magalie-services/src/test/java/com/franciaflex/magalie/AbstractMagalieServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/AbstractMagalieServiceTest.java (rev 0)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/AbstractMagalieServiceTest.java 2013-03-21 13:55:30 UTC (rev 31)
@@ -0,0 +1,114 @@
+package com.franciaflex.magalie;
+
+import com.franciaflex.magalie.entity.AbstractJpaEntity;
+import com.franciaflex.magalie.services.DefaultMagalieServiceContext;
+import com.franciaflex.magalie.services.MagalieService;
+import com.franciaflex.magalie.services.MagalieServiceContext;
+import com.google.common.collect.Lists;
+import org.junit.Rule;
+
+import javax.persistence.EntityManager;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+public abstract class AbstractMagalieServiceTest {
+
+ protected static final double DELTA = 0.0001;
+
+ protected static MagalieFixtures fixtures;
+
+ protected static MagalieApplicationConfig magalieApplicationConfig;
+
+ protected JpaEntityManagerRule jpaEntityManagerRule;
+
+ protected MagalieServiceContext serviceContext;
+
+ protected static MagalieApplicationConfig getMagalieApplicationConfig() {
+
+ if (magalieApplicationConfig == null) {
+
+ magalieApplicationConfig = new MagalieApplicationConfig();
+
+ }
+
+ return magalieApplicationConfig;
+
+ }
+
+ public static MagalieFixtures getFixtures() {
+
+ if (fixtures == null) {
+
+ fixtures = new MagalieFixtures("fixtures");
+
+ }
+
+ return fixtures;
+ }
+
+ protected static <E> E fixture(String id) {
+
+ return getFixtures().fixture(id);
+
+ }
+
+ protected MagalieServiceContext getServiceContext() {
+
+ if (serviceContext == null) {
+
+ DefaultMagalieServiceContext serviceContext = new DefaultMagalieServiceContext();
+
+ serviceContext.setMagalieApplicationConfig(getMagalieApplicationConfig());
+
+ EntityManager entityManager = getJpaEntityManagerRule().getEntityManager();
+
+ serviceContext.setEntityManager(entityManager);
+
+ MagalieFixtures fixtures = getFixtures();
+
+ List<AbstractJpaEntity> toPersist = Lists.newArrayList();
+
+ toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("users"));
+ toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("sites"));
+ toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("articles"));
+ toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("storedArticles"));
+
+ for (AbstractJpaEntity entity : toPersist) {
+
+ entityManager.persist(entity);
+
+ }
+
+ entityManager.getTransaction().commit();
+
+ this.serviceContext = serviceContext;
+
+ }
+
+ return serviceContext;
+
+ }
+
+ protected <E extends MagalieService> E newService(Class<E> serviceClass) {
+
+ return getServiceContext().newService(serviceClass);
+
+ }
+
+ @Rule
+ public JpaEntityManagerRule getJpaEntityManagerRule() {
+
+ if (jpaEntityManagerRule == null) {
+
+ Map<String, String> jpaParameters = getMagalieApplicationConfig().getJpaParameters();
+
+ jpaEntityManagerRule = new JpaEntityManagerRule("magaliePersistenceUnit", jpaParameters);
+
+ }
+
+ return jpaEntityManagerRule;
+
+ }
+
+}
Added: trunk/magalie-services/src/test/java/com/franciaflex/magalie/JpaEntityManagerRule.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/JpaEntityManagerRule.java (rev 0)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/JpaEntityManagerRule.java 2013-03-21 13:55:30 UTC (rev 31)
@@ -0,0 +1,100 @@
+package com.franciaflex.magalie;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Preconditions;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import java.util.Date;
+import java.util.Map;
+
+public class JpaEntityManagerRule implements TestRule {
+
+ private static final Log log = LogFactory.getLog(JpaEntityManagerRule.class);
+
+ protected String persistenceUnitName;
+
+ protected String timestamp = String.valueOf(new Date().getTime());
+
+ protected EntityManager entityManager;
+
+ protected boolean open = false;
+
+ protected Map<String, String> jpaParameters;
+
+ public JpaEntityManagerRule(String persistenceUnitName, Map<String, String> jpaParameters) {
+ this.persistenceUnitName = persistenceUnitName;
+ this.jpaParameters = jpaParameters;
+ }
+
+ @Override
+ public Statement apply(final Statement base, Description description) {
+
+ final String testClassName = description.getClassName();
+
+ final String testMethodName = description.getMethodName();
+
+ if (log.isDebugEnabled()) {
+ log.debug("will create entityManager for test class " + testClassName + " and method " + testMethodName);
+ }
+
+ return new Statement() {
+ @Override
+ public void evaluate() throws Throwable {
+ createEntityManager(testClassName, testMethodName);
+ try {
+ base.evaluate();
+ } finally {
+ closeEntityManager();
+ }
+ }
+ };
+ }
+
+ protected void createEntityManager(String testClassName, String testMethodName) {
+
+ String context = Joiner.on('_').join(testClassName, testMethodName, timestamp);
+
+ EntityManagerFactory entityManagerFactory = JpaUtil.createTempEntityManagerFactory(persistenceUnitName, context, jpaParameters);
+
+ entityManager = entityManagerFactory.createEntityManager();
+
+ if (log.isDebugEnabled()) {
+ log.debug("created entityManager " + entityManager + " and opened transaction");
+ }
+
+ entityManager.getTransaction().begin();
+
+ open = true;
+
+ }
+
+ public EntityManager getEntityManager() {
+
+ Preconditions.checkState(open);
+
+ return entityManager;
+
+ }
+
+ /**
+ * Override to tear down your specific external resource.
+ */
+ protected void closeEntityManager() {
+
+ if (log.isDebugEnabled()) {
+ log.debug("close entityManager " + entityManager);
+ }
+
+ open = false;
+
+ entityManager.close();
+
+ }
+
+}
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java 2013-03-19 16:05:56 UTC (rev 30)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java 2013-03-21 13:55:30 UTC (rev 31)
@@ -1,87 +1,33 @@
package com.franciaflex.magalie.services;
-import com.franciaflex.magalie.MagalieApplicationConfig;
-import com.franciaflex.magalie.MagalieFixtures;
-import com.franciaflex.magalie.dao.ArticleDao;
-import com.franciaflex.magalie.dao.MagalieUserDao;
-import com.franciaflex.magalie.dao.RequestedArticleDao;
-import com.franciaflex.magalie.dao.StoredArticleDao;
-import com.franciaflex.magalie.entity.AbstractJpaEntity;
+import com.franciaflex.magalie.AbstractMagalieServiceTest;
import com.franciaflex.magalie.entity.Article;
import com.franciaflex.magalie.entity.MagalieUser;
-import com.franciaflex.magalie.entity.StoredArticle;
import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
-import org.mockito.Mockito;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
+public class ArticleStorageServiceTest extends AbstractMagalieServiceTest {
-public class ArticleStorageServiceTest {
-
private static final Log log = LogFactory.getLog(ArticleStorageServiceTest.class);
- protected static final double DELTA = 0.0001;
-
protected ArticleStorageService service;
- protected MagalieFixtures fixtures;
-
@Before
- public void setUp() throws Exception {
+ public void setUp() {
- service = new ArticleStorageService();
+ service = newService(ArticleStorageService.class);
- fixtures = new MagalieFixtures("fixtures");
-
- service.setServiceContext(new MagalieServiceContext() {
-
- @Override
- public <E extends MagalieService> E newService(Class<E> serviceClass) {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public MagalieUserDao getMagalieUserDao() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public StoredArticleDao getStoredArticleDao() {
- StoredArticleDao storedArticleDaoMock = Mockito.mock(StoredArticleDao.class);
- Mockito.when(storedArticleDaoMock.findAllForArticle(Mockito.<Article>any())).thenReturn(
- fixtures.<List<StoredArticle>>fixture("storedArticlesForArticle1")
- );
- return storedArticleDaoMock;
- }
-
- @Override
- public RequestedArticleDao getRequestedArticleDao() {
- return null;
- }
-
- @Override
- public ArticleDao getArticleDao() {
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
- });
}
@Test
public void testThrowUnavailableArticle() throws Exception {
- MagalieUser basile = fixtures.fixture("basile");
- Article article = fixtures.fixture("article1");
+ MagalieUser basile = fixture("basile");
+ Article article = fixture("article1");
WithdrawTask withdrawTask;
try {
@@ -101,8 +47,8 @@
@Test
public void testThrowRequiredDriverLicenceException() throws Exception {
- MagalieUser basile = fixtures.fixture("basile");
- Article article = fixtures.fixture("article1");
+ MagalieUser basile = fixture("basile");
+ Article article = fixture("article1");
WithdrawTask withdrawTask;
try {
@@ -122,8 +68,8 @@
@Test
public void testWithdrawArticleWithoutDriverLicense() throws Exception {
- MagalieUser basile = fixtures.fixture("basile");
- Article article = fixtures.fixture("article1");
+ MagalieUser basile = fixture("basile");
+ Article article = fixture("article1");
WithdrawTask withdrawTask = null;
try {
@@ -149,8 +95,8 @@
@Test
public void testWithdrawArticleWithDriverLicense() throws Exception {
- MagalieUser alexandre = fixtures.fixture("alexandre");
- Article article = fixtures.fixture("article1");
+ MagalieUser alexandre = fixture("alexandre");
+ Article article = fixture("article1");
WithdrawTask withdrawTask = null;
try {
@@ -177,47 +123,4 @@
Assert.assertEquals(30., site2.getQuantity(), DELTA);
}
- @Test
- @Ignore
- public void testName() throws Exception {
-
- MagalieFixtures fixtures = new MagalieFixtures("fixtures");
-
- MagalieApplicationConfig applicationConfig = new MagalieApplicationConfig();
-
- Map<String, Object> jpaParameters = applicationConfig.getJpaParameters();
-
- EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("magaliePersistenceUnit", jpaParameters);
-
- EntityManager entityManager = entityManagerFactory.createEntityManager();
-
- entityManager.getTransaction().begin();
-
-// entityManager.persist(new MagalieUser());
-// entityManager.persist(new Article());
-// entityManager.persist(new StoredArticle());
-// entityManager.persist(new Site());
-// entityManager.persist(new RequestedArticle());
-
-// entityManager.persist(new SiteError());
-// entityManager.persist(new StorageMovement());
-
- List<AbstractJpaEntity> toPersist = Lists.newArrayList();
-
- toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("users"));
- toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("sites"));
- toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("articles"));
- toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("storedArticles"));
-
- for (AbstractJpaEntity entity : toPersist) {
-
- entityManager.persist(entity);
-
- }
-
- entityManager.getTransaction().commit();
-
- entityManager.close();
-
- }
}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java 2013-03-19 16:05:56 UTC (rev 30)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java 2013-03-21 13:55:30 UTC (rev 31)
@@ -22,7 +22,7 @@
MagalieApplicationConfig applicationConfig = new MagalieApplicationConfig();
- Map<String, Object> jpaParameters = applicationConfig.getJpaParameters();
+ Map<String, String> jpaParameters = applicationConfig.getJpaParameters();
entityManagerFactory = Persistence.createEntityManagerFactory("magaliePersistenceUnit", jpaParameters);
1
0
See <http://ci.nuiton.org/jenkins/job/franciaflex-magalie/9/changes>
Changes:
[Brendan Le Ny] fix warn caused by using deprecated ApplicationConfig API
[Brendan Le Ny] fix warn while analyzing dependencies
[Brendan Le Ny] introduce JPA layer and servlet filter
------------------------------------------
Started by an SCM change
Building on master in workspace <http://ci.nuiton.org/jenkins/job/franciaflex-magalie/ws/>
Updating http://svn.forge.codelutin.com/svn/franciaflex-magalie/trunk to revision '2013-03-15T13:21:24.256 +0100'
U magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java
U magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
U magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
D magalie-persistence/src/test/resources/magalie.properties
D magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDAO.java
A magalie-persistence/src/main/java/com/franciaflex/magalie/dao/AbstractJpaDao.java
A magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java
A magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaMagalieUserDao.java
A magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaDao.java
U magalie-persistence/src/main/java/com/franciaflex/magalie/MagalieApplicationConfig.java
A magalie-persistence/src/main/resources/magalie.properties
U magalie-persistence/pom.xml
A magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java
U magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java
U magalie-web/src/main/resources/log4j.properties
A magalie-web/src/main/resources/magalie.properties
U magalie-web/src/main/webapp/WEB-INF/web.xml
U magalie-web/pom.xml
U pom.xml
At revision 25
Parsing POMs
ERROR: Failed to parse POMs
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[ERROR] 'dependencies.dependency.version' for org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar is missing. @ line 23, column 17
at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:363)
at hudson.maven.MavenEmbedder.buildProjects(MavenEmbedder.java:361)
at hudson.maven.MavenEmbedder.readProjects(MavenEmbedder.java:331)
at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:1179)
at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:997)
at hudson.FilePath.act(FilePath.java:865)
at hudson.FilePath.act(FilePath.java:838)
at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.parsePoms(MavenModuleSetBuild.java:862)
at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.doRun(MavenModuleSetBuild.java:620)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:593)
at hudson.model.Run.execute(Run.java:1567)
at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:477)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:237)
1
5
19 Mar '13
Author: bleny
Date: 2013-03-19 17:05:56 +0100 (Tue, 19 Mar 2013)
New Revision: 30
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
implements first service, change daos, now the ui module really use persistence
Added:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/ArticleDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/RequestedArticleDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaArticleDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaRequestedArticleDao.java
Modified:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Site.java
trunk/magalie-services/pom.xml
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/MagalieFixtures.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java
trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp
trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/ArticleDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/ArticleDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/ArticleDao.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -0,0 +1,10 @@
+package com.franciaflex.magalie.dao;
+
+import com.franciaflex.magalie.entity.Article;
+
+/**
+ * @author bleny
+ */
+public interface ArticleDao extends Dao<Article> {
+
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -4,6 +4,8 @@
public interface Dao<E extends AbstractJpaEntity> {
+ E findById(String id);
+
void persist(E entity);
E merge(E entity);
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/RequestedArticleDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/RequestedArticleDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/RequestedArticleDao.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -0,0 +1,9 @@
+package com.franciaflex.magalie.dao;
+
+import com.franciaflex.magalie.entity.RequestedArticle;
+
+/**
+ * @author bleny
+ */
+public interface RequestedArticleDao extends Dao<RequestedArticle> {
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -13,7 +13,15 @@
this.entityManager = entityManager;
}
+ protected abstract Class<E> getEntityClass();
+
@Override
+ public E findById(String id) {
+ E entity = entityManager.find(getEntityClass(), id);
+ return entity;
+ }
+
+ @Override
public void persist(E entity) {
entityManager.persist(entity);
}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaArticleDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaArticleDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaArticleDao.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -0,0 +1,18 @@
+package com.franciaflex.magalie.dao.jpa;
+
+import com.franciaflex.magalie.dao.ArticleDao;
+import com.franciaflex.magalie.entity.Article;
+
+import javax.persistence.EntityManager;
+
+public class JpaArticleDao extends AbstractJpaDao<Article> implements ArticleDao {
+
+ public JpaArticleDao(EntityManager entityManager) {
+ super(entityManager);
+ }
+
+ @Override
+ protected Class<Article> getEntityClass() {
+ return Article.class;
+ }
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -10,4 +10,9 @@
public JpaMagalieUserDao(EntityManager entityManager) {
super(entityManager);
}
+
+ @Override
+ protected Class<MagalieUser> getEntityClass() {
+ return MagalieUser.class;
+ }
}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaRequestedArticleDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaRequestedArticleDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaRequestedArticleDao.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -0,0 +1,18 @@
+package com.franciaflex.magalie.dao.jpa;
+
+import com.franciaflex.magalie.dao.RequestedArticleDao;
+import com.franciaflex.magalie.entity.RequestedArticle;
+
+import javax.persistence.EntityManager;
+
+public class JpaRequestedArticleDao extends AbstractJpaDao<RequestedArticle> implements RequestedArticleDao {
+
+ public JpaRequestedArticleDao(EntityManager entityManager) {
+ super(entityManager);
+ }
+
+ @Override
+ protected Class<RequestedArticle> getEntityClass() {
+ return RequestedArticle.class;
+ }
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -15,8 +15,13 @@
}
@Override
+ protected Class<StoredArticle> getEntityClass() {
+ return StoredArticle.class;
+ }
+
+ @Override
public List<StoredArticle> findAllForArticle(Article article) {
- Query query = entityManager.createQuery("from storedArticle sa where sa.article = :article");
+ Query query = entityManager.createQuery("from StoredArticle sa where sa.article = :article");
query.setParameter("article", article);
List resultList = query.getResultList();
return resultList;
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Site.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Site.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Site.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -1,5 +1,7 @@
package com.franciaflex.magalie.entity;
+import com.google.common.base.Joiner;
+
import javax.persistence.Entity;
import javax.persistence.Id;
@@ -51,4 +53,9 @@
public void setRequiredAccreditationLevel(int requiredAccreditationLevel) {
this.requiredAccreditationLevel = requiredAccreditationLevel;
}
+
+ public String getBarcode() {
+ String barcode = Joiner.on('_').join("EMPL", getStoreCode(), getLocationCode());
+ return barcode;
+ }
}
Modified: trunk/magalie-services/pom.xml
===================================================================
--- trunk/magalie-services/pom.xml 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-services/pom.xml 2013-03-19 16:05:56 UTC (rev 30)
@@ -31,6 +31,11 @@
</dependency>
<dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>${project.groupId}</groupId>
<artifactId>magalie-persistence</artifactId>
<version>${project.version}</version>
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -1,9 +1,13 @@
package com.franciaflex.magalie.services;
import com.franciaflex.magalie.MagalieTechnicalException;
+import com.franciaflex.magalie.dao.ArticleDao;
+import com.franciaflex.magalie.dao.RequestedArticleDao;
import com.franciaflex.magalie.dao.StoredArticleDao;
+import com.franciaflex.magalie.dao.jpa.JpaArticleDao;
import com.franciaflex.magalie.dao.jpa.JpaMagalieUserDao;
import com.franciaflex.magalie.dao.MagalieUserDao;
+import com.franciaflex.magalie.dao.jpa.JpaRequestedArticleDao;
import com.franciaflex.magalie.dao.jpa.JpaStoredArticleDao;
import javax.persistence.EntityManager;
@@ -55,15 +59,21 @@
@Override
public MagalieUserDao getMagalieUserDao() {
-
return new JpaMagalieUserDao(entityManager);
-
}
@Override
public StoredArticleDao getStoredArticleDao() {
-
return new JpaStoredArticleDao(entityManager);
+ }
+ @Override
+ public RequestedArticleDao getRequestedArticleDao() {
+ return new JpaRequestedArticleDao(entityManager);
}
+
+ @Override
+ public ArticleDao getArticleDao() {
+ return new JpaArticleDao(entityManager);
+ }
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -23,7 +23,9 @@
* #L%
*/
+import com.franciaflex.magalie.dao.ArticleDao;
import com.franciaflex.magalie.dao.MagalieUserDao;
+import com.franciaflex.magalie.dao.RequestedArticleDao;
import com.franciaflex.magalie.dao.StoredArticleDao;
/**
@@ -36,4 +38,8 @@
MagalieUserDao getMagalieUserDao();
StoredArticleDao getStoredArticleDao();
+
+ RequestedArticleDao getRequestedArticleDao();
+
+ ArticleDao getArticleDao();
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -23,6 +23,11 @@
* #L%
*/
+import com.franciaflex.magalie.dao.ArticleDao;
+import com.franciaflex.magalie.dao.MagalieUserDao;
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.MagalieUser;
+
public class RequestedItemService implements MagalieService {
protected MagalieServiceContext serviceContext;
@@ -31,32 +36,25 @@
this.serviceContext = serviceContext;
}
- public WithdrawTask getWithdrawTask() {
+ public WithdrawTask getWithdrawTask() throws RequiredDriverLicenceException, UnavailableArticleException {
ArticleStorageService articleStorageService = serviceContext.newService(ArticleStorageService.class);
- // articleStorageService.withdrawArticle();
+ ArticleDao articleDao = serviceContext.getArticleDao();
-// MagalieUserDao magalieUserDao = serviceContext.getMagalieUserDao();
-//
-// magalieUserDao.persist(new MagalieUser());
-//
-// Set<Site> sites = ImmutableSet.of(
-// new Site("A1", "1", 5),
-// new Site("A2", "2", 5),
-// new Site("B3", "3", 10),
-// new Site("C4", "4", 15),
-// new Site("D5", "5", 15)
-// );
-//
-// WithdrawTask withdrawTask = new WithdrawTask();
-//
-// withdrawTask.setQuantity(50);
-// withdrawTask.setUnit("kg");
-// withdrawTask.setSites(sites);
-//
-// return withdrawTask;
+ MagalieUserDao magalieUserDao = serviceContext.getMagalieUserDao();
- throw new UnsupportedOperationException();
+ MagalieUser alexandre = magalieUserDao.findById("magalie_user_alexandre");
+
+ Article article1 = articleDao.findById("article1");
+
+ WithdrawTask withdrawTask = articleStorageService.withdrawArticle(
+ alexandre,
+ article1,
+ 40.
+ );
+
+ return withdrawTask;
+
}
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -1,7 +1,6 @@
package com.franciaflex.magalie.services;
-import com.franciaflex.magalie.entity.*;
-import com.franciaflex.magalie.entity.Site;
+import com.franciaflex.magalie.entity.StoredArticle;
import org.apache.commons.lang3.builder.ToStringBuilder;
public class WithdrawArticleFromSiteTask {
@@ -19,10 +18,26 @@
return quantity;
}
- public Site getSite() {
- return storedArticle.getSite();
+ public String getSiteId() {
+ return storedArticle.getSite().getId();
}
+ public boolean isDriverLicenseRequired() {
+ return storedArticle.getSite().isDriverLicenseRequired();
+ }
+
+ public String getStoreCode() {
+ return storedArticle.getSite().getStoreCode();
+ }
+
+ public String getLocationCode() {
+ return storedArticle.getSite().getLocationCode();
+ }
+
+ public String getSiteBarcode() {
+ return storedArticle.getSite().getBarcode();
+ }
+
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -31,7 +31,7 @@
public class WithdrawTask {
- protected Set<WithdrawArticleFromSiteTask> withdrawArticleFromSiteTasks;
+ protected Set<WithdrawArticleFromSiteTask> sites;
protected Article article;
@@ -42,12 +42,12 @@
this.quantity = quantity;
}
- public Set<WithdrawArticleFromSiteTask> getWithdrawArticleFromSiteTasks() {
- return withdrawArticleFromSiteTasks;
+ public Set<WithdrawArticleFromSiteTask> getSites() {
+ return sites;
}
- public void setWithdrawArticleFromSiteTasks(Set<WithdrawArticleFromSiteTask> withdrawArticleFromSiteTasks) {
- this.withdrawArticleFromSiteTasks = withdrawArticleFromSiteTasks;
+ public void setSites(Set<WithdrawArticleFromSiteTask> sites) {
+ this.sites = sites;
}
public Article getArticle() {
@@ -67,10 +67,10 @@
}
public void addWithdrawArticleFromSiteTask(WithdrawArticleFromSiteTask withdrawArticleFromSiteTask) {
- if (withdrawArticleFromSiteTasks == null) {
- withdrawArticleFromSiteTasks = Sets.newLinkedHashSet();
+ if (sites == null) {
+ sites = Sets.newLinkedHashSet();
}
- withdrawArticleFromSiteTasks.add(withdrawArticleFromSiteTask);
+ sites.add(withdrawArticleFromSiteTask);
}
@Override
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/MagalieFixtures.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/MagalieFixtures.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/MagalieFixtures.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -20,7 +20,7 @@
public MagalieFixtures(String fixturesName) {
String yamlPath = "/" + fixturesName + ".yaml";
- InputStream inputStream = getClass().getResourceAsStream(yamlPath);
+ InputStream inputStream = MagalieFixtures.class.getResourceAsStream(yamlPath);
String yaml;
try {
yaml = IOUtils.toString(inputStream, Charsets.UTF_8);
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -1,20 +1,31 @@
package com.franciaflex.magalie.services;
+import com.franciaflex.magalie.MagalieApplicationConfig;
import com.franciaflex.magalie.MagalieFixtures;
+import com.franciaflex.magalie.dao.ArticleDao;
import com.franciaflex.magalie.dao.MagalieUserDao;
+import com.franciaflex.magalie.dao.RequestedArticleDao;
import com.franciaflex.magalie.dao.StoredArticleDao;
+import com.franciaflex.magalie.entity.AbstractJpaEntity;
import com.franciaflex.magalie.entity.Article;
import com.franciaflex.magalie.entity.MagalieUser;
import com.franciaflex.magalie.entity.StoredArticle;
import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.mockito.Mockito;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import java.util.Collection;
import java.util.List;
+import java.util.Map;
public class ArticleStorageServiceTest {
@@ -53,6 +64,16 @@
);
return storedArticleDaoMock;
}
+
+ @Override
+ public RequestedArticleDao getRequestedArticleDao() {
+ return null;
+ }
+
+ @Override
+ public ArticleDao getArticleDao() {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
});
}
@@ -122,7 +143,7 @@
Assert.fail();
}
- Assert.assertEquals(1, withdrawTask.getWithdrawArticleFromSiteTasks().size());
+ Assert.assertEquals(1, withdrawTask.getSites().size());
}
@Test
@@ -149,10 +170,54 @@
Assert.fail();
}
- Assert.assertEquals(2, withdrawTask.getWithdrawArticleFromSiteTasks().size());
- WithdrawArticleFromSiteTask site1 = Iterables.get(withdrawTask.getWithdrawArticleFromSiteTasks(), 0, null);
+ Assert.assertEquals(2, withdrawTask.getSites().size());
+ WithdrawArticleFromSiteTask site1 = Iterables.get(withdrawTask.getSites(), 0, null);
Assert.assertEquals(20., site1.getQuantity(), DELTA);
- WithdrawArticleFromSiteTask site2 = Iterables.get(withdrawTask.getWithdrawArticleFromSiteTasks(), 1, null);
+ WithdrawArticleFromSiteTask site2 = Iterables.get(withdrawTask.getSites(), 1, null);
Assert.assertEquals(30., site2.getQuantity(), DELTA);
}
+
+ @Test
+ @Ignore
+ public void testName() throws Exception {
+
+ MagalieFixtures fixtures = new MagalieFixtures("fixtures");
+
+ MagalieApplicationConfig applicationConfig = new MagalieApplicationConfig();
+
+ Map<String, Object> jpaParameters = applicationConfig.getJpaParameters();
+
+ EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("magaliePersistenceUnit", jpaParameters);
+
+ EntityManager entityManager = entityManagerFactory.createEntityManager();
+
+ entityManager.getTransaction().begin();
+
+// entityManager.persist(new MagalieUser());
+// entityManager.persist(new Article());
+// entityManager.persist(new StoredArticle());
+// entityManager.persist(new Site());
+// entityManager.persist(new RequestedArticle());
+
+// entityManager.persist(new SiteError());
+// entityManager.persist(new StorageMovement());
+
+ List<AbstractJpaEntity> toPersist = Lists.newArrayList();
+
+ toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("users"));
+ toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("sites"));
+ toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("articles"));
+ toPersist.addAll(fixtures.<Collection<? extends AbstractJpaEntity>>fixture("storedArticles"));
+
+ for (AbstractJpaEntity entity : toPersist) {
+
+ entityManager.persist(entity);
+
+ }
+
+ entityManager.getTransaction().commit();
+
+ entityManager.close();
+
+ }
}
Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java
===================================================================
--- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/action/WithdrawItemAction.java 2013-03-19 16:05:56 UTC (rev 30)
@@ -23,8 +23,9 @@
* #L%
*/
-import com.franciaflex.magalie.MagalieApplicationConfig;
import com.franciaflex.magalie.services.RequestedItemService;
+import com.franciaflex.magalie.services.RequiredDriverLicenceException;
+import com.franciaflex.magalie.services.UnavailableArticleException;
import com.franciaflex.magalie.services.WithdrawTask;
import com.franciaflex.magalie.web.MagalieActionSupport;
import org.apache.commons.logging.Log;
@@ -38,18 +39,12 @@
protected RequestedItemService service;
- protected MagalieApplicationConfig config;
-
protected WithdrawTask withdrawTask;
public void setService(RequestedItemService service) {
this.service = service;
}
- public void setConfig(MagalieApplicationConfig config) {
- this.config = config;
- }
-
public void setModel(String model) {
if (log.isErrorEnabled()) {
@@ -58,23 +53,23 @@
}
- public String getModel() throws JSONException {
+ public WithdrawTask getWithdrawTask() {
+ return withdrawTask;
+ }
- String json = JSONUtil.serialize(withdrawTask);
+ public String getModelAsJson() throws JSONException {
+ String json = JSONUtil.serialize(getWithdrawTask());
+
return json;
}
@Override
- public String input() {
+ public String input() throws RequiredDriverLicenceException, UnavailableArticleException {
withdrawTask = service.getWithdrawTask();
- if (log.isDebugEnabled()) {
- log.debug("config = " + config);
- }
-
return INPUT;
}
Modified: trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp
===================================================================
--- trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-web/src/main/webapp/WEB-INF/content/withdraw-item-input.jsp 2013-03-19 16:05:56 UTC (rev 30)
@@ -25,7 +25,7 @@
<head>
<script>
- var model = <s:property value="model" escapeHtml="false" />;
+ var model = <s:property value="modelAsJson" escapeHtml="false" />;
</script>
<script src="<s:url value='/js/withdraw-item-input.js' />"></script>
<title>Traitement des listes à servir</title>
@@ -34,13 +34,13 @@
<header>
<dl class="dl-horizontal">
<dt>Réf.</dt>
- <dd>123456789</dd>
+ <dd><s:property value="withdrawTask.article.code" /></dd>
<dt>Desc.</dt>
- <dd>Rivet chromé</dd>
+ <dd><s:property value="withdrawTask.article.description" /></dd>
<dt>LàS</dt>
<dd>123456789</dd>
<dt>Prélev.</dt>
- <dd><span id="withdrawn">0</span> / 50 kg</dd>
+ <dd><span id="withdrawn">0</span> / <s:property value="withdrawTask.quantity" /> kg</dd>
</dl>
</header>
<section id="sites">
@@ -58,8 +58,8 @@
<div id="siteTemplate" class="template">
<dl class="dl-horizontal">
<dt>Empl.</dt>
- <dd data="name"></dd>
+ <dd data="locationCode"></dd>
<dt>Prélev.</dt>
- <dd><span data="withdrawn"></span> / <span data="available"></span> kg</dd>
+ <dd><span data="withdrawn">0</span> / <span data="quantity"></span> kg</dd>
</dl>
</div>
Modified: trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js
===================================================================
--- trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-03-18 17:25:24 UTC (rev 29)
+++ trunk/magalie-web/src/main/webapp/js/withdraw-item-input.js 2013-03-19 16:05:56 UTC (rev 30)
@@ -31,11 +31,13 @@
return processing;
}
+"use strict";
+
model.sitesIndex = 0;
model.allowSubmit = false;
model.isFulfilled = function() {
- var isFull = this.withdrawn() == this.required;
+ var isFull = this.withdrawn() === this.quantity;
return isFull;
};
@@ -51,7 +53,7 @@
model.withdrawn = function() {
var withdrawn = 0;
for (var i = 0; i < this.sites.length; i++) {
- withdrawn += this.sites[i].withdrawn;
+ withdrawn += this.sites[i].withdrawn || 0;
}
return withdrawn;
};
@@ -59,7 +61,7 @@
model.withdraw = function(barcode, quantity) {
var site;
for (var i = 0; i < this.sites.length; i++) {
- if (barcode == this.sites[i].barcode) {
+ if (barcode == this.sites[i].siteBarcode) {
site = this.sites[i];
}
}
@@ -67,7 +69,7 @@
alert(barcode + " n'est pas le code barre d'un emplacement valide");
}
site.used = true;
- site.defect = quantity != site.available;
+ site.defect = quantity != site.quantity;
site.withdrawn = quantity;
};
@@ -82,9 +84,9 @@
refreshSummary : function() {
$('#withdrawn').text(model.withdrawn());
- if (model.withdrawn() === model.required) {
+ if (model.withdrawn() === model.quantity) {
$('#withdrawn').addClass('success');
- } else if (model.withdrawn() > model.required) {
+ } else if (model.withdrawn() > model.quantity) {
$('#withdrawn').addClass('warning');
}
},
@@ -107,7 +109,7 @@
} else {
$(siteElement).addClass('success');
}
- } else if (site.name == model.sites[model.sitesIndex].name) {
+ } else if (site.siteId === model.sites[model.sitesIndex].siteId) {
$(siteElement).addClass('pending');
sitesElement.scrollTop(siteElement[0].offsetTop);
} else {
@@ -122,7 +124,7 @@
$('#site').val('');
// set default value of quantity to what should be withdrawn on the current site
if (model.sitesIndex != null) {
- $('#quantity').val(model.sites[model.sitesIndex].available);
+ $('#quantity').val(model.sites[model.sitesIndex].quantity);
}
},
@@ -161,7 +163,7 @@
model.withdraw(barcode, quantity);
// if used site focused as current, highlight next site to go
- if (barcode == model.sites[model.sitesIndex].barcode) {
+ if (barcode == model.sites[model.sitesIndex].siteBarcode) {
model.nextSite();
}
1
0
18 Mar '13
Author: bleny
Date: 2013-03-18 18:25:24 +0100 (Mon, 18 Mar 2013)
New Revision: 29
Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revision…
Log:
implements force service
Added:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/Sites.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StoredArticles.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StoredArticleDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/AbstractJpaEntity.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieException.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequiredDriverLicenceException.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/UnavailableArticleException.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/MagalieFixtures.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
trunk/magalie-services/src/test/resources/fixtures.yaml
trunk/magalie-services/src/test/resources/log4j.properties
Removed:
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/AbstractJpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaMagalieUserDao.java
trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/MagalieFixtures.java
trunk/magalie-persistence/src/test/resources/fixtures.yaml
Modified:
trunk/magalie-persistence/pom.xml
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Article.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/MagalieUser.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/RequestedArticle.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Site.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/SiteError.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java
trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StoredArticle.java
trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java
trunk/magalie-services/pom.xml
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java
trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java
trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/RequestedItemServiceTest.java
trunk/magalie-web/pom.xml
trunk/magalie-web/src/main/resources/log4j.properties
trunk/pom.xml
Modified: trunk/magalie-persistence/pom.xml
===================================================================
--- trunk/magalie-persistence/pom.xml 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/pom.xml 2013-03-18 17:25:24 UTC (rev 29)
@@ -21,13 +21,6 @@
<dependencies>
<dependency>
- <groupId>com.esotericsoftware.yamlbeans</groupId>
- <artifactId>yamlbeans</artifactId>
- <version>1.06</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</dependency>
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/Sites.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/Sites.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/Sites.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,63 @@
+package com.franciaflex.magalie;
+
+import com.franciaflex.magalie.entity.MagalieUser;
+import com.franciaflex.magalie.entity.Site;
+import com.google.common.base.Predicate;
+
+import java.util.Comparator;
+
+public class Sites {
+
+ protected static class SiteRequireDriverLicensePredicate implements Predicate<Site> {
+
+ @Override
+ public boolean apply(Site site) {
+ return site.isDriverLicenseRequired();
+ }
+ }
+
+ protected static class AccessibleSitePredicate implements Predicate<Site> {
+
+ protected MagalieUser magalieUser;
+
+ public AccessibleSitePredicate(MagalieUser magalieUser) {
+ this.magalieUser = magalieUser;
+ }
+
+ @Override
+ public boolean apply(Site site) {
+ boolean isSiteAccessible = magalieUser.isDriverLicenseOwner()
+ || ! site.isDriverLicenseRequired();
+ return isSiteAccessible;
+ }
+
+ }
+
+ protected static class SiteRequiringDriverLicenseFirstComparator implements Comparator<Site> {
+
+ @Override
+ public int compare(Site site1, Site site2) {
+ boolean site1RequireDriverLicense = siteRequireDriverLicensePredicate().apply(site1);
+ boolean site2RequireDriverLicense = siteRequireDriverLicensePredicate().apply(site2);
+ if (site1RequireDriverLicense && ! site2RequireDriverLicense) {
+ return -1;
+ } else if ( ! site1RequireDriverLicense && site2RequireDriverLicense) {
+ return +1;
+ } else {
+ return 0;
+ }
+ }
+ }
+
+ public static Predicate<Site> accessibleSitePredicate(MagalieUser magalieUser) {
+ return new AccessibleSitePredicate(magalieUser);
+ }
+
+ public static Predicate<Site> siteRequireDriverLicensePredicate() {
+ return new SiteRequireDriverLicensePredicate();
+ }
+
+ public static Comparator<Site> siteRequiringDriverLicenseFirstComparator() {
+ return new SiteRequiringDriverLicenseFirstComparator();
+ }
+}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StoredArticles.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StoredArticles.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/StoredArticles.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,122 @@
+package com.franciaflex.magalie;
+
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.MagalieUser;
+import com.franciaflex.magalie.entity.Site;
+import com.franciaflex.magalie.entity.StoredArticle;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Ordering;
+
+import java.util.Comparator;
+
+public class StoredArticles {
+
+ protected static class FixedSiteForArticleFirst implements Comparator<StoredArticle> {
+
+ protected Article article;
+
+ public FixedSiteForArticleFirst(Article article) {
+ this.article = article;
+ }
+
+ @Override
+ public int compare(StoredArticle o1, StoredArticle o2) {
+ if (o1.getSite().equals(article.getFixedSite())) {
+ return -1;
+ } else if (o2.getSite().equals(article.getFixedSite())) {
+ return +1;
+ }
+ return 0;
+ }
+
+ }
+
+ protected static class SiteWithHighestQuantityFirst implements Comparator<StoredArticle> {
+
+ @Override
+ public int compare(StoredArticle o1, StoredArticle o2) {
+ return Double.compare(o1.getQuantity(), o2.getQuantity());
+ }
+
+ }
+
+ protected static class AccessibleSiteFirst implements Comparator<StoredArticle> {
+
+ protected Predicate<StoredArticle> articleStoredInAccessibleSitePredicate;
+
+ public AccessibleSiteFirst(MagalieUser magalieUser) {
+ articleStoredInAccessibleSitePredicate =
+ articleStoredInAccessibleSitePredicate(magalieUser);
+ }
+
+ @Override
+ public int compare(StoredArticle o1, StoredArticle o2) {
+ boolean isSite1Accessible = articleStoredInAccessibleSitePredicate.apply(o1);
+ boolean isSite2Accessible = articleStoredInAccessibleSitePredicate.apply(o2);
+ if (isSite1Accessible && ! isSite2Accessible) {
+ return -1;
+ } else if ( ! isSite1Accessible && isSite2Accessible) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+
+ }
+
+ protected static class GetSiteFunction implements Function<StoredArticle, Site> {
+
+ @Override
+ public Site apply(StoredArticle storedArticle) {
+ return storedArticle.getSite();
+ }
+ }
+
+ protected static class ArticleStoredInSitesRequiringDriverLicenseFirstComparator implements Comparator<StoredArticle> {
+
+ @Override
+ public int compare(StoredArticle o1, StoredArticle o2) {
+ return Sites.siteRequiringDriverLicenseFirstComparator().compare(o1.getSite(), o2.getSite());
+ }
+ }
+
+ public static Comparator<StoredArticle> siteWithHighestQuantityFirst() {
+ return new SiteWithHighestQuantityFirst();
+ }
+
+ public static Comparator<StoredArticle> siteWithLowestQuantityFirstComparator() {
+ return Ordering.from(new SiteWithHighestQuantityFirst()).reverse();
+ }
+
+
+ public static Comparator<StoredArticle> accessibleSiteFirstComparator(MagalieUser magalieUser) {
+ return new AccessibleSiteFirst(magalieUser);
+ }
+
+ public static Comparator<StoredArticle> fixedSiteForArticleFirstComparator(Article article) {
+ return new FixedSiteForArticleFirst(article);
+ }
+
+ public static Comparator<StoredArticle> fixedSiteForArticleLastComparator(Article article) {
+ return Ordering.from(new FixedSiteForArticleFirst(article)).reverse();
+ }
+
+ public static Function<StoredArticle, Site> getSiteFunction() {
+ return new GetSiteFunction();
+ }
+
+ public static Predicate<StoredArticle> articleStoredInAccessibleSitePredicate(MagalieUser magalieUser) {
+ Predicate<StoredArticle> predicate = Predicates.compose(
+ Sites.accessibleSitePredicate(magalieUser),
+ getSiteFunction());
+ return predicate;
+ }
+
+ public static Comparator<StoredArticle> articleStoredInSitesRequiringDriverLicenseFirstComparator() {
+ return new ArticleStoredInSitesRequiringDriverLicenseFirstComparator();
+ }
+
+
+}
Deleted: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/AbstractJpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/AbstractJpaDao.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/AbstractJpaDao.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -1,37 +0,0 @@
-package com.franciaflex.magalie.dao;
-
-import javax.persistence.EntityManager;
-
-public abstract class AbstractJpaDao<E> implements JpaDao<E> {
-
- protected EntityManager entityManager;
-
- public AbstractJpaDao(EntityManager entityManager) {
- this.entityManager = entityManager;
- }
-
- @Override
- public void persist(E entity) {
- entityManager.persist(entity);
- }
-
- @Override
- public E merge(E entity) {
- return entityManager.merge(entity);
- }
-
- @Override
- public void remove(E entity) {
- entityManager.remove(entity);
- }
-
- @Override
- public boolean contains(E entity) {
- return entityManager.contains(entity);
- }
-
- @Override
- public void commit() {
- entityManager.getTransaction().commit();
- }
-}
Copied: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java (from rev 23, trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaDao.java)
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/Dao.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,16 @@
+package com.franciaflex.magalie.dao;
+
+import com.franciaflex.magalie.entity.AbstractJpaEntity;
+
+public interface Dao<E extends AbstractJpaEntity> {
+
+ void persist(E entity);
+
+ E merge(E entity);
+
+ void remove(E entity);
+
+ boolean contains(E entity);
+
+ void commit();
+}
Deleted: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaDao.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaDao.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -1,14 +0,0 @@
-package com.franciaflex.magalie.dao;
-
-public interface JpaDao<E> {
-
- void persist(E entity);
-
- E merge(E entity);
-
- void remove(E entity);
-
- boolean contains(E entity);
-
- void commit();
-}
Deleted: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaMagalieUserDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaMagalieUserDao.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaMagalieUserDao.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -1,12 +0,0 @@
-package com.franciaflex.magalie.dao;
-
-import com.franciaflex.magalie.entity.MagalieUser;
-
-import javax.persistence.EntityManager;
-
-public class JpaMagalieUserDao extends AbstractJpaDao<MagalieUser> implements MagalieUserDao {
-
- public JpaMagalieUserDao(EntityManager entityManager) {
- super(entityManager);
- }
-}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -5,6 +5,6 @@
/**
* @author bleny
*/
-public interface MagalieUserDao extends JpaDao<MagalieUser> {
+public interface MagalieUserDao extends Dao<MagalieUser> {
}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StoredArticleDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StoredArticleDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/StoredArticleDao.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,13 @@
+package com.franciaflex.magalie.dao;
+
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.StoredArticle;
+
+import java.util.List;
+import java.util.Set;
+
+public interface StoredArticleDao extends Dao<StoredArticle> {
+
+ List<StoredArticle> findAllForArticle(Article article);
+
+}
Copied: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java (from rev 23, trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/AbstractJpaDao.java)
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/AbstractJpaDao.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,40 @@
+package com.franciaflex.magalie.dao.jpa;
+
+import com.franciaflex.magalie.dao.Dao;
+import com.franciaflex.magalie.entity.AbstractJpaEntity;
+
+import javax.persistence.EntityManager;
+
+public abstract class AbstractJpaDao<E extends AbstractJpaEntity> implements Dao<E> {
+
+ protected EntityManager entityManager;
+
+ public AbstractJpaDao(EntityManager entityManager) {
+ this.entityManager = entityManager;
+ }
+
+ @Override
+ public void persist(E entity) {
+ entityManager.persist(entity);
+ }
+
+ @Override
+ public E merge(E entity) {
+ return entityManager.merge(entity);
+ }
+
+ @Override
+ public void remove(E entity) {
+ entityManager.remove(entity);
+ }
+
+ @Override
+ public boolean contains(E entity) {
+ return entityManager.contains(entity);
+ }
+
+ @Override
+ public void commit() {
+ entityManager.getTransaction().commit();
+ }
+}
Copied: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java (from rev 23, trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaMagalieUserDao.java)
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaMagalieUserDao.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,13 @@
+package com.franciaflex.magalie.dao.jpa;
+
+import com.franciaflex.magalie.dao.MagalieUserDao;
+import com.franciaflex.magalie.entity.MagalieUser;
+
+import javax.persistence.EntityManager;
+
+public class JpaMagalieUserDao extends AbstractJpaDao<MagalieUser> implements MagalieUserDao {
+
+ public JpaMagalieUserDao(EntityManager entityManager) {
+ super(entityManager);
+ }
+}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/jpa/JpaStoredArticleDao.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,24 @@
+package com.franciaflex.magalie.dao.jpa;
+
+import com.franciaflex.magalie.dao.StoredArticleDao;
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.StoredArticle;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import java.util.List;
+
+public class JpaStoredArticleDao extends AbstractJpaDao<StoredArticle> implements StoredArticleDao {
+
+ public JpaStoredArticleDao(EntityManager entityManager) {
+ super(entityManager);
+ }
+
+ @Override
+ public List<StoredArticle> findAllForArticle(Article article) {
+ Query query = entityManager.createQuery("from storedArticle sa where sa.article = :article");
+ query.setParameter("article", article);
+ List resultList = query.getResultList();
+ return resultList;
+ }
+}
Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/AbstractJpaEntity.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/AbstractJpaEntity.java (rev 0)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/AbstractJpaEntity.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,29 @@
+package com.franciaflex.magalie.entity;
+
+import com.google.common.base.Objects;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+public abstract class AbstractJpaEntity {
+
+ public abstract String getId();
+
+ @Override
+ public boolean equals(Object o) {
+ String id = getId();
+ if (this == o) return true;
+ if (!(o instanceof AbstractJpaEntity)) return false;
+ AbstractJpaEntity that = (AbstractJpaEntity) o;
+ if (!id.equals(that.getId())) return false;
+ return Objects.equal(id, that.getId());
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(getId());
+ }
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Article.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Article.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Article.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -5,7 +5,7 @@
import javax.persistence.ManyToOne;
@Entity
-public class Article {
+public class Article extends AbstractJpaEntity {
@Id
protected String id;
@@ -21,6 +21,7 @@
protected String unit;
+ @Override
public String getId() {
return id;
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/MagalieUser.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/MagalieUser.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/MagalieUser.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -4,7 +4,7 @@
import javax.persistence.Id;
@Entity
-public class MagalieUser {
+public class MagalieUser extends AbstractJpaEntity {
@Id
protected String id;
@@ -15,6 +15,7 @@
protected int accreditationLevel;
+ @Override
public String getId() {
return id;
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/RequestedArticle.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/RequestedArticle.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/RequestedArticle.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -6,7 +6,7 @@
import java.util.Date;
@Entity
-public class RequestedArticle {
+public class RequestedArticle extends AbstractJpaEntity {
@Id
protected String id;
@@ -22,6 +22,15 @@
protected double quantity;
+ @Override
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
public String getRequestList() {
return requestList;
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Site.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Site.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Site.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -4,7 +4,7 @@
import javax.persistence.Id;
@Entity
-public class Site {
+public class Site extends AbstractJpaEntity {
@Id
protected String id;
@@ -15,6 +15,7 @@
protected int requiredAccreditationLevel;
+ @Override
public String getId() {
return id;
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/SiteError.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/SiteError.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/SiteError.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -8,7 +8,7 @@
import java.util.Date;
@Entity
-public class SiteError {
+public class SiteError extends AbstractJpaEntity {
@Id
@GeneratedValue
@@ -22,6 +22,7 @@
protected Date reportDate;
+ @Override
public String getId() {
return id;
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -7,7 +7,7 @@
import java.util.Date;
@Entity
-public class StorageMovement {
+public class StorageMovement extends AbstractJpaEntity {
@Id
@GeneratedValue
@@ -28,6 +28,7 @@
protected Date confirmDate;
+ @Override
public String getId() {
return id;
}
Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StoredArticle.java
===================================================================
--- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StoredArticle.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StoredArticle.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -5,19 +5,20 @@
import javax.persistence.ManyToOne;
@Entity
-public class StoredArticle {
+public class StoredArticle extends AbstractJpaEntity {
@Id
protected String id;
@ManyToOne
- protected Site site;
+ protected Article article;
@ManyToOne
- protected Article article;
+ protected Site site;
protected double quantity;
+ @Override
public String getId() {
return id;
}
Deleted: trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/MagalieFixtures.java
===================================================================
--- trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/MagalieFixtures.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/MagalieFixtures.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -1,46 +0,0 @@
-package com.franciaflex.magalie;
-
-import com.esotericsoftware.yamlbeans.YamlException;
-import com.esotericsoftware.yamlbeans.YamlReader;
-import com.franciaflex.magalie.entity.Article;
-import com.franciaflex.magalie.entity.MagalieUser;
-import com.franciaflex.magalie.entity.RequestedArticle;
-import com.franciaflex.magalie.entity.Site;
-import com.franciaflex.magalie.entity.StoredArticle;
-import org.apache.commons.io.Charsets;
-import org.apache.commons.io.IOUtils;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-
-public class MagalieFixtures {
-
- private final Map<String,Object> fixtures;
-
- public MagalieFixtures(String fixturesName) {
- String yamlPath = "/" + fixturesName + ".yaml";
- InputStream inputStream = getClass().getResourceAsStream(yamlPath);
- String yaml;
- try {
- yaml = IOUtils.toString(inputStream, Charsets.UTF_8);
- } catch (IOException e) {
- throw new IllegalArgumentException(fixturesName + " is not a valid fixtures set name", e);
- }
- YamlReader reader = new YamlReader(yaml);
- reader.getConfig().setClassTag("article", Article.class);
- reader.getConfig().setClassTag("stored article", StoredArticle.class);
- reader.getConfig().setClassTag("user", MagalieUser.class);
- reader.getConfig().setClassTag("requested article", RequestedArticle.class);
- reader.getConfig().setClassTag("site", Site.class);
- try {
- fixtures = (Map<String, Object>) reader.read();
- } catch (YamlException e) {
- throw new MagalieTechnicalException("unable to read yaml file", e);
- }
- }
-
- public <E> E fixture(String id) throws Exception {
- return (E) fixtures.get(id);
- }
-}
Modified: trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java
===================================================================
--- trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -1,58 +1,48 @@
package com.franciaflex.magalie;
-import com.franciaflex.magalie.entity.Article;
-import com.franciaflex.magalie.entity.Site;
-import org.junit.Ignore;
import org.junit.Test;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import java.util.List;
-import java.util.Map;
-
public class PersistenceTest {
@Test
- @Ignore
public void testName() throws Exception {
- MagalieFixtures fixtures = new MagalieFixtures("fixtures");
+// MagalieFixtures fixtures = new MagalieFixtures("fixtures");
+//
+// Article article = fixtures.fixture("article2");
+//
+// System.out.println(article);
+//
+// MagalieApplicationConfig applicationConfig = new MagalieApplicationConfig();
+//
+// Map<String, Object> jpaParameters = applicationConfig.getJpaParameters();
+//
+// EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("magaliePersistenceUnit", jpaParameters);
+//
+// EntityManager entityManager = entityManagerFactory.createEntityManager();
+//
+// entityManager.getTransaction().begin();
+//
+//// entityManager.persist(new MagalieUser());
+//// entityManager.persist(new Article());
+//// entityManager.persist(new StoredArticle());
+//// entityManager.persist(new Site());
+//// entityManager.persist(new RequestedArticle());
+//
+//// entityManager.persist(new SiteError());
+//// entityManager.persist(new StorageMovement());
+//
+// List<Site> sites = fixtures.fixture("sites");
+//
+// for (Site site : sites) {
+//
+// entityManager.persist(site);
+//
+// }
+//
+// entityManager.getTransaction().commit();
+//
+// entityManager.close();
- Article article = fixtures.fixture("article2");
-
- System.out.println(article);
-
- MagalieApplicationConfig applicationConfig = new MagalieApplicationConfig();
-
- Map<String, Object> jpaParameters = applicationConfig.getJpaParameters();
-
- EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("magaliePersistenceUnit", jpaParameters);
-
- EntityManager entityManager = entityManagerFactory.createEntityManager();
-
- entityManager.getTransaction().begin();
-
-// entityManager.persist(new MagalieUser());
-// entityManager.persist(new Article());
-// entityManager.persist(new StoredArticle());
-// entityManager.persist(new Site());
-// entityManager.persist(new RequestedArticle());
-
-// entityManager.persist(new SiteError());
-// entityManager.persist(new StorageMovement());
-
- List<Site> sites = fixtures.fixture("sites");
-
- for (Site site : sites) {
-
- entityManager.persist(site);
-
- }
-
- entityManager.getTransaction().commit();
-
- entityManager.close();
-
}
}
Deleted: trunk/magalie-persistence/src/test/resources/fixtures.yaml
===================================================================
--- trunk/magalie-persistence/src/test/resources/fixtures.yaml 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-persistence/src/test/resources/fixtures.yaml 2013-03-18 17:25:24 UTC (rev 29)
@@ -1,72 +0,0 @@
-site1:
- &site1 !site
- id: site1
- storeCode: UO1
- locationCode: A1
- requiredAccreditationLevel: 0
-
-site2:
- &site2 !site
- id: site2
- storeCode: UO1
- locationCode: B2
- requiredAccreditationLevel: 9
-
-site3:
- &site3 !site
- id: site3
- storeCode: UO1
- locationCode: C3
- requiredAccreditationLevel: 0
-
-site4:
- &site4 !site
- id: site4
- storeCode: UO1
- locationCode: D4
- requiredAccreditationLevel: 0
-
-site5:
- &site5 !site
- id: site5
- storeCode: UO2
- locationCode: A1
- requiredAccreditationLevel: 0
-
-sites:
- - *site1
- - *site2
- - *site3
- - *site4
- - *site5
-
-article1:
- &article1 !article
- id: article1
- fixedSite: *site1
- code: 111111111
- quantityInKanban: 10
- unit: kg
- description: very big screws
-
-article2:
- &article2 !article
- id: article2
- code: 222222222
- quantityInKanban: 2
- unit: box
- description: little buttons
-
-article3:
- &article3 !article
- id: article3
- fixedSite: *site2
- code: 333333333
- quantityInKanban: 50
- unit: g
- description: magic powder
-
-articles:
- - *article1
- - *article2
- - *article3
Modified: trunk/magalie-services/pom.xml
===================================================================
--- trunk/magalie-services/pom.xml 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-services/pom.xml 2013-03-18 17:25:24 UTC (rev 29)
@@ -21,6 +21,16 @@
<dependencies>
<dependency>
+ <groupId>com.esotericsoftware.yamlbeans</groupId>
+ <artifactId>yamlbeans</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>${project.groupId}</groupId>
<artifactId>magalie-persistence</artifactId>
<version>${project.version}</version>
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/ArticleStorageService.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,150 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.StoredArticles;
+import com.franciaflex.magalie.dao.StoredArticleDao;
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.MagalieUser;
+import com.franciaflex.magalie.entity.StoredArticle;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Ordering;
+import com.google.common.collect.Sets;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.List;
+import java.util.Set;
+
+public class ArticleStorageService implements MagalieService {
+
+ private static final Log log = LogFactory.getLog(ArticleStorageService.class);
+
+ protected MagalieServiceContext serviceContext;
+
+ public void setServiceContext(MagalieServiceContext serviceContext) {
+ this.serviceContext = serviceContext;
+ }
+
+ public WithdrawTask withdrawArticle(MagalieUser magalieUser, Article article, double requestedQuantity) throws UnavailableArticleException, RequiredDriverLicenceException {
+
+ Preconditions.checkNotNull(magalieUser);
+
+ Preconditions.checkNotNull(article);
+
+ Preconditions.checkArgument(requestedQuantity > 0.);
+
+ double availableQuantity = getAvailableQuantity(article);
+ UnavailableArticleException.throwIfRequestMoreThanAvailable(requestedQuantity, availableQuantity, article);
+
+ double accessibleQuantity = getAccessibleQuantity(article, magalieUser);
+ RequiredDriverLicenceException.throwIfRequestMoreThanAccessible(requestedQuantity, accessibleQuantity, magalieUser, article);
+
+ if (log.isInfoEnabled()) {
+ log.info("will process article request"
+ + ": requested = " + requestedQuantity
+ + ", accessible " + accessibleQuantity
+ + ", available " + availableQuantity);
+ }
+
+ List<StoredArticle> storedArticles = getStoredArticles(article);
+
+ Ordering<StoredArticle> storedArticlesOrdering =
+ Ordering.compound(
+ Lists.newArrayList(
+ StoredArticles.fixedSiteForArticleLastComparator(article),
+ StoredArticles.siteWithLowestQuantityFirstComparator(),
+ StoredArticles.articleStoredInSitesRequiringDriverLicenseFirstComparator()
+ )
+ );
+
+ Set<StoredArticle> sortedStoredArticles =
+ Sets.newTreeSet(storedArticlesOrdering);
+
+ Iterables.addAll(
+ sortedStoredArticles,
+ Iterables.filter(
+ storedArticles,
+ StoredArticles.articleStoredInAccessibleSitePredicate(magalieUser)
+ )
+ );
+
+ WithdrawTask withdrawTask = new WithdrawTask(article, requestedQuantity);
+
+ double quantity = 0;
+
+ for (StoredArticle storedArticle : sortedStoredArticles) {
+
+ double quantityLeft = requestedQuantity - quantity;
+
+ double quantityInSite = storedArticle.getQuantity();
+
+ double quantityWithdrawn = Math.min(quantityLeft, quantityInSite);
+
+ if (quantityWithdrawn > 0.) {
+
+ quantity += quantityWithdrawn;
+
+ // TODO brendan 18/03/13 enregistrer le mouvement
+ // quantityInSite -= quantityWithdrawn;
+
+ }
+
+ WithdrawArticleFromSiteTask withdrawArticleFromSiteTask = new WithdrawArticleFromSiteTask(storedArticle, quantityWithdrawn);
+
+ withdrawTask.addWithdrawArticleFromSiteTask(withdrawArticleFromSiteTask);
+
+ }
+
+ return withdrawTask;
+
+ }
+
+ protected List<StoredArticle> getStoredArticles(Article article) {
+
+ StoredArticleDao storedArticleDao = serviceContext.getStoredArticleDao();
+
+ // TODO brendan 18/03/13 remove storage movement, remove sites in error
+
+ return storedArticleDao.findAllForArticle(article);
+
+ }
+
+ protected double getAvailableQuantity(Article article) {
+
+ List<StoredArticle> storedArticles = getStoredArticles(article);
+
+ double availableQuantity = 0.;
+
+ for (StoredArticle storedArticle : storedArticles) {
+
+ availableQuantity += storedArticle.getQuantity();
+
+ }
+
+ return availableQuantity;
+
+ }
+
+ protected double getAccessibleQuantity(Article article, MagalieUser magalieUser) {
+
+ List<StoredArticle> storedArticles = getStoredArticles(article);
+
+ Iterable<StoredArticle> accessibleStoredArticles =
+ Iterables.filter(
+ storedArticles,
+ StoredArticles.articleStoredInAccessibleSitePredicate(magalieUser)
+ );
+
+ double accessibleQuantity = 0.;
+
+ for (StoredArticle storedArticle : accessibleStoredArticles) {
+
+ accessibleQuantity += storedArticle.getQuantity();
+
+ }
+
+ return accessibleQuantity;
+
+ }
+}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -1,8 +1,10 @@
package com.franciaflex.magalie.services;
import com.franciaflex.magalie.MagalieTechnicalException;
-import com.franciaflex.magalie.dao.JpaMagalieUserDao;
+import com.franciaflex.magalie.dao.StoredArticleDao;
+import com.franciaflex.magalie.dao.jpa.JpaMagalieUserDao;
import com.franciaflex.magalie.dao.MagalieUserDao;
+import com.franciaflex.magalie.dao.jpa.JpaStoredArticleDao;
import javax.persistence.EntityManager;
import java.lang.reflect.Constructor;
@@ -29,7 +31,7 @@
} catch (NoSuchMethodException e) {
- throw new MagalieTechnicalException("all services must provide a non-argument contructor", e);
+ throw new MagalieTechnicalException("all services must provide a non-argument constructor", e);
} catch (InvocationTargetException e) {
@@ -57,4 +59,11 @@
return new JpaMagalieUserDao(entityManager);
}
+
+ @Override
+ public StoredArticleDao getStoredArticleDao() {
+
+ return new JpaStoredArticleDao(entityManager);
+
+ }
}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieException.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieException.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieException.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,20 @@
+package com.franciaflex.magalie.services;
+
+public class MagalieException extends Exception {
+
+ public MagalieException() {
+ }
+
+ public MagalieException(String message) {
+ super(message);
+ }
+
+ public MagalieException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public MagalieException(Throwable cause) {
+ super(cause);
+ }
+
+}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -24,6 +24,7 @@
*/
import com.franciaflex.magalie.dao.MagalieUserDao;
+import com.franciaflex.magalie.dao.StoredArticleDao;
/**
* @author bleny
@@ -34,4 +35,5 @@
MagalieUserDao getMagalieUserDao();
+ StoredArticleDao getStoredArticleDao();
}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -23,12 +23,6 @@
* #L%
*/
-import com.franciaflex.magalie.dao.MagalieUserDao;
-import com.franciaflex.magalie.entity.MagalieUser;
-import com.google.common.collect.ImmutableSet;
-
-import java.util.Set;
-
public class RequestedItemService implements MagalieService {
protected MagalieServiceContext serviceContext;
@@ -39,25 +33,30 @@
public WithdrawTask getWithdrawTask() {
- MagalieUserDao magalieUserDao = serviceContext.getMagalieUserDao();
+ ArticleStorageService articleStorageService = serviceContext.newService(ArticleStorageService.class);
- magalieUserDao.persist(new MagalieUser());
+ // articleStorageService.withdrawArticle();
- Set<Site> sites = ImmutableSet.of(
- new Site("A1", "1", 5),
- new Site("A2", "2", 5),
- new Site("B3", "3", 10),
- new Site("C4", "4", 15),
- new Site("D5", "5", 15)
- );
+// MagalieUserDao magalieUserDao = serviceContext.getMagalieUserDao();
+//
+// magalieUserDao.persist(new MagalieUser());
+//
+// Set<Site> sites = ImmutableSet.of(
+// new Site("A1", "1", 5),
+// new Site("A2", "2", 5),
+// new Site("B3", "3", 10),
+// new Site("C4", "4", 15),
+// new Site("D5", "5", 15)
+// );
+//
+// WithdrawTask withdrawTask = new WithdrawTask();
+//
+// withdrawTask.setQuantity(50);
+// withdrawTask.setUnit("kg");
+// withdrawTask.setSites(sites);
+//
+// return withdrawTask;
- WithdrawTask withdrawTask = new WithdrawTask();
-
- withdrawTask.setQuantity(50);
- withdrawTask.setUnit("kg");
- withdrawTask.setSites(sites);
-
- return withdrawTask;
-
+ throw new UnsupportedOperationException();
}
}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequiredDriverLicenceException.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequiredDriverLicenceException.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequiredDriverLicenceException.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,58 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.MagalieUser;
+
+public class RequiredDriverLicenceException extends MagalieException {
+
+ protected Article article;
+
+ protected MagalieUser magalieUser;
+
+ protected double requestedQuantity;
+
+ protected double accessibleQuantity;
+
+ protected RequiredDriverLicenceException(String message) {
+ super(message);
+ }
+
+ public static void throwIfRequestMoreThanAccessible(double requestedQuantity, double accessibleQuantity, MagalieUser magalieUser, Article article) throws RequiredDriverLicenceException {
+
+ if (requestedQuantity > accessibleQuantity) {
+
+ String message = "requested article " + article
+ + " can not be retrieved since user " + magalieUser
+ + " has no driver license";
+
+ RequiredDriverLicenceException newException = new RequiredDriverLicenceException(message);
+
+ newException.article = article;
+
+ newException.magalieUser = magalieUser;
+
+ newException.requestedQuantity = requestedQuantity;
+
+ newException.accessibleQuantity = accessibleQuantity;
+
+ throw newException;
+
+ }
+ }
+
+ public Article getArticle() {
+ return article;
+ }
+
+ public MagalieUser getMagalieUser() {
+ return magalieUser;
+ }
+
+ public double getRequestedQuantity() {
+ return requestedQuantity;
+ }
+
+ public double getAccessibleQuantity() {
+ return accessibleQuantity;
+ }
+}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/UnavailableArticleException.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/UnavailableArticleException.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/UnavailableArticleException.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,49 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.entity.Article;
+
+public class UnavailableArticleException extends MagalieException {
+
+ protected Article article;
+
+ protected double availableQuantity;
+
+ protected double requestedQuantity;
+
+ protected UnavailableArticleException(String message) {
+ super(message);
+ }
+
+ public static void throwIfRequestMoreThanAvailable(double requestedQuantity, double availableQuantity, Article article) throws UnavailableArticleException {
+
+ if (requestedQuantity > availableQuantity) {
+
+ String message = "requested article " + article
+ + " is not available at expected quantity: requested = " + requestedQuantity
+ + " available = " + availableQuantity;
+
+ UnavailableArticleException newException = new UnavailableArticleException(message);
+
+ newException.article = article;
+
+ newException.availableQuantity = availableQuantity;
+
+ newException.requestedQuantity = requestedQuantity;
+
+ throw newException;
+
+ }
+ }
+
+ public Article getArticle() {
+ return article;
+ }
+
+ public double getAvailableQuantity() {
+ return availableQuantity;
+ }
+
+ public double getRequestedQuantity() {
+ return requestedQuantity;
+ }
+}
Added: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java (rev 0)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawArticleFromSiteTask.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,30 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.entity.*;
+import com.franciaflex.magalie.entity.Site;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+public class WithdrawArticleFromSiteTask {
+
+ protected StoredArticle storedArticle;
+
+ protected double quantity;
+
+ public WithdrawArticleFromSiteTask(StoredArticle storedArticle, double quantity) {
+ this.storedArticle = storedArticle;
+ this.quantity = quantity;
+ }
+
+ public double getQuantity() {
+ return quantity;
+ }
+
+ public Site getSite() {
+ return storedArticle.getSite();
+ }
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
+}
Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java
===================================================================
--- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/WithdrawTask.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -23,32 +23,41 @@
* #L%
*/
+import com.franciaflex.magalie.entity.Article;
+import com.google.common.collect.Sets;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
import java.util.Set;
public class WithdrawTask {
- protected Set<Site> sites;
+ protected Set<WithdrawArticleFromSiteTask> withdrawArticleFromSiteTasks;
- protected String unit;
+ protected Article article;
protected double quantity;
- public Set<Site> getSites() {
- return sites;
+ public WithdrawTask(Article article, double quantity) {
+ this.article = article;
+ this.quantity = quantity;
}
- public void setSites(Set<Site> sites) {
- this.sites = sites;
+ public Set<WithdrawArticleFromSiteTask> getWithdrawArticleFromSiteTasks() {
+ return withdrawArticleFromSiteTasks;
}
- public String getUnit() {
- return unit;
+ public void setWithdrawArticleFromSiteTasks(Set<WithdrawArticleFromSiteTask> withdrawArticleFromSiteTasks) {
+ this.withdrawArticleFromSiteTasks = withdrawArticleFromSiteTasks;
}
- public void setUnit(String unit) {
- this.unit = unit;
+ public Article getArticle() {
+ return article;
}
+ public void setArticle(Article article) {
+ this.article = article;
+ }
+
public double getQuantity() {
return quantity;
}
@@ -56,4 +65,16 @@
public void setQuantity(double quantity) {
this.quantity = quantity;
}
+
+ public void addWithdrawArticleFromSiteTask(WithdrawArticleFromSiteTask withdrawArticleFromSiteTask) {
+ if (withdrawArticleFromSiteTasks == null) {
+ withdrawArticleFromSiteTasks = Sets.newLinkedHashSet();
+ }
+ withdrawArticleFromSiteTasks.add(withdrawArticleFromSiteTask);
+ }
+
+ @Override
+ public String toString() {
+ return ToStringBuilder.reflectionToString(this);
+ }
}
Copied: trunk/magalie-services/src/test/java/com/franciaflex/magalie/MagalieFixtures.java (from rev 28, trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/MagalieFixtures.java)
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/MagalieFixtures.java (rev 0)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/MagalieFixtures.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,46 @@
+package com.franciaflex.magalie;
+
+import com.esotericsoftware.yamlbeans.YamlException;
+import com.esotericsoftware.yamlbeans.YamlReader;
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.MagalieUser;
+import com.franciaflex.magalie.entity.RequestedArticle;
+import com.franciaflex.magalie.entity.Site;
+import com.franciaflex.magalie.entity.StoredArticle;
+import org.apache.commons.io.Charsets;
+import org.apache.commons.io.IOUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+public class MagalieFixtures {
+
+ protected Map<String, Object> fixtures;
+
+ public MagalieFixtures(String fixturesName) {
+ String yamlPath = "/" + fixturesName + ".yaml";
+ InputStream inputStream = getClass().getResourceAsStream(yamlPath);
+ String yaml;
+ try {
+ yaml = IOUtils.toString(inputStream, Charsets.UTF_8);
+ } catch (IOException e) {
+ throw new IllegalArgumentException(fixturesName + " is not a valid fixtures set name", e);
+ }
+ YamlReader reader = new YamlReader(yaml);
+ reader.getConfig().setClassTag("article", Article.class);
+ reader.getConfig().setClassTag("stored-article", StoredArticle.class);
+ reader.getConfig().setClassTag("user", MagalieUser.class);
+ reader.getConfig().setClassTag("requested-article", RequestedArticle.class);
+ reader.getConfig().setClassTag("site", Site.class);
+ try {
+ fixtures = (Map<String, Object>) reader.read();
+ } catch (YamlException e) {
+ throw new MagalieTechnicalException("unable to read yaml file", e);
+ }
+ }
+
+ public <E> E fixture(String id) {
+ return (E) fixtures.get(id);
+ }
+}
Added: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java (rev 0)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/ArticleStorageServiceTest.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,158 @@
+package com.franciaflex.magalie.services;
+
+import com.franciaflex.magalie.MagalieFixtures;
+import com.franciaflex.magalie.dao.MagalieUserDao;
+import com.franciaflex.magalie.dao.StoredArticleDao;
+import com.franciaflex.magalie.entity.Article;
+import com.franciaflex.magalie.entity.MagalieUser;
+import com.franciaflex.magalie.entity.StoredArticle;
+import com.google.common.collect.Iterables;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import java.util.List;
+
+public class ArticleStorageServiceTest {
+
+ private static final Log log = LogFactory.getLog(ArticleStorageServiceTest.class);
+
+ protected static final double DELTA = 0.0001;
+
+ protected ArticleStorageService service;
+
+ protected MagalieFixtures fixtures;
+
+ @Before
+ public void setUp() throws Exception {
+
+ service = new ArticleStorageService();
+
+ fixtures = new MagalieFixtures("fixtures");
+
+ service.setServiceContext(new MagalieServiceContext() {
+
+ @Override
+ public <E extends MagalieService> E newService(Class<E> serviceClass) {
+ return null; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public MagalieUserDao getMagalieUserDao() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public StoredArticleDao getStoredArticleDao() {
+ StoredArticleDao storedArticleDaoMock = Mockito.mock(StoredArticleDao.class);
+ Mockito.when(storedArticleDaoMock.findAllForArticle(Mockito.<Article>any())).thenReturn(
+ fixtures.<List<StoredArticle>>fixture("storedArticlesForArticle1")
+ );
+ return storedArticleDaoMock;
+ }
+ });
+ }
+
+ @Test
+ public void testThrowUnavailableArticle() throws Exception {
+
+ MagalieUser basile = fixtures.fixture("basile");
+ Article article = fixtures.fixture("article1");
+ WithdrawTask withdrawTask;
+
+ try {
+ withdrawTask = service.withdrawArticle(basile, article, 100.);
+ if (log.isDebugEnabled()) {
+ log.debug("withdrawTask = " + withdrawTask);
+ }
+ Assert.fail();
+ } catch (UnavailableArticleException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.assertEquals(70., e.getAvailableQuantity(), DELTA);
+ }
+ }
+
+ @Test
+ public void testThrowRequiredDriverLicenceException() throws Exception {
+
+ MagalieUser basile = fixtures.fixture("basile");
+ Article article = fixtures.fixture("article1");
+ WithdrawTask withdrawTask;
+
+ try {
+ withdrawTask = service.withdrawArticle(basile, article, 70.);
+ if (log.isDebugEnabled()) {
+ log.debug("withdrawTask = " + withdrawTask);
+ }
+ Assert.fail();
+ } catch (RequiredDriverLicenceException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.assertEquals(50., e.getAccessibleQuantity(), DELTA);
+ }
+ }
+
+ @Test
+ public void testWithdrawArticleWithoutDriverLicense() throws Exception {
+
+ MagalieUser basile = fixtures.fixture("basile");
+ Article article = fixtures.fixture("article1");
+ WithdrawTask withdrawTask = null;
+
+ try {
+ withdrawTask = service.withdrawArticle(basile, article, 50.);
+ if (log.isDebugEnabled()) {
+ log.debug("withdrawTask = " + withdrawTask);
+ }
+ } catch (RequiredDriverLicenceException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.fail();
+ } catch (UnavailableArticleException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.fail();
+ }
+
+ Assert.assertEquals(1, withdrawTask.getWithdrawArticleFromSiteTasks().size());
+ }
+
+ @Test
+ public void testWithdrawArticleWithDriverLicense() throws Exception {
+
+ MagalieUser alexandre = fixtures.fixture("alexandre");
+ Article article = fixtures.fixture("article1");
+ WithdrawTask withdrawTask = null;
+
+ try {
+ withdrawTask = service.withdrawArticle(alexandre, article, 50.);
+ if (log.isDebugEnabled()) {
+ log.debug("withdrawTask = " + withdrawTask);
+ }
+ } catch (RequiredDriverLicenceException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.fail();
+ } catch (UnavailableArticleException e) {
+ if (log.isDebugEnabled()) {
+ log.debug("exception raised = " + e);
+ }
+ Assert.fail();
+ }
+
+ Assert.assertEquals(2, withdrawTask.getWithdrawArticleFromSiteTasks().size());
+ WithdrawArticleFromSiteTask site1 = Iterables.get(withdrawTask.getWithdrawArticleFromSiteTasks(), 0, null);
+ Assert.assertEquals(20., site1.getQuantity(), DELTA);
+ WithdrawArticleFromSiteTask site2 = Iterables.get(withdrawTask.getWithdrawArticleFromSiteTasks(), 1, null);
+ Assert.assertEquals(30., site2.getQuantity(), DELTA);
+ }
+}
Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/RequestedItemServiceTest.java
===================================================================
--- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/RequestedItemServiceTest.java 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/RequestedItemServiceTest.java 2013-03-18 17:25:24 UTC (rev 29)
@@ -1,10 +1,29 @@
package com.franciaflex.magalie.services;
+import com.google.common.collect.Sets;
import org.junit.Test;
+import java.util.Comparator;
+import java.util.Set;
+
public class RequestedItemServiceTest {
@Test
public void testGetWithdrawTask() throws Exception {
+
+ Set<Double> doubles = Sets.newTreeSet(new Comparator<Double>() {
+ @Override
+ public int compare(Double o1, Double o2) {
+ return Double.compare(o1, o2);
+ }
+ });
+
+ doubles.add(3.);
+ doubles.add(2.);
+ doubles.add(4.);
+ doubles.add(1.);
+ doubles.add(7.);
+
+ System.out.println(doubles);
}
}
Copied: trunk/magalie-services/src/test/resources/fixtures.yaml (from rev 28, trunk/magalie-persistence/src/test/resources/fixtures.yaml)
===================================================================
--- trunk/magalie-services/src/test/resources/fixtures.yaml (rev 0)
+++ trunk/magalie-services/src/test/resources/fixtures.yaml 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,144 @@
+alexandre:
+ &alexandre !user
+ id: magalie_user_alexandre
+ login: ale
+ name: Alexandre
+ accreditationLevel: 9
+
+basile:
+ &basile !user
+ id: magalie_user_basile
+ login: bas
+ name: Basile
+ accreditationLevel: 0
+
+cathy:
+ &cathy !user
+ id: magalie_user_cathy
+ login: cat
+ name: Cathy
+ accreditationLevel: 9
+
+david:
+ &david !user
+ id: magalie_user_david
+ login: dav
+ name: David
+ accreditationLevel: 0
+
+users:
+ - *alexandre
+ - *basile
+ - *cathy
+ - *david
+
+site1:
+ &site1 !site
+ id: site1
+ storeCode: UO1
+ locationCode: A1
+ requiredAccreditationLevel: 0
+
+site2:
+ &site2 !site
+ id: site2
+ storeCode: UO1
+ locationCode: B2
+ requiredAccreditationLevel: 9
+
+site3:
+ &site3 !site
+ id: site3
+ storeCode: UO1
+ locationCode: C3
+ requiredAccreditationLevel: 0
+
+site4:
+ &site4 !site
+ id: site4
+ storeCode: UO1
+ locationCode: D4
+ requiredAccreditationLevel: 9
+
+site5:
+ &site5 !site
+ id: site5
+ storeCode: UO2
+ locationCode: A1
+ requiredAccreditationLevel: 0
+
+sites:
+ - *site1
+ - *site2
+ - *site3
+ - *site4
+ - *site5
+
+article1:
+ &article1 !article
+ id: article1
+ fixedSite: *site1
+ code: 111111111
+ quantityInKanban: 10
+ unit: kg
+ description: very big screws
+
+article2:
+ &article2 !article
+ id: article2
+ code: 222222222
+ quantityInKanban: 2
+ unit: box
+ description: little buttons
+
+article3:
+ &article3 !article
+ id: article3
+ fixedSite: *site2
+ code: 333333333
+ quantityInKanban: 50
+ unit: g
+ description: magic powder
+
+articles:
+ - *article1
+ - *article2
+ - *article3
+
+storedArticle1:
+ &storedArticle1 !stored-article
+ id: storedArticle1
+ article: *article1
+ site: *site1
+ quantity: 50
+
+storedArticle2:
+ &storedArticle2 !stored-article
+ id: storedArticle2
+ article: *article1
+ site: *site2
+ quantity: 20
+
+storedArticle3:
+ &storedArticle3 !stored-article
+ id: storedArticle3
+ article: *article2
+ site: *site1
+ quantity: 10
+
+storedArticle4:
+ &storedArticle4 !stored-article
+ id: storedArticle4
+ article: *article3
+ site: *site4
+ quantity: 1000
+
+storedArticles:
+ - *storedArticle1
+ - *storedArticle2
+ - *storedArticle3
+ - *storedArticle4
+
+storedArticlesForArticle1:
+ - *storedArticle1
+ - *storedArticle2
Copied: trunk/magalie-services/src/test/resources/log4j.properties (from rev 23, trunk/magalie-web/src/main/resources/log4j.properties)
===================================================================
--- trunk/magalie-services/src/test/resources/log4j.properties (rev 0)
+++ trunk/magalie-services/src/test/resources/log4j.properties 2013-03-18 17:25:24 UTC (rev 29)
@@ -0,0 +1,8 @@
+log4j.rootCategory=ERROR, console
+
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d [%p] %c %m%n
+
+log4j.logger.com.franciaflex.magalie=TRACE
+
Modified: trunk/magalie-web/pom.xml
===================================================================
--- trunk/magalie-web/pom.xml 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-web/pom.xml 2013-03-18 17:25:24 UTC (rev 29)
@@ -32,6 +32,12 @@
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>magalie-persistence</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>magalie-services</artifactId>
<version>${project.version}</version>
</dependency>
Modified: trunk/magalie-web/src/main/resources/log4j.properties
===================================================================
--- trunk/magalie-web/src/main/resources/log4j.properties 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/magalie-web/src/main/resources/log4j.properties 2013-03-18 17:25:24 UTC (rev 29)
@@ -26,7 +26,7 @@
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%p] %c %m%n
-# FileAppender : need to have pollen.log.dir in system properties at application startup
+# FileAppender : need to have magalie.log.dir in system properties at application startup
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${magalie.log.dir}/magalie.log
log4j.appender.file.MaxFileSize=10MB
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2013-03-15 17:34:28 UTC (rev 28)
+++ trunk/pom.xml 2013-03-18 17:25:24 UTC (rev 29)
@@ -262,6 +262,13 @@
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>com.esotericsoftware.yamlbeans</groupId>
+ <artifactId>yamlbeans</artifactId>
+ <version>1.06</version>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
</dependencyManagement>
1
0