Author: bpoussin Date: 2010-12-22 18:50:50 +0100 (Wed, 22 Dec 2010) New Revision: 646 Url: http://nuiton.org/repositories/revision/wikitty/646 Log: - Evolution #1156: Change WikittyService API, only restore restore Wikitty other method restore id - WikittyProxy.login return void Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyCacheJCS.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAccessStat.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCached.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceNotifier.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceHelperTest.java trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/AbstractTestSolr.java trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/TreeTest.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2010-12-22 17:50:50 UTC (rev 646) @@ -126,13 +126,12 @@ return timeTrace.getCallCount(); } - public String login(String login, String password) { + public void login(String login, String password) { long start = TimeTrace.getTime(); String result = wikittyService.login(login, password); setSecurityToken(result); timeTrace.add(start, "login"); - return result; } public void logout() { @@ -438,9 +437,10 @@ long start = TimeTrace.getTime(); Criteria criteria = Search.query(e.getWikitty()).criteria(); - Wikitty w = wikittyService.findByCriteria(securityToken, criteria); + String id = wikittyService.findByCriteria(securityToken, criteria); E result = null; - if (w != null) { + if (id != null) { + Wikitty w = wikittyService.restore(securityToken, id); result = (E) WikittyUtil.newInstance( securityToken, wikittyService, e.getClass(), w); } @@ -550,7 +550,8 @@ criteria = search.criteria(criteria.getName()); - Wikitty w = wikittyService.findByCriteria(securityToken, criteria); + String id = wikittyService.findByCriteria(securityToken, criteria); + Wikitty w = wikittyService.restore(securityToken, id); E result = WikittyUtil.newInstance( securityToken, wikittyService, clazz, w); @@ -560,8 +561,8 @@ public Wikitty findByCriteria(Criteria criteria) { long start = TimeTrace.getTime(); - Wikitty wikitty = wikittyService.findByCriteria(securityToken, criteria); - + String id = wikittyService.findByCriteria(securityToken, criteria); + Wikitty wikitty = wikittyService.restore(securityToken, id); timeTrace.add(start, "findByCriteria"); return wikitty; } @@ -599,7 +600,7 @@ long start = TimeTrace.getTime(); Map.Entry<E, Integer> result = null; - Map.Entry<WikittyTreeNode, Integer> node = wikittyService.restoreNode( + Map.Entry<String, Integer> node = wikittyService.restoreNode( securityToken, wikittyId, filter); if (node != null) { E bean = restore(clazz, wikittyId, checkExtension); @@ -624,58 +625,17 @@ Map<E, Integer> convertedResult = null; - Map<WikittyTreeNode, Integer> result = wikittyService.restoreChildren( + Map<String, Integer> result = wikittyService.restoreChildren( securityToken, wikittyId, filter); if(result != null) { - convertedResult = new LinkedHashMap<E, Integer>(); - Set<Entry<WikittyTreeNode, Integer>> entries = result.entrySet(); - for (Entry<WikittyTreeNode, Integer> entry : entries) { + List<String> ids = new ArrayList<String>(result.keySet()); + List<E> keys = restore(clazz, ids, checkExtension); - WikittyTreeNode node = entry.getKey(); - - //TODO EC-20100420 was : String nodeId = node.getId(); - String nodeId = node.getWikittyId(); - - E businessEntity; - HashSet<String> extNames = null; - try { - Wikitty wikitty = wikittyService.restore(securityToken, nodeId); - if (checkExtension) { - extNames = new HashSet<String>(wikitty.getExtensionNames()); - } - businessEntity = WikittyUtil.newInstance( - securityToken, wikittyService, clazz, wikitty); - } catch (SecurityException eee) { - throw eee; - } catch (Exception eee) { - throw new WikittyException("Can't restore children", eee); - } - - boolean goodType = true; - if (checkExtension) { - // WikittyUtil.newInstance instanciate only BusinessEntityWikittyImpl - BusinessEntityImpl businessEntityImpl = - (BusinessEntityImpl) businessEntity; - Collection<WikittyExtension> staticExtensions = - businessEntityImpl.getStaticExtensions(); - - for (Iterator<WikittyExtension> iterator = - staticExtensions.iterator(); iterator.hasNext() && goodType;) { - WikittyExtension ext = iterator.next(); - if (!extNames.contains(ext.getName())) { - // extension wanted by BusinessEntity (clazz) - // is not in wikitty, then wikitty is not good type - // for business - goodType = false; - } - } - } - - if (goodType) { - Integer nodeCount = entry.getValue(); - convertedResult.put(businessEntity, nodeCount); - } + convertedResult = new LinkedHashMap<E, Integer>(); + for (E e : keys) { + Integer size = result.get(e.getWikittyId()); + convertedResult.put(e, size); } } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-12-22 17:50:50 UTC (rev 646) @@ -308,9 +308,9 @@ * * @param securityToken security token * @param criteria - * @return wikitty object or null + * @return wikitty id object or null */ - public Wikitty findByCriteria(String securityToken, Criteria criteria); + public String findByCriteria(String securityToken, Criteria criteria); /* * Classification @@ -348,7 +348,7 @@ * @param filter * @return */ - public Map.Entry<WikittyTreeNode, Integer> restoreNode( + public Map.Entry<String, Integer> restoreNode( String securityToken, String wikittyId, Criteria filter); /** @@ -363,7 +363,7 @@ * @param filter * @return */ - public Map<WikittyTreeNode, Integer> restoreChildren( + public Map<String, Integer> restoreChildren( String securityToken, String wikittyId, Criteria filter); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/addons/importexport/ImportExportCSV.java 2010-12-22 17:50:50 UTC (rev 646) @@ -53,6 +53,7 @@ import au.com.bytecode.opencsv.CSVReader; import au.com.bytecode.opencsv.CSVWriter; +import org.nuiton.wikitty.services.WikittyServiceEnhanced; /** * @@ -265,7 +266,9 @@ fValue = m.group(6); } Criteria criteria = Search.query().eq(fqField, fValue).criteria(); - Wikitty wikitty = ws.findByCriteria(securityToken, criteria); + String id = ws.findByCriteria(securityToken, criteria); + Wikitty wikitty = WikittyServiceEnhanced.restore( + ws, securityToken, id); if (wikitty == null) { correctQueries = false; } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyCacheJCS.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyCacheJCS.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyCacheJCS.java 2010-12-22 17:50:50 UTC (rev 646) @@ -80,7 +80,7 @@ try { List<String> priorityExtensions = config.getOptionAsList( WikittyConfig.WikittyOption.WIKITTY_CACHE_PRIORITY_EXTENSIONS.getKey()).getOption(); - this.priorityExtensions.addAll(priorityExtensions); + getPriorityExtensions().addAll(priorityExtensions); CompositeCacheManager cacheMgr = CompositeCacheManager.getUnconfiguredInstance(); cacheMgr.configure(config.getFlatOptions()); @@ -96,6 +96,13 @@ } } + /** + * Liste des extensions a conserver prioritairement + * @return + */ + public Set<String> getPriorityExtensions() { + return priorityExtensions; + } @Override public boolean existsWikitty(String id) { Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAccessStat.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAccessStat.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceAccessStat.java 2010-12-22 17:50:50 UTC (rev 646) @@ -216,14 +216,6 @@ } @Override - public Wikitty findByCriteria(String securityToken, Criteria criteria) { - Wikitty result = super.findByCriteria(securityToken, criteria); - addStat(securityToken, Collections.singleton(result)); - return result; - } - - - @Override public List<Wikitty> restore(String securityToken, List<String> id) { List<Wikitty> result = super.restore(securityToken, id); addStat(securityToken, result); @@ -231,22 +223,6 @@ } @Override - public Map<WikittyTreeNode, Integer> restoreChildren(String securityToken, String wikittyId, Criteria filter) { - Map<WikittyTreeNode, Integer> result = - super.restoreChildren(securityToken, wikittyId, filter); - addStat(securityToken, result.keySet()); - return result; - } - - @Override - public Entry<WikittyTreeNode, Integer> restoreNode(String securityToken, String wikittyId, Criteria filter) { - Entry<WikittyTreeNode, Integer> result = - super.restoreNode(securityToken, wikittyId, filter); - addStat(securityToken, Collections.singleton(result.getKey())); - return result; - } - - @Override public WikittyTree restoreTree(String securityToken, String wikittyId) { WikittyTree result = super.restoreTree(securityToken, wikittyId); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCached.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCached.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceCached.java 2010-12-22 17:50:50 UTC (rev 646) @@ -29,20 +29,15 @@ import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; import org.nuiton.util.StringUtil; -import org.nuiton.wikitty.search.Criteria; -import org.nuiton.wikitty.search.PagedResult; import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.entities.WikittyCopyOnWrite; import org.nuiton.wikitty.entities.WikittyExtension; -import org.nuiton.wikitty.entities.WikittyTreeNode; import org.nuiton.wikitty.WikittyService; import org.nuiton.wikitty.WikittyTree; import org.nuiton.wikitty.WikittyUtil; @@ -56,7 +51,7 @@ * Last update: $Date$ * by : $Author$ */ -public class WikittyServiceCached implements WikittyService { +public class WikittyServiceCached extends WikittyServiceDelegator { /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyServiceCached.class); @@ -66,9 +61,6 @@ /** pour recevoir les events du serveur et synchroniser le cache */ protected RemoteWikittyListener remoteWikittyListener; - - /** Delegated wikitty service implementation. */ - protected WikittyService ws; /** cache policy (configuration) * @@ -94,7 +86,8 @@ * @param props properties (can be null) */ public WikittyServiceCached(ApplicationConfig config, WikittyService ws, WikittyCache cache) { - this.ws = ws; + super(ws); + // this.ws = ws; this.cache = cache; if (cache == null) { @@ -300,7 +293,7 @@ @Override public WikittyEvent clear(String securityToken) { - WikittyEvent result = ws.clear(securityToken); + WikittyEvent result = getDelegate().clear(securityToken); processEvent(result); return result; } @@ -311,7 +304,7 @@ */ @Override public WikittyEvent delete(String securityToken, Collection<String> ids) { - WikittyEvent result = ws.delete(securityToken, ids); + WikittyEvent result = getDelegate().delete(securityToken, ids); processEvent(result); return result; } @@ -319,43 +312,13 @@ /** * just wrap service method * - * @param criteria * @return */ @Override - public PagedResult<String> findAllByCriteria( - String securityToken, Criteria criteria) { - // if we want to add cache for this method, we must clear cache when - // addLabel, store, storeExtension are called - return ws.findAllByCriteria(securityToken, criteria); - } - - /** - * just wrap service method - * - * @param securityToken - * @param criteria - * @param transaction - * - * @return - */ - @Override - public Wikitty findByCriteria(String securityToken, Criteria criteria) { - // if we want to add cache for this method, we must clear cache when - // addLabel, store, storeExtension are called - return ws.findByCriteria(securityToken, criteria); - } - - /** - * just wrap service method - * - * @return - */ - @Override public List<String> getAllExtensionIds(String securityToken) { // NOTE poussin 20101219: si on veut utiliser le cache il faut une // methode specifique - return ws.getAllExtensionIds(securityToken); + return getDelegate().getAllExtensionIds(securityToken); } /** @@ -368,7 +331,7 @@ public List<String> getAllExtensionsRequires( String securityToken, String extensionName) { // TODO poussin 20100412: perhaps use cache for extension ? - return ws.getAllExtensionsRequires(securityToken, extensionName); + return getDelegate().getAllExtensionsRequires(securityToken, extensionName); } /** @@ -385,6 +348,7 @@ LinkedHashMap<String, Wikitty> fromCache = new LinkedHashMap<String, Wikitty>(); for (String id : ids) { + // w is automaticaly wrapped Wikitty w = cacheGetWikitty(id); fromCache.put(id, w); // put all to maintains order if (w == null) { // if not found on cache, ask the server @@ -394,7 +358,7 @@ // retrieve missing object if (!notInCache.isEmpty()) { - List<Wikitty> missingInCache = ws.restore(securityToken, notInCache); + List<Wikitty> missingInCache = getDelegate().restore(securityToken, notInCache); cachePutWikitty(missingInCache); @@ -402,22 +366,13 @@ // add missing object if (w != null) { - // Always wrap wikitties + // wrap new new retrieved wikitties w = wrapWikitty(w); fromCache.put(w.getId(), w); } } } - // FIXME sletellier 21/12/10 : Its already done in #cacheGetWikitty, so, remove it ? -// Collection<Wikitty> tmp = fromCache.values(); -// -// // wrap the resulting wikitties to prevent cache conflicts -// ArrayList<Wikitty> result = new ArrayList<Wikitty>(); -// for (Wikitty w : tmp) { -// result.add(wrapWikitty(w)); -// } - statAdd(ids.size(), notInCache.size()); return new ArrayList<Wikitty>(fromCache.values()); @@ -426,20 +381,6 @@ /** * just wrap service method * - * @param wikittyId - * @param filter - * @return - */ - @Override - public Map<WikittyTreeNode, Integer> restoreChildren( - String securityToken, String wikittyId, Criteria filter) { - // TODO lookup in cache, and put in cache - return ws.restoreChildren(securityToken, wikittyId, filter); - } - - /** - * just wrap service method - * * @param name * @return */ @@ -453,7 +394,7 @@ // cette methode, mise en cache lors du 1er appel, et restitution du // meme resultat pour les appels suivants tant que pas de modification // de l'extension (ou de clear/remove) - WikittyExtension result = ws.restoreExtensionLastVersion(securityToken, name); + WikittyExtension result = getDelegate().restoreExtensionLastVersion(securityToken, name); cachePutExtension(result); return result; } @@ -462,26 +403,12 @@ * just wrap service method * * @param wikittyId - * @param filter * @return */ @Override - public Entry<WikittyTreeNode, Integer> restoreNode( - String securityToken, String wikittyId, Criteria filter) { - // TODO lookup in cache, and put in cache - return ws.restoreNode(securityToken, wikittyId, filter); - } - - /** - * just wrap service method - * - * @param wikittyId - * @return - */ - @Override public WikittyTree restoreTree(String securityToken, String wikittyId) { // TODO lookup in cache, and put in cache - return ws.restoreTree(securityToken, wikittyId); + return getDelegate().restoreTree(securityToken, wikittyId); } /** @@ -492,7 +419,7 @@ */ @Override public WikittyEvent deleteTree(String securityToken, String wikittyId) { - WikittyEvent result = ws.deleteTree(securityToken, wikittyId); + WikittyEvent result = getDelegate().deleteTree(securityToken, wikittyId); processEvent(result); return result; } @@ -508,7 +435,7 @@ @Override public WikittyEvent store(String securityToken, Collection<Wikitty> wikitties, boolean force) { - WikittyEvent result = ws.store(securityToken, wikitties, force); + WikittyEvent result = getDelegate().store(securityToken, wikitties, force); processEvent(result); @@ -518,7 +445,7 @@ @Override public WikittyEvent storeExtension(String securityToken, Collection<WikittyExtension> exts) { - WikittyEvent result = ws.storeExtension(securityToken, exts); + WikittyEvent result = getDelegate().storeExtension(securityToken, exts); processEvent(result); return result; } @@ -526,14 +453,14 @@ @Override public WikittyEvent deleteExtension( String securityToken, Collection<String> extNames) { - WikittyEvent result = ws.deleteExtension(securityToken, extNames); + WikittyEvent result = getDelegate().deleteExtension(securityToken, extNames); processEvent(result); return result; } @Override public WikittyExtension restoreExtension(String securityToken, String id) { - WikittyExtension result = ws.restoreExtension(securityToken, id); + WikittyExtension result = getDelegate().restoreExtension(securityToken, id); cachePutExtension(result); return result; } @@ -541,72 +468,24 @@ @Override public Wikitty restoreVersion( String securityToken, String wikittyId, String version) { - // not put it in cache - return ws.restoreVersion(securityToken, wikittyId, version); + // not put it in cache ? cache doesn't support more than one version of wikitty + return getDelegate().restoreVersion(securityToken, wikittyId, version); } @Override public WikittyEvent replay( String securityToken, List<WikittyEvent> events, boolean force) { - WikittyEvent result = ws.replay(securityToken, events, force); + WikittyEvent result = getDelegate().replay(securityToken, events, force); processEvent(result); return result; } - // - // Just delegate method - // - @Override - public String login(String login, String password) { - return ws.login(login, password); - } - - @Override - public void logout(String securityToken) { - ws.logout(securityToken); - } - - @Override - public boolean canWrite(String securityToken, Wikitty wikitty) { - return ws.canWrite(securityToken, wikitty); - } - - @Override - public boolean canDelete(String securityToken, String wikittyId) { - return ws.canDelete(securityToken, wikittyId); - } - - @Override - public boolean canRead(String securityToken, String wikittyId) { - return ws.canRead(securityToken, wikittyId); - } - - @Override - public void addWikittyServiceListener(WikittyListener listener, ServiceListenerType type) { - ws.addWikittyServiceListener(listener, type); - } - - @Override - public void removeWikittyServiceListener(WikittyListener listener, ServiceListenerType type) { - ws.removeWikittyServiceListener(listener, type); - } - - @Override - public void syncSearchEngine(String securityToken) { - ws.syncSearchEngine(securityToken); - } - - @Override - public boolean exists(String securityToken, String wikittyId) { - return ws.exists(securityToken, wikittyId); - } - - @Override - public boolean isDeleted(String securityToken, String wikittyId) { - return ws.isDeleted(securityToken, wikittyId); - } - + /** + * Process event to update cache with data in event + * + * @param e + */ protected void processEvent(WikittyEvent e) { // check clear must be the first, if event have clear and other type // clear is all time play first @@ -631,6 +510,7 @@ } } } + /** * Classe permettant de recevoir les events distants et mettre a jour le cache */ Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceDelegator.java 2010-12-22 17:50:50 UTC (rev 646) @@ -165,7 +165,7 @@ } @Override - public Wikitty findByCriteria(String securityToken, Criteria criteria) { + public String findByCriteria(String securityToken, Criteria criteria) { return delegate.findByCriteria(securityToken, criteria); } @@ -180,13 +180,13 @@ } @Override - public Entry<WikittyTreeNode, Integer> restoreNode(String securityToken, + public Entry<String, Integer> restoreNode(String securityToken, String wikittyId, Criteria filter) { return delegate.restoreNode(securityToken, wikittyId, filter); } @Override - public Map<WikittyTreeNode, Integer> restoreChildren(String securityToken, + public Map<String, Integer> restoreChildren(String securityToken, String wikittyId, Criteria filter) { return delegate.restoreChildren(securityToken, wikittyId, filter); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceNotifier.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceNotifier.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceNotifier.java 2010-12-22 17:50:50 UTC (rev 646) @@ -59,14 +59,11 @@ * Last update : $Date$ * By : $Author$ */ -public class WikittyServiceNotifier implements WikittyService { +public class WikittyServiceNotifier extends WikittyServiceDelegator { /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyServiceNotifier.class); - /** Service to delegate. */ - protected WikittyService ws; - /** Wikitty service listener (all event). */ protected ListenerSet<WikittyListener> allWikittyServiceListeners; @@ -92,24 +89,13 @@ * * @param config config to use * @param ws delegate service - */ -// public WikittyServiceNotifier(ApplicationConfig config, WikittyService ws) { -// this(config, ws, null); -// } - - /** - * Constructor with configuration. - * - * @param config config to use - * @param ws delegate service * @param transporter transporter to use for remote event (listen or propagate). * this transporter can be null if we don't want propagate or listen remote * event */ public WikittyServiceNotifier(ApplicationConfig config, WikittyService ws, RemoteNotifierTransporter transporter) { - // service - this.ws = ws; + super(ws); // listeners allWikittyServiceListeners = new ListenerSet<WikittyListener>(); @@ -185,33 +171,8 @@ } @Override - public String login(String login, String password) { - return ws.login(login, password); - } - - @Override - public void logout(String securityToken) { - ws.logout(securityToken); - } - - @Override - public boolean canWrite(String securityToken, Wikitty wikitty) { - return ws.canWrite(securityToken, wikitty); - } - - @Override - public boolean canDelete(String securityToken, String wikittyId) { - return ws.canDelete(securityToken, wikittyId); - } - - @Override - public boolean canRead(String securityToken, String wikittyId) { - return ws.canRead(securityToken, wikittyId); - } - - @Override public WikittyEvent clear(String securityToken) { - WikittyEvent result = ws.clear(securityToken); + WikittyEvent result = getDelegate().clear(securityToken); fireEvent(result); return result; } @@ -219,7 +180,7 @@ @Override public WikittyEvent store(String securityToken, Collection<Wikitty> wikitties, boolean force) { - WikittyEvent result = ws.store(securityToken, wikitties, force); + WikittyEvent result = getDelegate().store(securityToken, wikitties, force); // notify listeners fireEvent(result); @@ -227,22 +188,9 @@ } @Override - public List<String> getAllExtensionIds(String securityToken) { - // no notification - return ws.getAllExtensionIds(securityToken); - } - - @Override - public List<String> getAllExtensionsRequires( - String securityToken, String extensionName) { - // no notification - return ws.getAllExtensionsRequires(securityToken, extensionName); - } - - @Override public WikittyEvent storeExtension(String securityToken, Collection<WikittyExtension> exts) { - WikittyEvent result = ws.storeExtension(securityToken, exts); + WikittyEvent result = getDelegate().storeExtension(securityToken, exts); fireEvent(result); return result; } @@ -250,91 +198,35 @@ @Override public WikittyEvent deleteExtension( String securityToken, Collection<String> extNames) { - WikittyEvent result = ws.deleteExtension(securityToken, extNames); + WikittyEvent result = getDelegate().deleteExtension(securityToken, extNames); fireEvent(result); return result; } @Override - public WikittyExtension restoreExtension(String securityToken, String id) { - // no notification - return ws.restoreExtension(securityToken, id); - } - - @Override - public WikittyExtension restoreExtensionLastVersion( - String securityToken, String name) { - // no notification - return ws.restoreExtensionLastVersion(securityToken, name); - } - - @Override - public List<Wikitty> restore(String securityToken, List<String> ids) { - // no notification - return ws.restore(securityToken, ids); - } - - @Override public WikittyEvent delete(String securityToken, Collection<String> ids) { - WikittyEvent result = ws.delete(securityToken, ids); + WikittyEvent result = getDelegate().delete(securityToken, ids); // notify listeners fireEvent(result); return result; } @Override - public PagedResult<String> findAllByCriteria(String securityToken, - Criteria criteria) { - // no notification - return ws.findAllByCriteria(securityToken, criteria); - } - - @Override - public Wikitty findByCriteria(String securityToken, Criteria criteria) { - // no notification - return ws.findByCriteria(securityToken, criteria); - } - - @Override - public WikittyTree restoreTree(String securityToken, String wikittyId) { - // no notification - return ws.restoreTree(securityToken, wikittyId); - } - - @Override public WikittyEvent deleteTree(String securityToken, String wikittyId) { - WikittyEvent result = ws.deleteTree(securityToken, wikittyId); + WikittyEvent result = getDelegate().deleteTree(securityToken, wikittyId); fireEvent(result); return result; } @Override - public Entry<WikittyTreeNode, Integer> restoreNode(String securityToken, String wikittyId, - Criteria filter) { - // no notification - return ws.restoreNode(securityToken, wikittyId, filter); + public WikittyEvent replay( + String securityToken, List<WikittyEvent> events, boolean force) { + WikittyEvent result = getDelegate().replay(securityToken, events, force); + // notify listeners + fireEvent(result); + return result; } - @Override - public Map<WikittyTreeNode, Integer> restoreChildren(String securityToken, - String wikittyId, Criteria filter) { - // no notification - return ws.restoreChildren(securityToken, wikittyId, filter); - } - - @Override - public Wikitty restoreVersion( - String securityToken, String wikittyId, String version) { - // no notification - return ws.restoreVersion(securityToken, wikittyId, version); - } - - @Override - public void syncSearchEngine(String securityToken) { - // no notification - ws.syncSearchEngine(securityToken); - } - /** * Fire event to all registred listener. * @@ -389,25 +281,6 @@ super.finalize(); } - @Override - public WikittyEvent replay( - String securityToken, List<WikittyEvent> events, boolean force) { - WikittyEvent result = ws.replay(securityToken, events, force); - // notify listeners - fireEvent(result); - return result; - } - - @Override - public boolean exists(String securityToken, String wikittyId) { - return ws.exists(securityToken, wikittyId); - } - - @Override - public boolean isDeleted(String securityToken, String wikittyId) { - return ws.isDeleted(securityToken, wikittyId); - } - /** * Thread utilise pour envoyer les events. On rend accessible ce thread * pour pouvoir y acceder depuis l'exterieur (pour l'instant pour les tests Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceSecurity.java 2010-12-22 17:50:50 UTC (rev 646) @@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Map; @@ -67,13 +68,11 @@ * Last update: $Date$ * by : $Author$ */ -public class WikittyServiceSecurity implements WikittyService { +public class WikittyServiceSecurity extends WikittyServiceDelegator { /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(WikittyServiceSecurity.class); - protected WikittyServiceEnhanced ws; - /** cache de l'id du groupe AppAdmin */ transient protected String appAdminGroupId = null; @@ -83,26 +82,29 @@ * @param ws */ public WikittyServiceSecurity(ApplicationConfig config, WikittyService ws) { - this.ws = new WikittyServiceEnhanced(ws); + super(ws); } @Override public void addWikittyServiceListener(WikittyListener listener, ServiceListenerType type) { - ws.addWikittyServiceListener(listener, type); + getDelegate().addWikittyServiceListener(listener, type); } @Override public void removeWikittyServiceListener(WikittyListener listener, ServiceListenerType type) { - ws.addWikittyServiceListener(listener, type); + getDelegate().addWikittyServiceListener(listener, type); } @Override public String login(String login, String password) { - Wikitty user = ws.findByCriteria(null, Search.query().eq( + String userId = getDelegate().findByCriteria(null, Search.query().eq( WikittyUser.FQ_FIELD_WIKITTYUSER_LOGIN, login).criteria()); - if (user == null) { - throw new IllegalArgumentException(String.format("no such account '%s'", login)); + if (userId == null) { + throw new IllegalArgumentException(String.format( + "no such account '%s'", login)); } else { + Wikitty user = WikittyServiceEnhanced.restore( + getDelegate(), null, userId); // check password is valid if (WikittyUserHelper.getPassword(user).equals(password)) { String tokenId = WikittyUtil.genSecurityTokenId(); @@ -111,7 +113,7 @@ WikittyTokenHelper.addExtension(wikittyToken); WikittyTokenHelper.setUser(wikittyToken, user.getId()); WikittyTokenHelper.setDate(wikittyToken, new Date()); - ws.store(null, Arrays.asList(wikittyToken), false); + getDelegate().store(null, Arrays.asList(wikittyToken), false); log.debug(String.format("token '%s' is for login '%s'", tokenId, login)); return tokenId; @@ -123,11 +125,8 @@ @Override public void logout(String securityToken) { - if (securityToken == null) { - throw new IllegalArgumentException("security token is null"); - } else { - getUserId(securityToken); // will throw exception if token is not valid - ws.delete(securityToken, Arrays.asList(securityToken)); + if (securityToken != null) { + getDelegate().delete(securityToken, Arrays.asList(securityToken)); } } @@ -136,7 +135,7 @@ String userId = getUserId(securityToken); if (isAppAdmin(securityToken, userId)) { // seul les AppAdmin on le droit a cette method - WikittyEvent result = ws.clear(securityToken); + WikittyEvent result = getDelegate().clear(securityToken); return result; } else { throw new SecurityException(_("user %s can't clear data", userId)); @@ -174,7 +173,7 @@ checkDeleteExtension(securityToken, e.getDeletedExtensions()); } } - WikittyEvent result = ws.replay(securityToken, events, force); + WikittyEvent result = getDelegate().replay(securityToken, events, force); return result; } @@ -205,7 +204,7 @@ public WikittyEvent store(String securityToken, Collection<Wikitty> wikitties, boolean force) { checkStore(securityToken, wikitties); - WikittyEvent result = ws.store(securityToken, wikitties, force); + WikittyEvent result = getDelegate().store(securityToken, wikitties, force); return result; } @@ -223,9 +222,11 @@ for (Wikitty wikitty : wikitties) { // usual case, a user want to store a wikitty - Wikitty oldVersion = ws.restore(securityToken, wikitty.getId()); + Wikitty oldVersion = WikittyServiceEnhanced.restore( + getDelegate(), securityToken, wikitty.getId()); - Collection<String> newExtensions = new ArrayList<String>(wikitty.getExtensionNames()); + Collection<String> newExtensions = new ArrayList<String>( + wikitty.getExtensionNames()); if (oldVersion != null) { // we already checked the rights for those extension // re-do the check has too much cost, avoid it @@ -250,26 +251,32 @@ for (String fqFieldDirtyName : wikitty.getDirty()) { - String concernedExtensionName = WikittyUtil.getExtensionNameFromFQFieldName(fqFieldDirtyName); + String concernedExtensionName = WikittyUtil + .getExtensionNameFromFQFieldName(fqFieldDirtyName); if (log.isTraceEnabled()) { - log.trace(String.format("will update field %s from extension %s", - fqFieldDirtyName, concernedExtensionName)); + log.trace(String.format( + "will update field %s from extension %s", + fqFieldDirtyName, concernedExtensionName)); } boolean fieldRequireAdminRights = // true if field is a field of WikittyAuthorisation - // concerned extension is "WikittyAuthorisation" - WikittyAuthorisation.EXT_WIKITTYAUTHORISATION.equals(concernedExtensionName) - // or concerned extension is something like "AnyExtension:WikittyAuthorisation" - || WikittyAuthorisation.EXT_WIKITTYAUTHORISATION.equals( - WikittyUtil.getMetaExtensionNameFromFQMetaExtensionName(concernedExtensionName)); + // concerned extension is "WikittyAuthorisation" + WikittyAuthorisation.EXT_WIKITTYAUTHORISATION.equals( + concernedExtensionName) + // or concerned extension is something like "AnyExtension:WikittyAuthorisation" + || WikittyAuthorisation.EXT_WIKITTYAUTHORISATION.equals( + WikittyUtil.getMetaExtensionNameFromFQMetaExtensionName( + concernedExtensionName)); boolean canChange; // will be true if user can modify the value of this field // according to his level of rights if (fieldRequireAdminRights) { - canChange = canAdmin(securityToken, userId, concernedExtensionName, wikitty); + canChange = canAdmin(securityToken, + userId, concernedExtensionName, wikitty); } else { - canChange = canWrite(securityToken, userId, concernedExtensionName, wikitty); + canChange = canWrite(securityToken, + userId, concernedExtensionName, wikitty); } // TODO poussin 20101208 quel est l'interet de faire cette copie ? @@ -295,7 +302,7 @@ @Override public List<Wikitty> restore(String securityToken, List<String> ids) { String userId = getUserId(securityToken); - List<Wikitty> wikitties = ws.restore(securityToken, ids); + List<Wikitty> wikitties = getDelegate().restore(securityToken, ids); for (Wikitty wikitty : wikitties) { if (wikitty != null) { refuseUnauthorizedRead(securityToken, userId, wikitty); @@ -311,8 +318,10 @@ if (wikitty != null) { for (String extensionName : wikitty.getExtensionNames()) { if ( ! canRead(securityToken, userId, extensionName, wikitty)) { - throw new SecurityException(_("user %s can't read extension %s on wikitty %s, it may be due to a global policy on the wikitty", - userId, extensionName, wikitty)); + throw new SecurityException(_( + "user %s can't read extension %s on wikitty %s," + + " it may be due to a global policy on the wikitty", + userId, extensionName, wikitty)); } } } @@ -395,7 +404,7 @@ @Override public WikittyEvent delete(String securityToken, Collection<String> ids) { checkDelete(securityToken, ids); - WikittyEvent result = ws.delete(securityToken, ids); + WikittyEvent result = getDelegate().delete(securityToken, ids); return result; } @@ -407,7 +416,7 @@ public void checkDelete(String securityToken, Collection<String> ids) { String userId = getUserId(securityToken); List<String> idsAsList = new ArrayList<String>(ids); - List<Wikitty> wikitties = ws.restore(securityToken, idsAsList); + List<Wikitty> wikitties = getDelegate().restore(securityToken, idsAsList); for (Wikitty wikitty : wikitties) { for (String extensionName : wikitty.getExtensionNames()) { if ( ! canWrite(securityToken, userId, extensionName, wikitty)) { @@ -435,7 +444,8 @@ @Override public boolean canDelete(String securityToken, String wikittyId) { boolean result = true; - Wikitty wikitty = WikittyServiceEnhanced.restore(ws, securityToken, wikittyId); + Wikitty wikitty = WikittyServiceEnhanced.restore( + getDelegate(), securityToken, wikittyId); if (wikitty != null) { String userId = getUserId(securityToken); for (String extName : wikitty.getExtensionNames()) { @@ -452,7 +462,7 @@ public boolean canRead(String securityToken, String wikittyId) { boolean result = true; String userId = getUserId(securityToken); - Wikitty wikitty = WikittyServiceEnhanced.restore(ws, securityToken, wikittyId); + Wikitty wikitty = WikittyServiceEnhanced.restore(getDelegate(), securityToken, wikittyId); for (String extName : wikitty.getExtensionNames()) { result = result && isReader(securityToken, userId, wikitty, extName); if (!result) { @@ -462,19 +472,6 @@ return result; } - @Override - public List<String> getAllExtensionIds(String securityToken) { - // All people can read extension - return ws.getAllExtensionIds(securityToken); - } - - @Override - public List<String> getAllExtensionsRequires( - String securityToken, String extensionName) { - // All people can read extension - return ws.getAllExtensionsRequires(securityToken, extensionName); - } - /* *** storing and restoring extensions ***/ protected void checkStoreExtension(String securityToken, @@ -502,41 +499,20 @@ public WikittyEvent storeExtension(String securityToken, Collection<WikittyExtension> exts) { checkStoreExtension(securityToken, exts); - return ws.storeExtension(securityToken, exts); + return getDelegate().storeExtension(securityToken, exts); } @Override public WikittyEvent deleteExtension( String securityToken, Collection<String> extNames) { checkDeleteExtension(securityToken, extNames); - return ws.deleteExtension(securityToken, extNames); + return getDelegate().deleteExtension(securityToken, extNames); } - - @Override - public WikittyExtension restoreExtension(String securityToken, String id) { - // All people can read extension - return ws.restoreExtension(securityToken, id); - } @Override - public WikittyExtension restoreExtensionLastVersion( - String securityToken, String name) { - // All people can read extension - return ws.restoreExtensionLastVersion(securityToken, name); - } - - @Override - public PagedResult<String> findAllByCriteria(String securityToken, - Criteria criteria) { - // All people can read PagedResult that contains only id - PagedResult<String> result = ws.findAllByCriteria(securityToken, criteria); - return result; - } - - @Override public WikittyTree restoreTree(String securityToken, String wikittyId) { String userId = getUserId(securityToken); - WikittyTree restoredTree = ws.restoreTree(securityToken, wikittyId); + WikittyTree restoredTree = getDelegate().restoreTree(securityToken, wikittyId); checkRestoreTree(securityToken, userId, restoredTree); return restoredTree; } @@ -549,64 +525,37 @@ } - protected void checkRestoreTreeNode(String securityToken, String userId, WikittyTreeNode treeNode) { - Wikitty treeNodeWikitty = WikittyUtil.getWikitty(ws, securityToken, treeNode); + private void checkRestoreTreeNode(String securityToken, String userId, WikittyTreeNode treeNode) { + Wikitty treeNodeWikitty = WikittyUtil.getWikitty(getDelegate(), securityToken, treeNode); refuseUnauthorizedRead(securityToken, userId, treeNodeWikitty); } @Override - public Entry<WikittyTreeNode, Integer> restoreNode(String securityToken, String wikittyId, Criteria filter) { - String userId = getUserId(securityToken); - Entry<WikittyTreeNode, Integer> entry = ws.restoreNode(securityToken, wikittyId, filter); - checkRestoreTreeNode(securityToken, userId, entry.getKey()); - return entry; - } - - @Override - public Map<WikittyTreeNode, Integer> restoreChildren(String securityToken, - String wikittyId, - Criteria filter) { - String userId = getUserId(securityToken); - Map<WikittyTreeNode, Integer> children = ws.restoreChildren(securityToken, wikittyId, filter); - for (Map.Entry<WikittyTreeNode, Integer> child : children.entrySet()) { - checkRestoreTreeNode(securityToken, userId, child.getKey()); - } - return children; - } - - @Override public WikittyEvent deleteTree(String securityToken, String treeNodeId) { - WikittyTreeNode treeNode = ws.restoreNode(securityToken, treeNodeId, null).getKey(); - Wikitty treeNodeWikitty = WikittyUtil.getWikitty(ws, securityToken, treeNode); + Wikitty treeNodeWikitty = WikittyServiceEnhanced.restore( + getDelegate(), securityToken, treeNodeId); - Collection<Wikitty> wikitties = Arrays.asList(treeNodeWikitty); + Collection<Wikitty> wikitties = Collections.singletonList(treeNodeWikitty); + // TODO poussin 20101222 perhaps we must check deletion authorization + // for all children ? checkStore(securityToken, wikitties); - return ws.deleteTree(securityToken, treeNodeId); + return getDelegate().deleteTree(securityToken, treeNodeId); } @Override public Wikitty restoreVersion(String securityToken, String wikittyId, String version) { - Wikitty wikitty = ws.restoreVersion(securityToken, wikittyId, version); + Wikitty wikitty = getDelegate().restoreVersion(securityToken, wikittyId, version); String userId = getUserId(securityToken); refuseUnauthorizedRead(securityToken, userId, wikitty); return wikitty; } @Override - public Wikitty findByCriteria(String securityToken, - Criteria criteria) { - Wikitty wikitty = ws.findByCriteria(securityToken, criteria); - String userId = getUserId(securityToken); - refuseUnauthorizedRead(securityToken, userId, wikitty); - return wikitty; - } - - @Override public void syncSearchEngine(String securityToken) { String userId = getUserId(securityToken); if (isAppAdmin(securityToken, userId)) { // seul les AppAdmin on le droit a cette method - ws.syncSearchEngine(securityToken); + getDelegate().syncSearchEngine(securityToken); } else { throw new SecurityException(_("user %s can't sync search engine", getUserId(securityToken))); @@ -626,7 +575,8 @@ // recuperation de l'utilisateur associe au securityToken // le securityToken est aussi l'id de l'objet if (securityToken != null) { - Wikitty securityTokenWikitty = ws.restore(securityToken, securityToken); + Wikitty securityTokenWikitty = WikittyServiceEnhanced.restore( + getDelegate(), securityToken, securityToken); if (securityTokenWikitty == null) { throw new SecurityException("bad (obsolete ?) token"); } else { @@ -756,7 +706,8 @@ // user don't have right on current object, check parent right String parentId = WikittyAuthorisationHelper.getParent(extensionRights); if (parentId != null) { - Wikitty parent = ws.restore(securityToken, parentId); + Wikitty parent = WikittyServiceEnhanced.restore( + getDelegate(), securityToken, parentId); isMember = isMember(securityToken, userId, parent, fqFieldName); } } @@ -777,18 +728,18 @@ /** get the wikitty with extension WikittyGroup that contains all app-admin. */ protected Wikitty getAppAdminGroup(String securityToken) { - Wikitty group; - if (appAdminGroupId == null) { + // on a deja fait la recherche precedement, on essaie de reutilise + // le meme id + Wikitty group = WikittyServiceEnhanced.restore( + getDelegate(), securityToken, appAdminGroupId); + if (group == null) { // 1er fois, on le recherche - group = ws.findByCriteria(securityToken, Search.query().eq( - WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, + String groupId = getDelegate().findByCriteria(securityToken, + Search.query().eq(WikittyGroup.FQ_FIELD_WIKITTYGROUP_NAME, WikittySecurityHelper.WIKITTY_APPADMIN_GROUP_NAME).criteria()); - // group peut-etre null s'il n'existe pas - } else { - // on a deja fait la recherche precedement, on essaie de reutilise - // le meme id - group = ws.restore(securityToken, appAdminGroupId); - // group peut-etre null, si entre temps un admin a supprime le group + appAdminGroupId = groupId; + group = WikittyServiceEnhanced.restore( + getDelegate(), securityToken, appAdminGroupId); } return group; @@ -809,9 +760,11 @@ if (id.equals(userId)) { return true; } else { - Wikitty groupWikitty = ws.restore(securityToken, id); + Wikitty groupWikitty = WikittyServiceEnhanced.restore( + getDelegate(), securityToken, id); if (WikittyGroupHelper.hasExtension(groupWikitty)) { - Set<String> members = WikittyGroupHelper.getMembers(groupWikitty); + Set<String> members = + WikittyGroupHelper.getMembers(groupWikitty); return isMember(securityToken, userId, members); } } @@ -841,24 +794,12 @@ String extensionName) { String wikittyAuthorisationId = WikittyMetaExtensionUtil.generateId( WikittyAuthorisation.EXT_WIKITTYAUTHORISATION, extensionName); - Wikitty wikittyAuthorisation = ws.restore(securityToken, wikittyAuthorisationId); + Wikitty wikittyAuthorisation = WikittyServiceEnhanced.restore( + getDelegate(), securityToken, wikittyAuthorisationId); if (wikittyAuthorisation == null) { log.debug(extensionName + " has no authorization attached"); } return wikittyAuthorisation; } - @Override - public boolean exists(String securityToken, String wikittyId) { - // no need security check for this action - return ws.exists(securityToken, wikittyId); - } - - @Override - public boolean isDeleted(String securityToken, String wikittyId) { - // no need security check for this action - return ws.isDeleted(securityToken, wikittyId); - } - - } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceStorage.java 2010-12-22 17:50:50 UTC (rev 646) @@ -786,7 +786,7 @@ } @Override - public Wikitty findByCriteria(String securityToken, Criteria criteria) { + public String findByCriteria(String securityToken, Criteria criteria) { WikittyTransaction tx = WikittyTransaction.get(); boolean txBeginHere = false; try { @@ -795,14 +795,15 @@ txBeginHere = true; } + // TODO poussin 20101222 perhaps we must do a copy of criteria + // before modify it with index, to prevent bad side effect ? criteria.setFirstIndex(0).setEndIndex(1); PagedResult<String> pages = findAllByCriteria( securityToken, criteria); - Wikitty result = null; + String result = null; if (pages.size() > 0) { - String id = pages.getFirst(); - result = restore(securityToken, id); + result = pages.getFirst(); } if (txBeginHere) { @@ -932,7 +933,7 @@ } @Override - public Map.Entry<WikittyTreeNode, Integer> restoreNode(String securityToken, + public Map.Entry<String, Integer> restoreNode(String securityToken, String wikittyId, Criteria filter) { WikittyTransaction tx = WikittyTransaction.get(); boolean txBeginHere = false; @@ -942,26 +943,20 @@ txBeginHere = true; } + HashMap.SimpleEntry<String, Integer> result = null; Wikitty w = restore(securityToken, wikittyId); - if(w == null) { - if (txBeginHere) { - tx.commit(); + if(w != null) { + if (!w.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE)) { + throw new WikittyException(String.format( + "Wikitty '%s' do not handle extension %s", + wikittyId, WikittyTreeNode.EXT_WIKITTYTREENODE)); } - return null; - } - if ( !w.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE) ) { - throw new WikittyException(String.format( - "Wikitty '%s' do not handle extension %s", - wikittyId, WikittyTreeNode.EXT_WIKITTYTREENODE )); + Integer count = getSearchEngine().findNodeCount(tx, w, filter); + + result = new SimpleEntry<String, Integer>(wikittyId, count); } - WikittyTreeNode node = new WikittyTreeNodeImpl(w); - Integer count = getSearchEngine().findNodeCount(tx, w, filter); - - HashMap.SimpleEntry<WikittyTreeNode, Integer> result = - new SimpleEntry<WikittyTreeNode, Integer>(node, count); - if (txBeginHere) { tx.commit(); } @@ -980,7 +975,7 @@ } @Override - public Map<WikittyTreeNode, Integer> restoreChildren(String securityToken, + public Map<String, Integer> restoreChildren(String securityToken, String wikittyId, Criteria filter) { WikittyTransaction tx = WikittyTransaction.get(); boolean txBeginHere = false; @@ -990,42 +985,18 @@ txBeginHere = true; } + Map<String, Integer> result = null; Wikitty w = restore(securityToken, wikittyId); - if(w == null) { - if (txBeginHere) { - tx.commit(); + if(w != null) { + if (!w.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE)) { + throw new WikittyException(String.format( + "Wikitty '%s' do not handle extension %s", + wikittyId, WikittyTreeNode.EXT_WIKITTYTREENODE)); } - return null; - } - if ( !w.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE) ) { - throw new WikittyException(String.format( - "Wikitty '%s' do not handle extension %s", - wikittyId, WikittyTreeNode.EXT_WIKITTYTREENODE )); + result = getSearchEngine().findAllChildrenCount(tx, w, filter); } - Map<WikittyTreeNode, Integer> result = new LinkedHashMap<WikittyTreeNode, Integer>(); - - Map<String, Integer> search = getSearchEngine().findAllChildrenCount( - tx, w, filter); - Set<Entry<String, Integer>> children = search.entrySet(); - for (Entry<String, Integer> child : children) { - Integer count = child.getValue(); - - String id = child.getKey(); - Wikitty wikitty = restore(securityToken, id); - if (!wikitty.hasExtension(WikittyTreeNode.EXT_WIKITTYTREENODE)) { - // si cette exception est leve, c'est qu'il y a une mauvaise - // implantation de l'api et une erreur d'interpretation - // entre children et attachment voir l'implantation de la - // methode getSearchEngine().findAllChildrenCount - throw new WikittyException("API error, api restore tree node, but wikitty is not a tree node"); - } - WikittyTreeNode node = new WikittyTreeNodeImpl(wikitty); - - result.put(node, count); - } - if (txBeginHere) { tx.commit(); } Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/services/WikittyServiceTransaction.java 2010-12-22 17:50:50 UTC (rev 646) @@ -47,6 +47,7 @@ import org.nuiton.wikitty.WikittyServiceFactory; import org.nuiton.wikitty.WikittyTree; import org.nuiton.wikitty.entities.WikittyTreeNode; +import org.nuiton.wikitty.search.Search; /** * @@ -310,15 +311,13 @@ } @Override - public Wikitty findByCriteria(String securityToken, Criteria criteria) { - Wikitty result = null; - PagedResult<String> ids = findAllByCriteria(securityToken, criteria); - List<String> results = ids.getAll(); - if (results.size() > 0) { - String id = results.get(0); - List<Wikitty> wikitties = restore( - securityToken, Collections.singletonList(id)); - result = wikitties.get(0); + public String findByCriteria(String securityToken, Criteria criteria) { + String result = null; + Criteria criteriaLimit = + Search.query(criteria).criteria().setFirstIndex(0).setEndIndex(1); + PagedResult<String> ids = findAllByCriteria(securityToken, criteriaLimit); + if (ids.size() > 0) { + result = ids.getFirst(); } return result; } @@ -334,12 +333,12 @@ } @Override - public Entry<WikittyTreeNode, Integer> restoreNode(String securityToken, String wikittyId, Criteria filter) { + public Entry<String, Integer> restoreNode(String securityToken, String wikittyId, Criteria filter) { throw new UnsupportedOperationException("Not supported yet."); } @Override - public Map<WikittyTreeNode, Integer> restoreChildren(String securityToken, String wikittyId, Criteria filter) { + public Map<String, Integer> restoreChildren(String securityToken, String wikittyId, Criteria filter) { throw new UnsupportedOperationException("Not supported yet."); } Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/layers/WikittyServiceSecurityTest.java 2010-12-22 17:50:50 UTC (rev 646) @@ -170,8 +170,10 @@ try { service.logout(invalidToken); + } catch (SecurityException e) { + // log out must be never faild fail(); - } catch (SecurityException e) {} + } // now try to make a valid token invalid service.logout(readerToken); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceHelperTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceHelperTest.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/services/WikittyServiceHelperTest.java 2010-12-22 17:50:50 UTC (rev 646) @@ -60,9 +60,9 @@ WikittyService ws = WikittyServiceFactory.buildWikittyService(config); Assert.assertEquals(WikittyServiceCached.class, ws.getClass()); - ws = ((WikittyServiceCached)ws).ws; + ws = ((WikittyServiceCached)ws).getDelegate(); Assert.assertEquals(WikittyServiceNotifier.class, ws.getClass()); - ws = ((WikittyServiceNotifier)ws).ws; + ws = ((WikittyServiceNotifier)ws).getDelegate(); Assert.assertEquals(WikittyServiceInMemory.class, ws.getClass()); } @@ -78,11 +78,11 @@ WikittyService ws = WikittyServiceFactory.buildWikittyService(config); Assert.assertEquals(WikittyServiceSecurity.class, ws.getClass()); - ws = ((WikittyServiceEnhanced)((WikittyServiceSecurity) ws).ws).delegate; + ws = ((WikittyServiceSecurity) ws).getDelegate(); Assert.assertEquals(WikittyServiceCached.class, ws.getClass()); - ws = ((WikittyServiceCached) ws).ws; + ws = ((WikittyServiceCached) ws).getDelegate(); Assert.assertEquals(WikittyServiceNotifier.class, ws.getClass()); - ws = ((WikittyServiceNotifier) ws).ws; + ws = ((WikittyServiceNotifier) ws).getDelegate(); Assert.assertEquals(WikittyServiceStorage.class, ws.getClass()); } } Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/AbstractTestSolr.java =================================================================== --- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/AbstractTestSolr.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/AbstractTestSolr.java 2010-12-22 17:50:50 UTC (rev 646) @@ -26,13 +26,23 @@ import org.junit.Before; import org.nuiton.wikitty.WikittyConfig; +import org.nuiton.wikitty.WikittyProxy; import org.nuiton.wikitty.services.WikittyServiceEnhanced; public abstract class AbstractTestSolr { + protected WikittyProxy proxy = null; + protected WikittyServiceEnhanced ws = new WikittyServiceEnhanced(new WikittyServiceSolr(new WikittyConfig())); + public WikittyProxy getProxy() { + if (proxy == null) { + proxy = new WikittyProxy(ws); + } + return proxy; + } + @Before public void deleteAll() throws Exception { ws.clear(null); Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/TreeTest.java =================================================================== --- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/TreeTest.java 2010-12-22 15:04:09 UTC (rev 645) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/TreeTest.java 2010-12-22 17:50:50 UTC (rev 646) @@ -156,7 +156,7 @@ protected Wikitty findNode(String nodeName) { Criteria criteria = Search.query().eq( WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_NAME, nodeName).criteria(); - Wikitty wikitty = ws.findByCriteria(null, criteria); + Wikitty wikitty = getProxy().findByCriteria(criteria); return wikitty; } @@ -165,7 +165,7 @@ */ protected Wikitty findValue(String value) { Criteria criteria = Search.query().eq("test.name", value).criteria(); - Wikitty wikitty = ws.findByCriteria(null, criteria); + Wikitty wikitty = getProxy().findByCriteria(criteria); return wikitty; } @@ -183,7 +183,8 @@ // Sum children node in node String nodeId = node.getId(); - Map<WikittyTreeNode, Integer> children = ws.restoreChildren(null, nodeId, null); + Map<WikittyTreeNode, Integer> children = getProxy().restoreChildren( + WikittyTreeNode.class, nodeId, null); /* for (Integer count : children.values()) { @@ -260,7 +261,8 @@ Wikitty node1 = findNode("node1"); String node1Id = node1.getId(); - Map<WikittyTreeNode, Integer> children = ws.restoreChildren(null, node1Id, null); + Map<WikittyTreeNode, Integer> children = getProxy().restoreChildren( + WikittyTreeNode.class, node1Id, null); assertEquals(3, children.size()); } @@ -275,7 +277,8 @@ String node1Id = node1.getId(); Criteria filter = Search.query().eq("test.name", "value 3").criteria(); - Map<WikittyTreeNode, Integer> children = ws.restoreChildren(null, node1Id, filter); + Map<WikittyTreeNode, Integer> children = getProxy().restoreChildren( + WikittyTreeNode.class, node1Id, filter); System.out.println(children); assertEquals(3, children.size()); for (Map.Entry<WikittyTreeNode, Integer> e : children.entrySet()) { @@ -288,7 +291,8 @@ Wikitty node11 = findNode("node11"); String node11Id = node11.getId(); - Entry<WikittyTreeNode, Integer> count = ws.restoreNode(null, node11Id, null); + Entry<WikittyTreeNode, Integer> count = getProxy().restoreNode( + WikittyTreeNode.class, node11Id, null); assertEquals(3, count.getValue().intValue()); } @@ -298,7 +302,8 @@ String node11Id = node11.getId(); Criteria filter = Search.query().eq("test.name", "value 3").criteria(); - Entry<WikittyTreeNode, Integer> count = ws.restoreNode(null, node11Id, filter); + Entry<WikittyTreeNode, Integer> count = getProxy().restoreNode( + WikittyTreeNode.class, node11Id, filter); System.out.println(count); assertEquals(1, count.getValue().intValue()); } @@ -308,7 +313,8 @@ // Check that node 2 it has any child Wikitty node2 = findNode("node2"); String node2Id = node2.getId(); - Map<WikittyTreeNode, Integer> children = ws.restoreChildren(null, node2Id, null); + Map<WikittyTreeNode, Integer> children = getProxy().restoreChildren( + WikittyTreeNode.class, node2Id, null); assertEquals(0, children.size()); // Create a new node, child of node 2 @@ -320,7 +326,8 @@ assertNotNull(found); // Check that it was great added as node2 child - children = ws.restoreChildren(null, node2Id, null); + children = getProxy().restoreChildren( + WikittyTreeNode.class, node2Id, null); assertEquals(1, children.size()); } @@ -418,8 +425,8 @@ WikittyEvent event = ws.store(null, child.getWikitty()); event.update(child.getWikitty()); - Map<WikittyTreeNode, Integer> children = - ws.restoreChildren(null, parent.getWikittyId(), null); + Map<WikittyTreeNode, Integer> children = getProxy().restoreChildren( + WikittyTreeNode.class, parent.getWikittyId(), null); assertEquals(1, children.size()); assertEquals(0, children.get(child).intValue()); @@ -428,7 +435,8 @@ ws.store(null, child.getWikitty()); - children = ws.restoreChildren(null, parent.getWikittyId(), null); + children = getProxy().restoreChildren( + WikittyTreeNode.class, parent.getWikittyId(), null); assertEquals(0, children.size()); } @@ -497,7 +505,8 @@ int sum = sum(node3); assertEquals(2, sum); - Entry<WikittyTreeNode, Integer> count = ws.restoreNode(null, node3.getId(), null); + Entry<WikittyTreeNode, Integer> count = getProxy().restoreNode( + WikittyTreeNode.class, node3.getId(), null); assertEquals(1, count.getValue().intValue()); sum = sum(node31);