/***************************************************************************
* Copyright (C) 2003-2007 eXo Platform SAS.
*
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
***************************************************************************/
package org.exoplatform.platform.gadget.services.newspaces;
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.rest.resource.ResourceContainer;
import org.exoplatform.services.security.ConversationState;
import org.exoplatform.services.security.Identity;
import org.exoplatform.services.security.MembershipEntry;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
*
* @author <a href="tung.do@exoplatform.com">Do Thanh Tung </a>
* @version $Revision$
*/
@Path("intranetNewSpaceService")
public class NewSpaceRestService implements ResourceContainer {
private static final Log LOG = ExoLogger.getLogger(NewSpaceRestService.class);
/** The Constant REGISTRATION is OPEN. */
public final static String REGISTRATION_OPEN = "open";
/** The Constant REGISTRATION is VALIDATION. */
public final static String REGISTRATION_VALIDATION = "validation";
/** The Constant REGISTRATION is CLOSE. */
public final static String REGISTRATION_CLOSE = "close";
/** The Constant VISIBILITY is PRIVATE. */
public final static String VISIBILITY_PRIVATE = "private"; //visible
/** The Constant VISIBILITY is HIDDEN. */
public final static String VISIBILITY_HIDDEN = "hidden";
public NewSpaceRestService() { }
/**
* Get latest created spaces in maxtime days recently
* @param maxtime
* @return
*/
@GET
@Path("/space/latestCreatedSpace/{maxtime}/{language}")
@Produces(MediaType.APPLICATION_JSON)
public Response latestCreatedSocialSpace(@PathParam("maxtime") int maxtime, @PathParam("language") String language) {
CacheControl cacheControl = new CacheControl();
cacheControl.setNoCache(true);
cacheControl.setNoStore(true);
IntranetSpaceService intranetSpaceService = (IntranetSpaceService)ExoContainerContext.getCurrentContainer().getComponentInstanceOfType(IntranetSpaceService.class);
List<IntranetSpace> listIntranetSpace= new ArrayList<IntranetSpace>();
List<IntranetSpace> listResponseIntranetSpace= new ArrayList<IntranetSpace>();
List<String> allGroupAndMembershipOfUser = getAllGroupAndMembershipOfUser();
try
{
listIntranetSpace = intranetSpaceService.getLatestCreatedSpace(maxtime, language, allGroupAndMembershipOfUser);
for (IntranetSpace space : listIntranetSpace) {
if(space.getIsMember() || space.getIsInvitedUser() || space.getIsPendingUser()){
listResponseIntranetSpace.add(space);
}
else if((space.getVisibility().equalsIgnoreCase(NewSpaceRestService.VISIBILITY_PRIVATE)) &&
((space.getRegistration().equalsIgnoreCase(NewSpaceRestService.REGISTRATION_OPEN)) || (space.getRegistration().equalsIgnoreCase(NewSpaceRestService.REGISTRATION_VALIDATION)))){
//if space is Visible AND (Open OR Validation)
listResponseIntranetSpace.add(space);
}
}
}
catch (Exception e)
{
LOG.error("has not any space", e);
}
List<Object> dataIntranetSpace = new ArrayList<Object>();
dataIntranetSpace.add(listResponseIntranetSpace);
MessageBean data = new MessageBean();
data.setData(dataIntranetSpace);
return Response.ok(data, MediaType.APPLICATION_JSON).cacheControl(cacheControl).build();
}
/**
* request to join space
* @param spaceUrl
* @return space information that user has join OR empty if request was failure
*/
@GET
@Path("/space/requestJoinSpace/{spaceUrl}")
@Produces(MediaType.APPLICATION_JSON)
public Response requestJoinSpace(@PathParam("spaceUrl") String spaceUrl) {
CacheControl cacheControl = new CacheControl();
cacheControl.setNoCache(true);
cacheControl.setNoStore(true);
IntranetSpaceService intranetSpaceService = (IntranetSpaceService)ExoContainerContext.getCurrentContainer().getComponentInstanceOfType(IntranetSpaceService.class);
List<IntranetSpace> listResponseIntranetSpace= new ArrayList<IntranetSpace>();
try
{
listResponseIntranetSpace = intranetSpaceService.requestToJoinOpenSpace(spaceUrl, this.getUserId());
}
catch (Exception e)
{
LOG.error("has not any space", e);
}
List<Object> dataIntranetSpace = new ArrayList<Object>();
dataIntranetSpace.add(listResponseIntranetSpace);
MessageBean data = new MessageBean();
data.setData(dataIntranetSpace);
return Response.ok(data, MediaType.APPLICATION_JSON).cacheControl(cacheControl).build();
}
public class MessageBean {
private List<Object> data;
public void setData(List<Object> list) {
this.data = list;
}
public List<Object> getData() {
return data;
}
}
private List<String> getAllGroupAndMembershipOfUser() {
List<String> listOfUser = new ArrayList<String>();
try {
Identity identity = ConversationState.getCurrent().getIdentity();
if(identity.getGroups() == null || identity.getGroups().size() == 0){
return listOfUser;
}
listOfUser.add(identity.getUserId());
Set<String> list = new HashSet<String>();
list.addAll(identity.getGroups());
for (MembershipEntry membership : identity.getMemberships()) {
String value = membership.getGroup();
list.add(value); // its groups
value = new StringBuffer().append(membership.getMembershipType()).append( ":").append(value).toString();
list.add(value);
}
listOfUser.addAll(list);
} catch (Exception e) {
LOG.warn("Failed to add all info of user.");
}
return listOfUser;
}
private String getUserId()
{
Identity identity = ConversationState.getCurrent().getIdentity();
if(identity.getGroups() == null || identity.getGroups().size() == 0)
{
return null;
}
return identity.getUserId();
}
}