/* * * Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under * one or more contributor license agreements (see COPYRIGHT for details). * The CA licenses this file to you under the GNU Affero General Public * License version 3, (the "License"); you may not use this file except in * compliance with the License. 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.server.rpc; import cc.kune.core.client.errors.DefaultException; import cc.kune.core.client.rpcservices.SocialNetService; import cc.kune.core.server.UserSessionManager; import cc.kune.core.server.auth.ActionLevel; import cc.kune.core.server.auth.Authenticated; import cc.kune.core.server.auth.Authorizated; import cc.kune.core.server.manager.GroupManager; import cc.kune.core.server.manager.SocialNetworkManager; import cc.kune.core.server.persist.KuneTransactional; import cc.kune.core.shared.domain.AccessRol; import cc.kune.core.shared.domain.utils.StateToken; import cc.kune.core.shared.dto.SocialNetworkDataDTO; import cc.kune.core.shared.dto.SocialNetworkRequestResult; import cc.kune.domain.Group; import cc.kune.domain.User; import cc.kune.domain.finders.UserFinder; import com.google.inject.Inject; // TODO: Auto-generated Javadoc /** * The Class SocialNetworkRPC. * * @author vjrj@ourproject.org (Vicente J. Ruiz Jurado) */ public class SocialNetworkRPC implements SocialNetService, RPC { /** The group manager. */ private final GroupManager groupManager; /** The sn manager. */ private final SocialNetworkManager snManager; /** The user finder. */ private final UserFinder userFinder; /** The user session manager. */ private final UserSessionManager userSessionManager; /** * Instantiates a new social network rpc. * * @param userSessionManager * the user session manager * @param groupManager * the group manager * @param socialNetworkManager * the social network manager * @param userFinder * the user finder */ @Inject public SocialNetworkRPC(final UserSessionManager userSessionManager, final GroupManager groupManager, final SocialNetworkManager socialNetworkManager, final UserFinder userFinder) { this.userSessionManager = userSessionManager; this.groupManager = groupManager; this.snManager = socialNetworkManager; this.userFinder = userFinder; } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#acceptJoinGroup(java.lang * .String, cc.kune.core.shared.domain.utils.StateToken, java.lang.String) */ @Override @Authenticated @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator) @KuneTransactional public SocialNetworkDataDTO acceptJoinGroup(final String hash, final StateToken groupToken, final String groupToAcceptShortName) throws DefaultException { final User userLogged = userSessionManager.getUser(); final Group group = groupManager.findByShortName(groupToken.getGroup()); checkIsNotPersonalGroup(group); final Group groupToAccept = groupManager.findByShortName(groupToAcceptShortName); snManager.acceptJoinGroup(userLogged, groupToAccept, group); // notifyService.notifyGroupAdmins(group, group, hash, // groupToAcceptShortName) // "%admin approved the membership of the %user in the group %group". // notifyService.notifyGroupAdmins(group, group, "Collaborator accepted", // "There is a pending collaborator in this group. Please accept or deny him/her"); return generateResponse(userLogged, group); } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#addAdminMember(java.lang * .String, cc.kune.core.shared.domain.utils.StateToken, java.lang.String) */ @Override @Authenticated @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator) @KuneTransactional public SocialNetworkDataDTO addAdminMember(final String hash, final StateToken groupToken, final String groupToAddShortName) throws DefaultException { final User userLogged = userSessionManager.getUser(); final Group group = groupManager.findByShortName(groupToken.getGroup()); checkIsNotPersonalGroup(group); final Group groupToAdd = groupManager.findByShortName(groupToAddShortName); snManager.addGroupToAdmins(userLogged, groupToAdd, group); return generateResponse(userLogged, group); } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#addAsBuddie(java.lang. * String, java.lang.String) */ @Override @Authenticated @KuneTransactional public void addAsBuddie(final String hash, final String userName) throws DefaultException { snManager.addAsBuddie(userSessionManager.getUser(), userFinder.findByShortName(userName)); } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#addCollabMember(java.lang * .String, cc.kune.core.shared.domain.utils.StateToken, java.lang.String) */ @Override @Authenticated @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator) @KuneTransactional public SocialNetworkDataDTO addCollabMember(final String hash, final StateToken groupToken, final String groupToAddShortName) throws DefaultException { final User userLogged = userSessionManager.getUser(); final Group group = groupManager.findByShortName(groupToken.getGroup()); checkIsNotPersonalGroup(group); final Group groupToAdd = groupManager.findByShortName(groupToAddShortName); snManager.addGroupToCollabs(userLogged, groupToAdd, group); return generateResponse(userLogged, group); } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#addViewerMember(java.lang * .String, cc.kune.core.shared.domain.utils.StateToken, java.lang.String) */ @Override @Authenticated @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator) @KuneTransactional public SocialNetworkDataDTO addViewerMember(final String hash, final StateToken groupToken, final String groupToAddShortName) throws DefaultException { final User userLogged = userSessionManager.getUser(); final Group group = groupManager.findByShortName(groupToken.getGroup()); checkIsNotPersonalGroup(group); final Group groupToAdd = groupManager.findByShortName(groupToAddShortName); snManager.addGroupToViewers(userLogged, groupToAdd, group); return generateResponse(userLogged, group); } /** * Check is not personal group. * * @param group * the group */ private void checkIsNotPersonalGroup(final Group group) { if (group.isPersonal()) { throw new DefaultException(); } ; } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#deleteMember(java.lang * .String, cc.kune.core.shared.domain.utils.StateToken, java.lang.String) */ @Override @Authenticated @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator) @KuneTransactional public SocialNetworkDataDTO deleteMember(final String hash, final StateToken groupToken, final String groupToDeleleShortName) throws DefaultException { final User userLogged = userSessionManager.getUser(); final Group group = groupManager.findByShortName(groupToken.getGroup()); checkIsNotPersonalGroup(group); final Group groupToDelete = groupManager.findByShortName(groupToDeleleShortName); snManager.deleteMember(userLogged, groupToDelete, group); return generateResponse(userLogged, group); } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#denyJoinGroup(java.lang * .String, cc.kune.core.shared.domain.utils.StateToken, java.lang.String) */ @Override @Authenticated @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator) @KuneTransactional public SocialNetworkDataDTO denyJoinGroup(final String hash, final StateToken groupToken, final String groupToDenyShortName) throws DefaultException { final User userLogged = userSessionManager.getUser(); final Group group = groupManager.findByShortName(groupToken.getGroup()); checkIsNotPersonalGroup(group); final Group groupToDenyJoin = groupManager.findByShortName(groupToDenyShortName); snManager.denyJoinGroup(userLogged, groupToDenyJoin, group); return generateResponse(userLogged, group); } /** * Generate response. * * @param userLogged * the user logged * @param group * the group * @return the social network data dto */ private SocialNetworkDataDTO generateResponse(final User userLogged, final Group group) { return snManager.generateResponse(userLogged, group); } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#getSocialNetwork(java. * lang.String, cc.kune.core.shared.domain.utils.StateToken) */ @Override @Authenticated(mandatory = false) // At least you can access as Viewer to the Group @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Viewer) @KuneTransactional public SocialNetworkDataDTO getSocialNetwork(final String hash, final StateToken groupToken) throws DefaultException { final User user = userSessionManager.getUser(); final Group group = groupManager.findByShortName(groupToken.getGroup()); return generateResponse(user, group); } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#requestJoinGroup(java. * lang.String, cc.kune.core.shared.domain.utils.StateToken) */ @Override @Authenticated @KuneTransactional public SocialNetworkRequestResult requestJoinGroup(final String hash, final StateToken groupToken) throws DefaultException { final User user = userSessionManager.getUser(); final Group group = groupManager.findByShortName(groupToken.getGroup()); checkIsNotPersonalGroup(group); return snManager.requestToJoin(user, group); } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#setAdminAsCollab(java. * lang.String, cc.kune.core.shared.domain.utils.StateToken, java.lang.String) */ @Override @Authenticated @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator) @KuneTransactional public SocialNetworkDataDTO setAdminAsCollab(final String hash, final StateToken groupToken, final String groupToSetCollabShortName) throws DefaultException { final User userLogged = userSessionManager.getUser(); final Group group = groupManager.findByShortName(groupToken.getGroup()); checkIsNotPersonalGroup(group); final Group groupToSetCollab = groupManager.findByShortName(groupToSetCollabShortName); snManager.setAdminAsCollab(userLogged, groupToSetCollab, group); return generateResponse(userLogged, group); } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#setCollabAsAdmin(java. * lang.String, cc.kune.core.shared.domain.utils.StateToken, java.lang.String) */ @Override @Authenticated @Authorizated(actionLevel = ActionLevel.group, accessRolRequired = AccessRol.Administrator) @KuneTransactional public SocialNetworkDataDTO setCollabAsAdmin(final String hash, final StateToken groupToken, final String groupToSetAdminShortName) throws DefaultException { final User userLogged = userSessionManager.getUser(); final Group group = groupManager.findByShortName(groupToken.getGroup()); checkIsNotPersonalGroup(group); final Group groupToSetAdmin = groupManager.findByShortName(groupToSetAdminShortName); snManager.setCollabAsAdmin(userLogged, groupToSetAdmin, group); return generateResponse(userLogged, group); } /* * (non-Javadoc) * * @see * cc.kune.core.client.rpcservices.SocialNetService#unJoinGroup(java.lang. * String, cc.kune.core.shared.domain.utils.StateToken) */ @Override @Authenticated @KuneTransactional public void unJoinGroup(final String hash, final StateToken groupToken) throws DefaultException { final User userLogged = userSessionManager.getUser(); final Group group = groupManager.findByShortName(groupToken.getGroup()); checkIsNotPersonalGroup(group); snManager.unJoinGroup(userLogged.getUserGroup(), group); } }