Author: echatellier Date: 2010-09-16 10:36:55 +0200 (Thu, 16 Sep 2010) New Revision: 314 Url: http://nuiton.org/repositories/revision/wikitty/314 Log: #868 : Add recursive deleteTree method to delete all tree branche 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/WikittyServiceCached.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceDelegator.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.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-09-15 12:22:45 UTC (rev 313) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2010-09-16 08:36:55 UTC (rev 314) @@ -416,6 +416,17 @@ return result; } + /** + * Delete specified tree node and all sub nodes. + * + * @param treeNodeId tree node id to delete + * @return {@true} if at least one node has been deleted + */ + public List<String> deleteTree(String treeNodeId) { + List<String> result = wikittyService.deleteTree(securityToken, treeNodeId); + return result; + } + 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); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-09-15 12:22:45 UTC (rev 313) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-09-16 08:36:55 UTC (rev 314) @@ -437,6 +437,15 @@ public Tree restoreTree(String securityToken, String wikittyId); /** + * Delete specified tree node and all sub nodes. + * + * @param securityToken security token + * @param treeNodeId tree node id to delete + * @return delete wikitty ids + */ + public List<String> deleteTree(String securityToken, String treeNodeId); + + /** * Retrieve wikitty node with count. Wikitty reference by wikittyId MUST * include the 'Node' extension. * Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java 2010-09-15 12:22:45 UTC (rev 313) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java 2010-09-16 08:36:55 UTC (rev 314) @@ -527,6 +527,17 @@ // FIXME lookup in cache, and put in cache return ws.restoreTree(securityToken, wikittyId); } + + /** + * just wrap service method + * + * @param wikittyId + * @return + */ + @Override + public List<String> deleteTree(String securityToken, String wikittyId) { + return ws.deleteTree(securityToken, wikittyId); + } /** * Overriden to update wikitty and put it in cache Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceDelegator.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceDelegator.java 2010-09-15 12:22:45 UTC (rev 313) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceDelegator.java 2010-09-16 08:36:55 UTC (rev 314) @@ -247,6 +247,11 @@ public Tree restoreTree(String securityToken, String wikittyId) { return delegate.restoreTree(securityToken, wikittyId); } + + @Override + public List<String> deleteTree(String securityToken, String wikittyId) { + return delegate.deleteTree(securityToken, wikittyId); + } @Override public Entry<TreeNode, Integer> restoreNode(String securityToken, Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java 2010-09-15 12:22:45 UTC (rev 313) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java 2010-09-16 08:36:55 UTC (rev 314) @@ -796,6 +796,62 @@ } @Override + public List<String> deleteTree(String securityToken, String thesaurusId) { + List<String> deletedIds = null; + WikittyTransaction transaction = new WikittyTransaction(); + try { + transaction.begin(); + + deletedIds = deleteTree(securityToken, transaction, thesaurusId); + + transaction.commit(); + } catch (Exception eee) { + transaction.rollback(); + throw new WikittyException(eee); + } + + return deletedIds; + } + + /** + * Delete specified treenode and sub treenode. + * + * @param securityToken security token + * @param transaction transaction + * @param treeNodeId thesaurusId to delete + * @return all id of delete nodes + */ + public List<String> deleteTree(String securityToken, WikittyTransaction transaction, String treeNodeId) { + List<String> allTreeNodeId = getRecursiveTreeNodeId(securityToken, transaction, treeNodeId); + delete(securityToken, transaction, allTreeNodeId); + return allTreeNodeId; + } + + /** + * Get recursive id of tree node children of {@code treeNodeId}. + * + * @param securityToken security token + * @param transaction transaction + * @param treeNodeId tree node id + * @return all id of {@code treeNodeId}'s children + */ + protected List<String> getRecursiveTreeNodeId(String securityToken, WikittyTransaction transaction, String treeNodeId) { + + Search search = Search.query(); + search = search.eq(TreeNode.FQ_FIELD_TREENODE_PARENT, treeNodeId); + Criteria criteria = search.criteria(); + + PagedResult<String> childTreeNodeIds = findAllByCriteria(securityToken, transaction, criteria); + List<String> treeNodeIds = new ArrayList<String>(); + for (String childTreeNodeId : childTreeNodeIds.getAll()) { + treeNodeIds.add(childTreeNodeId); + List<String> subTreeNodeIds = getRecursiveTreeNodeId(securityToken, transaction, childTreeNodeId); + treeNodeIds.addAll(subTreeNodeIds); + } + return treeNodeIds; + } + + @Override public Map.Entry<TreeNode, Integer> restoreNode(String securityToken, String wikittyId, Criteria filter) { WikittyTransaction transaction = new WikittyTransaction(); Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java 2010-09-15 12:22:45 UTC (rev 313) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java 2010-09-16 08:36:55 UTC (rev 314) @@ -403,6 +403,14 @@ } @Override + public List<String> deleteTree(String securityToken, String wikittyId) { + // no notification + List<String> result = ws.deleteTree(securityToken, wikittyId); + fireRemoveWikitty(result.toArray(new String[result.size()])); + return result; + } + + @Override public Entry<TreeNode, Integer> restoreNode(String securityToken, String wikittyId, Criteria filter) { // no notification Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java 2010-09-15 12:22:45 UTC (rev 313) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceSecurity.java 2010-09-16 08:36:55 UTC (rev 314) @@ -467,6 +467,12 @@ } @Override + public List<String> deleteTree(String securityToken, String wikittyId) { + // FIXME poussin 20100607 check security + return ws.deleteTree(securityToken, wikittyId); + } + + @Override public Entry<TreeNode, Integer> restoreNode( String securityToken, String wikittyId, Criteria filter) { // FIXME poussin 20100607 check security
participants (1)
-
echatellier@users.nuiton.org