[kune-commits] r1720 - in trunk/src: main/java/cc/kune/barters/client main/java/cc/kune/blogs/client main/java/cc/kune/core/client main/java/cc/kune/core/client/dnd main/java/cc/kune/core/client/errors main/java/cc/kune/core/client/rpcservices main/java/cc/kune/core/client/sn main/java/cc/kune/core/client/sn/actions main/java/cc/kune/core/public main/java/cc/kune/core/server main/java/cc/kune/core/server/content main/java/cc/kune/core/server/manager/impl main/java/cc/kune/core/server/notifier main/java/cc/kune/core/server/rpc main/java/cc/kune/core/shared/domain/dto main/java/cc/kune/core/shared/dto main/java/cc/kune/domain main/java/cc/kune/gspace/client main/java/cc/kune/gspace/client/options/general main/java/cc/kune/lists/client main/java/cc/kune/tasks/client main/java/cc/kune/wave/server main/java/cc/kune/wave/server/kspecific main/java/cc/kune/wiki/client test/java/cc/kune/core/shared

Vicente J. Ruiz Jurado vjrj_ at ourproject.org
Wed Feb 29 02:04:27 CET 2012


Author: vjrj_
Date: 2012-02-29 02:04:27 +0100 (Wed, 29 Feb 2012)
New Revision: 1720

Added:
   trunk/src/main/java/cc/kune/core/client/errors/InvalidSNOperationException.java
   trunk/src/main/java/cc/kune/core/client/sn/AdminsGroupSNDropController.java
   trunk/src/main/java/cc/kune/core/client/sn/AllMembersGroupSNDropController.java
   trunk/src/main/java/cc/kune/core/client/sn/CollabsGroupSNDropController.java
   trunk/src/main/java/cc/kune/core/client/sn/GroupSNDropController.java
   trunk/src/main/java/cc/kune/core/client/sn/actions/SocialNetClientUtils.java
   trunk/src/main/java/cc/kune/core/server/manager/impl/GroupServerUtils.java
   trunk/src/main/java/cc/kune/core/shared/dto/EmailNotificationFrequency.java
   trunk/src/main/java/cc/kune/core/shared/dto/SocialNetworkSubGroup.java
   trunk/src/test/java/cc/kune/core/shared/dto/
Removed:
   trunk/src/main/java/cc/kune/core/shared/domain/dto/EmailNotificationFrequency.java
Modified:
   trunk/src/main/java/cc/kune/barters/client/BartersClientTool.java
   trunk/src/main/java/cc/kune/blogs/client/BlogsClientTool.java
   trunk/src/main/java/cc/kune/core/client/CoreGinModule.java
   trunk/src/main/java/cc/kune/core/client/dnd/AbstractDropController.java
   trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java
   trunk/src/main/java/cc/kune/core/client/rpcservices/ContentService.java
   trunk/src/main/java/cc/kune/core/client/rpcservices/ContentServiceAsync.java
   trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java
   trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml
   trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java
   trunk/src/main/java/cc/kune/core/client/sn/GroupSNPresenter.java
   trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java
   trunk/src/main/java/cc/kune/core/client/sn/UserSNPresenter.java
   trunk/src/main/java/cc/kune/core/client/sn/actions/ChangeToAdminAction.java
   trunk/src/main/java/cc/kune/core/client/sn/actions/ChangeToCollabAction.java
   trunk/src/main/java/cc/kune/core/public/ws.css
   trunk/src/main/java/cc/kune/core/server/KuneRackModule.java
   trunk/src/main/java/cc/kune/core/server/content/ContentManager.java
   trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java
   trunk/src/main/java/cc/kune/core/server/manager/impl/KuneWaveManagerDefault.java
   trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java
   trunk/src/main/java/cc/kune/core/server/notifier/NotificationSender.java
   trunk/src/main/java/cc/kune/core/server/notifier/NotificationSenderDefault.java
   trunk/src/main/java/cc/kune/core/server/notifier/NotificationService.java
   trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationSender.java
   trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java
   trunk/src/main/java/cc/kune/core/shared/dto/UserDTO.java
   trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java
   trunk/src/main/java/cc/kune/domain/User.java
   trunk/src/main/java/cc/kune/gspace/client/GSpaceGinModule.java
   trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java
   trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java
   trunk/src/main/java/cc/kune/lists/client/ListsClientTool.java
   trunk/src/main/java/cc/kune/tasks/client/TasksClientTool.java
   trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java
   trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveServiceDefault.java
   trunk/src/main/java/cc/kune/wiki/client/WikiClientTool.java
Log:
CLOSED - # 198: Add Drag and Drop from users to contents and vice versa 
http://kune.ourproject.org/issues/ticket/198

Modified: trunk/src/main/java/cc/kune/barters/client/BartersClientTool.java
===================================================================
--- trunk/src/main/java/cc/kune/barters/client/BartersClientTool.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/barters/client/BartersClientTool.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -51,7 +51,7 @@
     // registerAclEditableTypes(TYPE_DOCUMENT, TYPE_UPLOADEDFILE);
     registerAuthorableTypes(TYPE_BARTER);
     registerDragableTypes(TYPE_BARTER, TYPE_FOLDER);
-    registerDropableTypes(TYPE_ROOT, TYPE_FOLDER);
+    registerDropableTypes(TYPE_ROOT, TYPE_FOLDER, TYPE_BARTER);
     // registerPublishModerableTypes();
     registerRateableTypes(TYPE_BARTER);
     registerRenamableTypes(TYPE_FOLDER, TYPE_BARTER);

Modified: trunk/src/main/java/cc/kune/blogs/client/BlogsClientTool.java
===================================================================
--- trunk/src/main/java/cc/kune/blogs/client/BlogsClientTool.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/blogs/client/BlogsClientTool.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -52,7 +52,7 @@
     // registerAclEditableTypes();
     registerAuthorableTypes(TYPE_POST, TYPE_UPLOADEDFILE);
     registerDragableTypes(TYPE_UPLOADEDFILE);
-    registerDropableTypes(TYPE_ROOT);
+    registerDropableTypes(TYPE_ROOT, TYPE_POST);
     registerPublishModerableTypes(TYPE_POST, TYPE_UPLOADEDFILE);
     registerRateableTypes(TYPE_POST, TYPE_UPLOADEDFILE);
     registerRenamableTypes(TYPE_BLOG, TYPE_POST, TYPE_UPLOADEDFILE);

Modified: trunk/src/main/java/cc/kune/core/client/CoreGinModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/CoreGinModule.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/CoreGinModule.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -85,6 +85,7 @@
 import cc.kune.core.client.sn.UserSNPresenter;
 import cc.kune.core.client.sn.actions.AddBuddieSearchPanel;
 import cc.kune.core.client.sn.actions.AddMemberSearchPanel;
+import cc.kune.core.client.sn.actions.SocialNetClientUtils;
 import cc.kune.core.client.sn.actions.registry.GroupSNAdminsMenuItemsRegistry;
 import cc.kune.core.client.sn.actions.registry.GroupSNCollabsMenuItemsRegistry;
 import cc.kune.core.client.sn.actions.registry.GroupSNConfActions;
@@ -231,6 +232,7 @@
     s(UserSNConfActions.class);
     s(AddBuddieSearchPanel.class);
     s(AddMemberSearchPanel.class);
+    s(SocialNetClientUtils.class);
 
     s(SiteUserOptionsPresenter.class);
     s(SiteUserOptions.class, SiteUserOptionsPresenter.class);

