Author: bpoussin Date: 2010-10-21 12:35:05 +0200 (Thu, 21 Oct 2010) New Revision: 440 Url: http://nuiton.org/repositories/revision/wikitty/440 Log: Change store and delete implementation to force usage of Set collection type http://www.nuiton.org/issues/show/882 Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java 2010-10-20 22:26:21 UTC (rev 439) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java 2010-10-21 10:35:05 UTC (rev 440) @@ -38,6 +38,7 @@ import java.util.Map; import java.util.Set; import java.util.AbstractMap.SimpleEntry; +import java.util.LinkedHashSet; import java.util.Map.Entry; import org.apache.commons.logging.Log; @@ -157,10 +158,14 @@ @Override public UpdateResponse store(String securityToken, WikittyTransaction transaction, Collection<Wikitty> wikitties, boolean force) { + if (!(wikitties instanceof Set)) { + // use all time Set to prevent duplicated wikitty in collection + wikitties = new LinkedHashSet<Wikitty>(wikitties); + } checkConstraint(wikitties); // update/store extension if necessary - Set<WikittyExtension> allExtensions = new HashSet<WikittyExtension>(); + Set<WikittyExtension> allExtensions = new LinkedHashSet<WikittyExtension>(); for (Wikitty w : wikitties) { // collect all extensions used by all wikitties allExtensions.addAll(w.getExtensions()); @@ -533,18 +538,26 @@ protected void delete(String securityToken, WikittyTransaction transaction, Collection<String> ids) throws WikittyException { // work only on valid id - Collection<Wikitty> storedWikitties = new ArrayList<Wikitty>(); - List<String> idList = new LinkedList<String>(ids); - for (Iterator<String> i = idList.iterator(); i.hasNext();) { + Collection<Wikitty> storedWikitties = new LinkedHashSet<Wikitty>(); + // copy ids because we can remove some element, and modify it + // use set to prevent id duplication and preformance (contains method call) + Set<String> idSet = new LinkedHashSet<String>(ids); + for (Iterator<String> i = idSet.iterator(); i.hasNext();) { String id = i.next(); // test if wikitty exists if (!getWikittyStorage().exists(transaction, id)) { // don't exist, remove this id in id list i.remove(); + // go to the next id, because this id doesn't exist and can't + // be used in tree + continue; } if (getWikittyStorage().isDeleted(transaction, id)) { // already deleted, remove this id in id list i.remove(); + // go to the next id, because this id already deleted and can't + // be used in tree + continue; } // Store node with have deleted node as parent @@ -553,7 +566,7 @@ List<String> wikittyNodesId = findAllByCriteria( securityToken, transaction, criteria).getAll(); for (String wikittyNodeId : wikittyNodesId) { - if(!ids.contains(wikittyNodeId)) { + if(!idSet.contains(wikittyNodeId)) { Wikitty treeNode = restore( securityToken, transaction, wikittyNodeId); WikittyTreeNodeHelper.setParent(treeNode, null); @@ -566,7 +579,7 @@ wikittyNodesId = findAllByCriteria( securityToken, transaction, criteria).getAll(); for (String wikittyNodeId : wikittyNodesId) { - if(!ids.contains(wikittyNodeId)) { + if(!idSet.contains(wikittyNodeId)) { Wikitty treeNode = restore( securityToken, transaction, wikittyNodeId); WikittyTreeNodeHelper.removeAttachment(treeNode, id); @@ -575,8 +588,8 @@ } } - getWikittyStorage().delete(transaction, idList); - getSearchEngin().delete(transaction, idList); + getWikittyStorage().delete(transaction, idSet); + getSearchEngin().delete(transaction, idSet); store(securityToken, transaction, storedWikitties, false); }
participants (1)
-
bpoussin@users.nuiton.org