Author: mfortun Date: 2011-05-16 15:38:09 +0200 (Mon, 16 May 2011) New Revision: 893 Url: http://nuiton.org/repositories/revision/wikitty/893 Log: * multicontext support except for pagedResult return type and storage methods 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 10:00:20 UTC (rev 892) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java 2011-05-16 13:38:09 UTC (rev 893) @@ -7,6 +7,7 @@ import java.util.Map.Entry; import org.nuiton.util.ApplicationConfig; +import org.nuiton.util.CollectionUtil; import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.WikittyService; import org.nuiton.wikitty.WikittyServiceFactory; @@ -117,6 +118,35 @@ return fallbackProxy != null; } + public WikittyProxy getFallbackProxy() { + return fallbackProxy; + } + + public void setFallbackProxy(WikittyProxy fallbackProxy) { + this.fallbackProxy = fallbackProxy; + } + + public WikittyProxy getMainProxy() { + return mainProxy; + } + + public void setMainProxy(WikittyProxy mainProxy) { + this.mainProxy = mainProxy; + } + + public void setFallbackWikittyService(WikittyService service) { + fallbackProxy.setWikittyService(service); + } + + public WikittyService getFallbackWikittyService() { + return fallbackProxy.getWikittyService(); + } + + /* + * Beginning of redefinition method that take care of merge between result + * of the proxy and fallback proxy if any + */ + public void login(String login, String password) { mainProxy.login(login, password); if (isFallbackService()) { @@ -132,7 +162,11 @@ } public String getSecurityToken() { - return mainProxy.getSecurityToken(); + String result = mainProxy.getSecurityToken(); + + // TODO mfortun-2011-05-16 do something on fallback ? + + return result; } public void setSecurityToken(String securityToken) { @@ -143,11 +177,20 @@ } public WikittyUser getUser() { - return mainProxy.getUser(); + WikittyUser result = mainProxy.getUser(); + + // TODO mfortun-2011-05-16 do something on fallback ? + + return result; } public <E extends BusinessEntity> E getUser(Class<E> clazz) { - return mainProxy.getUser(clazz); + + E result = mainProxy.getUser(clazz); + + // TODO mfortun-2011-05-16 do something on fallback ? + + return result; } public WikittyService getWikittyService() { @@ -160,7 +203,12 @@ public <E extends BusinessEntity> E cast(BusinessEntity source, Class<E> target) { - return mainProxy.cast(source, target); + + E result = mainProxy.cast(source, target); + + // TODO mfortun-2011-05-16 do something on fallback ? + + return result; } public <E extends BusinessEntity> E store(E e) { @@ -193,7 +241,13 @@ public <E extends BusinessEntity> E restore(Class<E> clazz, String id, boolean checkExtension) { - return mainProxy.restore(clazz, id, checkExtension); + E result = mainProxy.restore(clazz, id, checkExtension); + + if (isFallbackService() && result == null) { + result = fallbackProxy.restore(clazz, id, checkExtension); + } + + return result; } public Wikitty restore(String id) { @@ -217,11 +271,22 @@ } public List<Wikitty> restore(List<String> id) { - List<Wikitty> result = mainProxy.restore(id); - // TODO mfortun-2011-05-13 need to merge the two list - if (isFallbackService() && result == null) { - result = fallbackProxy.restore(id); + List<Wikitty> result = new ArrayList<Wikitty>(); + + result.addAll(mainProxy.restore(id)); + + if (isFallbackService()) { + // prepare a list with wikitty id that have not been retrieve by the + // first proxy + List<String> unusedId = new ArrayList<String>(); + unusedId.addAll(id); + + for (Wikitty wikitty : result) { + unusedId.remove(wikitty.getId()); + } + + result.addAll(fallbackProxy.restore(unusedId)); } return result; @@ -231,10 +296,23 @@ public <E extends BusinessEntity> List<E> restore(Class<E> clazz, List<String> id, boolean checkExtension) { - List<E> result = mainProxy.restore(clazz, id, checkExtension); + List<E> result = new ArrayList<E>(); - if (isFallbackService() && result == null) { - result = fallbackProxy.restore(clazz, id, checkExtension); + result.addAll(mainProxy.restore(clazz, id, checkExtension)); + + if (isFallbackService()) { + + // prepare a list with wikitty id that have not been retrieve by the + // first proxy + List<String> unusedId = new ArrayList<String>(); + unusedId.addAll(id); + + for (E wikitty : result) { + unusedId.remove(wikitty.getWikittyId()); + } + + result.addAll(fallbackProxy + .restore(clazz, unusedId, checkExtension)); } return result; @@ -242,39 +320,54 @@ public <E extends BusinessEntity> List<E> restore(Class<E> clazz, List<String> id) { - return mainProxy.restore(clazz, id); + + List<E> result = new ArrayList<E>(); + + result.addAll(mainProxy.restore(clazz, id)); + + if (isFallbackService()) { + + // prepare a list with wikitty id that have not been retrieve by the + // first proxy + List<String> unusedId = new ArrayList<String>(); + unusedId.addAll(id); + + for (E wikitty : result) { + unusedId.remove(wikitty.getWikittyId()); + } + + result.addAll(fallbackProxy.restore(clazz, unusedId)); + } + + return result; } public void delete(String id) { mainProxy.delete(id); - if (isFallbackService()){ + if (isFallbackService()) { fallbackProxy.delete(id); } - } public <E extends BusinessEntity> void delete(E object) { mainProxy.delete(object); - if (isFallbackService()){ + if (isFallbackService()) { fallbackProxy.delete(object); } - } public void delete(Collection<String> ids) { mainProxy.delete(ids); - if (isFallbackService()){ + if (isFallbackService()) { fallbackProxy.delete(ids); } - } public <E extends BusinessEntity> void delete(List<E> objets) { mainProxy.delete(objets); - if (isFallbackService()){ + if (isFallbackService()) { fallbackProxy.delete(objets); } - } public <E extends BusinessEntityImpl> PagedResult<E> findAllByExample(E e, @@ -283,7 +376,13 @@ } public <E extends BusinessEntityImpl> E findByExample(E e) { - return mainProxy.findByExample(e); + E result = mainProxy.findByExample(e); + + if (isFallbackService() && result == null) { + result = fallbackProxy.findByExample(e); + } + + return result; } public <E extends BusinessEntity> List<PagedResult<E>> findAllByCriteria( @@ -328,59 +427,200 @@ } public List<String> findIdByCriteria(List<Criteria> criteria) { - return mainProxy.findIdByCriteria(criteria); + + List<String> result = mainProxy.findIdByCriteria(criteria); + + if (isFallbackService()) { + if (result == null) { + result = fallbackProxy.findIdByCriteria(criteria); + } else { + // merge list + List<String> resultFallback = fallbackProxy + .findIdByCriteria(criteria); + // this allow to element from main to prevail + resultFallback.removeAll(result); + result.addAll(resultFallback); + } + } + + return result; + + + } public String findIdByCriteria(Criteria criteria) { - return mainProxy.findIdByCriteria(criteria); + + String result = mainProxy.findIdByCriteria(criteria); + + if (isFallbackService() && result == null) { + result = fallbackProxy.findIdByCriteria(criteria); + } + + return result; } public String[] findIdByCriteria(Criteria c1, Criteria c2, Criteria... otherCriteria) { - return mainProxy.findIdByCriteria(c1, c2, otherCriteria); + + + String[] result = mainProxy.findIdByCriteria(c1, c2, otherCriteria); + + if (isFallbackService()) { + if (result == null) { + result = fallbackProxy.findIdByCriteria(c1, c2, otherCriteria); + } else { + // merge list + List<String> resultFallback = new ArrayList<String>(); + CollectionUtil.addAll(resultFallback, + fallbackProxy.findIdByCriteria(c1, c2, otherCriteria)); + + List<String> resultMain = new ArrayList<String>(); + CollectionUtil.addAll(resultMain, result); + + // this allow to element from main to prevail + resultFallback.removeAll(resultMain); + resultMain.addAll(resultFallback); + + result = (String[]) resultMain.toArray(); + } + } + + return result; } public <E extends BusinessEntity> List<E> findByCriteria(Class<E> clazz, List<Criteria> criterias) { - return mainProxy.findByCriteria(clazz, criterias); + + + List<E> result = mainProxy.findByCriteria(clazz, criterias); + + if (isFallbackService()) { + if (result == null) { + result = fallbackProxy.findByCriteria(clazz, criterias); + } else { + // merge list + List<E> resultFallback = fallbackProxy + .findByCriteria(clazz, criterias); + // this allow to element from main to prevail + resultFallback.removeAll(result); + result.addAll(resultFallback); + } + } + + return result; } public <E extends BusinessEntity> E findByCriteria(Class<E> clazz, Criteria criteria) { - return mainProxy.findByCriteria(clazz, criteria); + + E result = mainProxy.findByCriteria(clazz, criteria); + + if (isFallbackService() && result == null) { + result = fallbackProxy.findByCriteria(clazz, criteria); + } + + return result; } public <E extends BusinessEntity> E[] findByCriteria(Class<E> clazz, Criteria c1, Criteria c2, Criteria... otherCriteria) { - return mainProxy.findByCriteria(clazz, c1, c2, otherCriteria); + + E[] result = mainProxy.findByCriteria(clazz, c1, c2, otherCriteria); + + if (isFallbackService()) { + if (result == null) { + result = fallbackProxy.findByCriteria(clazz, c1, c2, + otherCriteria); + } else { + // merge list + List<E> resultFallback = new ArrayList<E>(); + CollectionUtil.addAll(resultFallback, fallbackProxy + .findByCriteria(clazz, c1, c2, otherCriteria)); + + List<E> resultMain = new ArrayList<E>(); + CollectionUtil.addAll(resultMain, result); + + // this allow to element from main to prevail + resultFallback.removeAll(resultMain); + resultMain.addAll(resultFallback); + + result = (E[]) resultMain.toArray(); + } + } + + return result; } public List<Wikitty> findByCriteria(List<Criteria> criteria) { - return mainProxy.findByCriteria(criteria); + + List<Wikitty> result = mainProxy.findByCriteria(criteria); + + if (isFallbackService()) { + if (result == null) { + result = fallbackProxy.findByCriteria(criteria); + } else { + // merge list + List<Wikitty> resultFallback = fallbackProxy + .findByCriteria(criteria); + // this allow to element from main to prevail + resultFallback.removeAll(result); + result.addAll(resultFallback); + } + } + + return result; } public Wikitty findByCriteria(Criteria criteria) { - return mainProxy.findByCriteria(criteria); + + Wikitty result = mainProxy.findByCriteria(criteria); + + if (isFallbackService() && result == null) { + result = fallbackProxy.findByCriteria(criteria); + } + + return result; } public Wikitty[] findByCriteria(Criteria c1, Criteria c2, Criteria... otherCriteria) { - - - - - return mainProxy.findByCriteria(c1, c2, otherCriteria); + + Wikitty[] result = mainProxy.findByCriteria(c1, c2, otherCriteria); + + if (isFallbackService()) { + if (result == null) { + result = fallbackProxy.findByCriteria(c1, c2, otherCriteria); + } else { + // merge list + List<Wikitty> resultFallback = new ArrayList<Wikitty>(); + CollectionUtil.addAll(resultFallback, + fallbackProxy.findByCriteria(c1, c2, otherCriteria)); + + List<Wikitty> resultMain = new ArrayList<Wikitty>(); + CollectionUtil.addAll(resultMain, result); + + // this allow to element from main to prevail + resultFallback.removeAll(resultMain); + resultMain.addAll(resultFallback); + + result = (Wikitty[]) resultMain.toArray(); + } + } + + return result; } public TreeNodeResult<Wikitty> findTreeNode(String wikittyId, int depth, boolean count, Criteria filter) { - TreeNodeResult<Wikitty> result = mainProxy.findTreeNode(wikittyId, depth, count, filter); - + TreeNodeResult<Wikitty> result = mainProxy.findTreeNode(wikittyId, + depth, count, filter); + if (isFallbackService() && result == null) { - result = fallbackProxy.findTreeNode(wikittyId, depth, count, filter); + result = fallbackProxy + .findTreeNode(wikittyId, depth, count, filter); } - - + return result; } @@ -499,7 +739,13 @@ result.addAll(mainProxy.getAllExtensionIds()); if (isFallbackService()) { - result.addAll(fallbackProxy.getAllExtensionIds()); + + List<String> temp = fallbackProxy.getAllExtensionIds(); + + // assert that not have duplicate entry + result.removeAll(temp); + result.addAll(temp); + } return result; @@ -510,7 +756,12 @@ result.addAll(mainProxy.getAllExtensionsRequires(extensionName)); if (isFallbackService()) { - result.addAll(fallbackProxy.getAllExtensionsRequires(extensionName)); + List<String> temp = fallbackProxy + .getAllExtensionsRequires(extensionName); + + // assert that not have duplicate entry + result.removeAll(temp); + result.addAll(temp); } return result;