Modified: trunk/src/main/java/cc/kune/core/client/dnd/AbstractDropController.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/dnd/AbstractDropController.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/dnd/AbstractDropController.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -116,7 +116,7 @@
       public void onPreviewDrop(final DragContext context) throws VetoDragException {
         for (final Widget widget : context.selectedWidgets) {
           if (acceptedTypes.contains(widget.getClass())) {
-            onPreviewAllowed(this);
+            onPreviewAllowed(widget, this);
           } else {
             throw new VetoDragException();
           }
@@ -187,10 +187,14 @@
   /**
    * On preview allowed.
    * 
+   * @param widget
+   * 
    * @param dropController
    *          the drop controller
+   * @throws VetoDragException
    */
-  public void onPreviewAllowed(final SimpleDropController dropController) {
+  public void onPreviewAllowed(final Widget widget, final SimpleDropController dropController)
+      throws VetoDragException {
     dropController.getDropTarget().removeStyleName("k-drop-allowed-hover");
   }
 

Modified: trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/errors/ErrorHandler.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -110,6 +110,10 @@
       NotifyUser.showAlertMessage(i18n.t("Warning"),
           i18n.t("Sorry, you are the last admin of this group."
               + " Look for someone to substitute you appropriately as admin before leaving this group."));
+
+    } else if (caught instanceof InvalidSNOperationException) {
+      logException(caught);
+      eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error, i18n.t("Invalid operation")));
     } else if (caught instanceof AlreadyGroupMemberException) {
       logException(caught);
       eventBus.fireEvent(new UserNotifyEvent(NotifyLevel.error,

Added: trunk/src/main/java/cc/kune/core/client/errors/InvalidSNOperationException.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/errors/InvalidSNOperationException.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/errors/InvalidSNOperationException.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -0,0 +1,33 @@
+/*
+ *
+ * Copyright (C) 2007-2011 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package cc.kune.core.client.errors;
+
+public class InvalidSNOperationException extends DefaultException {
+
+  private static final long serialVersionUID = -3027252154297955075L;
+
+  public InvalidSNOperationException() {
+    super();
+  }
+
+  public InvalidSNOperationException(final String message) {
+    super(message);
+  }
+}

Modified: trunk/src/main/java/cc/kune/core/client/rpcservices/ContentService.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/rpcservices/ContentService.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/rpcservices/ContentService.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -29,6 +29,7 @@
 import cc.kune.core.shared.domain.utils.StateToken;
 import cc.kune.core.shared.dto.ContentSimpleDTO;
 import cc.kune.core.shared.dto.I18nLanguageDTO;
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
 import cc.kune.core.shared.dto.StateAbstractDTO;
 import cc.kune.core.shared.dto.StateContainerDTO;
 import cc.kune.core.shared.dto.StateContentDTO;
@@ -59,6 +60,9 @@
 
   Boolean addParticipant(String userHash, StateToken token, String participant) throws DefaultException;
 
+  Boolean addParticipants(String userHash, StateToken token, String groupName,
+      SocialNetworkSubGroup subGroup) throws DefaultException;
+
   StateContainerDTO addRoom(String user, StateToken parentToken, String name) throws DefaultException;
 
   StateContentDTO delContent(String userHash, StateToken token) throws DefaultException;

Modified: trunk/src/main/java/cc/kune/core/client/rpcservices/ContentServiceAsync.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/rpcservices/ContentServiceAsync.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/rpcservices/ContentServiceAsync.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -28,6 +28,7 @@
 import cc.kune.core.shared.domain.utils.StateToken;
 import cc.kune.core.shared.dto.ContentSimpleDTO;
 import cc.kune.core.shared.dto.I18nLanguageDTO;
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
 import cc.kune.core.shared.dto.StateAbstractDTO;
 import cc.kune.core.shared.dto.StateContainerDTO;
 import cc.kune.core.shared.dto.StateContentDTO;
@@ -58,6 +59,9 @@
   void addParticipant(String userHash, StateToken token, String participant,
       AsyncCallback<Boolean> asyncCallback);
 
+  void addParticipants(String userHash, StateToken token, String groupName,
+      SocialNetworkSubGroup subGroup, AsyncCallback<Boolean> callback);
+
   void addRoom(String user, StateToken parentToken, String name,
       AsyncCallback<StateContainerDTO> callback);
 

Modified: trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -31,7 +31,6 @@
 import cc.kune.common.shared.i18n.I18nTranslationService;
 import cc.kune.core.client.avatar.SmallAvatarDecorator;
 import cc.kune.core.client.dnd.KuneDragController;
-import cc.kune.core.client.dnd.NotImplementedDropManager;
 import cc.kune.core.client.ui.BasicDragableThumb;
 import cc.kune.core.shared.domain.utils.StateToken;
 import cc.kune.gspace.client.armor.GSpaceArmor;
@@ -58,7 +57,7 @@
   private final static int AVATARLABELMAXSIZE = 4;
   private final static int AVATARSIZE = 22;
   private final static String CATEG_HEIGHT = "84px";
-  private final static String CATEG_MIN_HEIGHT = "55px";
+  private final static String CATEG_MIN_HEIGHT = "57px";
   private static AbstractSNPanelUiBinder uiBinder = GWT.create(AbstractSNPanelUiBinder.class);
   protected final ActionSimplePanel actions;
   protected final GSpaceArmor armor;
@@ -80,6 +79,8 @@
   @UiField
   DockLayoutPanel firstCategoryPanel;
   @UiField
+  ScrollPanel firstCategoryScroll;
+  @UiField
   Label firstDeckLabel;
   @UiField
   FlowPanel mainPanel;
@@ -111,15 +112,12 @@
 
   public AbstractSNPanel(final I18nTranslationService i18n, final GuiProvider guiProvider,
       final GSpaceArmor armor, final Provider<SmallAvatarDecorator> avatarDecorator,
-      final KuneDragController dragController, final NotImplementedDropManager notDrop) {
+      final KuneDragController dragController) {
     this.armor = armor;
     this.avatarDecoratorProv = avatarDecorator;
     this.dragController = dragController;
     widget = uiBinder.createAndBindUi(this);
     actions = new ActionSimplePanel(guiProvider, i18n);
-    notDrop.register(firstCategoryFlow);
-    notDrop.register(sndCategoryFlow);
-    notDrop.register(trdCategoryFlow);
   }
 
   @Override
@@ -135,7 +133,8 @@
   }
 
   public BasicDragableThumb createThumb(final String text, final String avatarUrl, final String tooltip,
-      final String tooltipTitle, final GuiActionDescCollection menuitems, final StateToken token) {
+      final String tooltipTitle, final GuiActionDescCollection menuitems, final StateToken token,
+      final boolean dragable) {
     final BasicDragableThumb thumb = new BasicDragableThumb(avatarUrl, AVATARSIZE, text,
         AVATARLABELMAXSIZE, false, token);
 
@@ -161,7 +160,9 @@
     thumb.addClickHandler(clickHand);
     thumb.setTooltip(tooltipTitle, tooltip);
     thumb.setLabelVisible(false);
-    dragController.makeDraggable(thumb);
+    if (dragable) {
+      dragController.makeDraggable(thumb);
+    }
     return thumb;
   }
 

Modified: trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/sn/AbstractSNPanel.ui.xml	2012-02-29 01:04:27 UTC (rev 1720)
@@ -25,7 +25,7 @@
             </g:FlowPanel>
           </g:north>
           <g:center>
-            <g:ScrollPanel width="100%" addStyleNames="k-sn-adminsscroll">
+            <g:ScrollPanel width="100%" addStyleNames="k-sn-adminsscroll" ui:field="firstCategoryScroll">
               <g:FlowPanel addStyleNames="k-sn-adminsflow"
                 ui:field="firstCategoryFlow" />
             </g:ScrollPanel>

Added: trunk/src/main/java/cc/kune/core/client/sn/AdminsGroupSNDropController.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/AdminsGroupSNDropController.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/AdminsGroupSNDropController.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -0,0 +1,21 @@
+package cc.kune.core.client.sn;
+
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.dnd.KuneDragController;
+import cc.kune.core.client.rpcservices.ContentServiceAsync;
+import cc.kune.core.client.sn.actions.SocialNetClientUtils;
+import cc.kune.core.client.state.Session;
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
+
+import com.google.inject.Inject;
+
+public class AdminsGroupSNDropController extends GroupSNDropController {
+
+  @Inject
+  public AdminsGroupSNDropController(final KuneDragController dragController,
+      final ContentServiceAsync contentService, final Session session,
+      final I18nTranslationService i18n, final SocialNetClientUtils sNClientUtils) {
+    super(dragController, SocialNetworkSubGroup.admins, contentService, session, i18n, sNClientUtils);
+  }
+
+}

Added: trunk/src/main/java/cc/kune/core/client/sn/AllMembersGroupSNDropController.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/AllMembersGroupSNDropController.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/AllMembersGroupSNDropController.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -0,0 +1,21 @@
+package cc.kune.core.client.sn;
+
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.dnd.KuneDragController;
+import cc.kune.core.client.rpcservices.ContentServiceAsync;
+import cc.kune.core.client.sn.actions.SocialNetClientUtils;
+import cc.kune.core.client.state.Session;
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
+
+import com.google.inject.Inject;
+
+public class AllMembersGroupSNDropController extends GroupSNDropController {
+
+  @Inject
+  public AllMembersGroupSNDropController(final KuneDragController dragController,
+      final ContentServiceAsync contentService, final Session session,
+      final I18nTranslationService i18n, final SocialNetClientUtils sNClientUtils) {
+    super(dragController, SocialNetworkSubGroup.all, contentService, session, i18n, sNClientUtils);
+  }
+
+}

Added: trunk/src/main/java/cc/kune/core/client/sn/CollabsGroupSNDropController.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/CollabsGroupSNDropController.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/CollabsGroupSNDropController.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -0,0 +1,21 @@
+package cc.kune.core.client.sn;
+
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.dnd.KuneDragController;
+import cc.kune.core.client.rpcservices.ContentServiceAsync;
+import cc.kune.core.client.sn.actions.SocialNetClientUtils;
+import cc.kune.core.client.state.Session;
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
+
+import com.google.inject.Inject;
+
+public class CollabsGroupSNDropController extends GroupSNDropController {
+
+  @Inject
+  public CollabsGroupSNDropController(final KuneDragController dragController,
+      final ContentServiceAsync contentService, final Session session,
+      final I18nTranslationService i18n, final SocialNetClientUtils sNClientUtils) {
+    super(dragController, SocialNetworkSubGroup.collabs, contentService, session, i18n, sNClientUtils);
+  }
+
+}

Added: trunk/src/main/java/cc/kune/core/client/sn/GroupSNDropController.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/GroupSNDropController.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/GroupSNDropController.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -0,0 +1,78 @@
+package cc.kune.core.client.sn;
+
+import cc.kune.common.client.notify.NotifyUser;
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.dnd.AbstractDropController;
+import cc.kune.core.client.dnd.KuneDragController;
+import cc.kune.core.client.rpcservices.AsyncCallbackSimple;
+import cc.kune.core.client.rpcservices.ContentServiceAsync;
+import cc.kune.core.client.sn.actions.SocialNetClientUtils;
+import cc.kune.core.client.state.Session;
+import cc.kune.core.client.ui.BasicDragableThumb;
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
+import cc.kune.gspace.client.viewers.items.FolderItemWidget;
+
+import com.allen_sauer.gwt.dnd.client.VetoDragException;
+import com.allen_sauer.gwt.dnd.client.drop.SimpleDropController;
+import com.google.gwt.user.client.ui.Widget;
+
+public class GroupSNDropController extends AbstractDropController {
+
+  private final ContentServiceAsync contentService;
+  private final I18nTranslationService i18n;
+  private final Session session;
+  private final SocialNetClientUtils sNClientUtils;
+  private final SocialNetworkSubGroup subGroup;
+
+  public GroupSNDropController(final KuneDragController dragController,
+      final SocialNetworkSubGroup subGroup, final ContentServiceAsync contentService,
+      final Session session, final I18nTranslationService i18n, final SocialNetClientUtils sNClientUtils) {
+    super(dragController);
+    this.subGroup = subGroup;
+    this.contentService = contentService;
+    this.session = session;
+    this.i18n = i18n;
+    this.sNClientUtils = sNClientUtils;
+    registerType(FolderItemWidget.class);
+    registerType(BasicDragableThumb.class);
+  }
+
+  @Override
+  public void onDropAllowed(final Widget widget, final SimpleDropController dropController) {
+    if (widget instanceof FolderItemWidget) {
+      contentService.addParticipants(session.getUserHash(), ((FolderItemWidget) widget).getToken(),
+          session.getCurrentGroupShortName(), subGroup, new AsyncCallbackSimple<Boolean>() {
+            @Override
+            public void onSuccess(final Boolean result) {
+              NotifyUser.info(result ? i18n.t("Shared with members")
+                  : i18n.t("All these members are already partipating"));
+            }
+          });
+    }
+    if (widget instanceof BasicDragableThumb) {
+      final String shortName = ((BasicDragableThumb) widget).getToken().getGroup();
+      if (subGroup.equals(SocialNetworkSubGroup.admins)) {
+        sNClientUtils.changeToAdmin(shortName);
+      }
+      if (subGroup.equals(SocialNetworkSubGroup.collabs)) {
+        sNClientUtils.changeToCollab(shortName);
+      }
+    }
+  }
+
+  @Override
+  public void onPreviewAllowed(final Widget widget, final SimpleDropController dropController)
+      throws VetoDragException {
+    if (widget instanceof FolderItemWidget) {
+      if (!((FolderItemWidget) widget).getToken().isComplete()) {
+        throw new VetoDragException();
+      }
+    }
+    if (widget instanceof BasicDragableThumb) {
+      if (!session.getCurrentState().getGroupRights().isAdministrable()) {
+        throw new VetoDragException();
+      }
+    }
+    super.onPreviewAllowed(widget, dropController);
+  }
+}

Modified: trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/sn/GroupSNPanel.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -26,7 +26,6 @@
 import cc.kune.common.shared.i18n.I18nTranslationService;
 import cc.kune.core.client.avatar.SmallAvatarDecorator;
 import cc.kune.core.client.dnd.KuneDragController;
-import cc.kune.core.client.dnd.NotImplementedDropManager;
 import cc.kune.core.client.sn.GroupSNPresenter.GroupSNView;
 import cc.kune.core.client.ui.BasicDragableThumb;
 import cc.kune.core.shared.dto.GroupDTO;
@@ -41,8 +40,10 @@
   @Inject
   public GroupSNPanel(final I18nTranslationService i18n, final GuiProvider guiProvider,
       final GSpaceArmor armor, final Provider<SmallAvatarDecorator> avatarDecorator,
-      final KuneDragController dragController, final NotImplementedDropManager notDrop) {
-    super(i18n, guiProvider, armor, avatarDecorator, dragController, notDrop);
+      final KuneDragController dragController, final AdminsGroupSNDropController adminsDropController,
+      final CollabsGroupSNDropController collabsDropController,
+      final AllMembersGroupSNDropController allMembersDropController) {
+    super(i18n, guiProvider, armor, avatarDecorator, dragController);
     setVisibleImpl(false);
     mainTitle.setText(i18n.t("Group members"));
     Tooltip.to(mainTitle, i18n.t("Users and groups collaborating in this group"));
@@ -60,31 +61,36 @@
     bottomActionsToolbar.setStyleName("k-sn-bottomPanel-actions");
     armor.getEntityToolsNorth().add(widget);
     deck.showWidget(2);
+    adminsDropController.init(firstCategoryScroll);
+    adminsDropController.init(firstCategoryLabel);
+    collabsDropController.init(sndCategoryScroll);
+    collabsDropController.init(sndCategoryLabel);
+    allMembersDropController.init(mainTitle);
   }
 
   @Override
   public void addAdmin(final GroupDTO group, final String avatarUrl, final String tooltip,
-      final String tooltipTitle, final GuiActionDescCollection menu) {
+      final String tooltipTitle, final GuiActionDescCollection menu, final boolean dragable) {
     final BasicDragableThumb thumb = createThumb(group.getCompoundName(), avatarUrl, tooltip,
-        tooltipTitle, menu, group.getStateToken());
+        tooltipTitle, menu, group.getStateToken(), dragable);
     firstCategoryFlow.add(group.isPersonal() ? (Widget) decorateAvatarWithXmppStatus(
         group.getShortName(), thumb) : thumb);
   }
 
   @Override
   public void addCollab(final GroupDTO group, final String avatarUrl, final String tooltip,
-      final String tooltipTitle, final GuiActionDescCollection menu) {
+      final String tooltipTitle, final GuiActionDescCollection menu, final boolean dragable) {
     final BasicDragableThumb thumb = createThumb(group.getCompoundName(), avatarUrl, tooltip,
-        tooltipTitle, menu, group.getStateToken());
+        tooltipTitle, menu, group.getStateToken(), dragable);
     sndCategoryFlow.add(group.isPersonal() ? (Widget) decorateAvatarWithXmppStatus(group.getShortName(),
         thumb) : thumb);
   }
 
   @Override
   public void addPending(final GroupDTO group, final String avatarUrl, final String tooltip,
-      final String tooltipTitle, final GuiActionDescCollection menu) {
+      final String tooltipTitle, final GuiActionDescCollection menu, final boolean dragable) {
     final BasicDragableThumb thumb = createThumb(group.getCompoundName(), avatarUrl, tooltip,
-        tooltipTitle, menu, group.getStateToken());
+        tooltipTitle, menu, group.getStateToken(), dragable);
     trdCategoryFlow.add(thumb);
   }
 

Modified: trunk/src/main/java/cc/kune/core/client/sn/GroupSNPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/GroupSNPresenter.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/sn/GroupSNPresenter.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -60,13 +60,13 @@
   public interface GroupSNView extends View {
 
     void addAdmin(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
-        GuiActionDescCollection menu);
+        GuiActionDescCollection menu, boolean dragable);
 
     void addCollab(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
-        GuiActionDescCollection menu);
+        GuiActionDescCollection menu, boolean dragable);
 
     void addPending(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
-        GuiActionDescCollection menu);
+        GuiActionDescCollection menu, boolean dragable);
 
     void clear();
 
@@ -199,19 +199,20 @@
       getView().showOrphan();
     } else {
       final boolean userIsAdmin = rights.isAdministrable();
+      final boolean userIsEditor = rights.isEditable();
       final boolean userCanView = rights.isVisible();
       getView().setAdminsVisible(true, areMany(numAdmins));
       if (userCanView) {
         for (final GroupDTO admin : adminsList) {
           final String avatar = getAvatar(admin);
           getView().addAdmin(admin, avatar, admin.getCompoundName(), "",
-              createMenuItems(admin, adminsMenuItemsRegistry, admin.getCompoundName()));
+              createMenuItems(admin, adminsMenuItemsRegistry, admin.getCompoundName()), userIsEditor);
         }
         getView().setCollabsVisible(numCollabs > 0, areMany(numCollabs));
         for (final GroupDTO collab : collabList) {
           final String avatar = getAvatar(collab);
           getView().addCollab(collab, avatar, collab.getCompoundName(), "",
-              createMenuItems(collab, collabsMenuItemsRegistry, collab.getCompoundName()));
+              createMenuItems(collab, collabsMenuItemsRegistry, collab.getCompoundName()), userIsEditor);
         }
         if (userIsAdmin) {
           getView().setPendingVisible(numPendings > 0, areMany(numPendings));
@@ -223,7 +224,7 @@
                 pendingCollab.getCompoundName(),
                 "",
                 createMenuItems(pendingCollab, pendingsMenuItemsRegistry,
-                    pendingCollab.getCompoundName()));
+                    pendingCollab.getCompoundName()), userIsEditor);
           }
         } else {
           getView().setPendingVisible(false, false);

Modified: trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/sn/UserSNPanel.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -48,7 +48,7 @@
   public UserSNPanel(final I18nTranslationService i18n, final GuiProvider guiProvider,
       final GSpaceArmor armor, final Provider<SmallAvatarDecorator> avatarDecorator,
       final KuneDragController dragController, final NotImplementedDropManager notDrop) {
-    super(i18n, guiProvider, armor, avatarDecorator, dragController, notDrop);
+    super(i18n, guiProvider, armor, avatarDecorator, dragController);
     this.i18n = i18n;
 
     setVisibleImpl(false);
@@ -71,21 +71,24 @@
     noBuddies.addStyleName("kune-Margin-Medium-l");
     noPublic = new Label(i18n.t(CoreMessages.BUDDIES_NOT_PUBLIC));
     noPublic.addStyleName("kune-Margin-Medium-l");
+    notDrop.register(firstCategoryScroll);
+    notDrop.register(sndCategoryScroll);
+    notDrop.register(trdCategoryScroll);
   }
 
   @Override
   public void addBuddie(final UserSimpleDTO user, final String avatarUrl, final String tooltip,
-      final String tooltipTitle, final GuiActionDescCollection menu) {
+      final String tooltipTitle, final GuiActionDescCollection menu, final boolean dragable) {
     final BasicDragableThumb thumb = createThumb(user.getShortName(), avatarUrl, tooltip, tooltipTitle,
-        menu, user.getStateToken());
+        menu, user.getStateToken(), dragable);
     firstCategoryFlow.add((Widget) decorateAvatarWithXmppStatus(user.getShortName(), thumb));
   }
 
   @Override
   public void addParticipation(final GroupDTO group, final String avatarUrl, final String tooltip,
-      final String tooltipTitle, final GuiActionDescCollection menu) {
+      final String tooltipTitle, final GuiActionDescCollection menu, final boolean dragable) {
     sndCategoryFlow.add(createThumb(group.getCompoundName(), avatarUrl, tooltip, tooltipTitle, menu,
-        group.getStateToken()));
+        group.getStateToken(), dragable));
   }
 
   @Override

Modified: trunk/src/main/java/cc/kune/core/client/sn/UserSNPresenter.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/UserSNPresenter.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/sn/UserSNPresenter.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -60,10 +60,10 @@
   public interface UserSNView extends View {
 
     void addBuddie(UserSimpleDTO user, String avatarUrl, String tooltip, String tooltipTitle,
-        GuiActionDescCollection menu);
+        GuiActionDescCollection menu, boolean dragable);
 
     void addParticipation(GroupDTO group, String avatarUrl, String tooltip, String tooltipTitle,
-        GuiActionDescCollection menu);
+        GuiActionDescCollection menu, boolean dragable);
 
     void addTextToBuddieList(String text);
 
@@ -180,7 +180,8 @@
     for (final UserSimpleDTO user : buddies) {
       final String avatarUrl = downloadProvider.get().getUserAvatar(user);
       getView().addBuddie(user, avatarUrl, user.getCompoundName(), "",
-          createMenuItems(user, userMenuItemsRegistry, user.getCompoundName()));
+          createMenuItems(user, userMenuItemsRegistry, user.getCompoundName()),
+          state.getGroupRights().isAdministrable());
     }
     final boolean hasLocalBuddies = buddies.size() > 0;
     final int numExtBuddies = userBuddiesData.getOtherExtBuddies();
@@ -212,11 +213,13 @@
     final int numCollaborators = groupsIsCollab.size();
     for (final GroupDTO group : groupsIsAdmin) {
       getView().addParticipation(group, getAvatar(group), group.getCompoundName(), "",
-          createMenuItems(group, userMenuItemsRegistry, group.getCompoundName()));
+          createMenuItems(group, userMenuItemsRegistry, group.getCompoundName()),
+          state.getGroupRights().isAdministrable());
     }
     for (final GroupDTO group : groupsIsCollab) {
       getView().addParticipation(group, getAvatar(group), group.getCompoundName(), "",
-          createMenuItems(group, userMenuItemsRegistry, group.getCompoundName()));
+          createMenuItems(group, userMenuItemsRegistry, group.getCompoundName()),
+          state.getGroupRights().isAdministrable());
     }
     final int totalGroups = numAdmins + numCollaborators;
     // getView().setParticipationCount(totalGroups);

Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/ChangeToAdminAction.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/ChangeToAdminAction.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/ChangeToAdminAction.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -22,50 +22,26 @@
 import cc.kune.common.client.actions.AbstractExtendedAction;
 import cc.kune.common.client.actions.Action;
 import cc.kune.common.client.actions.ActionEvent;
-import cc.kune.common.client.notify.NotifyUser;
 import cc.kune.common.shared.i18n.I18nTranslationService;
 import cc.kune.core.client.resources.CoreResources;
-import cc.kune.core.client.rpcservices.AsyncCallbackSimple;
-import cc.kune.core.client.rpcservices.SocialNetworkServiceAsync;
-import cc.kune.core.client.state.Session;
-import cc.kune.core.client.state.StateManager;
 import cc.kune.core.shared.dto.GroupDTO;
-import cc.kune.core.shared.dto.SocialNetworkDataDTO;
 
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 
 public class ChangeToAdminAction extends AbstractExtendedAction {
-  private final I18nTranslationService i18n;
-  private final Session session;
-  private final Provider<SocialNetworkServiceAsync> snServiceProvider;
-  private final StateManager stateManager;
+  private final SocialNetClientUtils snClientUtils;
 
   @Inject
-  public ChangeToAdminAction(final StateManager stateManager, final Session session,
-      final I18nTranslationService i18n, final CoreResources res,
-      final Provider<SocialNetworkServiceAsync> snServiceProvider) {
-    this.stateManager = stateManager;
-    this.session = session;
-    this.i18n = i18n;
-    this.snServiceProvider = snServiceProvider;
+  public ChangeToAdminAction(final I18nTranslationService i18n, final CoreResources res,
+      final SocialNetClientUtils snClientUtils) {
+    this.snClientUtils = snClientUtils;
     putValue(NAME, i18n.t("Change to administrator"));
     putValue(Action.SMALL_ICON, res.arrowUpGreen());
   }
 
   @Override
   public void actionPerformed(final ActionEvent event) {
-    NotifyUser.showProgress();
-    snServiceProvider.get().setCollabAsAdmin(session.getUserHash(),
-        session.getCurrentState().getStateToken(), ((GroupDTO) event.getTarget()).getShortName(),
-        new AsyncCallbackSimple<SocialNetworkDataDTO>() {
-          @Override
-          public void onSuccess(final SocialNetworkDataDTO result) {
-            NotifyUser.hideProgress();
-            NotifyUser.info(i18n.t("Member type changed"));
-            stateManager.setSocialNetwork(result);
-          }
-        });
+    snClientUtils.changeToAdmin(((GroupDTO) event.getTarget()).getShortName());
   }
 
 }
\ No newline at end of file

Modified: trunk/src/main/java/cc/kune/core/client/sn/actions/ChangeToCollabAction.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/ChangeToCollabAction.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/ChangeToCollabAction.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -22,50 +22,26 @@
 import cc.kune.common.client.actions.AbstractExtendedAction;
 import cc.kune.common.client.actions.Action;
 import cc.kune.common.client.actions.ActionEvent;
-import cc.kune.common.client.notify.NotifyUser;
 import cc.kune.common.shared.i18n.I18nTranslationService;
 import cc.kune.core.client.resources.CoreResources;
-import cc.kune.core.client.rpcservices.AsyncCallbackSimple;
-import cc.kune.core.client.rpcservices.SocialNetworkServiceAsync;
-import cc.kune.core.client.state.Session;
-import cc.kune.core.client.state.StateManager;
 import cc.kune.core.shared.dto.GroupDTO;
-import cc.kune.core.shared.dto.SocialNetworkDataDTO;
 
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 
 public class ChangeToCollabAction extends AbstractExtendedAction {
-  private final I18nTranslationService i18n;
-  private final Session session;
-  private final Provider<SocialNetworkServiceAsync> snServiceProvider;
-  private final StateManager stateManager;
+  private final SocialNetClientUtils sNClientUtils;
 
   @Inject
-  public ChangeToCollabAction(final StateManager stateManager, final Session session,
-      final I18nTranslationService i18n, final CoreResources res,
-      final Provider<SocialNetworkServiceAsync> snServiceProvider) {
-    this.stateManager = stateManager;
-    this.session = session;
-    this.i18n = i18n;
-    this.snServiceProvider = snServiceProvider;
+  public ChangeToCollabAction(final I18nTranslationService i18n, final CoreResources res,
+      final SocialNetClientUtils sNClientUtils) {
+    this.sNClientUtils = sNClientUtils;
     putValue(NAME, i18n.t("Change to collaborator"));
     putValue(Action.SMALL_ICON, res.arrowDownGreen());
   }
 
   @Override
   public void actionPerformed(final ActionEvent event) {
-    NotifyUser.showProgress();
-    snServiceProvider.get().setAdminAsCollab(session.getUserHash(),
-        session.getCurrentState().getStateToken(), ((GroupDTO) event.getTarget()).getShortName(),
-        new AsyncCallbackSimple<SocialNetworkDataDTO>() {
-          @Override
-          public void onSuccess(final SocialNetworkDataDTO result) {
-            NotifyUser.hideProgress();
-            NotifyUser.info(i18n.t("Member type changed"));
-            stateManager.setSocialNetwork(result);
-          }
-        });
+    sNClientUtils.changeToCollab(((GroupDTO) event.getTarget()).getShortName());
   }
 
 }
\ No newline at end of file

Added: trunk/src/main/java/cc/kune/core/client/sn/actions/SocialNetClientUtils.java
===================================================================
--- trunk/src/main/java/cc/kune/core/client/sn/actions/SocialNetClientUtils.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/client/sn/actions/SocialNetClientUtils.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -0,0 +1,59 @@
+package cc.kune.core.client.sn.actions;
+
+import cc.kune.common.client.notify.NotifyUser;
+import cc.kune.common.shared.i18n.I18nTranslationService;
+import cc.kune.core.client.rpcservices.AsyncCallbackSimple;
+import cc.kune.core.client.rpcservices.SocialNetworkServiceAsync;
+import cc.kune.core.client.state.Session;
+import cc.kune.core.client.state.StateManager;
+import cc.kune.core.shared.dto.SocialNetworkDataDTO;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class SocialNetClientUtils {
+
+  private final I18nTranslationService i18n;
+  private final Session session;
+  private final Provider<SocialNetworkServiceAsync> snServiceProvider;
+  private final StateManager stateManager;
+
+  @Inject
+  public SocialNetClientUtils(final StateManager stateManager, final Session session,
+      final I18nTranslationService i18n, final Provider<SocialNetworkServiceAsync> snServiceProvider) {
+    this.stateManager = stateManager;
+    this.session = session;
+    this.i18n = i18n;
+    this.snServiceProvider = snServiceProvider;
+  }
+
+  public void changeToAdmin(final String shortName) {
+    NotifyUser.showProgress();
+    snServiceProvider.get().setCollabAsAdmin(session.getUserHash(),
+        session.getCurrentState().getStateToken(), shortName,
+        new AsyncCallbackSimple<SocialNetworkDataDTO>() {
+          @Override
+          public void onSuccess(final SocialNetworkDataDTO result) {
+            SocialNetClientUtils.this.onSuccess(result);
+          }
+        });
+  }
+
+  public void changeToCollab(final String shortName) {
+    NotifyUser.showProgress();
+    snServiceProvider.get().setAdminAsCollab(session.getUserHash(),
+        session.getCurrentState().getStateToken(), shortName,
+        new AsyncCallbackSimple<SocialNetworkDataDTO>() {
+          @Override
+          public void onSuccess(final SocialNetworkDataDTO result) {
+            SocialNetClientUtils.this.onSuccess(result);
+          }
+        });
+  }
+
+  private void onSuccess(final SocialNetworkDataDTO result) {
+    NotifyUser.hideProgress();
+    NotifyUser.info(i18n.t("Member type changed"));
+    stateManager.setSocialNetwork(result);
+  }
+}

Modified: trunk/src/main/java/cc/kune/core/public/ws.css
===================================================================
--- trunk/src/main/java/cc/kune/core/public/ws.css	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/public/ws.css	2012-02-29 01:04:27 UTC (rev 1720)
@@ -820,7 +820,7 @@
 }
 
 .k-sn-maintitle {
-  margin: 5px;
+  margin: 3px;
 }
 
 .k-sn-maintitle {

Modified: trunk/src/main/java/cc/kune/core/server/KuneRackModule.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/KuneRackModule.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/server/KuneRackModule.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -43,6 +43,7 @@
 import cc.kune.core.server.manager.file.FileGwtUploadServlet;
 import cc.kune.core.server.manager.file.FileUploadManager;
 import cc.kune.core.server.manager.file.UserLogoDownloadManager;
+import cc.kune.core.server.manager.impl.GroupServerUtils;
 import cc.kune.core.server.properties.KuneProperties;
 import cc.kune.core.server.properties.KunePropertiesDefault;
 import cc.kune.core.server.rack.RackBuilder;
@@ -127,6 +128,7 @@
         // http://code.google.com/p/google-gin/issues/detail?id=60
         requestStaticInjection(KuneWaveServerUtils.class);
         requestStaticInjection(CalendarServerUtils.class);
+        requestStaticInjection(GroupServerUtils.class);
       }
     };
   }

Modified: trunk/src/main/java/cc/kune/core/server/content/ContentManager.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContentManager.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/server/content/ContentManager.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -27,8 +27,10 @@
 import cc.kune.core.server.manager.SearchResult;
 import cc.kune.core.shared.domain.ContentStatus;
 import cc.kune.core.shared.domain.RateResult;
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
 import cc.kune.domain.Container;
 import cc.kune.domain.Content;
+import cc.kune.domain.Group;
 import cc.kune.domain.I18nLanguage;
 import cc.kune.domain.User;
 
@@ -51,6 +53,8 @@
 
   boolean addParticipant(User user, Long contentId, String participant);
 
+  boolean addParticipants(User user, Long contentId, Group group, SocialNetworkSubGroup whichOnes);
+
   Content createGadget(User user, Container container, String gadgetname, String typeIdChild,
       String title, String body, Map<String, String> gadgetProperties);
 

Modified: trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/server/content/ContentManagerDefault.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -23,8 +23,10 @@
 import java.net.URL;
 import java.util.Collections;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.persistence.EntityManager;
 
@@ -49,14 +51,17 @@
 import cc.kune.core.server.manager.TagUserContentManager;
 import cc.kune.core.server.manager.file.FileUtils;
 import cc.kune.core.server.manager.impl.DefaultManager;
+import cc.kune.core.server.manager.impl.GroupServerUtils;
 import cc.kune.core.server.manager.impl.ServerManagerException;
 import cc.kune.core.server.tool.ServerTool;
 import cc.kune.core.server.tool.ServerToolRegistry;
 import cc.kune.core.server.utils.FilenameUtils;
 import cc.kune.core.shared.domain.ContentStatus;
 import cc.kune.core.shared.domain.RateResult;
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
 import cc.kune.domain.Container;
 import cc.kune.domain.Content;
+import cc.kune.domain.Group;
 import cc.kune.domain.I18nLanguage;
 import cc.kune.domain.Rate;
 import cc.kune.domain.Revision;
@@ -132,13 +137,37 @@
   @Override
   public boolean addParticipant(final User user, final Long contentId, final String participant) {
     final Content content = finder.getContent(contentId);
+    return addParticipants(user, content, participant);
+  }
+
+  /**
+   * Adds the participant to a wave
+   * 
+   * @param user
+   *          the user
+   * @param content
+   *          the content
+   * @param participant
+   *          the participant
+   * @return true, if successful added (not already participant)
+   */
+  private boolean addParticipants(final User user, final Content content, final String... participants) {
     if (content.isWave()) {
       return kuneWaveManager.addParticipants(KuneWaveServerUtils.getWaveRef(content),
-          getContentAuthor(content), user.getShortName(), participant);
+          getContentAuthor(content), user.getShortName(), participants);
     }
     return false;
   }
 
+  @Override
+  public boolean addParticipants(final User user, final Long contentId, final Group group,
+      final SocialNetworkSubGroup whichOnes) {
+    final Set<String> members = new HashSet<String>();
+    GroupServerUtils.getAllUserMembersAsString(members, group, SocialNetworkSubGroup.admins);
+    final Content content = finder.getContent(contentId);
+    return addParticipants(user, content, members.toArray(new String[members.size()]));
+  }
+
   protected Content createContent(final String title, final String body, final User author,
       final Container container, final String typeId) {
     return createContent(title, body, author, container, typeId, KuneWaveService.WITHOUT_GADGET,

Added: trunk/src/main/java/cc/kune/core/server/manager/impl/GroupServerUtils.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/GroupServerUtils.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/GroupServerUtils.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -0,0 +1,68 @@
+package cc.kune.core.server.manager.impl;
+
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import javax.persistence.NoResultException;
+
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
+import cc.kune.domain.Group;
+import cc.kune.domain.User;
+import cc.kune.domain.finders.UserFinder;
+
+import com.google.inject.Inject;
+
+public class GroupServerUtils {
+  @Inject
+  private static UserFinder userFinder;
+
+  public static void getAllUserMembers(final Set<User> users, final Group ofGroup,
+      final SocialNetworkSubGroup subGroup) {
+    final Collection<Group> members = GroupServerUtils.getGroupMembers(ofGroup, subGroup);
+    for (final Group member : members) {
+      if (member.isPersonal()) {
+        final String shortName = member.getShortName();
+        try {
+          final User user = userFinder.findByShortName(shortName);
+          users.add(user);
+        } catch (final NoResultException e) {
+        }
+      } else {
+        // Is a group, so go recursively
+        getAllUserMembers(users, member, subGroup);
+      }
+    }
+  }
+
+  public static void getAllUserMembersAsString(final Set<String> users, final Group ofGroup,
+      final SocialNetworkSubGroup subGroup) {
+    final Collection<Group> members = GroupServerUtils.getGroupMembers(ofGroup, subGroup);
+    for (final Group member : members) {
+      if (member.isPersonal()) {
+        final String shortName = member.getShortName();
+        try {
+          users.add(shortName);
+        } catch (final NoResultException e) {
+        }
+      } else {
+        // Is a group, so go recursively
+        getAllUserMembersAsString(users, member, subGroup);
+      }
+    }
+  }
+
+  public static final Collection<Group> getGroupMembers(final Group ofGroup,
+      final SocialNetworkSubGroup subGroup) {
+    final Collection<Group> members = new LinkedHashSet<Group>();
+    if (subGroup.equals(SocialNetworkSubGroup.admins) || subGroup.equals(SocialNetworkSubGroup.all)) {
+      final Set<Group> admins = ofGroup.getSocialNetwork().getAccessLists().getAdmins().getList();
+      members.addAll(admins);
+    }
+    if (subGroup.equals(SocialNetworkSubGroup.collabs) || subGroup.equals(SocialNetworkSubGroup.all)) {
+      final Set<Group> collabs = ofGroup.getSocialNetwork().getAccessLists().getEditors().getList();
+      members.addAll(collabs);
+    }
+    return members;
+  }
+}

Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/KuneWaveManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/KuneWaveManagerDefault.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/KuneWaveManagerDefault.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -20,7 +20,7 @@
 package cc.kune.core.server.manager.impl;
 
 import java.util.ArrayList;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -32,10 +32,12 @@
 import cc.kune.core.server.manager.UserManager;
 import cc.kune.core.server.properties.KuneProperties;
 import cc.kune.core.shared.domain.AccessRol;
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
 import cc.kune.domain.Group;
 import cc.kune.domain.User;
 import cc.kune.domain.UserBuddiesData;
 import cc.kune.domain.finders.GroupFinder;
+import cc.kune.domain.finders.UserFinder;
 import cc.kune.wave.server.KuneWaveServerUtils;
 import cc.kune.wave.server.ParticipantUtils;
 import cc.kune.wave.server.kspecific.KuneWaveService;
@@ -49,17 +51,19 @@
   private final GroupFinder groupFinder;
   private final KuneProperties kuneProperties;
   private final ParticipantUtils participantUtils;
+  private final UserFinder userFinder;
   private final UserManager userManager;
   private final KuneWaveService waveService;
 
   @Inject
   public KuneWaveManagerDefault(final KuneWaveService waveService,
       final ParticipantUtils participantUtils, final KuneProperties kuneProperties,
-      final GroupFinder groupFinder, final UserManager userManager) {
+      final GroupFinder groupFinder, final UserFinder userFinder, final UserManager userManager) {
     this.waveService = waveService;
     this.participantUtils = participantUtils;
     this.kuneProperties = kuneProperties;
     this.groupFinder = groupFinder;
+    this.userFinder = userFinder;
     this.userManager = userManager;
   }
 
@@ -71,8 +75,8 @@
     for (final String part : participants) {
       partIds.add(participantUtils.of(part));
     }
-    return KuneWaveServerUtils.getUrl(waveService.createWave(title, body, KuneWaveService.DO_NOTHING_CBACK,
-        partIds.toArray(new ParticipantId[0])));
+    return KuneWaveServerUtils.getUrl(waveService.createWave(title, body,
+        KuneWaveService.DO_NOTHING_CBACK, partIds.toArray(new ParticipantId[0])));
   }
 
   @Override
@@ -84,12 +88,12 @@
   public String writeTo(final User user, final String groupName, final boolean onlyToAdmins,
       final String title, final String message) {
     final Group group = groupFinder.findByShortName(groupName);
-    final Set<Group> toList = new HashSet<Group>();
-    toList.add(user.getUserGroup());
+    final Set<User> toList = new LinkedHashSet<User>();
+    toList.add(user);
     if (group.isPersonal()) {
       final UserBuddiesData userBuddies = userManager.getUserBuddies(groupName);
       if (userBuddies.contains(user.getShortName())) {
-        toList.add(group);
+        toList.add(userFinder.findByShortName(group.getShortName()));
       } else {
         throw new AccessViolationException("You cannot write to non buddies");
       }
@@ -97,14 +101,10 @@
       if (!AccessRightsUtils.correctMember(user, group, AccessRol.Editor)) {
         throw new AccessViolationException("You cannot write because you are not a member");
       }
-      if (onlyToAdmins) {
-        toList.addAll(group.getSocialNetwork().getAccessLists().getAdmins().getList());
-      } else {
-        toList.addAll(group.getSocialNetwork().getAccessLists().getAdmins().getList());
-        toList.addAll(group.getSocialNetwork().getAccessLists().getEditors().getList());
-      }
+      GroupServerUtils.getAllUserMembers(toList, group, onlyToAdmins ? SocialNetworkSubGroup.admins
+          : SocialNetworkSubGroup.all);
     }
-    return KuneWaveServerUtils.getUrl(waveService.createWave(title, message, KuneWaveService.DO_NOTHING_CBACK,
-        participantUtils.listFrom(toList)));
+    return KuneWaveServerUtils.getUrl(waveService.createWave(title, message,
+        KuneWaveService.DO_NOTHING_CBACK, participantUtils.listFrom(toList)));
   }
 }

Modified: trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/server/manager/impl/SocialNetworkManagerDefault.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -27,6 +27,7 @@
 import cc.kune.core.client.errors.AlreadyGroupMemberException;
 import cc.kune.core.client.errors.AlreadyUserMemberException;
 import cc.kune.core.client.errors.DefaultException;
+import cc.kune.core.client.errors.InvalidSNOperationException;
 import cc.kune.core.client.errors.LastAdminInGroupException;
 import cc.kune.core.client.errors.UserMustBeLoggedException;
 import cc.kune.core.server.access.AccessRightsService;
@@ -314,7 +315,7 @@
       sn.removeAdmin(group);
       sn.addCollaborator(group);
     } else {
-      throw new DefaultException("Person/Group is not an admin");
+      throw new InvalidSNOperationException("Person/Group is not an admin");
     }
   }
 
