r632 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr
Author: bpoussin Date: 2010-12-20 14:03:45 +0100 (Mon, 20 Dec 2010) New Revision: 632 Url: http://nuiton.org/repositories/revision/wikitty/632 Log: - WikittySearchEngineSolrIndexInTreeNode is completely implemented - add javadoc on WikittyService Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrIndexInTreeNode.java trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 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/WikittyServiceSolr.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java 2010-12-20 12:39:01 UTC (rev 631) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyConfig.java 2010-12-20 13:03:45 UTC (rev 632) @@ -119,6 +119,7 @@ } /** + * TODO poussin 20101219 extract this class from WikittyConfig * Configuration option for all modules */ public static enum WikittyOption implements OptionDef { 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-20 12:39:01 UTC (rev 631) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-12-20 13:03:45 UTC (rev 632) @@ -338,21 +338,29 @@ /** * Retrieve wikitty node with count. Wikitty reference by wikittyId MUST - * include the 'Node' extension. - * + * include the 'WikittyTreeNode' extension. + * + * Count is number of attachment in subtree. If filter is not null only + * attachments that satisfy filter are counted + * * @param securityToken security token * @param wikittyId + * @param filter * @return */ public Map.Entry<WikittyTreeNode, Integer> restoreNode( String securityToken, String wikittyId, Criteria filter); /** - * Retrieve all wikitties children with count (no recursively) of an other one - * Wikitty reference by wikittyId MUST include the 'Node' extension + * Retrieve all wikitties children (no recursively) with count of an other one + * Wikitty reference by wikittyId MUST include the 'WikittyTreeNode' extension * + * Count is number of attachment in subtree (recursively). If filter is not + * null only attachments that satisfy filter are counted + * * @param securityToken security token * @param wikittyId + * @param filter * @return */ public Map<WikittyTreeNode, Integer> restoreChildren( Modified: trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java =================================================================== --- trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2010-12-20 12:39:01 UTC (rev 631) +++ trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolr.java 2010-12-20 13:03:45 UTC (rev 632) @@ -27,7 +27,6 @@ import static org.nuiton.wikitty.storage.solr.WikittySolrConstant.*; -import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -57,21 +56,12 @@ import org.nuiton.wikitty.entities.WikittyTreeNode; import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.WikittyException; -import org.nuiton.wikitty.entities.WikittyExtension; import org.nuiton.wikitty.storage.WikittyExtensionStorage; import org.nuiton.wikitty.storage.WikittySearchEngine; import org.nuiton.wikitty.services.WikittyTransaction; -import org.nuiton.wikitty.search.operators.Element; import org.nuiton.wikitty.search.Search; -import com.arjuna.ats.arjuna.coordinator.BasicAction; -import com.arjuna.ats.arjuna.coordinator.OnePhaseResource; -import com.arjuna.ats.arjuna.coordinator.TwoPhaseOutcome; -import com.arjuna.ats.arjuna.state.InputObjectState; -import com.arjuna.ats.arjuna.state.OutputObjectState; -import com.arjuna.ats.internal.arjuna.abstractrecords.LastResourceRecord; import java.io.File; -import java.util.regex.Pattern; import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.WikittyConfig; import org.nuiton.wikitty.WikittyUtil; Modified: trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrIndexInTreeNode.java =================================================================== --- trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrIndexInTreeNode.java 2010-12-20 12:39:01 UTC (rev 631) +++ trunk/wikitty-solr-impl/src/main/java/org/nuiton/wikitty/storage/solr/WikittySearchEngineSolrIndexInTreeNode.java 2010-12-20 13:03:45 UTC (rev 632) @@ -61,6 +61,7 @@ import org.nuiton.wikitty.services.WikittyTransaction; import java.io.File; +import java.util.Collections; import java.util.LinkedHashSet; import java.util.LinkedList; import org.nuiton.util.ApplicationConfig; @@ -477,39 +478,65 @@ } } + /** + * Cette implantation n'est pas vraiment optimale en place memoire si + * le 'filter' retourne enormement de resultat ou qu'il y a beaucoup + * d'attachment dans l'arbre. + * + * On a en memoire l'ensemble des ids des attachments du sous arbre et + * l'ensemble des ids du resultat du filter. + * + * @param transaction + * @param w + * @param filter + * @return + */ @Override public Integer findNodeCount(WikittyTransaction transaction, Wikitty w, Criteria filter) { try { int result = 0; String id = w.getId(); - if (filter == null) { - // we used hashSet to count only once same attachments in many node - Collection allAttachments = new HashSet(); + // we used hashSet to count only once same attachments in many node + Collection allAttachments = new HashSet(); - // on recherche tout les fils du noeud - SolrQuery query = new SolrQuery(SOLR_QUERY_PARSER + TREENODE_PARENTS + ":" + id); - QueryResponse response = solrServer.query(query); - SolrDocumentList updateDocs = response.getResults(); - for (Iterator<SolrDocument> iterator = updateDocs.iterator(); iterator.hasNext();) { - SolrDocument solrDocument = iterator.next(); - Collection attachments = solrDocument.getFieldValues( - WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT - + SUFFIX_WIKITTY); - if (attachments != null) { - allAttachments.addAll(attachments); - } + // on recherche tout les fils du noeud + SolrQuery query = new SolrQuery(SOLR_QUERY_PARSER + TREENODE_PARENTS + ":" + id); + QueryResponse response = solrServer.query(query); + SolrDocumentList updateDocs = response.getResults(); + for (Iterator<SolrDocument> iterator = updateDocs.iterator(); iterator.hasNext();) { + SolrDocument solrDocument = iterator.next(); + Collection attachments = solrDocument.getFieldValues( + WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT + + SUFFIX_WIKITTY); + if (attachments != null) { + allAttachments.addAll(attachments); } - result = allAttachments.size(); - } else { - throw new UnsupportedOperationException("Not yet implemented with filter!"); } + if (filter != null) { + PagedResult<String> criteriaResult = findAllByCriteria(transaction, filter); + allAttachments.retainAll(criteriaResult.getAll()); + } + result = allAttachments.size(); return result; } catch (SolrServerException eee) { throw new WikittyException("Can't find node count", eee); } } + /** + * Cette implantation n'est pas vraiment optimale en place memoire si + * le 'filter' retourne enormement de resultat ou qu'il y a beaucoup + * d'attachment dans l'arbre. + * + * On a en memoire l'ensemble des ids des attachments du sous arbre et + * l'ensemble des ids du resultat du filter. + * + * @param transaction + * @param w + * @param filter + * @return + */ @Override public Map<String, Integer> findAllChildrenCount( WikittyTransaction transaction, Wikitty w, Criteria filter) { @@ -518,56 +545,65 @@ Map<String, Integer> result = new HashMap<String, Integer>(); String id = w.getId(); - if (filter == null) { // key: id node; value: attachment count for this node (with sub*node) - Map<String, Collection> allAttachments = new HashMap<String, Collection>(); - - // les id des fils direct du wikitty passe en parametre - Set<String> child = new HashSet<String>(); + Map<String, Collection> allAttachments = new HashMap<String, Collection>(); - // on recherche tout les fils et sous fils, lui compris - SolrQuery query = new SolrQuery(SOLR_QUERY_PARSER + TREENODE_PARENTS + ":" + id); - QueryResponse response = solrServer.query(query); - SolrDocumentList updateDocs = response.getResults(); + // les id des fils direct du wikitty passe en parametre + Set<String> child = new HashSet<String>(); - for (Iterator<SolrDocument> iterator = updateDocs.iterator(); iterator.hasNext();) { - SolrDocument solrDocument = iterator.next(); - String childId = (String)solrDocument.getFieldValue(SOLR_ID); - String parentId = (String)solrDocument.getFieldValue( - WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT + SUFFIX_WIKITTY); - Collection attachments = solrDocument.getFieldValues( - WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT + SUFFIX_WIKITTY); - Collection parents = solrDocument.getFieldValues( - TREENODE_PARENTS); + // on recherche tout les fils et sous fils, lui compris + SolrQuery query = new SolrQuery(SOLR_QUERY_PARSER + TREENODE_PARENTS + ":" + id); + QueryResponse response = solrServer.query(query); + SolrDocumentList updateDocs = response.getResults(); - if (id.equals(parentId)) { - // c'est un fils direct on l'ajoute a la liste des fils - child.add(childId); - } + for (Iterator<SolrDocument> iterator = updateDocs.iterator(); iterator.hasNext();) { + SolrDocument solrDocument = iterator.next(); + String childId = (String) solrDocument.getFieldValue(SOLR_ID); + String parentId = (String) solrDocument.getFieldValue( + WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_PARENT + SUFFIX_WIKITTY); + Collection attachments = solrDocument.getFieldValues( + WikittyTreeNode.FQ_FIELD_WIKITTYTREENODE_ATTACHMENT + SUFFIX_WIKITTY); + Collection parents = solrDocument.getFieldValues( + TREENODE_PARENTS); - for (Object p : parents) { - String parent = (String) p; - Collection col = allAttachments.get(parent); - if (col == null) { - // we used hashSet to count only once same attachments in many node - col = new HashSet(); - allAttachments.put(parent, col); - } - if (attachments != null) { - col.addAll(attachments); - } - } + if (id.equals(parentId)) { + // c'est un fils direct on l'ajoute a la liste des fils + child.add(childId); } - for (Map.Entry<String, Collection> e : allAttachments.entrySet()) { - // on ne garde que les fils directs - if (child.contains(e.getKey())) { - result.put(e.getKey(), e.getValue().size()); + for (Object p : parents) { + String parent = (String) p; + Collection col = allAttachments.get(parent); + if (col == null) { + // we used hashSet to count only once same attachments in many node + col = new HashSet(); + allAttachments.put(parent, col); } + if (attachments != null) { + col.addAll(attachments); + } } - } else { - throw new UnsupportedOperationException("Not yet implemented with filter!"); } + + // creation des id repondants au filtre si besoin + Collection<String> filteredId = Collections.EMPTY_LIST; + if (filter != null) { + PagedResult<String> criteriaResult = findAllByCriteria(transaction, filter); + filteredId = criteriaResult.getAll(); + } + + // Construction du resultat + for (Map.Entry<String, Collection> e : allAttachments.entrySet()) { + // on ne garde que les fils directs + if (child.contains(e.getKey())) { + Collection attachments = e.getValue(); + // on ne garde dans le comptage des attachments que les id + // qui reponde aussi au filter + attachments.retainAll(filteredId); + result.put(e.getKey(), attachments.size()); + } + } + return result; } catch (SolrServerException eee) { throw new WikittyException("Can't find node count", eee); Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java =================================================================== --- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2010-12-20 12:39:01 UTC (rev 631) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/SolrSearchTest.java 2010-12-20 13:03:45 UTC (rev 632) @@ -407,7 +407,7 @@ } // on ignore ce test car le like toLowercase devrait disparaitre et pour l'instant il ne marche pas :( - @Ignore +// @Ignore @Test public void testLikeSearch() throws Exception { Criteria criteria = Search.query().like("Category.name", "hArDwArE", Like.SearchAs.ToLowerCase).criteria(); 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-20 12:39:01 UTC (rev 631) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/TreeTest.java 2010-12-20 13:03:45 UTC (rev 632) @@ -270,6 +270,7 @@ Criteria filter = Search.query().eq("test.name", "value 3").criteria(); Map<WikittyTreeNode, Integer> children = ws.restoreChildren(null, node1Id, filter); + System.out.println(children); assertEquals(3, children.size()); } @@ -289,6 +290,7 @@ Criteria filter = Search.query().eq("test.name", "value 3").criteria(); Entry<WikittyTreeNode, Integer> count = ws.restoreNode(null, node11Id, filter); + System.out.println(count); assertEquals(1, count.getValue().intValue()); } Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/WikittyServiceSolr.java =================================================================== --- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/WikittyServiceSolr.java 2010-12-20 12:39:01 UTC (rev 631) +++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/storage/solr/WikittyServiceSolr.java 2010-12-20 13:03:45 UTC (rev 632) @@ -27,8 +27,6 @@ import org.nuiton.util.ApplicationConfig; import org.nuiton.wikitty.services.WikittyServiceStorage; -import org.nuiton.wikitty.storage.solr.WikittySearchEngineSolr; -import org.nuiton.wikitty.storage.solr.WikittySearchEngineSolrIndexInTreeNode; import org.nuiton.wikitty.storage.WikittyExtensionStorageInMemory; import org.nuiton.wikitty.storage.WikittyStorageInMemory;
participants (1)
-
bpoussin@users.nuiton.org