Author: mfortun Date: 2011-05-16 17:00:51 +0200 (Mon, 16 May 2011) New Revision: 894 Url: http://nuiton.org/repositories/revision/wikitty/894 Log: * add mutlicontext store support, wikitty originally from fallbackservice are store on fallback not on mainproxy Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java 2011-05-16 13:38:09 UTC (rev 893) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java 2011-05-16 15:00:51 UTC (rev 894) @@ -3,9 +3,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - import org.nuiton.util.ApplicationConfig; import org.nuiton.util.CollectionUtil; import org.nuiton.wikitty.WikittyProxy; @@ -18,6 +15,7 @@ import org.nuiton.wikitty.entities.WikittyUser; import org.nuiton.wikitty.search.Criteria; import org.nuiton.wikitty.search.PagedResult; +import org.nuiton.wikitty.search.Search; import org.nuiton.wikitty.search.TreeNodeResult; import org.nuiton.wikitty.services.WikittyEvent; @@ -212,31 +210,133 @@ } public <E extends BusinessEntity> E store(E e) { - return mainProxy.store(e); + + E result = null; + // if there a fallback proxy and e exist on it, we try to store it again + // on fallbackproxy + if (isFallbackService() + && fallbackProxy.restore(e.getWikittyId()) != null) { + result = fallbackProxy.store(e); + } else { + result = mainProxy.store(e); + } + + return result; } public Wikitty store(Wikitty w) { - // TODO mfortun-2011-05-13 store in wich one ? - // check before if wikitty exist on fall back - // and the stock on it if exist and store after on main + Wikitty result = null; + // if there a fallback proxy and e exist on it, we try to store it again + // on fallbackproxy + if (isFallbackService() && fallbackProxy.restore(w.getId()) != null) { + result = fallbackProxy.store(w); + } else { + result = mainProxy.store(w); + } - return mainProxy.store(w); + return result; } public <E extends BusinessEntity> List<E> store(E e1, E e2, E... eN) { - return mainProxy.store(e1, e2, eN); + + List<E> result = new ArrayList<E>(); + result.add(e1); + result.add(e2); + CollectionUtil.addAll(result, eN); + + // delegate to store list, the easiest to handle store in two + // proxy + return this.store(result); } public Wikitty[] store(Wikitty w1, Wikitty w2, Wikitty... wN) { - return mainProxy.store(w1, w2, wN); + + List<Wikitty> result = new ArrayList<Wikitty>(); + result.add(w1); + result.add(w2); + CollectionUtil.addAll(result, wN); + + // delegate to store wikittylist, the easiest to handle store in two + // proxy + return (Wikitty[]) (this.storeWikitty(result).toArray()); } public <E extends BusinessEntity> List<E> store(List<E> objets) { - return mainProxy.store(objets); + + List<E> result = new ArrayList<E>(); + + List<E> tempObject = new ArrayList<E>(); + tempObject.addAll(objets); + + if (isFallbackService()) { + + List<String> ids = new ArrayList<String>(); + + // retrieve string id + for (E e : objets) { + ids.add(e.getWikittyId()); + } + + List<Criteria> criterias = idInIdsCriteriaConstructor(ids); + + // retrieve wikitty's id that exist on fallbackservice + List<String> containedFallId = fallbackProxy + .findIdByCriteria(criterias); + + List<E> toStoreOnFall = new ArrayList<E>(); + // order wikitty that have to be save on fall back + for (E e : objets) { + if (containedFallId.contains(e.getWikittyId())) { + toStoreOnFall.add(e); + tempObject.remove(e); + } + } + // save wikitty on fall back + result.addAll(fallbackProxy.store(toStoreOnFall)); + + } + + result.addAll(mainProxy.store(tempObject)); + return result; } public List<Wikitty> storeWikitty(List<Wikitty> wikitties) { - return mainProxy.storeWikitty(wikitties); + + List<Wikitty> result = new ArrayList<Wikitty>(); + + List<Wikitty> tempObject = new ArrayList<Wikitty>(); + tempObject.addAll(wikitties); + + if (isFallbackService()) { + + List<String> ids = new ArrayList<String>(); + + // retrieve string id + for (Wikitty w : wikitties) { + ids.add(w.getId()); + } + + List<Criteria> criterias = idInIdsCriteriaConstructor(ids); + + // retrieve wikitty's id that exist on fallbackservice + List<String> containedFallId = fallbackProxy + .findIdByCriteria(criterias); + + List<Wikitty> toStoreOnFall = new ArrayList<Wikitty>(); + // order wikitty that have to be save on fall back + for (Wikitty w : wikitties) { + if (containedFallId.contains(w.getId())) { + toStoreOnFall.add(w); + tempObject.remove(w); + } + } + // save wikitty on fall back + result.addAll(fallbackProxy.storeWikitty(toStoreOnFall)); + + } + + result.addAll(mainProxy.storeWikitty(tempObject)); + return result; } public <E extends BusinessEntity> E restore(Class<E> clazz, String id, @@ -392,6 +492,7 @@ public <E extends BusinessEntity> PagedResult<E> findAllByCriteria( Class<E> clazz, Criteria criteria) { + return mainProxy.findAllByCriteria(clazz, criteria); } @@ -427,7 +528,7 @@ } public List<String> findIdByCriteria(List<Criteria> criteria) { - + List<String> result = mainProxy.findIdByCriteria(criteria); if (isFallbackService()) { @@ -444,26 +545,23 @@ } return result; - - - + } public String findIdByCriteria(Criteria criteria) { - + String result = mainProxy.findIdByCriteria(criteria); - + if (isFallbackService() && result == null) { result = fallbackProxy.findIdByCriteria(criteria); } - - return result; + + return result; } public String[] findIdByCriteria(Criteria c1, Criteria c2, Criteria... otherCriteria) { - - + String[] result = mainProxy.findIdByCriteria(c1, c2, otherCriteria); if (isFallbackService()) { @@ -491,8 +589,7 @@ public <E extends BusinessEntity> List<E> findByCriteria(Class<E> clazz, List<Criteria> criterias) { - - + List<E> result = mainProxy.findByCriteria(clazz, criterias); if (isFallbackService()) { @@ -500,8 +597,8 @@ result = fallbackProxy.findByCriteria(clazz, criterias); } else { // merge list - List<E> resultFallback = fallbackProxy - .findByCriteria(clazz, criterias); + List<E> resultFallback = fallbackProxy.findByCriteria(clazz, + criterias); // this allow to element from main to prevail resultFallback.removeAll(result); result.addAll(resultFallback); @@ -513,13 +610,13 @@ public <E extends BusinessEntity> E findByCriteria(Class<E> clazz, Criteria criteria) { - + E result = mainProxy.findByCriteria(clazz, criteria); - + if (isFallbackService() && result == null) { result = fallbackProxy.findByCriteria(clazz, criteria); } - + return result; } @@ -815,4 +912,21 @@ return result; } + /** + * construct list criteria on wikitty id: used to search wikittyid in + * wikittyIDCollection. used to check if an id exist on a wikitty service + * + * @param ids + * @return criterias on id + */ + protected List<Criteria> idInIdsCriteriaConstructor(List<String> ids) { + + List<Criteria> result = new ArrayList<Criteria>(); + + for (String id : ids) { + result.add(Search.query().ideq(id).criteria()); + } + return result; + } + }
participants (1)
-
mfortun@users.nuiton.org