@@ -327,7 +328,7 @@
       sn.removeCollaborator(group);
       sn.addAdmin(group);
     } else {
-      throw new DefaultException("Person/Group is not a collaborator");
+      throw new InvalidSNOperationException("Person/Group is not a collaborator");
     }
   }
 

Modified: trunk/src/main/java/cc/kune/core/server/notifier/NotificationSender.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/notifier/NotificationSender.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/server/notifier/NotificationSender.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -1,6 +1,6 @@
 package cc.kune.core.server.notifier;
 
-import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
+import cc.kune.core.shared.dto.EmailNotificationFrequency;
 
 /**
  * The Interface PendingNotificationSender. Used to send pending notifications

Modified: trunk/src/main/java/cc/kune/core/server/notifier/NotificationSenderDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/notifier/NotificationSenderDefault.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/server/notifier/NotificationSenderDefault.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -13,7 +13,7 @@
 import cc.kune.core.server.mail.MailService;
 import cc.kune.core.server.properties.KuneProperties;
 import cc.kune.core.server.xmpp.XmppManager;
-import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
+import cc.kune.core.shared.dto.EmailNotificationFrequency;
 import cc.kune.domain.User;
 import cc.kune.wave.server.kspecific.KuneWaveService;
 

Modified: trunk/src/main/java/cc/kune/core/server/notifier/NotificationService.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/notifier/NotificationService.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/server/notifier/NotificationService.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -4,16 +4,14 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import javax.persistence.NoResultException;
-
-import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import cc.kune.core.server.mail.FormatedString;
+import cc.kune.core.server.manager.impl.GroupServerUtils;
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
 import cc.kune.domain.Group;
 import cc.kune.domain.User;
-import cc.kune.domain.finders.UserFinder;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -24,59 +22,28 @@
   public static final Log LOG = LogFactory.getLog(NotificationService.class);
   private final NotificationHtmlHelper helper;
   private final PendingNotificationSender sender;
-  private final UserFinder userFinder;
 
   @Inject
-  NotificationService(final PendingNotificationSender sender, final NotificationHtmlHelper helper,
-      final UserFinder userFinder) {
+  NotificationService(final PendingNotificationSender sender, final NotificationHtmlHelper helper) {
     this.sender = sender;
     this.helper = helper;
-    this.userFinder = userFinder;
   }
 
   private FormatedString createPlainSubject(final String subject) {
     return FormatedString.build(subject);
   }
 
-  @SuppressWarnings("unchecked")
-  private void getAllUserMembers(final Set<User> users, final Group groupToNotify,
-      final boolean onlyAdmins) {
-    final Collection<Group> members;
-    final Set<Group> admins = groupToNotify.getSocialNetwork().getAccessLists().getAdmins().getList();
-    if (onlyAdmins) {
-      members = admins;
-    } else {
-      final Set<Group> collabs = groupToNotify.getSocialNetwork().getAccessLists().getEditors().getList();
-      members = CollectionUtils.union(admins, collabs);
-    }
-    for (final Group member : members) {
-      if (member.isPersonal()) {
-        final String shortName = member.getShortName();
-        try {
-          final User user = userFinder.findByShortName(shortName);
-          users.add(user);
-        } catch (final NoResultException e) {
-          LOG.error(String.format("This personal group %s is not a local user", shortName));
-        }
-      } else {
-        // Is a group, so go recursively
-        getAllUserMembers(users, member, onlyAdmins);
-      }
-    }
-
-  }
-
   public void notifyGroup(final Group groupToNotify, final Group groupSender, final String subject,
       final String message) {
     final Set<User> members = new HashSet<User>();
-    getAllUserMembers(members, groupToNotify, false);
+    GroupServerUtils.getAllUserMembers(members, groupToNotify, SocialNetworkSubGroup.all);
     notifyToAll(groupSender, subject, message, members);
   }
 
   public void notifyGroupAdmins(final Group groupToNotify, final Group groupSender,
       final String subject, final String message) {
     final Set<User> adminMembers = new HashSet<User>();
-    getAllUserMembers(adminMembers, groupToNotify, true);
+    GroupServerUtils.getAllUserMembers(adminMembers, groupToNotify, SocialNetworkSubGroup.admins);
     notifyToAll(groupSender, subject, message, adminMembers);
   }
 

Modified: trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationSender.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationSender.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/server/notifier/PendingNotificationSender.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -4,7 +4,7 @@
 import java.util.concurrent.ConcurrentLinkedQueue;
 
 import cc.kune.core.server.mail.FormatedString;
-import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
+import cc.kune.core.shared.dto.EmailNotificationFrequency;
 import cc.kune.domain.User;
 
 import com.google.inject.Inject;

Modified: trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java
===================================================================
--- trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/server/rpc/ContentRPC.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -60,6 +60,7 @@
 import cc.kune.core.shared.domain.utils.StateToken;
 import cc.kune.core.shared.dto.ContentSimpleDTO;
 import cc.kune.core.shared.dto.I18nLanguageDTO;
+import cc.kune.core.shared.dto.SocialNetworkSubGroup;
 import cc.kune.core.shared.dto.StateAbstractDTO;
 import cc.kune.core.shared.dto.StateContainerDTO;
 import cc.kune.core.shared.dto.StateContentDTO;
@@ -194,6 +195,18 @@
 
   @Override
   @Authenticated
+  @Authorizated(accessRolRequired = AccessRol.Editor, mustCheckMembership = true)
+  @Transactional
+  public Boolean addParticipants(final String userHash, final StateToken token, final String groupName,
+      final SocialNetworkSubGroup subGroup) throws DefaultException {
+    final Long contentId = ContentUtils.parseId(token.getDocument());
+    final Group group = groupManager.findByShortName(groupName);
+    final User user = getCurrentUser();
+    return contentManager.addParticipants(user, contentId, group, subGroup);
+  }
+
+  @Override
+  @Authenticated
   @Authorizated(actionLevel = ActionLevel.container, accessRolRequired = AccessRol.Administrator)
   @Transactional
   public StateContainerDTO addRoom(final String userHash, final StateToken parentToken,

Deleted: trunk/src/main/java/cc/kune/core/shared/domain/dto/EmailNotificationFrequency.java
===================================================================
--- trunk/src/main/java/cc/kune/core/shared/domain/dto/EmailNotificationFrequency.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/shared/domain/dto/EmailNotificationFrequency.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -1,29 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
- * This file is part of kune.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-package cc.kune.core.shared.domain.dto;
-
-import com.google.gwt.user.client.rpc.IsSerializable;
-
-public enum EmailNotificationFrequency implements IsSerializable {
-  daily, // at most daily, (not used yet)
-  hourly, // at most hourly (not used yet)
-  immediately, // almost immediately (currently used)
-  no // I don't need email notifications (currently used)
-}

Copied: trunk/src/main/java/cc/kune/core/shared/dto/EmailNotificationFrequency.java (from rev 1717, trunk/src/main/java/cc/kune/core/shared/domain/dto/EmailNotificationFrequency.java)
===================================================================
--- trunk/src/main/java/cc/kune/core/shared/dto/EmailNotificationFrequency.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/shared/dto/EmailNotificationFrequency.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -0,0 +1,29 @@
+/*
+ *
+ * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package cc.kune.core.shared.dto;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+public enum EmailNotificationFrequency implements IsSerializable {
+  daily, // at most daily, (not used yet)
+  hourly, // at most hourly (not used yet)
+  immediately, // almost immediately (currently used)
+  no // I don't need email notifications (currently used)
+}

Added: trunk/src/main/java/cc/kune/core/shared/dto/SocialNetworkSubGroup.java
===================================================================
--- trunk/src/main/java/cc/kune/core/shared/dto/SocialNetworkSubGroup.java	                        (rev 0)
+++ trunk/src/main/java/cc/kune/core/shared/dto/SocialNetworkSubGroup.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -0,0 +1,35 @@
+/*
+ *
+ * Copyright (C) 2007-2009 The kune development team (see CREDITS for details)
+ * This file is part of kune.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package cc.kune.core.shared.dto;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+/**
+ * The Enum SocialNetworkSubGroup is a way to indicate a part of a group
+ * SNetwork.
+ */
+public enum SocialNetworkSubGroup implements IsSerializable {
+  /** The admins members only */
+  admins,
+  /** all members */
+  all,
+  /** The collabs members only */
+  collabs
+}

