Author: bpoussin Date: 2011-01-31 16:25:48 +0100 (Mon, 31 Jan 2011) New Revision: 700 Url: http://nuiton.org/repositories/revision/wikitty/700 Log: Evolution #1278: remove tree method in WikittyService and replace them with one method findTreeNode -> old tree method on proxy are restored but marked as deprecated Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.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 2011-01-31 12:13:07 UTC (rev 699) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2011-01-31 15:25:48 UTC (rev 700) @@ -25,6 +25,7 @@ package org.nuiton.wikitty; +import java.util.AbstractMap.SimpleEntry; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.ApplicationConfig; @@ -47,10 +48,10 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; -import org.nuiton.wikitty.entities.WikittyTreeNode; import org.nuiton.wikitty.search.TreeNodeResult; /** @@ -328,13 +329,15 @@ } /** - * Restore wikitty entity with specified id or {@code null} if entity can't be be found. + * Restore wikitty entity with specified id or {@code null} if entity + * can't be be found. * * @param <E> object type * @param clazz entity class * @param id entity id * @param checkExtension if true check that Wikitty result has all extension - * @return wikitty entity with specified id or {@code null} if entity can't be found + * @return wikitty entity with specified id or {@code null} if entity + * can't be found or if one wikitty don't have extension wanted by E type */ public <E extends BusinessEntity> List<E> restore( Class<E> clazz, List<String> id, boolean checkExtension) { @@ -539,37 +542,83 @@ * doit etre celui d'un WikittyTreeNode. Ce WikittyTreeNode est alors le * root de l'arbre retourne. * - * Return WikittyTreeNode in result - * + * Return Wikitty in result, those Wikitties have WikittyTreeNode extension + * + * @param clazz business class wanted to replace id in TreeNodeResult * @param wikittyId root * @param depth profondeur de noeud a recuperer - * @param count vrai si l'on veut le nombre de piece attaches sur le noeud (piece des enfants compris) + * @param count vrai si l'on veut le nombre de piece attaches sur le noeud + * (piece des enfants compris) * @param filter filter pour compter les pieces attachees * @return * * @since 3.1 */ - public TreeNodeResult<WikittyTreeNode> findTreeNode( + public TreeNodeResult<Wikitty> findTreeNode( String wikittyId, int depth, boolean count, Criteria filter) { long start = TimeTrace.getTime(); + TreeNodeResult<String> resultId = wikittyService.findTreeNode( securityToken, wikittyId, depth, count, filter); RetrieveIdVisitor retrieveIdVisitor = new RetrieveIdVisitor(); resultId.acceptVisitor(retrieveIdVisitor); - List<Wikitty> wikitties = - wikittyService.restore(securityToken, retrieveIdVisitor.getIds()); + List<String> ids = retrieveIdVisitor.getIds(); + List<Wikitty> wikitties = restore(ids); - IdToTreeNodeConverter converter = new IdToTreeNodeConverter( - securityToken, wikittyService, wikitties); + IdToObjectConverter<Wikitty> converter = + new IdToObjectConverter<Wikitty>(ids, wikitties); - ConvertTreeVisitor<WikittyTreeNode> convertVisitor = - new ConvertTreeVisitor<WikittyTreeNode>(converter); + ConvertTreeVisitor<Wikitty> convertVisitor = + new ConvertTreeVisitor<Wikitty>(converter); resultId.acceptVisitor(convertVisitor); - TreeNodeResult<WikittyTreeNode> result = convertVisitor.getTree(); + TreeNodeResult<Wikitty> result = convertVisitor.getTree(); + timeTrace.add(start, "findTreeNode<Wikitty>"); + return result; + } + + /** + * Recupere une portion d'arbre a partir de l'id passer en parametre. L'id + * doit etre celui d'un WikittyTreeNode. Ce WikittyTreeNode est alors le + * root de l'arbre retourne. + * + * Return E in result + * + * @param clazz business class wanted to replace id in TreeNodeResult + * @param wikittyId root + * @param depth profondeur de noeud a recuperer + * @param count vrai si l'on veut le nombre de piece attaches sur le noeud (piece des enfants compris) + * @param filter filter pour compter les pieces attachees + * @return + * + * @since 3.1 + */ + public <E extends BusinessEntity> TreeNodeResult<E> findTreeNode( + Class<E> clazz, String wikittyId, int depth, + boolean count, Criteria filter) { + long start = TimeTrace.getTime(); + + TreeNodeResult<String> resultId = wikittyService.findTreeNode( + securityToken, wikittyId, depth, count, filter); + + RetrieveIdVisitor retrieveIdVisitor = new RetrieveIdVisitor(); + resultId.acceptVisitor(retrieveIdVisitor); + + List<String> ids = retrieveIdVisitor.getIds(); + List<E> wikitties = restore(clazz, ids); + + IdToObjectConverter<E> converter = + new IdToObjectConverter<E>(ids, wikitties); + + ConvertTreeVisitor<E> convertVisitor = + new ConvertTreeVisitor<E>(converter); + + resultId.acceptVisitor(convertVisitor); + + TreeNodeResult<E> result = convertVisitor.getTree(); timeTrace.add(start, "findTreeNode"); return result; } @@ -603,26 +652,20 @@ * Converti un id en son object WikittyTreeNode * @since 3.1 */ - static private class IdToTreeNodeConverter implements ConvertTreeVisitor.Converter<String, WikittyTreeNode> { - protected Map<String, Wikitty> wikitties = new HashMap<String, Wikitty>(); + static private class IdToObjectConverter<T> implements ConvertTreeVisitor.Converter<String, T> { + protected Map<String, T> objects = new HashMap<String, T>(); protected String securityToken; protected WikittyService wikittyService; - public IdToTreeNodeConverter(String securityToken, - WikittyService wikittyService, List<Wikitty> wikitties) { - this.securityToken = securityToken; - this.wikittyService = wikittyService; - - for (Wikitty w : wikitties) { - this.wikitties.put(w.getId(), w); + public IdToObjectConverter(List<String> ids, List<T> objectList) { + + for (int i = 0; i < ids.size(); i++) { + this.objects.put(ids.get(i), objectList.get(i)); } } @Override - public WikittyTreeNode convert(String id) { - Wikitty w = wikitties.get(id); - WikittyTreeNode result = WikittyUtil.newInstance( - securityToken, wikittyService, WikittyTreeNode.class, w); - + public T convert(String id) { + T result = objects.get(id); return result; } } @@ -747,63 +790,90 @@ return result; } - // Next method are removed, but if necessary they can be reimplanted with - // call to findTreeNode methode + /** + * Restore node with wikittyId passed in argument and count of attachment + * in subtree begin with this node + * + * @param <E> + * @param clazz + * @param wikittyId + * @param filter + * @return + * @deprecated since 3.1: use {@link #findTreeNode} or open new ticket with your need + */ + @Deprecated + public <E extends BusinessEntity> Map.Entry<E, Integer> restoreNode( + Class<E> clazz, String wikittyId, Criteria filter) { + long start = TimeTrace.getTime(); -// public <E extends BusinessEntity> Map.Entry<E, Integer> restoreNode( -// Class<E> clazz, String wikittyId, Criteria filter) { -// Entry<E, Integer> result = restoreNode(clazz, wikittyId, filter, false); -// return result; -// } -// -// public <E extends BusinessEntity> Map.Entry<E, Integer> restoreNode( -// Class<E> clazz, String wikittyId, Criteria filter, boolean checkExtension) { -// long start = TimeTrace.getTime(); -// Map.Entry<E, Integer> result = null; -// -// Map.Entry<String, Integer> node = wikittyService.restoreNode( -// securityToken, wikittyId, filter); -// if (node != null) { -// E bean = restore(clazz, wikittyId, checkExtension); -// if (bean != null) { -// result = new HashMap.SimpleEntry<E, Integer>(bean, node.getValue()); -// } -// } -// -// timeTrace.add(start, "restoreNode"); -// return result; -// } -// -// public <E extends BusinessEntity> Map<E, Integer> findTreeNode( -// Class<E> clazz, String wikittyId, Criteria filter) { -// Map<E, Integer> result = findTreeNode(clazz, wikittyId, filter, false); -// return result; -// } -// -// public <E extends BusinessEntity> Map<E, Integer> findTreeNode( -// Class<E> clazz, String wikittyId, Criteria filter, boolean checkExtension) { -// long start = TimeTrace.getTime(); -// -// Map<E, Integer> convertedResult = null; -// -// Map<String, Integer> result = wikittyService.findTreeNode( -// securityToken, wikittyId, filter); -// -// if(result != null) { -// List<String> ids = new ArrayList<String>(result.keySet()); -// List<E> keys = restore(clazz, ids, checkExtension); -// -// convertedResult = new LinkedHashMap<E, Integer>(); -// for (E e : keys) { -// Integer size = result.get(e.getWikittyId()); -// convertedResult.put(e, size); -// } -// } -// -// timeTrace.add(start, "findTreeNode"); -// return convertedResult; -// } + TreeNodeResult<E> tree = findTreeNode(clazz, wikittyId, 0, true, filter); + Map.Entry<E, Integer> result = new SimpleEntry<E, Integer>( + tree.getObject(), tree.getAttCount()); + + timeTrace.add(start, "restoreNode"); + return result; + } + /** + * Restore node with wikittyId passed in argument and count of attachment + * in subtree begin with this node + * + * ATTENTION: extension is never checked. + * + * @param <E> + * @param clazz + * @param wikittyId + * @param filter + * @param checkExtension not used + * @deprecated since 3.1: use {@link #findTreeNode} or open new ticket with your need + */ + @Deprecated + public <E extends BusinessEntity> Map.Entry<E, Integer> restoreNode( + Class<E> clazz, String wikittyId, Criteria filter, boolean checkExtension) { + Map.Entry<E, Integer> result = restoreNode(clazz, wikittyId, filter); + return result; + } + + /** + * Return only children of wikittyId passed in argument + * + * @param clazz + * @param wikittyId + * @param filter + * @return + * + * @deprecated since 3.1: use {@link #findTreeNode} or open new ticket with your need + */ + @Deprecated + public <E extends BusinessEntity> Map<E, Integer> findTreeNode( + Class<E> clazz, String wikittyId, Criteria filter) { + long start = TimeTrace.getTime(); + + TreeNodeResult<E> tree = findTreeNode(clazz, wikittyId, 1, true, filter); + + Map<E, Integer> result = new LinkedHashMap<E, Integer>(); + for (TreeNodeResult<E> child : tree.getChildren()) { + result.put(child.getObject(), child.getAttCount()); + } + + timeTrace.add(start, "findTreeNode"); + return result; + } + + /** + * Return only children of wikittyId passed in argument + * + * ATTENTION: extension is never checked. + * + * @deprecated since 3.1: use {@link #findTreeNode} or open new ticket with your need + */ + @Deprecated + public <E extends BusinessEntity> Map<E, Integer> findTreeNode( + Class<E> clazz, String wikittyId, Criteria filter, boolean checkExtension) { + Map<E, Integer> result = findTreeNode(clazz, wikittyId, filter); + return result; + } + public Wikitty restoreVersion(String wikittyId, String version) { long start = TimeTrace.getTime(); Wikitty result = wikittyService.restoreVersion( @@ -965,7 +1035,7 @@ /** * Synchronize search engine with wikitty storage engine, i.e. clear and - * reindex all wikitties. + * reindex all object. */ public void syncSearchEngine() { long start = TimeTrace.getTime(); Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java =================================================================== --- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java 2011-01-31 12:13:07 UTC (rev 699) +++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/conform/StorageTest.java 2011-01-31 15:25:48 UTC (rev 700) @@ -506,6 +506,7 @@ assign( bureau, root, "cat-2/subcat-2-4" ); TreeNodeResult<WikittyTreeNode> t = getProxy().findTreeNode( + WikittyTreeNode.class, root.getWikitty().getId(), 0, false, null); Assert.assertEquals("MyCategoryRoot", t.getObject().getName()); 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 2011-01-31 12:13:07 UTC (rev 699) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/TreeTest.java 2011-01-31 15:25:48 UTC (rev 700) @@ -200,7 +200,7 @@ // Sum attachment object in node String nodeId = node.getId(); TreeNodeResult<WikittyTreeNode> tree = getProxy().findTreeNode( - nodeId, -1, true, null); + WikittyTreeNode.class, nodeId, -1, true, null); CollectAttachmentVisitor visitor = new CollectAttachmentVisitor(); tree.acceptVisitor(visitor); @@ -274,7 +274,7 @@ String rootId = root.getId(); TreeNodeResult<WikittyTreeNode> tree = - getProxy().findTreeNode(rootId, -1, false, null); + getProxy().findTreeNode(WikittyTreeNode.class, rootId, -1, false, null); assertNotNull(tree); } @@ -299,7 +299,7 @@ String node1Id = node1.getId(); TreeNodeResult<WikittyTreeNode> children = getProxy().findTreeNode( - node1Id, 1, false, null); + WikittyTreeNode.class, node1Id, 1, false, null); assertEquals(3, children.getChildCount()); } @@ -315,7 +315,7 @@ Criteria filter = Search.query().eq("test.name", "value 3").criteria(); TreeNodeResult<WikittyTreeNode> children = getProxy().findTreeNode( - node1Id, 1, true, filter); + WikittyTreeNode.class, node1Id, 1, true, filter); System.out.println(children); assertEquals(3, children.getChildCount()); for (TreeNodeResult<WikittyTreeNode> e : children.getChildren()) { @@ -329,7 +329,7 @@ String node11Id = node11.getId(); TreeNodeResult<WikittyTreeNode> count = getProxy().findTreeNode( - node11Id, 0, true, null); + WikittyTreeNode.class, node11Id, 0, true, null); assertEquals(3, count.getAttCount()); } @@ -340,7 +340,7 @@ Criteria filter = Search.query().eq("test.name", "value 3").criteria(); TreeNodeResult<WikittyTreeNode> count = getProxy().findTreeNode( - node11Id, 0, true, filter); + WikittyTreeNode.class, node11Id, 0, true, filter); System.out.println(count); assertEquals(1, count.getAttCount()); } @@ -351,7 +351,7 @@ Wikitty node2 = findNode("node2"); String node2Id = node2.getId(); TreeNodeResult<WikittyTreeNode> children = getProxy().findTreeNode( - node2Id, 1, true, null); + WikittyTreeNode.class, node2Id, 1, true, null); assertEquals(0, children.getChildCount()); // Create a new node, child of node 2 @@ -364,7 +364,7 @@ // Check that it was great added as node2 child children = getProxy().findTreeNode( - node2Id, 1, false, null); + WikittyTreeNode.class, node2Id, 1, false, null); assertEquals(1, children.getChildCount()); } @@ -463,7 +463,7 @@ event.update(child.getWikitty()); TreeNodeResult<WikittyTreeNode> children = getProxy().findTreeNode( - parent.getWikittyId(), 1, true, null); + WikittyTreeNode.class, parent.getWikittyId(), 1, true, null); assertEquals(1, children.getChildCount()); assertEquals(0, children.getChild(child).getAttCount()); @@ -473,7 +473,7 @@ ws.store(null, child.getWikitty()); children = getProxy().findTreeNode( - parent.getWikittyId(), 1, true, null); + WikittyTreeNode.class, parent.getWikittyId(), 1, true, null); assertEquals(0, children.getChildCount()); } @@ -543,7 +543,7 @@ assertEquals(1, sum); TreeNodeResult<WikittyTreeNode> count = getProxy().findTreeNode( - node3.getId(), 0, true, null); + WikittyTreeNode.class, node3.getId(), 0, true, null); assertEquals(1, count.getAttCount()); sum = sum(node31);