Author: mfortun Date: 2011-05-25 11:27:37 +0200 (Wed, 25 May 2011) New Revision: 920 Url: http://nuiton.org/repositories/revision/wikitty/920 Log: * fallback feature implemented with a wikitty service * remove fallback feature from proxy * remove fallback config from publication config Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackService.java trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java 2011-05-24 15:52:09 UTC (rev 919) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationConfig.java 2011-05-25 09:27:37 UTC (rev 920) @@ -1,56 +1,34 @@ package org.nuiton.wikitty.publication; - import java.util.Properties; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; import org.nuiton.util.ArgumentsParserException; -import org.nuiton.wikitty.publication.synchro.PropertiesExtended; import static org.nuiton.i18n.I18n._; public class WikittyPublicationConfig { - - /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyPublicationConfig.class); static protected ApplicationConfig instance = null; - + private WikittyPublicationConfig() { } - - - static public ApplicationConfig getFallBackConfig(){ - //TODO mfortun-2011-05-13 temporary import/load properties for fallback service - ApplicationConfig conf = new ApplicationConfig( - OptionFallBack.class, null, null, null); - - try { - conf.parse(null); - } catch (ArgumentsParserException eee) { - if (log.isErrorEnabled()) { - log.error("Can't load Wikitty Publication configuration", eee); - } - } - return conf; - - } + static public ApplicationConfig getConfig() { - return getConfig(null,null ); + return getConfig(null, null); } - - static public ApplicationConfig getConfig( - Properties props, String configFilename, String ... args) { - - - ApplicationConfig conf = new ApplicationConfig( - Option.class, null, props, configFilename); - + + static public ApplicationConfig getConfig(Properties props, + String configFilename, String... args) { + + ApplicationConfig conf = new ApplicationConfig(Option.class, null, + props, configFilename); + try { conf.parse(args); } catch (ArgumentsParserException eee) { @@ -59,12 +37,11 @@ } } return conf; - } - + } public static ApplicationConfig getInstance() { if (instance == null) { - synchronized(WikittyPublicationConfig.class) { + synchronized (WikittyPublicationConfig.class) { if (instance == null) { instance = WikittyPublicationConfig.getConfig(); } @@ -72,82 +49,15 @@ } return instance; } - - - - - public enum OptionFallBack implements ApplicationConfig.OptionDef { - CONFIG_FILE( - ApplicationConfig.CONFIG_FILE_NAME, - _("wikitty-publication.config.configFileName.description"), - "wikitty-publication-ws-lightfallback.properties", String.class, false, false); - - - - public final String key; - public final String description; - public String defaultValue; - public final Class<?> type; - public boolean isTransient; - public boolean isFinal; - OptionFallBack(String key, String description, String defaultValue, - Class<?> type, boolean isTransient, boolean isFinal) { - this.key = key; - this.description = description; - this.defaultValue = defaultValue; - this.type = type; - this.isFinal = isFinal; - this.isTransient = isTransient; - } - - public String getKey() { - return key; - } - - public Class<?> getType() { - return type; - } - - public String getDescription() { - return description; - } - - public String getDefaultValue() { - return defaultValue; - } - - public boolean isTransient() { - return isTransient; - } - - public boolean isFinal() { - return isFinal; - } - - public void setDefaultValue(String defaultValue) { - this.defaultValue = defaultValue; - } - - public void setTransient(boolean isTransient) { - this.isTransient = isTransient; - } - - public void setFinal(boolean isFinal) { - this.isFinal = isFinal; - } - } - - - + public enum Option implements ApplicationConfig.OptionDef { - CONFIG_FILE( - ApplicationConfig.CONFIG_FILE_NAME, + CONFIG_FILE(ApplicationConfig.CONFIG_FILE_NAME, _("wikitty-publication.config.configFileName.description"), - "wikitty-publication-ws-light.properties", String.class, false, false); - // "wikitty-publication-ws-default.properties", String.class, false, false); - - + "wikitty-publication-ws-default.properties", String.class, false, + false); + + public final String key; public final String description; public String defaultValue; @@ -174,7 +84,7 @@ } public String getDescription() { - return description; + return description; } public String getDefaultValue() { @@ -201,6 +111,5 @@ this.isFinal = isFinal; } } - - + } Modified: trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackService.java =================================================================== --- trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackService.java 2011-05-24 15:52:09 UTC (rev 919) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationFallbackService.java 2011-05-25 09:27:37 UTC (rev 920) @@ -1,6 +1,8 @@ package org.nuiton.wikitty.publication; +import java.util.ArrayList; import java.util.Collection; +import java.util.LinkedList; import java.util.List; import org.nuiton.util.ApplicationConfig; @@ -10,6 +12,7 @@ import org.nuiton.wikitty.entities.WikittyExtension; 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; import org.nuiton.wikitty.services.WikittyListener; @@ -81,15 +84,31 @@ } public boolean exists(String securityToken, String wikittyId) { - return mainService.exists(securityToken, wikittyId); + boolean result = mainService.exists(securityToken, wikittyId); + + if (isFallBack()) { + result = result || fallbackService.exists(securityToken, wikittyId); + } + + return result; } public boolean isDeleted(String securityToken, String wikittyId) { - return mainService.isDeleted(securityToken, wikittyId); + boolean result = mainService.isDeleted(securityToken, wikittyId); + + if (isFallBack()) { + result = result + || fallbackService.isDeleted(securityToken, wikittyId); + } + + return result; } public WikittyEvent replay(String securityToken, List<WikittyEvent> events, boolean force) { + + // TODO mfortun-2011-05-25 do something here with fallback service + return mainService.replay(securityToken, events, force); } @@ -99,13 +118,39 @@ } public List<String> getAllExtensionIds(String securityToken) { - return mainService.getAllExtensionIds(securityToken); + + List<String> result = new LinkedList<String>(); + result.addAll(mainService.getAllExtensionIds(securityToken)); + + // TODO mfortun-2011-05-25 do again this with set ? + if (isFallBack()) { + List<String> temp = fallbackService + .getAllExtensionIds(securityToken); + // assert that not have duplicate entry + result.removeAll(temp); + result.addAll(temp); + } + + return result; } public List<String> getAllExtensionsRequires(String securityToken, String extensionName) { - return mainService.getAllExtensionsRequires(securityToken, - extensionName); + + List<String> result = new LinkedList<String>(); + result.addAll(mainService.getAllExtensionsRequires(securityToken, + extensionName)); + + // TODO mfortun-2011-05-25 do again this with set ? + if (isFallBack()) { + List<String> temp = fallbackService.getAllExtensionsRequires( + securityToken, extensionName); + // assert that not have duplicate entry + result.removeAll(temp); + result.addAll(temp); + } + + return result; } public WikittyEvent storeExtension(String securityToken, @@ -120,16 +165,50 @@ public WikittyExtension restoreExtension(String securityToken, String extensionId) { - return mainService.restoreExtension(securityToken, extensionId); + + WikittyExtension result = mainService.restoreExtension(securityToken, + extensionId); + if (isFallBack() && result == null) { + result = fallbackService.restoreExtension(securityToken, + extensionId); + } + return result; } public WikittyExtension restoreExtensionLastVersion(String securityToken, String name) { - return mainService.restoreExtensionLastVersion(securityToken, name); + + WikittyExtension result = mainService.restoreExtensionLastVersion( + securityToken, name); + if (isFallBack() && result == null) { + result = fallbackService.restoreExtensionLastVersion(securityToken, + name); + } + return result; } public List<Wikitty> restore(String securityToken, List<String> id) { - return mainService.restore(securityToken, id); + + List<Wikitty> result = new LinkedList<Wikitty>(); + + result.addAll(mainService.restore(securityToken, id)); + // can't trust result's size because result can contain null + if (isFallBack()) { + // prepare a list with wikitty id that have not been retrieve by the + // first proxy + List<String> unusedId = new LinkedList<String>(); + unusedId.addAll(id); + + for (Wikitty wikitty : result) { + if (wikitty != null) { + unusedId.remove(wikitty.getId()); + } + } + + result.addAll(fallbackService.restore(securityToken, unusedId)); + } + + return result; } public WikittyEvent delete(String securityToken, Collection<String> ids) { @@ -138,12 +217,133 @@ public List<PagedResult<String>> findAllByCriteria(String securityToken, List<Criteria> criteria) { - return mainService.findAllByCriteria(securityToken, criteria); + + List<PagedResult<String>> result = mainService.findAllByCriteria( + securityToken, criteria); + + if (isFallBack()) { + + for (int i = 0; i < result.size(); i++) { + + /* + * get the curent criteria and corresponding result to check if + * the expected number of result is match + */ + Criteria currentCrit = criteria.get(i); + PagedResult<String> currentResult = result.get(i); + + int resultSizeExpected = currentCrit.getEndIndex() + - currentCrit.getFirstIndex(); + if (currentResult.size() < resultSizeExpected) { + /* + * if result empty, just put the result of the fallback's + * requestresult + */ + + /* + * rebuild the criteria to search properly on the second + * service we search for wikitty not in the same position, + * but in the beginning + */ + Criteria critFallback = Search.query(currentCrit) + .criteria(); + critFallback.setFirstIndex(0); + critFallback.setEndIndex(currentCrit.getEndIndex() + - currentCrit.getFirstIndex()); + + if (result.size() == 0) { + + List<Criteria> tempCritFallBack = new ArrayList<Criteria>(); + tempCritFallBack.add(critFallback); + + PagedResult<String> tempPagedResult = fallbackService + .findAllByCriteria(securityToken, + tempCritFallBack).get(0); + + // rebuild the result to match the expected criteria + tempPagedResult = new PagedResult<String>( + currentCrit.getFirstIndex(), + tempPagedResult.getNumFound(), + currentCrit.toString(), + tempPagedResult.getFacets(), + tempPagedResult.getAll()); + + result.set(i, tempPagedResult); + } else { + + /* + * we will search to complete the result with id from + * the fallback service so we reduce the number of + * element requested on the fallback service and we add + * a restriction on wikitty id to exclude id already in + * the first part of the result + * + * it not assume that wikitty id found does not exist on + * the first part of a criteria, for example if first + * index where 12, nothing assure that we found wikitty + * in the fall back that aren't in the 11 first wikitty + * of the main service + */ + Criteria excluding = idNotInCriteriaConstructor( + critFallback, currentResult.getAll()); + + excluding.setEndIndex(resultSizeExpected + - result.size()); + + List<Criteria> tempExcludingCriteriaList = new ArrayList<Criteria>(); + tempExcludingCriteriaList.add(excluding); + + PagedResult<String> resultFallback = fallbackService + .findAllByCriteria(securityToken, + tempExcludingCriteriaList).get(0); + + List<String> allresult = new LinkedList<String>(); + allresult.addAll(currentResult.getAll()); + allresult.addAll(resultFallback.getAll()); + int number = currentResult.getNumFound() + + resultFallback.getNumFound(); + + // rebuilt the result + PagedResult<String> tempPagedResult = new PagedResult<String>( + currentCrit.getFirstIndex(), number, + currentCrit.toString(), + currentResult.getFacets(), allresult); + // re set the result in the list + result.set(i, tempPagedResult); + } + } + + } + } + + return result; + } public List<String> findByCriteria(String securityToken, List<Criteria> criteria) { - return mainService.findByCriteria(securityToken, criteria); + + List<String> result = new LinkedList<String>(); + result.addAll(mainService.findByCriteria(securityToken, criteria)); + + if (isFallBack()) { + + if (result.size() == 0) { + result.addAll(fallbackService.findByCriteria(securityToken, + criteria)); + } else { + // merge list + List<String> resultFallback = new LinkedList<String>(); + + resultFallback.addAll(findByCriteria(securityToken, criteria)); + // this allow to element from main to prevail + + resultFallback.removeAll(result); + result.addAll(resultFallback); + } + } + + return result; } public WikittyEvent deleteTree(String securityToken, String treeNodeId) { @@ -152,17 +352,56 @@ public TreeNodeResult<String> findTreeNode(String securityToken, String wikittyId, int depth, boolean count, Criteria filter) { - return mainService.findTreeNode(securityToken, wikittyId, depth, count, - filter); + TreeNodeResult<String> result = mainService.findTreeNode(securityToken, + wikittyId, depth, count, filter); + + if (isFallBack() && result == null) { + result = fallbackService.findTreeNode(securityToken, wikittyId, + depth, count, filter); + } + + return result; } public Wikitty restoreVersion(String securityToken, String wikittyId, String version) { - return mainService.restoreVersion(securityToken, wikittyId, version); + Wikitty result = mainService.restoreVersion(securityToken, wikittyId, + version); + + if (isFallBack() && result == null) { + result = fallbackService.restoreVersion(securityToken, wikittyId, + version); + } + return result; } public void syncSearchEngine(String securityToken) { mainService.syncSearchEngine(securityToken); } + + /** + * Create a criteria to exclude a list of if from a criteria + * + * @param origin + * the criteria from whom exclude id + * @param toExclude + * list of id to exlude + * @return the criteria excluding ids + */ + protected Criteria idNotInCriteriaConstructor(Criteria origin, + List<String> toExclude) { + Criteria result = null; + + Search search = Search.query(origin); + + for (String id : toExclude) { + search.idneq(id); + } + + result = search.criteria(); + + return result; + } + } 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-24 15:52:09 UTC (rev 919) +++ trunk/wikitty-publication/src/main/java/org/nuiton/wikitty/publication/WikittyPublicationProxy.java 2011-05-25 09:27:37 UTC (rev 920) @@ -1,34 +1,15 @@ package org.nuiton.wikitty.publication; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; 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; -import org.nuiton.wikitty.entities.BusinessEntity; -import org.nuiton.wikitty.entities.BusinessEntityImpl; -import org.nuiton.wikitty.entities.Wikitty; -import org.nuiton.wikitty.entities.WikittyExtension; -import org.nuiton.wikitty.entities.WikittyImpl; -import org.nuiton.wikitty.entities.WikittyLabel; -import org.nuiton.wikitty.entities.WikittyLabelImpl; -import org.nuiton.wikitty.entities.WikittyUser; -import org.nuiton.wikitty.entities.WikittyUserHelper; -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; -import com.arjuna.ats.internal.jdbc.drivers.modifiers.list; + /** - * Proxy use by action in wikitty publication it encapsulate two wikitty proxy - * because we can have two distinct service use to store wikitty used by - * publication structure + * Proxy implementation for wikitty publication, that handle instance of the + * wikitty service * * @author mfortun * @@ -43,43 +24,15 @@ */ private static final long serialVersionUID = -568462410130999972L; static protected WikittyService service = null; - static protected WikittyService serviceFallback = null; - protected WikittyProxy fallbackProxy = null; - protected WikittyProxy mainProxy = null; - protected WikittyPublicationProxy(ApplicationConfig config, + private WikittyPublicationProxy(ApplicationConfig config, WikittyService ws) { - mainProxy = new WikittyProxy(config, ws); + super (config, ws); } - protected WikittyPublicationProxy(ApplicationConfig config, - WikittyService ws, ApplicationConfig configFallBack, - WikittyService serviceback) { - this(config, ws); - fallbackProxy = new WikittyProxy(configFallBack, serviceback); - } - /* - * - */ - - static public WikittyPublicationProxy getInstanceWithFallback(String token) { - ApplicationConfig config = WikittyPublicationConfig.getInstance(); - WikittyService ws = getWikittyService(config); - - ApplicationConfig configFallBack = WikittyPublicationConfig - .getFallBackConfig(); - WikittyService fallservice = getWikittyServiceFallBack(configFallBack); - - WikittyPublicationProxy result = new WikittyPublicationProxy(config, - ws, configFallBack, fallservice); - result.setSecurityToken(token); - - return result; - } - static public WikittyPublicationProxy getInstance(String token) { ApplicationConfig config = WikittyPublicationConfig.getInstance(); WikittyService ws = getWikittyService(config); @@ -100,1440 +53,8 @@ return service; } - static protected WikittyService getWikittyServiceFallBack( - ApplicationConfig config) { - if (serviceFallback == null) { - synchronized (WikittyPublicationProxy.class) { - if (serviceFallback == null) { - serviceFallback = WikittyServiceFactory - .buildWikittyService(config); - } - } - } - return serviceFallback; - } + - public boolean isFallbackService() { - 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(); - } - - public String getFallbackSecurityToken() { - String result = ""; - if (isFallbackService()) { - result = fallbackProxy.getSecurityToken(); - } - return result; - } - - public void setFallbackSecurityToken(String securityToken) { - if (isFallbackService()) { - fallbackProxy.setSecurityToken(securityToken); - } - } - - /* - * 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()) { - fallbackProxy.login(login, password); - } - } - - public void logout() { - mainProxy.logout(); - if (isFallbackService()) { - fallbackProxy.logout(); - } - } - - public String getSecurityToken() { - String result = mainProxy.getSecurityToken(); - return result; - } - - public void setSecurityToken(String securityToken) { - mainProxy.setSecurityToken(securityToken); - } - - public WikittyUser 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) { - - E result = mainProxy.getUser(clazz); - - // TODO mfortun-2011-05-16 do something on fallback ? - - return result; - } - - public WikittyService getWikittyService() { - return mainProxy.getWikittyService(); - } - - public void setWikittyService(WikittyService wikittyService) { - mainProxy.setWikittyService(wikittyService); - } - - public <E extends BusinessEntity> E cast(BusinessEntity source, - Class<E> 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) { - - E result = null; - - /* - * if a user store in both - */ - if (isFallbackService() - && e.getExtensionNames().contains(WikittyUser.EXT_WIKITTYUSER)) { - - // save the version to restore it after to allow storage of the - // wikitty on the two service - String version = e.getWikittyVersion(); - fallbackProxy.store(e); - e.setWikittyVersion(version); - mainProxy.store(e); - - return e; - } - - // 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) { - Wikitty result = null; - - /* - * if a user store in both - */ - if (isFallbackService() && w.hasExtension(WikittyUser.EXT_WIKITTYUSER)) { - fallbackProxy.store(w); - return mainProxy.store(w); - } - - // 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 result; - } - - public <E extends BusinessEntity> List<E> store(E e1, E e2, E... 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) { - - 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) { - - 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) { - - 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, - boolean 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) { - Wikitty result = mainProxy.restore(id); - - if (isFallbackService() && result == null) { - result = fallbackProxy.restore(id); - } - - return result; - } - - public <E extends BusinessEntity> E restore(Class<E> clazz, String id) { - E result = mainProxy.restore(clazz, id); - - if (isFallbackService() && result == null) { - result = fallbackProxy.restore(clazz, id); - } - - return result; - } - - public List<Wikitty> restore(List<String> 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; - - } - - public <E extends BusinessEntity> List<E> restore(Class<E> clazz, - List<String> id, boolean checkExtension) { - - List<E> result = new ArrayList<E>(); - - 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; - } - - public <E extends BusinessEntity> List<E> restore(Class<E> clazz, - List<String> 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()) { - fallbackProxy.delete(id); - } - } - - public <E extends BusinessEntity> void delete(E object) { - mainProxy.delete(object); - if (isFallbackService()) { - fallbackProxy.delete(object); - } - } - - public void delete(Collection<String> ids) { - mainProxy.delete(ids); - if (isFallbackService()) { - fallbackProxy.delete(ids); - } - } - - public <E extends BusinessEntity> void delete(List<E> objets) { - mainProxy.delete(objets); - if (isFallbackService()) { - fallbackProxy.delete(objets); - } - } - - public <E extends BusinessEntityImpl> PagedResult<E> findAllByExample(E e, - int firstIndex, int endIndex, String... fieldFacet) { - - PagedResult<E> result = mainProxy.findAllByExample(e, firstIndex, - endIndex, fieldFacet); - - int resultSizeExpected = endIndex - firstIndex; - if (isFallbackService() && result.size() < resultSizeExpected) { - - if (result.size() == 0) { - String oldRequest = result.getQueryString(); - - /* - * change the param because we search on the beginning of the - * content of the otherLike they were the same collection - */ - result = fallbackProxy.findAllByExample(e, 0, - resultSizeExpected, fieldFacet); - - // reform the result - PagedResult<E> reformResult = new PagedResult<E>(firstIndex, - result.getNumFound(), oldRequest, result.getFacets(), - result.getAll()); - result = reformResult; - } else { - - /* - * Calculate the number of missing element and search then on - * the fallback wikitty service, and then add this result to the - * final result; - */ - int missingNumber = resultSizeExpected - result.size(); - - PagedResult<E> resultTempFromFall = fallbackProxy - .findAllByExample(e, 0, missingNumber, fieldFacet); - - List<E> completedResultList = new ArrayList<E>(); - - completedResultList.addAll(result.getAll()); - completedResultList.addAll(resultTempFromFall.getAll()); - - int totalNumberofFound = result.getNumFound() - + resultTempFromFall.getNumFound(); - - PagedResult<E> reformResult = new PagedResult<E>(firstIndex, - totalNumberofFound, result.getQueryString(), - result.getFacets(), completedResultList); - result = reformResult; - } - } - - return result; - } - - public <E extends BusinessEntityImpl> E findByExample(E e) { - E result = mainProxy.findByExample(e); - - if (isFallbackService() && result == null) { - result = fallbackProxy.findByExample(e); - } - - return result; - } - - public <E extends BusinessEntity> List<PagedResult<E>> findAllByCriteria( - Class<E> clazz, List<Criteria> criterias) { - - List<PagedResult<E>> result = new ArrayList<PagedResult<E>>(); - - result.addAll(mainProxy.findAllByCriteria(clazz, criterias)); - - if (isFallbackService()) { - - for (int i = 0; i < result.size(); i++) { - - /* - * get the curent criteria and corresponding result to check if - * the expected number of result is match - */ - Criteria currentCrit = criterias.get(i); - PagedResult<E> currentResult = result.get(i); - - int resultSizeExpected = currentCrit.getEndIndex() - - currentCrit.getFirstIndex(); - if (currentResult.size() < resultSizeExpected) { - /* - * if result empty, just put the result of the fallback's - * requestresult - */ - - /* - * rebuild the criteria to search properly on the second - * service we search for wikitty not in the same position, - * but in the beginning - */ - Criteria critFallback = Search.query(currentCrit) - .criteria(); - critFallback.setFirstIndex(0); - critFallback.setEndIndex(currentCrit.getEndIndex() - - currentCrit.getFirstIndex()); - - if (result.size() == 0) { - - PagedResult<E> tempPagedResult = fallbackProxy - .findAllByCriteria(clazz, critFallback); - - // rebuild the result to match the expected criteria - tempPagedResult = new PagedResult<E>( - currentCrit.getFirstIndex(), - tempPagedResult.getNumFound(), - currentCrit.toString(), - tempPagedResult.getFacets(), - tempPagedResult.getAll()); - - result.set(i, tempPagedResult); - } else { - - /* - * we will search to complete the result with id from - * the fallback service so we reduce the number of - * element requested on the fallback service and we add - * a restriction on wikitty id to exclude id already in - * the first part of the result - * - * it not assume that wikitty id found does not exist on - * the first part of a criteria, for example if first - * index where 12, nothing assure that we found wikitty - * in the fall back that aren't in the 11 first wikitty - * of the main service - */ - PagedResult<String> idFromMain = mainProxy - .findAllIdByCriteria(currentCrit); - - Criteria excluding = idNotInCriteriaConstructor( - critFallback, idFromMain.getAll()); - - excluding.setEndIndex(resultSizeExpected - - result.size()); - - PagedResult<E> resultFallback = fallbackProxy - .findAllByCriteria(clazz, excluding); - - List<E> allresult = new ArrayList<E>(); - allresult.addAll(currentResult.getAll()); - allresult.addAll(resultFallback.getAll()); - - int number = currentResult.getNumFound() - + resultFallback.getNumFound(); - - // rebuilt the result - PagedResult<E> tempPagedResult = new PagedResult<E>( - currentCrit.getFirstIndex(), number, - currentCrit.toString(), - currentResult.getFacets(), allresult); - // re set the result in the list - result.set(i, tempPagedResult); - } - } - - } - } - - return result; - } - - public <E extends BusinessEntity> PagedResult<E> findAllByCriteria( - Class<E> clazz, Criteria criteria) { - - PagedResult<E> result = mainProxy.findAllByCriteria(clazz, criteria); - - // PagedResult<String> result = mainProxy.findAllIdByCriteria(criteria); - - int resultSizeExpected = criteria.getEndIndex() - - criteria.getFirstIndex(); - if (isFallbackService() && result.size() < resultSizeExpected) { - // if result empty, just put the result of the fallback's request - // result - - /* - * rebuild the criteria to search properly on the second service we - * search for wikitty not in the same position, but in the beginning - */ - Criteria critFallback = Search.query(criteria).criteria(); - critFallback.setFirstIndex(0); - critFallback.setEndIndex(criteria.getEndIndex() - - criteria.getFirstIndex()); - - if (result.size() == 0) { - - result = fallbackProxy.findAllByCriteria(clazz, critFallback); - // rebuild the result to match the expected criteria - result = new PagedResult<E>(criteria.getFirstIndex(), - result.getNumFound(), criteria.toString(), - result.getFacets(), result.getAll()); - } else { - - PagedResult<String> idFromMain = mainProxy - .findAllIdByCriteria(criteria); - - /* - * we will search to complete the result with id from the - * fallback service so we reduce the number of element requested - * on the fallback service and we add a restriction on wikitty - * id to exclude id already in the first part of the result - * - * it not assume that wikitty id found does not exist on the - * first part of a criteria, for example if first index where - * 12, nothing assure that we found wikitty in the fall back - * that aren't in the 11 first wikitty of the main service - */ - Criteria excluding = idNotInCriteriaConstructor(critFallback, - idFromMain.getAll()); - - excluding.setEndIndex(resultSizeExpected - result.size()); - - PagedResult<E> resultFallback = fallbackProxy - .findAllByCriteria(clazz, excluding); - - List<E> allresult = new ArrayList<E>(); - allresult.addAll(result.getAll()); - allresult.addAll(resultFallback.getAll()); - int number = result.getNumFound() - + resultFallback.getNumFound(); - - result = new PagedResult<E>(criteria.getFirstIndex(), number, - criteria.toString(), result.getFacets(), allresult); - } - } - - return result; - } - - public <E extends BusinessEntity> PagedResult<E>[] findAllByCriteria( - Class<E> clazz, Criteria c1, Criteria c2, Criteria... otherCriteria) { - - List<Criteria> criterias = new ArrayList<Criteria>(); - criterias.add(c1); - criterias.add(c2); - CollectionUtil.addAll(criterias, otherCriteria); - - // deleguate to easily handle multicontext - return (PagedResult<E>[]) this.findAllByCriteria(clazz, criterias) - .toArray(); - } - - public List<PagedResult<Wikitty>> findAllByCriteria(List<Criteria> criteria) { - - List<PagedResult<Wikitty>> result = mainProxy - .findAllByCriteria(criteria); - - if (isFallbackService()) { - - for (int i = 0; i < result.size(); i++) { - - /* - * get the curent criteria and corresponding result to check if - * the expected number of result is match - */ - Criteria currentCrit = criteria.get(i); - PagedResult<Wikitty> currentResult = result.get(i); - - int resultSizeExpected = currentCrit.getEndIndex() - - currentCrit.getFirstIndex(); - if (currentResult.size() < resultSizeExpected) { - /* - * if result empty, just put the result of the fallback's - * requestresult - */ - - /* - * rebuild the criteria to search properly on the second - * service we search for wikitty not in the same position, - * but in the beginning - */ - Criteria critFallback = Search.query(currentCrit) - .criteria(); - critFallback.setFirstIndex(0); - critFallback.setEndIndex(currentCrit.getEndIndex() - - currentCrit.getFirstIndex()); - - if (result.size() == 0) { - - PagedResult<Wikitty> tempPagedResult = fallbackProxy - .findAllByCriteria(critFallback); - - // rebuild the result to match the expected criteria - tempPagedResult = new PagedResult<Wikitty>( - currentCrit.getFirstIndex(), - tempPagedResult.getNumFound(), - currentCrit.toString(), - tempPagedResult.getFacets(), - tempPagedResult.getAll()); - - result.set(i, tempPagedResult); - } else { - - /* - * we will search to complete the result with id from - * the fallback service so we reduce the number of - * element requested on the fallback service and we add - * a restriction on wikitty id to exclude id already in - * the first part of the result - * - * it not assume that wikitty id found does not exist on - * the first part of a criteria, for example if first - * index where 12, nothing assure that we found wikitty - * in the fall back that aren't in the 11 first wikitty - * of the main service - */ - PagedResult<String> idFromMain = mainProxy - .findAllIdByCriteria(currentCrit); - - Criteria excluding = idNotInCriteriaConstructor( - critFallback, idFromMain.getAll()); - - excluding.setEndIndex(resultSizeExpected - - result.size()); - - PagedResult<Wikitty> resultFallback = fallbackProxy - .findAllByCriteria(excluding); - - List<Wikitty> allresult = new ArrayList<Wikitty>(); - allresult.addAll(currentResult.getAll()); - allresult.addAll(resultFallback.getAll()); - int number = currentResult.getNumFound() - + resultFallback.getNumFound(); - - // rebuilt the result - PagedResult<Wikitty> tempPagedResult = new PagedResult<Wikitty>( - currentCrit.getFirstIndex(), number, - currentCrit.toString(), - currentResult.getFacets(), allresult); - // re set the result in the list - result.set(i, tempPagedResult); - } - } - - } - } - - return result; - - } - - public PagedResult<Wikitty> findAllByCriteria(Criteria criteria) { - - PagedResult<Wikitty> result = mainProxy.findAllByCriteria(criteria); - - // PagedResult<String> result = mainProxy.findAllIdByCriteria(criteria); - - int resultSizeExpected = criteria.getEndIndex() - - criteria.getFirstIndex(); - if (isFallbackService() && result.size() < resultSizeExpected) { - // if result empty, just put the result of the fallback's request - // result - - /* - * rebuild the criteria to search properly on the second service we - * search for wikitty not in the same position, but in the beginning - */ - Criteria critFallback = Search.query(criteria).criteria(); - critFallback.setFirstIndex(0); - critFallback.setEndIndex(criteria.getEndIndex() - - criteria.getFirstIndex()); - - if (result.size() == 0) { - - result = fallbackProxy.findAllByCriteria(critFallback); - // rebuild the result to match the expected criteria - result = new PagedResult<Wikitty>(criteria.getFirstIndex(), - result.getNumFound(), criteria.toString(), - result.getFacets(), result.getAll()); - } else { - - PagedResult<String> idFromMain = mainProxy - .findAllIdByCriteria(criteria); - - /* - * we will search to complete the result with id from the - * fallback service so we reduce the number of element requested - * on the fallback service and we add a restriction on wikitty - * id to exclude id already in the first part of the result - * - * it not assume that wikitty id found does not exist on the - * first part of a criteria, for example if first index where - * 12, nothing assure that we found wikitty in the fall back - * that aren't in the 11 first wikitty of the main service - */ - Criteria excluding = idNotInCriteriaConstructor(critFallback, - idFromMain.getAll()); - - excluding.setEndIndex(resultSizeExpected - result.size()); - - PagedResult<Wikitty> resultFallback = fallbackProxy - .findAllByCriteria(excluding); - - List<Wikitty> allresult = new ArrayList<Wikitty>(); - allresult.addAll(result.getAll()); - - allresult.addAll(resultFallback.getAll()); - int number = result.getNumFound() - + resultFallback.getNumFound(); - - result = new PagedResult<Wikitty>(criteria.getFirstIndex(), - number, criteria.toString(), result.getFacets(), - allresult); - } - } - - return result; - - } - - public PagedResult<Wikitty>[] findAllByCriteria(Criteria c1, Criteria c2, - Criteria... otherCriteria) { - - List<Criteria> criterias = new ArrayList<Criteria>(); - criterias.add(c1); - criterias.add(c2); - CollectionUtil.addAll(criterias, otherCriteria); - - // deleguate to easily handle multicontext - return (PagedResult<Wikitty>[]) this.findAllByCriteria(criterias) - .toArray(); - } - - public List<PagedResult<String>> findAllIdByCriteria(List<Criteria> criteria) { - - List<PagedResult<String>> result = mainProxy - .findAllIdByCriteria(criteria); - - if (isFallbackService()) { - - for (int i = 0; i < result.size(); i++) { - - /* - * get the curent criteria and corresponding result to check if - * the expected number of result is match - */ - Criteria currentCrit = criteria.get(i); - PagedResult<String> currentResult = result.get(i); - - int resultSizeExpected = currentCrit.getEndIndex() - - currentCrit.getFirstIndex(); - if (currentResult.size() < resultSizeExpected) { - /* - * if result empty, just put the result of the fallback's - * requestresult - */ - - /* - * rebuild the criteria to search properly on the second - * service we search for wikitty not in the same position, - * but in the beginning - */ - Criteria critFallback = Search.query(currentCrit) - .criteria(); - critFallback.setFirstIndex(0); - critFallback.setEndIndex(currentCrit.getEndIndex() - - currentCrit.getFirstIndex()); - - if (result.size() == 0) { - - PagedResult<String> tempPagedResult = fallbackProxy - .findAllIdByCriteria(critFallback); - - // rebuild the result to match the expected criteria - tempPagedResult = new PagedResult<String>( - currentCrit.getFirstIndex(), - tempPagedResult.getNumFound(), - currentCrit.toString(), - tempPagedResult.getFacets(), - tempPagedResult.getAll()); - - result.set(i, tempPagedResult); - } else { - - /* - * we will search to complete the result with id from - * the fallback service so we reduce the number of - * element requested on the fallback service and we add - * a restriction on wikitty id to exclude id already in - * the first part of the result - * - * it not assume that wikitty id found does not exist on - * the first part of a criteria, for example if first - * index where 12, nothing assure that we found wikitty - * in the fall back that aren't in the 11 first wikitty - * of the main service - */ - Criteria excluding = idNotInCriteriaConstructor( - critFallback, currentResult.getAll()); - - excluding.setEndIndex(resultSizeExpected - - result.size()); - - PagedResult<String> resultFallback = fallbackProxy - .findAllIdByCriteria(excluding); - - List<String> allresult = new ArrayList<String>(); - allresult.addAll(currentResult.getAll()); - allresult.addAll(resultFallback.getAll()); - int number = currentResult.getNumFound() - + resultFallback.getNumFound(); - - // rebuilt the result - PagedResult<String> tempPagedResult = new PagedResult<String>( - currentCrit.getFirstIndex(), number, - currentCrit.toString(), - currentResult.getFacets(), allresult); - // re set the result in the list - result.set(i, tempPagedResult); - } - } - - } - } - - return result; - - } - - public PagedResult<String> findAllIdByCriteria(Criteria criteria) { - - PagedResult<String> result = mainProxy.findAllIdByCriteria(criteria); - - int resultSizeExpected = criteria.getEndIndex() - - criteria.getFirstIndex(); - if (isFallbackService() && result.size() < resultSizeExpected) { - // if result empty, just put the result of the fallback's request - // result - - /* - * rebuild the criteria to search properly on the second service we - * search for wikitty not in the same position, but in the beginning - */ - Criteria critFallback = Search.query(criteria).criteria(); - critFallback.setFirstIndex(0); - critFallback.setEndIndex(criteria.getEndIndex() - - criteria.getFirstIndex()); - - if (result.size() == 0) { - - result = fallbackProxy.findAllIdByCriteria(critFallback); - // rebuild the result to match the expected criteria - result = new PagedResult<String>(criteria.getFirstIndex(), - result.getNumFound(), criteria.toString(), - result.getFacets(), result.getAll()); - } else { - - /* - * we will search to complete the result with id from the - * fallback service so we reduce the number of element requested - * on the fallback service and we add a restriction on wikitty - * id to exclude id already in the first part of the result - * - * it not assume that wikitty id found does not exist on the - * first part of a criteria, for example if first index where - * 12, nothing assure that we found wikitty in the fall back - * that aren't in the 11 first wikitty of the main service - */ - Criteria excluding = idNotInCriteriaConstructor(critFallback, - result.getAll()); - - excluding.setEndIndex(resultSizeExpected - result.size()); - - PagedResult<String> resultFallback = fallbackProxy - .findAllIdByCriteria(excluding); - - List<String> allresult = new ArrayList<String>(); - allresult.addAll(result.getAll()); - allresult.addAll(resultFallback.getAll()); - int number = result.getNumFound() - + resultFallback.getNumFound(); - - result = new PagedResult<String>(criteria.getFirstIndex(), - number, criteria.toString(), result.getFacets(), - allresult); - } - } - - return result; - } - - public PagedResult<String>[] findAllIdByCriteria(Criteria c1, Criteria c2, - Criteria... otherCriteria) { - - List<Criteria> criterias = new ArrayList<Criteria>(); - criterias.add(c1); - criterias.add(c2); - CollectionUtil.addAll(criterias, otherCriteria); - - // deleguate to easily handle multicontext - return (PagedResult<String>[]) this.findAllIdByCriteria(criterias) - .toArray(); - } - - public List<String> findIdByCriteria(List<Criteria> criteria) { - - List<String> result = new ArrayList<String>(); - result.addAll(mainProxy.findIdByCriteria(criteria)); - - if (isFallbackService()) { - - if (result.size() == 0) { - result.addAll(fallbackProxy.findIdByCriteria(criteria)); - } else { - // merge list - List<String> resultFallback = new ArrayList<String>(); - - resultFallback.addAll(fallbackProxy.findIdByCriteria(criteria)); - // this allow to element from main to prevail - - resultFallback.removeAll(result); - result.addAll(resultFallback); - } - } - - return result; - - } - - public String findIdByCriteria(Criteria 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) { - - 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) { - - List<E> result = new ArrayList<E>(); - result.addAll(mainProxy.findByCriteria(clazz, criterias)); - - if (isFallbackService()) { - if (result.size() == 0) { - result.addAll(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) { - - 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) { - - 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) { - - List<Wikitty> result = new ArrayList<Wikitty>(); - - result.addAll(mainProxy.findByCriteria(criteria)); - - if (isFallbackService()) { - if (result.size() == 0l) { - result.addAll(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) { - - Wikitty result = mainProxy.findByCriteria(criteria); - - if (isFallbackService() && result == null) { - result = fallbackProxy.findByCriteria(criteria); - } - - return result; - } - - public Wikitty[] findByCriteria(Criteria c1, Criteria c2, - Criteria... 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); - - if (isFallbackService() && result == null) { - result = fallbackProxy - .findTreeNode(wikittyId, depth, count, filter); - } - - return result; - } - - public TreeNodeResult<String> findAllIdTreeNode(String wikittyId, - int depth, boolean count, Criteria filter) { - TreeNodeResult<String> result = mainProxy.findAllIdTreeNode(wikittyId, - depth, count, filter); - - if (isFallbackService() && result == null) { - result = fallbackProxy.findAllIdTreeNode(wikittyId, depth, count, - filter); - } - - return result; - } - - public WikittyEvent deleteTree(String treeNodeId) { - - WikittyEvent result = mainProxy.deleteTree(treeNodeId); - - if (isFallbackService()) { - result.add(fallbackProxy.deleteTree(treeNodeId)); - result.setSource(this); - } - - return result; - } - - public Wikitty restoreVersion(String wikittyId, String version) { - - Wikitty result = mainProxy.restoreVersion(wikittyId, version); - - if (isFallbackService() && result == null) { - result = fallbackProxy.restoreVersion(wikittyId, version); - } - - return result; - } - - public <E extends BusinessEntity> boolean hasType(Class<E> clazz, - String wikittyId) { - boolean result = mainProxy.hasType(clazz, wikittyId); - - if (isFallbackService()) { - result = result || fallbackProxy.hasType(clazz, wikittyId); - } - - return result; - } - - public WikittyEvent storeExtension(WikittyExtension ext) { - - WikittyEvent result = mainProxy.storeExtension(ext); - - if (isFallbackService()) { - result.add(fallbackProxy.storeExtension(ext)); - result.setSource(this); - } - - return result; - - } - - public WikittyEvent storeExtension(Collection<WikittyExtension> exts) { - - WikittyEvent result = mainProxy.storeExtension(exts); - - if (isFallbackService()) { - result.add(fallbackProxy.storeExtension(exts)); - result.setSource(this); - } - - return result; - } - - public WikittyExtension restoreExtension(String extensionId) { - WikittyExtension result = mainProxy.restoreExtension(extensionId); - - if (isFallbackService() && result == null) { - result = fallbackProxy.restoreExtension(extensionId); - } - - return result; - } - - public WikittyExtension restoreExtensionLastVersion(String extensionName) { - WikittyExtension result = mainProxy - .restoreExtensionLastVersion(extensionName); - - if (isFallbackService() && result == null) { - result = fallbackProxy.restoreExtensionLastVersion(extensionName); - } - - return result; - } - - public void deleteExtension(String extName) { - mainProxy.deleteExtension(extName); - if (isFallbackService()) { - fallbackProxy.deleteExtension(extName); - } - - } - - public void deleteExtension(Collection<String> extNames) { - - mainProxy.deleteExtension(extNames); - if (isFallbackService()) { - fallbackProxy.deleteExtension(extNames); - } - } - - public List<String> getAllExtensionIds() { - - List<String> result = new ArrayList<String>(); - result.addAll(mainProxy.getAllExtensionIds()); - - if (isFallbackService()) { - - List<String> temp = fallbackProxy.getAllExtensionIds(); - - // assert that not have duplicate entry - result.removeAll(temp); - result.addAll(temp); - - } - - return result; - } - - public List<String> getAllExtensionsRequires(String extensionName) { - List<String> result = new ArrayList<String>(); - result.addAll(mainProxy.getAllExtensionsRequires(extensionName)); - - if (isFallbackService()) { - List<String> temp = fallbackProxy - .getAllExtensionsRequires(extensionName); - - // assert that not have duplicate entry - result.removeAll(temp); - result.addAll(temp); - } - - return result; - } - - public WikittyEvent clear() { - WikittyEvent result = mainProxy.clear(); - - // merge wikitty event - if (isFallbackService()) { - WikittyEvent tempEvent = fallbackProxy.clear(); - - result.add(tempEvent); - result.setSource(this); - } - - return result; - } - - public void syncSearchEngine() { - mainProxy.syncSearchEngine(); - if (isFallbackService()) { - fallbackProxy.syncSearchEngine(); - } - } - - public Wikitty getWikitty(BusinessEntity entity) { - Wikitty result = mainProxy.getWikitty(entity); - - if (isFallbackService() && result == null) { - result = fallbackProxy.getWikitty(entity); - } - - return result; - } - - public boolean isMember(String groupName) { - boolean result = mainProxy.isMember(groupName); - if (isFallbackService()) { - result = result || fallbackProxy.isMember(groupName); - } - - return result; - - } - - public WikittyUser getLoggedInUser() { - WikittyUser result = mainProxy.getLoggedInUser(); - - // TODO mfortun-2011-05-16 how to merge wikitty user ? - 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; - } - - /** - * Create a criteria to exclude a list of if from a criteria - * - * @param origin - * the criteria from whom exclude id - * @param toExclude - * list of id to exlude - * @return the criteria excluding ids - */ - protected Criteria idNotInCriteriaConstructor(Criteria origin, - List<String> toExclude) { - Criteria result = null; - - Search search = Search.query(origin); - - for (String id : toExclude) { - search.idneq(id); - } - - result = search.criteria(); - - return result; - } - }