Author: bleny Date: 2013-04-12 11:24:13 +0200 (Fri, 12 Apr 2013) New Revision: 91 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: introduce requested lists Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedListJpaDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedList.java Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedArticle.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java trunk/magalie-services/src/main/resources/fixtures.yaml trunk/magalie-services/src/main/resources/fixtures2.yaml Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java 2013-04-11 21:40:01 UTC (rev 90) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java 2013-04-12 09:24:13 UTC (rev 91) @@ -7,6 +7,7 @@ import com.franciaflex.magalie.persistence.dao.RequestedArticleDao; import com.franciaflex.magalie.persistence.dao.LocationDao; import com.franciaflex.magalie.persistence.dao.LocationErrorDao; +import com.franciaflex.magalie.persistence.dao.RequestedListDao; import com.franciaflex.magalie.persistence.dao.StorageMovementDao; import com.franciaflex.magalie.persistence.dao.StorageMovementOrderDao; import com.franciaflex.magalie.persistence.dao.WarehouseDao; @@ -18,6 +19,7 @@ import com.franciaflex.magalie.persistence.dao.jpa.LocationJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.MagalieUserJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.RequestedArticleJpaDao; +import com.franciaflex.magalie.persistence.dao.jpa.RequestedListJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.StorageMovementJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.StorageMovementOrderJpaDao; import com.franciaflex.magalie.persistence.dao.jpa.WarehouseJpaDao; @@ -41,6 +43,27 @@ } @Override + public void commit() { + entityTransaction.commit(); + entityTransaction = entityManager.getTransaction(); + entityTransaction.begin(); + } + + @Override + public void rollback() { + entityTransaction.rollback(); + entityTransaction = entityManager.getTransaction(); + entityTransaction.begin(); + } + + @Override + public void clearDatabase() { + rollback(); + JpaUtil.cleanDatabase(entityManager); + commit(); + } + + @Override public MagalieUserDao getMagalieUserDao() { return new MagalieUserJpaDao(entityManager); } @@ -96,23 +119,8 @@ } @Override - public void commit() { - entityTransaction.commit(); - entityTransaction = entityManager.getTransaction(); - entityTransaction.begin(); + public RequestedListDao getRequestedListDao() { + return new RequestedListJpaDao(entityManager); } - @Override - public void rollback() { - entityTransaction.rollback(); - entityTransaction = entityManager.getTransaction(); - entityTransaction.begin(); - } - - @Override - public void clearDatabase() { - rollback(); - JpaUtil.cleanDatabase(entityManager); - commit(); - } } Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java 2013-04-11 21:40:01 UTC (rev 90) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java 2013-04-12 09:24:13 UTC (rev 91) @@ -3,14 +3,15 @@ import com.franciaflex.magalie.persistence.dao.ArticleDao; import com.franciaflex.magalie.persistence.dao.BuildingDao; import com.franciaflex.magalie.persistence.dao.DeliveredRequestedArticleDao; +import com.franciaflex.magalie.persistence.dao.LocationDao; +import com.franciaflex.magalie.persistence.dao.LocationErrorDao; import com.franciaflex.magalie.persistence.dao.MagalieUserDao; import com.franciaflex.magalie.persistence.dao.RequestedArticleDao; -import com.franciaflex.magalie.persistence.dao.LocationDao; -import com.franciaflex.magalie.persistence.dao.LocationErrorDao; +import com.franciaflex.magalie.persistence.dao.RequestedListDao; import com.franciaflex.magalie.persistence.dao.StorageMovementDao; import com.franciaflex.magalie.persistence.dao.StorageMovementOrderDao; +import com.franciaflex.magalie.persistence.dao.StoredArticleDao; import com.franciaflex.magalie.persistence.dao.WarehouseDao; -import com.franciaflex.magalie.persistence.dao.StoredArticleDao; /** * @author bleny @@ -44,4 +45,7 @@ BuildingDao getBuildingDao(); WarehouseDao getWarehouseDao(); + + RequestedListDao getRequestedListDao(); + } Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java 2013-04-11 21:40:01 UTC (rev 90) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/RequestedArticles.java 2013-04-12 09:24:13 UTC (rev 91) @@ -1,18 +1,25 @@ package com.franciaflex.magalie.persistence; import com.franciaflex.magalie.persistence.entity.RequestedArticle; +import com.franciaflex.magalie.persistence.entity.RequestedList; +import com.google.common.base.Function; +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.Maps; +import com.google.common.collect.Multimaps; import org.apache.commons.collections.comparators.BooleanComparator; +import java.util.Collection; import java.util.Comparator; +import java.util.List; import java.util.Map; public class RequestedArticles { - protected static final class UrgentFirstComparator implements Comparator<RequestedArticle> { + protected static class UrgentFirstComparator implements Comparator<RequestedArticle> { @Override public int compare(RequestedArticle x, RequestedArticle y) { - return BooleanComparator.getTrueFirstComparator().compare(x.isUrgent(), y.isUrgent()); + return BooleanComparator.getTrueFirstComparator().compare(x.getRequestedList().isUrgent(), y.getRequestedList().isUrgent()); } } @@ -21,32 +28,41 @@ @Override public int compare(RequestedArticle x, RequestedArticle y) { - return x.getRequestDate().compareTo(y.getRequestDate()); + return x.getRequestedList().getRequestDate().compareTo(y.getRequestedList().getRequestDate()); } } protected static class FinishEarlyFirstComparator implements Comparator<RequestedArticle> { - protected Map<String, Integer> requestListToArticleRemainingCount; + protected Map<RequestedList, Integer> requestListToArticleRemainingCount; - // TODO brendan 05/04/13 something to do here + public FinishEarlyFirstComparator(Map<RequestedList, Integer> requestListToArticleRemainingCount) { + this.requestListToArticleRemainingCount = requestListToArticleRemainingCount; + } protected int getRemainingCount(RequestedArticle requestedArticle) { - Integer remainingCount = requestListToArticleRemainingCount.get(requestedArticle.getRequestList()); - return remainingCount == null ? Integer.MAX_VALUE : remainingCount; + Integer remainingCount = requestListToArticleRemainingCount.get(requestedArticle.getRequestedList()); + return remainingCount; } @Override public int compare(RequestedArticle x, RequestedArticle y) { - return 0; -// int xRemainingCount = getRemainingCount(x); -// int yRemainingCount = getRemainingCount(y); -// return xRemainingCount - yRemainingCount; + int xRemainingCount = getRemainingCount(x); + int yRemainingCount = getRemainingCount(y); + return xRemainingCount - yRemainingCount; } } + protected static class GetRequestList implements Function<RequestedArticle, RequestedList> { + + @Override + public RequestedList apply(RequestedArticle requestedArticle) { + return requestedArticle.getRequestedList(); + } + } + public static Comparator<RequestedArticle> urgentFirstComparator() { return new UrgentFirstComparator(); } @@ -55,7 +71,28 @@ return new RequestDateFistComparator(); } - public static Comparator<RequestedArticle> finishEarlyFirstComparator() { - return new FinishEarlyFirstComparator(); + public static Comparator<RequestedArticle> finishEarlyFirstComparator(List<RequestedArticle> requests) { + + ImmutableListMultimap<RequestedList, RequestedArticle> index = + Multimaps.index(requests, RequestedArticles.getRequestList()); + + Map<RequestedList, Integer> requestListToArticleRemainingCount = Maps.newHashMap(); + + for (Map.Entry<RequestedList, Collection<RequestedArticle>> requestedListCollectionEntry : index.asMap().entrySet()) { + + RequestedList requestedList = requestedListCollectionEntry.getKey(); + + int remainingCount = requestedListCollectionEntry.getValue().size(); + + requestListToArticleRemainingCount.put(requestedList, remainingCount); + + } + + return new FinishEarlyFirstComparator(requestListToArticleRemainingCount); + } + + public static Function<RequestedArticle, RequestedList> getRequestList() { + return new GetRequestList(); + } } Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/RequestedListDao.java 2013-04-12 09:24:13 UTC (rev 91) @@ -0,0 +1,10 @@ +package com.franciaflex.magalie.persistence.dao; + +import com.franciaflex.magalie.persistence.entity.RequestedList; + +/** + * @author bleny + */ +public interface RequestedListDao extends Dao<RequestedList> { + +} Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedListJpaDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedListJpaDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/dao/jpa/RequestedListJpaDao.java 2013-04-12 09:24:13 UTC (rev 91) @@ -0,0 +1,19 @@ +package com.franciaflex.magalie.persistence.dao.jpa; + +import com.franciaflex.magalie.persistence.dao.RequestedListDao; +import com.franciaflex.magalie.persistence.entity.RequestedList; + +import javax.persistence.EntityManager; + +public class RequestedListJpaDao extends AbstractJpaDao<RequestedList> implements RequestedListDao { + + public RequestedListJpaDao(EntityManager entityManager) { + super(entityManager); + } + + @Override + protected Class<RequestedList> getEntityClass() { + return RequestedList.class; + } + +} Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedArticle.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedArticle.java 2013-04-11 21:40:01 UTC (rev 90) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedArticle.java 2013-04-12 09:24:13 UTC (rev 91) @@ -3,7 +3,6 @@ import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToOne; -import java.util.Date; @Entity public class RequestedArticle extends AbstractEntity { @@ -14,12 +13,9 @@ @ManyToOne protected Article article; - protected String requestList; + @ManyToOne + protected RequestedList requestedList; - protected Date requestDate; - - protected boolean urgent; - protected double quantity; @Override @@ -31,30 +27,6 @@ this.id = id; } - public String getRequestList() { - return requestList; - } - - public void setRequestList(String requestList) { - this.requestList = requestList; - } - - public Date getRequestDate() { - return requestDate; - } - - public void setRequestDate(Date requestDate) { - this.requestDate = requestDate; - } - - public boolean isUrgent() { - return urgent; - } - - public void setUrgent(boolean urgent) { - this.urgent = urgent; - } - public Article getArticle() { return article; } @@ -70,4 +42,12 @@ public void setQuantity(double quantity) { this.quantity = quantity; } + + public RequestedList getRequestedList() { + return requestedList; + } + + public void setRequestedList(RequestedList requestedList) { + this.requestedList = requestedList; + } } Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedList.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedList.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/entity/RequestedList.java 2013-04-12 09:24:13 UTC (rev 91) @@ -0,0 +1,51 @@ +package com.franciaflex.magalie.persistence.entity; + +import javax.persistence.Entity; +import javax.persistence.Id; +import java.util.Date; + +@Entity +public class RequestedList extends AbstractEntity { + + @Id + protected String id; + + protected String code; + + protected Date requestDate; + + protected boolean urgent; + + @Override + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Date getRequestDate() { + return requestDate; + } + + public void setRequestDate(Date requestDate) { + this.requestDate = requestDate; + } + + public boolean isUrgent() { + return urgent; + } + + public void setUrgent(boolean urgent) { + this.urgent = urgent; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java 2013-04-11 21:40:01 UTC (rev 90) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieFixtures.java 2013-04-12 09:24:13 UTC (rev 91) @@ -8,6 +8,7 @@ import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.persistence.entity.RequestedArticle; import com.franciaflex.magalie.persistence.entity.Location; +import com.franciaflex.magalie.persistence.entity.RequestedList; import com.franciaflex.magalie.persistence.entity.Warehouse; import com.franciaflex.magalie.persistence.entity.StoredArticle; import org.apache.commons.io.Charsets; @@ -37,6 +38,7 @@ reader.getConfig().setClassTag("stored-article", StoredArticle.class); reader.getConfig().setClassTag("user", MagalieUser.class); reader.getConfig().setClassTag("requested-article", RequestedArticle.class); + reader.getConfig().setClassTag("requested-list", RequestedList.class); reader.getConfig().setClassTag("location", Location.class); try { fixtures = (Map<String, Object>) reader.read(); Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java 2013-04-11 21:40:01 UTC (rev 90) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java 2013-04-12 09:24:13 UTC (rev 91) @@ -3,18 +3,20 @@ import com.franciaflex.magalie.persistence.MagaliePersistenceContext; import com.franciaflex.magalie.persistence.dao.ArticleDao; import com.franciaflex.magalie.persistence.dao.BuildingDao; +import com.franciaflex.magalie.persistence.dao.LocationDao; import com.franciaflex.magalie.persistence.dao.MagalieUserDao; import com.franciaflex.magalie.persistence.dao.RequestedArticleDao; -import com.franciaflex.magalie.persistence.dao.LocationDao; +import com.franciaflex.magalie.persistence.dao.RequestedListDao; +import com.franciaflex.magalie.persistence.dao.StoredArticleDao; import com.franciaflex.magalie.persistence.dao.WarehouseDao; -import com.franciaflex.magalie.persistence.dao.StoredArticleDao; import com.franciaflex.magalie.persistence.entity.Article; import com.franciaflex.magalie.persistence.entity.Building; +import com.franciaflex.magalie.persistence.entity.Location; import com.franciaflex.magalie.persistence.entity.MagalieUser; import com.franciaflex.magalie.persistence.entity.RequestedArticle; -import com.franciaflex.magalie.persistence.entity.Location; +import com.franciaflex.magalie.persistence.entity.RequestedList; +import com.franciaflex.magalie.persistence.entity.StoredArticle; import com.franciaflex.magalie.persistence.entity.Warehouse; -import com.franciaflex.magalie.persistence.entity.StoredArticle; import com.franciaflex.magalie.services.MagalieFixtures; import com.franciaflex.magalie.services.MagalieService; import com.franciaflex.magalie.services.MagalieServiceContext; @@ -145,6 +147,18 @@ persistenceContext.commit(); + RequestedListDao requestedListDao = persistenceContext.getRequestedListDao(); + + Collection<RequestedList> requestedLists = fixtures.fixture("requestedLists"); + + for (RequestedList requestedList : requestedLists) { + + requestedListDao.persist(requestedList); + + } + + persistenceContext.commit(); + RequestedArticleDao requestedArticleDao = persistenceContext.getRequestedArticleDao(); Collection<RequestedArticle> requestedArticles = fixtures.fixture("requestedArticles"); Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-04-11 21:40:01 UTC (rev 90) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-04-12 09:24:13 UTC (rev 91) @@ -189,7 +189,7 @@ Comparator<RequestedArticle> priorityComparator = Ordering.compound( Lists.newArrayList( - RequestedArticles.finishEarlyFirstComparator(), + RequestedArticles.finishEarlyFirstComparator(requests), RequestedArticles.urgentFirstComparator(), RequestedArticles.requestDateFirstComparator() ) Modified: trunk/magalie-services/src/main/resources/fixtures.yaml =================================================================== --- trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-11 21:40:01 UTC (rev 90) +++ trunk/magalie-services/src/main/resources/fixtures.yaml 2013-04-12 09:24:13 UTC (rev 91) @@ -385,61 +385,66 @@ storedArticlesForArticle6: - *storedArticle13 +requestedList1: + &requestedList1 !requested-list + id: requestedList1 + code: 123456789 + requestDate: 2013-04-08 12:00:00 + urgent: true + +requestedList2: + &requestedList2 !requested-list + id: requestedList2 + code: 123456789 + requestDate: 2013-04-08 12:00:00 + urgent: false + +requestedLists: + - *requestedList1 + - *requestedList2 + requestedArticle1: &requestedArticle1 !requested-article id: requestedArticle1 article: *article1 quantity: 80 - requestList: 123456789 - requestDate: 2013-04-08 12:00:00 - urgent: true + requestedList: *requestedList1 requestedArticle2: &requestedArticle2 !requested-article id: requestedArticle2 article: *article2 quantity: 11 - requestList: 123456789 - requestDate: 2013-04-08 12:00:00 - urgent: false + requestedList: *requestedList1 requestedArticle3: &requestedArticle3 !requested-article id: requestedArticle3 article: *article3 quantity: 111 - requestList: 123456789 - requestDate: 2013-04-08 12:00:00 - urgent: true + requestedList: *requestedList1 requestedArticle4: &requestedArticle4 !requested-article id: requestedArticle4 article: *article4 quantity: 2 - requestList: 123456789 - requestDate: 2013-04-08 12:00:00 - urgent: true + requestedList: *requestedList1 requestedArticle5: &requestedArticle5 !requested-article id: requestedArticle5 article: *article5 quantity: 5 - requestList: 987654321 - requestDate: 2013-04-08 12:00:00 - urgent: true + requestedList: *requestedList2 requestedArticle6: &requestedArticle6 !requested-article id: requestedArticle6 article: *article6 quantity: 27 - requestList: 987654321 - requestDate: 2013-04-08 12:00:00 - urgent: true + requestedList: *requestedList2 - requestedArticles: - *requestedArticle1 - *requestedArticle2 Modified: trunk/magalie-services/src/main/resources/fixtures2.yaml =================================================================== --- trunk/magalie-services/src/main/resources/fixtures2.yaml 2013-04-11 21:40:01 UTC (rev 90) +++ trunk/magalie-services/src/main/resources/fixtures2.yaml 2013-04-12 09:24:13 UTC (rev 91) @@ -193,23 +193,37 @@ - *storedArticle1 - *storedArticle2 +requestedList1: + &requestedList1 !requested-list + id: requestedList1 + code: 987654321 + requestDate: 2013-04-08 12:00:00 + urgent: true + +requestedList2: + &requestedList2 !requested-list + id: requestedList2 + code: 123456789 + requestDate: 2013-04-08 12:00:00 + urgent: false + +requestedLists: + - *requestedList1 + - *requestedList2 + requestedArticle1: &requestedArticle1 !requested-article id: requestedArticle1 article: *article3 quantity: 100 - requestList: 123456789 - requestDate: 2013-04-08 12:00:00 - urgent: true + requestedList: *requestedList1 requestedArticle2: &requestedArticle2 !requested-article id: requestedArticle2 article: *article3 quantity: 250 - requestList: 123456789 - requestDate: 2013-04-08 12:00:00 - urgent: false + requestedList: *requestedList2 requestedArticles: - *requestedArticle1