Modified: trunk/src/main/java/cc/kune/core/shared/dto/UserDTO.java
===================================================================
--- trunk/src/main/java/cc/kune/core/shared/dto/UserDTO.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/shared/dto/UserDTO.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -19,7 +19,6 @@
  */
 package cc.kune.core.shared.dto;
 
-import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 

Modified: trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java
===================================================================
--- trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/core/shared/dto/UserSimpleDTO.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -19,7 +19,6 @@
  */
 package cc.kune.core.shared.dto;
 
-import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
 import cc.kune.core.shared.domain.utils.StateToken;
 
 import com.google.gwt.user.client.rpc.IsSerializable;

Modified: trunk/src/main/java/cc/kune/domain/User.java
===================================================================
--- trunk/src/main/java/cc/kune/domain/User.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/domain/User.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -46,8 +46,8 @@
 import org.hibernate.validator.Pattern;
 
 import cc.kune.core.shared.domain.UserSNetVisibility;
-import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
 import cc.kune.core.shared.domain.utils.StateToken;
+import cc.kune.core.shared.dto.EmailNotificationFrequency;
 import cc.kune.domain.utils.HasId;
 
 @Entity

Modified: trunk/src/main/java/cc/kune/gspace/client/GSpaceGinModule.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/GSpaceGinModule.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/gspace/client/GSpaceGinModule.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -24,6 +24,9 @@
 import cc.kune.core.client.dnd.FolderContentDropController;
 import cc.kune.core.client.sitebar.search.SitebarSearchPanel;
 import cc.kune.core.client.sitebar.search.SitebarSearchPresenter;
