This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository bow. See http://git.chorem.org/bow.git commit 10ca9682675815f9432f21733ac8887deb13e5e8 Author: Benjamin POUSSIN <poussin@codelutin.com> Date: Thu Aug 6 19:35:00 2015 +0200 rename group or shareUser tag, if user is no more in group or share user is deleted --- .../src/main/java/org/chorem/bow/BowSession.java | 41 ++++++++++++++++++++++ .../chorem/bow/action/group/GroupEditAction.java | 40 +++++++++++++++------ .../bow/action/preference/AdminTagAction.java | 34 ++++-------------- .../action/sharedUser/SharedUserEditAction.java | 13 +++++-- 4 files changed, 88 insertions(+), 40 deletions(-) diff --git a/bow-ui/src/main/java/org/chorem/bow/BowSession.java b/bow-ui/src/main/java/org/chorem/bow/BowSession.java index 5b8d3c5..820fac8 100644 --- a/bow-ui/src/main/java/org/chorem/bow/BowSession.java +++ b/bow-ui/src/main/java/org/chorem/bow/BowSession.java @@ -34,7 +34,11 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.nuiton.wikitty.entities.WikittyGroup; +import org.nuiton.wikitty.entities.WikittyLabel; import org.nuiton.wikitty.entities.WikittyUser; import org.nuiton.wikitty.query.WikittyQuery; import org.nuiton.wikitty.query.WikittyQueryMaker; @@ -113,6 +117,43 @@ public class BowSession implements Serializable { } /** + * Recherche les bookmarks de l'utilisateur courant (owner) contenant au + * moins un des tags a supprimer (toRemove) et les supprimes et ajoute ceux + * qui sont dans la liste toAdd. + * + * Si toAdd est vide ou null, alors cette methode revient un une simple + * suppression. + * + * @param toRemove les des tags servant pour la recherche et qui seront supprimes + * @param toAdd les tags qui seront ajoute + */ + public void removeAndAddTag(List<String> toRemove, List<String> toAdd) { + WikittyQuery c = new WikittyQueryMaker().and() + .exteq(BowBookmark.EXT_BOWBOOKMARK) + .containsOne(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS, toRemove) + .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, user) + .end(); + WikittyQueryResult<WikittyLabel> searchResult = + proxy.findAllByQuery(WikittyLabel.class, c); + + List<WikittyLabel> toStore = new ArrayList<WikittyLabel>(); + for (WikittyLabel label : searchResult) { + toStore.add(label); + Set<String> l = label.getLabels(); + if (l != null) { + // on fait une copie, car l retourne est non modifiable + l = new HashSet<String>(l); + l.removeAll(toRemove); + if (CollectionUtils.isNotEmpty(toAdd)) { + l.addAll(toAdd); + } + label.setLabels(l); + } + } + proxy.store(toStore); + } + + /** * Get default user authentication * @return */ diff --git a/bow-ui/src/main/java/org/chorem/bow/action/group/GroupEditAction.java b/bow-ui/src/main/java/org/chorem/bow/action/group/GroupEditAction.java index acf8e01..cb0e787 100644 --- a/bow-ui/src/main/java/org/chorem/bow/action/group/GroupEditAction.java +++ b/bow-ui/src/main/java/org/chorem/bow/action/group/GroupEditAction.java @@ -27,6 +27,7 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.chorem.bow.BowConfig; import org.chorem.bow.BowGroup; import org.chorem.bow.BowGroupImpl; import org.chorem.bow.BowProxy; @@ -120,10 +121,11 @@ public class GroupEditAction extends BowBaseAction { public String removeMe() throws Exception { String result = SUCCESS; try { - BowSession session = getBowSession(); - BowUser user = session.getUser(); - BowProxy proxy = session.getProxy(); + String groupName = group.getName(); + + BowUser user = getBowUser(); + BowProxy proxy = getBowProxy(); // group is loaded by prepare method getGroup().removeMembers(user.getWikittyId()); @@ -134,6 +136,11 @@ public class GroupEditAction extends BowBaseAction { proxy.store(group); } + getBowSession().removeAndAddTag( + Collections.singletonList(BowConfig.GROUP_MARK + groupName), + Collections.singletonList(groupName) + ); + } catch (Exception eee) { addActionError(t("bow.error.internal")); log.error(eee.getMessage(), eee); @@ -151,7 +158,9 @@ public class GroupEditAction extends BowBaseAction { BowSession session = getBowSession(); BowProxy proxy = session.getProxy(); - if (StringUtils.isNotBlank(getGroup().getName())) { + String groupName = group.getName(); + + if (StringUtils.isNotBlank(groupName)) { Map<String, String> logins = new HashMap<String, String>(); // convert user login to id for (String login : getGroup().getMembers()) { @@ -178,9 +187,14 @@ public class GroupEditAction extends BowBaseAction { } if (result == SUCCESS && CollectionUtils.isEmpty(getGroup().getMembers())) { addActionMessage(t("bow.group.delete.no.member")); - // FIXME poussin 20150730 convert all tag '@<group>' to '<group>' - // when group is destroy proxy.delete(group); + // FIXME poussin 20150806 rename only for current user, but + // all bookmarks where current user is reader and with this + // group must be modified + getBowSession().removeAndAddTag( + Collections.singletonList(BowConfig.GROUP_MARK + groupName), + Collections.singletonList(groupName) + ); } else { // force admin to group all time getGroup().setAdmin(Collections.singleton(getGroup().getWikittyId())); @@ -206,13 +220,19 @@ public class GroupEditAction extends BowBaseAction { } String result = SUCCESS; try { - BowSession session = getBowSession(); - BowProxy proxy = session.getProxy(); - // FIXME poussin 20150730 convert all tag '@<group>' to '<group>' - // when group is destroy + String groupName = group.getName(); + BowProxy proxy = getBowProxy(); + proxy.delete(group); + // FIXME poussin 20150806 rename only for current user, but + // all bookmarks where current user is reader and with this + // group must be modified + getBowSession().removeAndAddTag( + Collections.singletonList(BowConfig.GROUP_MARK + groupName), + Collections.singletonList(groupName) + ); } catch (Exception eee) { addActionError(t("bow.error.internal")); diff --git a/bow-ui/src/main/java/org/chorem/bow/action/preference/AdminTagAction.java b/bow-ui/src/main/java/org/chorem/bow/action/preference/AdminTagAction.java index b147989..acaf4c2 100644 --- a/bow-ui/src/main/java/org/chorem/bow/action/preference/AdminTagAction.java +++ b/bow-ui/src/main/java/org/chorem/bow/action/preference/AdminTagAction.java @@ -30,6 +30,7 @@ import org.nuiton.wikitty.entities.WikittyLabel; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -70,35 +71,14 @@ public class AdminTagAction extends PreferenceBaseAction { log.debug("action delete: " + delete + " rename: " + rename); } - List<String> selectedLabelsList = Arrays.asList(selectedLabels); - boolean isRename = StringUtils.isNotEmpty(rename); + List<String> toRemove = Arrays.asList(selectedLabels); + List<String> toAdd = null; - BowProxy proxy = getBowProxy(); - BowUser user = getBowSession().getUser(); - String userId = user.getWikittyId(); - - WikittyQuery c = new WikittyQueryMaker().and() - .containsOne(BowBookmark.FQ_FIELD_WIKITTYLABEL_LABELS, selectedLabelsList) - .eq(BowBookmark.FQ_FIELD_WIKITTYAUTHORISATION_OWNER, userId) - .end(); - WikittyQueryResult<WikittyLabel> searchResult = - proxy.findAllByQuery(WikittyLabel.class, c); - - List<WikittyLabel> toStore = new ArrayList<WikittyLabel>(); - for (WikittyLabel label : searchResult) { - toStore.add(label); - Set<String> l = label.getLabels(); - if (l != null) { - // on fait une copie, car l retourne est non modifiable - l = new HashSet<String>(l); - l.removeAll(selectedLabelsList); - if (isRename) { - l.add(newLabel); - } - label.setLabels(l); - } + if (StringUtils.isNotEmpty(rename)) { + toAdd = Collections.singletonList(newLabel); } - proxy.store(toStore); + + getBowSession().removeAndAddTag(toRemove, toAdd); } catch (Exception eee) { addActionError(t("bow.error.internal")); diff --git a/bow-ui/src/main/java/org/chorem/bow/action/sharedUser/SharedUserEditAction.java b/bow-ui/src/main/java/org/chorem/bow/action/sharedUser/SharedUserEditAction.java index f5c9dca..476be0d 100644 --- a/bow-ui/src/main/java/org/chorem/bow/action/sharedUser/SharedUserEditAction.java +++ b/bow-ui/src/main/java/org/chorem/bow/action/sharedUser/SharedUserEditAction.java @@ -20,9 +20,11 @@ */ package org.chorem.bow.action.sharedUser; +import java.util.Collections; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.chorem.bow.BowConfig; import org.chorem.bow.BowSharedUser; import org.chorem.bow.BowSharedUserImpl; import org.chorem.bow.BowProxy; @@ -121,13 +123,18 @@ public class SharedUserEditAction extends BowBaseAction { } String result = SUCCESS; try { - BowProxy proxy = getBowProxy(); - // FIXME poussin 20150730 convert all tag '#<user>' to '<user>' - // when user is destroy + String userLogin = sharedUser.getLogin(); + + BowProxy proxy = getBowProxy(); proxy.delete(sharedUserId); + getBowSession().removeAndAddTag( + Collections.singletonList(BowConfig.USER_MARK + userLogin), + Collections.singletonList(userLogin) + ); + } catch (Exception eee) { addActionError(t("bow.error.internal")); log.error(eee.getMessage(), eee); -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.