+import cc.kune.core.client.sn.AdminsGroupSNDropController;
+import cc.kune.core.client.sn.AllMembersGroupSNDropController;
+import cc.kune.core.client.sn.CollabsGroupSNDropController;
 import cc.kune.core.client.sn.actions.WriteToBuddyHeaderButton;
 import cc.kune.gspace.client.actions.ContentViewerOptionsMenu;
 import cc.kune.gspace.client.actions.GiveUsFeedbackBtn;
@@ -140,6 +143,9 @@
     s(ContentDropController.class);
     s(FolderContainerDropController.class);
     s(FolderContentDropController.class);
+    s(AdminsGroupSNDropController.class);
+    s(CollabsGroupSNDropController.class);
+    s(AllMembersGroupSNDropController.class);
     bindPresenter(EntityLicensePresenter.class, EntityLicensePresenter.EntityLicenseView.class,
         EntityLicensePanel.class, EntityLicensePresenter.EntityLicenseProxy.class);
     bindPresenter(TagsSummaryPresenter.class, TagsSummaryPresenter.TagsSummaryView.class,

Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralPanel.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -24,7 +24,7 @@
 import cc.kune.core.client.i18n.I18nUITranslationService;
 import cc.kune.core.client.resources.CoreResources;
 import cc.kune.core.client.ui.DefaultFormUtils;
-import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
+import cc.kune.core.shared.dto.EmailNotificationFrequency;
 import cc.kune.core.shared.dto.I18nLanguageSimpleDTO;
 import cc.kune.gspace.client.i18n.LanguageSelectorPanel;
 

Modified: trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java
===================================================================
--- trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/gspace/client/options/general/UserOptGeneralView.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -19,7 +19,7 @@
  */
 package cc.kune.gspace.client.options.general;
 
-import cc.kune.core.shared.domain.dto.EmailNotificationFrequency;
+import cc.kune.core.shared.dto.EmailNotificationFrequency;
 import cc.kune.core.shared.dto.I18nLanguageSimpleDTO;
 
 import com.google.gwt.event.dom.client.HasClickHandlers;

Modified: trunk/src/main/java/cc/kune/lists/client/ListsClientTool.java
===================================================================
--- trunk/src/main/java/cc/kune/lists/client/ListsClientTool.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/lists/client/ListsClientTool.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -51,7 +51,7 @@
     // registerAclEditableTypes();
     registerAuthorableTypes(TYPE_POST);
     registerDragableTypes();
-    registerDropableTypes();
+    registerDropableTypes(TYPE_POST);
     registerPublishModerableTypes();
     registerRateableTypes(TYPE_POST);
     registerRenamableTypes(TYPE_LIST, TYPE_POST);

Modified: trunk/src/main/java/cc/kune/tasks/client/TasksClientTool.java
===================================================================
--- trunk/src/main/java/cc/kune/tasks/client/TasksClientTool.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/tasks/client/TasksClientTool.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -53,7 +53,7 @@
     // registerAclEditableTypes();
     registerAuthorableTypes(TYPE_TASK);
     registerDragableTypes(TYPE_TASK, TYPE_FOLDER);
-    registerDropableTypes(TYPE_ROOT, TYPE_FOLDER);
+    registerDropableTypes(TYPE_ROOT, TYPE_FOLDER, TYPE_TASK);
     registerPublishModerableTypes(TYPE_TASK);
     registerRateableTypes(TYPE_TASK);
     registerRenamableTypes(TYPE_FOLDER, TYPE_TASK);

Modified: trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/wave/server/ParticipantUtils.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -28,7 +28,7 @@
 
 import cc.kune.core.client.errors.DefaultException;
 import cc.kune.core.server.properties.KuneBasicProperties;
-import cc.kune.domain.Group;
+import cc.kune.domain.User;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -68,9 +68,9 @@
     return address.contains(getAtDomain());
   }
 
-  public ParticipantId[] listFrom(final Set<Group> list) {
+  public ParticipantId[] listFrom(final Set<User> list) {
     final ParticipantId[] array = new ParticipantId[list.size()];
-    final Iterator<Group> iterator = list.iterator();
+    final Iterator<User> iterator = list.iterator();
     for (int i = 0; i < list.size(); i++) {
       array[i] = of(iterator.next().getShortName());
     }

Modified: trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveServiceDefault.java
===================================================================
--- trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveServiceDefault.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/wave/server/kspecific/KuneWaveServiceDefault.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -195,22 +195,22 @@
     boolean added = false;
     final Wavelet wavelet = fetchWave(waveName, author);
     final Participants currentParticipants = wavelet.getParticipants();
-    // Removing duplicates
+    final String whoAdd = wavelet.getParticipants().contains(participantUtils.of(userWhoAdds)) ? userWhoAdds
+        : author;
+    final OperationQueue opQueue = new OperationQueue();
     for (final String participant : toSet(newLocalParticipants)) {
       final String newPartWithDomain = participantUtils.of(participant).toString();
+      // Removing duplicates
       if (!currentParticipants.contains(newPartWithDomain)) {
         // FIXME This is very costly. Seems like only one participant per
         // opQueue is added (try to
         // fix this in WAVE)
-        final OperationQueue opQueue = new OperationQueue();
         LOG.debug("Adding as participant: " + newPartWithDomain);
         opQueue.addParticipantToWavelet(wavelet, newPartWithDomain);
-        final String whoAdd = wavelet.getParticipants().contains(participantUtils.of(userWhoAdds)) ? userWhoAdds
-            : author;
-        doOperation(whoAdd, opQueue, "add participant");
         added = true;
       }
     }
+    doOperation(whoAdd, opQueue, "add participant");
     return added;
   }
 
@@ -340,17 +340,17 @@
     final Participants currentParticipants = wavelet.getParticipants();
     final Set<String> set = toSet(participantsToDel);
     LOG.debug("Removing participants: " + set.toString());
+    final OperationQueue opQueue = new OperationQueue();
     for (final String participant : set) {
       // FIXME Seems like only one participant per opQueue is added (try to fix
       // this in WAVE)
       final String partWithDomain = participantUtils.of(participant).toString();
       if (currentParticipants.contains(partWithDomain)) {
-        final OperationQueue opQueue = new OperationQueue();
         LOG.debug("Removing as participant: " + partWithDomain);
         opQueue.removeParticipantFromWavelet(wavelet, partWithDomain);
-        doOperation(whoDel, opQueue, "del participant");
       }
     }
+    doOperation(whoDel, opQueue, "del participant");
   }
 
   private void doOperation(final String author, final OperationQueue opQueue, final String logComment) {

Modified: trunk/src/main/java/cc/kune/wiki/client/WikiClientTool.java
===================================================================
--- trunk/src/main/java/cc/kune/wiki/client/WikiClientTool.java	2012-02-28 18:56:19 UTC (rev 1719)
+++ trunk/src/main/java/cc/kune/wiki/client/WikiClientTool.java	2012-02-29 01:04:27 UTC (rev 1720)
@@ -52,7 +52,7 @@
 
     registerAuthorableTypes(TYPE_WIKIPAGE, TYPE_UPLOADEDFILE);
     registerDragableTypes(TYPE_WIKIPAGE, TYPE_FOLDER, TYPE_UPLOADEDFILE);
-    registerDropableTypes(TYPE_ROOT, TYPE_FOLDER);
+    registerDropableTypes(TYPE_ROOT, TYPE_FOLDER, TYPE_WIKIPAGE);
     registerRateableTypes(TYPE_UPLOADEDFILE, TYPE_WIKIPAGE);
     registerRenamableTypes(TYPE_FOLDER, TYPE_UPLOADEDFILE, TYPE_WIKIPAGE);
     registerTageableTypes(TYPE_UPLOADEDFILE, TYPE_WIKIPAGE);




More information about the kune-commits mailing list