diff --git a/source/java/org/alfresco/rest/api/Sites.java b/source/java/org/alfresco/rest/api/Sites.java index 25d177e432..a105029b30 100644 --- a/source/java/org/alfresco/rest/api/Sites.java +++ b/source/java/org/alfresco/rest/api/Sites.java @@ -16,7 +16,6 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ - package org.alfresco.rest.api; import org.alfresco.query.PagingResults; @@ -24,7 +23,6 @@ import org.alfresco.rest.api.model.FavouriteSite; import org.alfresco.rest.api.model.MemberOfSite; import org.alfresco.rest.api.model.Site; import org.alfresco.rest.api.model.SiteContainer; -import org.alfresco.rest.api.model.SiteImpl; import org.alfresco.rest.api.model.SiteMember; import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; import org.alfresco.rest.framework.resource.parameters.Paging; @@ -35,52 +33,32 @@ import org.alfresco.service.cmr.site.SiteRole; public interface Sites { - SiteInfo validateSite(String siteShortName); - - SiteInfo validateSite(NodeRef nodeRef); - + SiteInfo validateSite(String siteShortName); + SiteInfo validateSite(NodeRef nodeRef); CollectionWithPagingInfo getSiteMembers(String siteShortName, Parameters parameters); - Site getSite(String siteId); - - SiteImpl updateSite(String siteShortName, SiteImpl site); - - void deleteSite(String siteShortName); - - /** - * people//sites/ - * - * @param siteId - * @param personId - * @return - */ - MemberOfSite getMemberOfSite(String personId, String siteShortName); - - SiteMember getSiteMember(String personId, String siteShortName); - - SiteMember addSiteMember(String siteShortName, SiteMember siteMember); - - void removeSiteMember(String personId, String siteId); - - SiteMember updateSiteMember(String siteShortName, SiteMember siteMember); - - CollectionWithPagingInfo getSites(String personId, Parameters parameters); - - SiteContainer getSiteContainer(String siteShortName, String containerId); - - PagingResults getSiteContainers(String siteShortName, Paging paging); - - CollectionWithPagingInfo getSites(Parameters parameters); - + + /** + * people//sites/ + * + * @param siteId + * @param personId + * @return + */ + MemberOfSite getMemberOfSite(String personId, String siteShortName); + SiteMember getSiteMember(String personId, String siteShortName); + SiteMember addSiteMember(String siteShortName, SiteMember siteMember); + void removeSiteMember(String personId, String siteId); + SiteMember updateSiteMember(String siteShortName, SiteMember siteMember); + CollectionWithPagingInfo getSites(String personId, Parameters parameters); + SiteContainer getSiteContainer(String siteShortName, String containerId); + PagingResults getSiteContainers(String siteShortName, Paging paging); + CollectionWithPagingInfo getSites(Parameters parameters); FavouriteSite getFavouriteSite(String personId, String siteShortName); - void addFavouriteSite(String personId, FavouriteSite favouriteSite); - void removeFavouriteSite(String personId, String siteId); - CollectionWithPagingInfo getFavouriteSites(String personId, Parameters parameters); - + SiteRole getSiteRole(String siteId); - SiteRole getSiteRole(String siteId, String personId); } diff --git a/source/java/org/alfresco/rest/api/impl/SitesImpl.java b/source/java/org/alfresco/rest/api/impl/SitesImpl.java index 114aa1572a..0c114e64d8 100644 --- a/source/java/org/alfresco/rest/api/impl/SitesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/SitesImpl.java @@ -34,7 +34,6 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ - package org.alfresco.rest.api.impl; import java.io.Serializable; @@ -86,7 +85,6 @@ import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteRole; import org.alfresco.service.cmr.site.SiteService; -import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.service.namespace.QName; import org.alfresco.util.Pair; @@ -101,329 +99,324 @@ public class SitesImpl implements Sites private static final String FAVOURITE_SITES_PREFIX = "org.alfresco.share.sites.favourites."; private static final int FAVOURITE_SITES_PREFIX_LENGTH = FAVOURITE_SITES_PREFIX.length(); - protected Nodes nodes; - protected People people; - protected NodeService nodeService; - protected DictionaryService dictionaryService; + protected Nodes nodes; + protected People people; + protected NodeService nodeService; + protected DictionaryService dictionaryService; protected SiteService siteService; protected FavouritesService favouritesService; protected PreferenceService preferenceService; - public void setPreferenceService(PreferenceService preferenceService) - { - this.preferenceService = preferenceService; - } + public void setPreferenceService(PreferenceService preferenceService) + { + this.preferenceService = preferenceService; + } - public void setDictionaryService(DictionaryService dictionaryService) - { - this.dictionaryService = dictionaryService; - } + public void setDictionaryService(DictionaryService dictionaryService) + { + this.dictionaryService = dictionaryService; + } - public void setNodes(Nodes nodes) - { - this.nodes = nodes; - } + public void setNodes(Nodes nodes) + { + this.nodes = nodes; + } - public void setFavouritesService(FavouritesService favouritesService) - { - this.favouritesService = favouritesService; - } + public void setFavouritesService(FavouritesService favouritesService) + { + this.favouritesService = favouritesService; + } - public void setPeople(People people) - { - this.people = people; - } + public void setPeople(People people) + { + this.people = people; + } - public void setNodeService(NodeService nodeService) + public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } - - public void setSiteService(SiteService siteService) + + public void setSiteService(SiteService siteService) { this.siteService = siteService; } + + public SiteInfo validateSite(NodeRef guid) + { + SiteInfo siteInfo = null; - public SiteInfo validateSite(NodeRef guid) - { - SiteInfo siteInfo = null; + if(guid == null) + { + throw new InvalidArgumentException("guid is null"); + } + nodes.validateNode(guid); + QName type = nodeService.getType(guid); + boolean isSiteNodeRef = dictionaryService.isSubClass(type, SiteModel.TYPE_SITE); + if(isSiteNodeRef) + { + siteInfo = siteService.getSite(guid); + if(siteInfo == null) + { + // not a site + throw new InvalidArgumentException(guid.getId() + " is not a site"); + } + } + else + { + // site does not exist + throw new EntityNotFoundException(guid.getId()); + } - if (guid == null) - { - throw new InvalidArgumentException("guid is null"); - } - nodes.validateNode(guid); - QName type = nodeService.getType(guid); - boolean isSiteNodeRef = dictionaryService.isSubClass(type, SiteModel.TYPE_SITE); - if (isSiteNodeRef) - { - siteInfo = siteService.getSite(guid); - if (siteInfo == null) - { - // not a site - throw new InvalidArgumentException(guid.getId() + " is not a site"); - } - } - else - { - // site does not exist - throw new EntityNotFoundException(guid.getId()); - } + return siteInfo; + } - return siteInfo; - } - - public SiteInfo validateSite(String siteId) - { - if (siteId == null) - { - throw new InvalidArgumentException("siteId is null"); - } - SiteInfo siteInfo = siteService.getSite(siteId); - return siteInfo; - } + public SiteInfo validateSite(String siteId) + { + if(siteId == null) + { + throw new InvalidArgumentException("siteId is null"); + } + SiteInfo siteInfo = siteService.getSite(siteId); + return siteInfo; + } public CollectionWithPagingInfo getSiteMembers(String siteId, Parameters parameters) { - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new EntityNotFoundException(siteId); - } - // set the site id to the short name (to deal with case sensitivity - // issues with using the siteId from the url) - siteId = siteInfo.getShortName(); + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new EntityNotFoundException(siteId); + } + // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url) + siteId = siteInfo.getShortName(); + + Paging paging = parameters.getPaging(); - Paging paging = parameters.getPaging(); - - PagingRequest pagingRequest = Util.getPagingRequest(paging); + PagingRequest pagingRequest = Util.getPagingRequest(paging); final List> sort = new ArrayList>(); sort.add(new Pair(SiteService.SortFields.LastName, Boolean.TRUE)); sort.add(new Pair(SiteService.SortFields.FirstName, Boolean.TRUE)); sort.add(new Pair(SiteService.SortFields.Role, Boolean.TRUE)); sort.add(new Pair(SiteService.SortFields.Username, Boolean.TRUE)); - PagingResults pagedResults = siteService.listMembersPaged(siteId, true, sort, pagingRequest); + PagingResults pagedResults = siteService.listMembersPaged(siteId, true, sort, pagingRequest); List siteMembers = pagedResults.getPage(); - List ret = new ArrayList(siteMembers.size()); - for (SiteMembership siteMembership : siteMembers) - { - SiteMember siteMember = new SiteMember(siteMembership.getPersonId(), siteMembership.getRole()); - ret.add(siteMember); - } + List ret = new ArrayList(siteMembers.size()); + for(SiteMembership siteMembership : siteMembers) + { + SiteMember siteMember = new SiteMember(siteMembership.getPersonId(), siteMembership.getRole()); + ret.add(siteMember); + } - return CollectionWithPagingInfo.asPaged(paging, ret, pagedResults.hasMoreItems(), null); + return CollectionWithPagingInfo.asPaged(paging, ret, pagedResults.hasMoreItems(), null); } - + public SiteRole getSiteRole(String siteId) { - String personId = AuthenticationUtil.getFullyAuthenticatedUser(); - return getSiteRole(siteId, personId); + String personId = AuthenticationUtil.getFullyAuthenticatedUser(); + return getSiteRole(siteId, personId); } - + public SiteRole getSiteRole(String siteId, String personId) { - String roleStr = siteService.getMembersRole(siteId, personId); - SiteRole role = (roleStr != null ? SiteRole.valueOf(roleStr) : null); - return role; + String roleStr = siteService.getMembersRole(siteId, personId); + SiteRole role = (roleStr != null ? SiteRole.valueOf(roleStr) : null); + return role; } - + public Site getSite(String siteId) { - return getSite(siteId, true); + return getSite(siteId, true); } public Site getSite(String siteId, boolean includeRole) { - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new EntityNotFoundException(siteId); - } - // set the site id to the short name (to deal with case sensitivity - // issues with using the siteId from the url) - siteId = siteInfo.getShortName(); - SiteRole role = null; - if (includeRole) - { - role = getSiteRole(siteId); - } - return new SiteImpl(siteInfo, role); + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new EntityNotFoundException(siteId); + } + // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url) + siteId = siteInfo.getShortName(); + SiteRole role = null; + if(includeRole) + { + role = getSiteRole(siteId); + } + return new SiteImpl(siteInfo, role); } + + /** + * people//sites/ + * + * @param siteId + * @param personId + * @return + */ + public MemberOfSite getMemberOfSite(String personId, String siteId) + { + MemberOfSite siteMember = null; - /** - * people//sites/ - * - * @param siteId - * @param personId - * @return - */ - public MemberOfSite getMemberOfSite(String personId, String siteId) - { - MemberOfSite siteMember = null; + personId = people.validatePerson(personId); + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new RelationshipResourceNotFoundException(personId, siteId); + } + // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url) + siteId = siteInfo.getShortName(); - personId = people.validatePerson(personId); - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new RelationshipResourceNotFoundException(personId, siteId); - } - // set the site id to the short name (to deal with case sensitivity - // issues with using the siteId from the url) - siteId = siteInfo.getShortName(); + String roleStr = siteService.getMembersRole(siteInfo.getShortName(), personId); + if(roleStr != null) + { + SiteRole role = SiteRole.valueOf(roleStr); + SiteImpl site = new SiteImpl(siteInfo, role); + siteMember = new MemberOfSite(site.getId(), siteInfo.getNodeRef(), role); + } + else + { + throw new RelationshipResourceNotFoundException(personId, siteId); + } - String roleStr = siteService.getMembersRole(siteInfo.getShortName(), personId); - if (roleStr != null) - { - SiteRole role = SiteRole.valueOf(roleStr); - SiteImpl site = new SiteImpl(siteInfo, role); - siteMember = new MemberOfSite(site.getId(), siteInfo.getNodeRef(), role); - } - else - { - throw new RelationshipResourceNotFoundException(personId, siteId); - } + return siteMember; + } + + public SiteMember getSiteMember(String personId, String siteId) + { + SiteMember siteMember = null; - return siteMember; - } + personId = people.validatePerson(personId); + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new RelationshipResourceNotFoundException(personId, siteId); + } + siteId = siteInfo.getShortName(); - public SiteMember getSiteMember(String personId, String siteId) - { - SiteMember siteMember = null; + String role = siteService.getMembersRole(siteId, personId); + if(role != null) + { + siteMember = new SiteMember(personId, SiteRole.valueOf(role)); + } + else + { + throw new RelationshipResourceNotFoundException(personId, siteId); + } - personId = people.validatePerson(personId); - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new RelationshipResourceNotFoundException(personId, siteId); - } - siteId = siteInfo.getShortName(); + return siteMember; + } - String role = siteService.getMembersRole(siteId, personId); - if (role != null) - { - siteMember = new SiteMember(personId, SiteRole.valueOf(role)); - } - else - { - throw new RelationshipResourceNotFoundException(personId, siteId); - } + public SiteMember addSiteMember(String siteId, SiteMember siteMember) + { + String personId = people.validatePerson(siteMember.getPersonId()); + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new EntityNotFoundException(siteId); + } + // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url) + siteId = siteInfo.getShortName(); + + SiteRole siteRole = siteMember.getRole(); + if(siteRole == null) + { + throw new InvalidArgumentException("Must provide a role"); + } + String role = siteRole.name(); + + if(siteService.isMember(siteId, personId)) + { + throw new ConstraintViolatedException(personId + " is already a member of site " + siteId); + } - return siteMember; - } + if(!siteService.canAddMember(siteId, personId, role)) + { + throw new PermissionDeniedException(); + } - public SiteMember addSiteMember(String siteId, SiteMember siteMember) - { - String personId = people.validatePerson(siteMember.getPersonId()); - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new EntityNotFoundException(siteId); - } - // set the site id to the short name (to deal with case sensitivity - // issues with using the siteId from the url) - siteId = siteInfo.getShortName(); + siteService.setMembership(siteId, personId, role); + return siteMember; + } + + public void removeSiteMember(String personId, String siteId) + { + personId = people.validatePerson(personId); + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new RelationshipResourceNotFoundException(personId, siteId); + } + // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url) + siteId = siteInfo.getShortName(); - SiteRole siteRole = siteMember.getRole(); - if (siteRole == null) - { - throw new InvalidArgumentException("Must provide a role"); - } - String role = siteRole.name(); + boolean isMember = siteService.isMember(siteId, personId); + if(!isMember) + { + throw new InvalidArgumentException(); + } + String role = siteService.getMembersRole(siteId, personId); + if(role != null) + { + if(role.equals(SiteModel.SITE_MANAGER)) + { + int numAuthorities = siteService.countAuthoritiesWithRole(siteId, SiteModel.SITE_MANAGER); + if(numAuthorities <= 1) + { + throw new InvalidArgumentException("Can't remove last manager of site " + siteId); + } + siteService.removeMembership(siteId, personId); + } + else + { + siteService.removeMembership(siteId, personId); + } + } + else + { + throw new AlfrescoRuntimeException("Unable to determine role of site member"); + } + } - if (siteService.isMember(siteId, personId)) - { - throw new ConstraintViolatedException(personId + " is already a member of site " + siteId); - } + public SiteMember updateSiteMember(String siteId, SiteMember siteMember) + { + String siteMemberId = siteMember.getPersonId(); + if(siteMemberId == null) + { + throw new InvalidArgumentException("Member id is null"); + } + siteMemberId = people.validatePerson(siteMemberId); + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new EntityNotFoundException(siteId); + } + siteId = siteInfo.getShortName(); + SiteRole siteRole = siteMember.getRole(); + if(siteRole == null) + { + throw new InvalidArgumentException("Must provide a role"); + } - if (!siteService.canAddMember(siteId, personId, role)) - { - throw new PermissionDeniedException(); - } + siteService.setMembership(siteId, siteMember.getPersonId(), siteRole.toString()); + return siteMember; + } + + public CollectionWithPagingInfo getSites(String personId, Parameters parameters) + { + Paging paging = parameters.getPaging(); - siteService.setMembership(siteId, personId, role); - return siteMember; - } + personId = people.validatePerson(personId); - public void removeSiteMember(String personId, String siteId) - { - personId = people.validatePerson(personId); - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new RelationshipResourceNotFoundException(personId, siteId); - } - // set the site id to the short name (to deal with case sensitivity - // issues with using the siteId from the url) - siteId = siteInfo.getShortName(); - - boolean isMember = siteService.isMember(siteId, personId); - if (!isMember) - { - throw new InvalidArgumentException(); - } - String role = siteService.getMembersRole(siteId, personId); - if (role != null) - { - if (role.equals(SiteModel.SITE_MANAGER)) - { - int numAuthorities = siteService.countAuthoritiesWithRole(siteId, SiteModel.SITE_MANAGER); - if (numAuthorities <= 1) - { - throw new InvalidArgumentException("Can't remove last manager of site " + siteId); - } - siteService.removeMembership(siteId, personId); - } - else - { - siteService.removeMembership(siteId, personId); - } - } - else - { - throw new AlfrescoRuntimeException("Unable to determine role of site member"); - } - } - - public SiteMember updateSiteMember(String siteId, SiteMember siteMember) - { - String siteMemberId = siteMember.getPersonId(); - if (siteMemberId == null) - { - throw new InvalidArgumentException("Member id is null"); - } - siteMemberId = people.validatePerson(siteMemberId); - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new EntityNotFoundException(siteId); - } - siteId = siteInfo.getShortName(); - SiteRole siteRole = siteMember.getRole(); - if (siteRole == null) - { - throw new InvalidArgumentException("Must provide a role"); - } - - siteService.setMembership(siteId, siteMember.getPersonId(), siteRole.toString()); - return siteMember; - } - - public CollectionWithPagingInfo getSites(String personId, Parameters parameters) - { - Paging paging = parameters.getPaging(); - - personId = people.validatePerson(personId); - - PagingRequest pagingRequest = Util.getPagingRequest(paging); + PagingRequest pagingRequest = Util.getPagingRequest(paging); final List> sort = new ArrayList>(); sort.add(new Pair(SiteService.SortFields.SiteTitle, Boolean.TRUE)); @@ -431,423 +424,325 @@ public class SitesImpl implements Sites PagingResults results = siteService.listSitesPaged(personId, sort, pagingRequest); List siteMembers = results.getPage(); - List ret = new ArrayList(siteMembers.size()); - for (SiteMembership siteMember : siteMembers) - { - SiteInfo siteInfo = siteMember.getSiteInfo(); - MemberOfSite memberOfSite = new MemberOfSite(siteInfo.getShortName(), siteInfo.getNodeRef(), - siteMember.getRole()); - ret.add(memberOfSite); - } + List ret = new ArrayList(siteMembers.size()); + for(SiteMembership siteMember : siteMembers) + { + SiteInfo siteInfo = siteMember.getSiteInfo(); + MemberOfSite memberOfSite = new MemberOfSite(siteInfo.getShortName(), siteInfo.getNodeRef(), siteMember.getRole()); + ret.add(memberOfSite); + } - return CollectionWithPagingInfo.asPaged(paging, ret, results.hasMoreItems(), null); - } + return CollectionWithPagingInfo.asPaged(paging, ret, results.hasMoreItems(), null); + } + + public SiteContainer getSiteContainer(String siteId, String containerId) + { + // check site and container node validity + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new RelationshipResourceNotFoundException(siteId, containerId); + } + // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url) + siteId = siteInfo.getShortName(); + + NodeRef containerNodeRef = siteService.getContainer(siteId, containerId); + if(containerNodeRef == null) + { + throw new RelationshipResourceNotFoundException(siteId, containerId); + } - public SiteContainer getSiteContainer(String siteId, String containerId) - { - // check site and container node validity - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new RelationshipResourceNotFoundException(siteId, containerId); - } - // set the site id to the short name (to deal with case sensitivity - // issues with using the siteId from the url) - siteId = siteInfo.getShortName(); + // check that the containerId is actually a container for the specified site + SiteInfo testSiteInfo = siteService.getSite(containerNodeRef); + if(testSiteInfo == null) + { + throw new RelationshipResourceNotFoundException(siteId, containerId); + } + else + { + if(!testSiteInfo.getShortName().equals(siteId)) + { + throw new RelationshipResourceNotFoundException(siteId, containerId); + } + } - NodeRef containerNodeRef = siteService.getContainer(siteId, containerId); - if (containerNodeRef == null) - { - throw new RelationshipResourceNotFoundException(siteId, containerId); - } + String folderId = (String)nodeService.getProperty(containerNodeRef, SiteModel.PROP_COMPONENT_ID); - // check that the containerId is actually a container for the specified - // site - SiteInfo testSiteInfo = siteService.getSite(containerNodeRef); - if (testSiteInfo == null) - { - throw new RelationshipResourceNotFoundException(siteId, containerId); - } - else - { - if (!testSiteInfo.getShortName().equals(siteId)) - { - throw new RelationshipResourceNotFoundException(siteId, containerId); - } - } + SiteContainer siteContainer = new SiteContainer(folderId, containerNodeRef); + return siteContainer; + } + + public PagingResults getSiteContainers(String siteId, Paging paging) + { + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new EntityNotFoundException(siteId); + } - String folderId = (String) nodeService.getProperty(containerNodeRef, SiteModel.PROP_COMPONENT_ID); + final PagingResults pagingResults = siteService.listContainers(siteInfo.getShortName(), Util.getPagingRequest(paging)); + List containerFileInfos = pagingResults.getPage(); + final List siteContainers = new ArrayList(containerFileInfos.size()); + for(FileInfo containerFileInfo : containerFileInfos) + { + NodeRef nodeRef = containerFileInfo.getNodeRef(); + String containerId = (String)nodeService.getProperty(nodeRef, SiteModel.PROP_COMPONENT_ID); + SiteContainer siteContainer = new SiteContainer(containerId, nodeRef); + siteContainers.add(siteContainer); + } - SiteContainer siteContainer = new SiteContainer(folderId, containerNodeRef); - return siteContainer; - } + return new PagingResults() + { + @Override + public List getPage() + { + return siteContainers; + } - public PagingResults getSiteContainers(String siteId, Paging paging) - { - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new EntityNotFoundException(siteId); - } + @Override + public boolean hasMoreItems() + { + return pagingResults.hasMoreItems(); + } - final PagingResults pagingResults = siteService.listContainers(siteInfo.getShortName(), - Util.getPagingRequest(paging)); - List containerFileInfos = pagingResults.getPage(); - final List siteContainers = new ArrayList(containerFileInfos.size()); - for (FileInfo containerFileInfo : containerFileInfos) - { - NodeRef nodeRef = containerFileInfo.getNodeRef(); - String containerId = (String) nodeService.getProperty(nodeRef, SiteModel.PROP_COMPONENT_ID); - SiteContainer siteContainer = new SiteContainer(containerId, nodeRef); - siteContainers.add(siteContainer); - } + @Override + public Pair getTotalResultCount() + { + return pagingResults.getTotalResultCount(); + } - return new PagingResults() - { - @Override - public List getPage() - { - return siteContainers; - } + @Override + public String getQueryExecutionId() + { + return null; + } + }; + } - @Override - public boolean hasMoreItems() - { - return pagingResults.hasMoreItems(); - } - - @Override - public Pair getTotalResultCount() - { - return pagingResults.getTotalResultCount(); - } - - @Override - public String getQueryExecutionId() - { - return null; - } - }; - } - - public CollectionWithPagingInfo getSites(final Parameters parameters) - { - final BeanPropertiesFilter filter = parameters.getFilter(); - - Paging paging = parameters.getPaging(); - final PagingRequest pagingRequest = Util.getPagingRequest(paging); - // pagingRequest.setRequestTotalCountMax(requestTotalCountMax) - final List> sortProps = new ArrayList>(); - sortProps.add(new Pair(ContentModel.PROP_NAME, Boolean.TRUE)); - - PagingResults pagingResult = null; - boolean withSiteAdminScope = Boolean.valueOf(parameters.getParameter("admin")); - if (withSiteAdminScope && siteService.isSiteAdmin(AuthenticationUtil.getFullyAuthenticatedUser())) - { - pagingResult = AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork>() - { - public PagingResults doWork() throws Exception - { - return siteService.listSites(null, sortProps, pagingRequest); - } - }, AuthenticationUtil.getSystemUserName()); - } - else - { - pagingResult = siteService.listSites(null, sortProps, pagingRequest); - } + public CollectionWithPagingInfo getSites(final Parameters parameters) + { + final BeanPropertiesFilter filter = parameters.getFilter(); + Paging paging = parameters.getPaging(); + PagingRequest pagingRequest = Util.getPagingRequest(paging); +// pagingRequest.setRequestTotalCountMax(requestTotalCountMax) + List> sortProps = new ArrayList>(); + sortProps.add(new Pair(ContentModel.PROP_NAME, Boolean.TRUE)); + final PagingResults pagingResult = siteService.listSites(null, sortProps, pagingRequest); final List sites = pagingResult.getPage(); int totalItems = pagingResult.getTotalResultCount().getFirst(); final String personId = AuthenticationUtil.getFullyAuthenticatedUser(); - List page = new AbstractList() - { - @Override - public SiteImpl get(int index) - { - SiteInfo siteInfo = sites.get(index); + List page = new AbstractList() + { + @Override + public SiteImpl get(int index) + { + SiteInfo siteInfo = sites.get(index); - SiteRole role = null; - if (filter.isAllowed(Site.ROLE)) - { - String roleStr = siteService.getMembersRole(siteInfo.getShortName(), personId); - role = (roleStr != null ? SiteRole.valueOf(roleStr) : null); - } - return new SiteImpl(siteInfo, role); - } + SiteRole role = null; + if(filter.isAllowed(Site.ROLE)) + { + String roleStr = siteService.getMembersRole(siteInfo.getShortName(), personId); + role = (roleStr != null ? SiteRole.valueOf(roleStr) : null); + } + return new SiteImpl(siteInfo, role); + } - @Override - public int size() - { - return sites.size(); - } - }; + @Override + public int size() + { + return sites.size(); + } + }; return CollectionWithPagingInfo.asPaged(paging, page, pagingResult.hasMoreItems(), totalItems); - } - + } + public FavouriteSite getFavouriteSite(String personId, String siteId) { - personId = people.validatePerson(personId); - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new RelationshipResourceNotFoundException(personId, siteId); - } - // set the site id to the short name (to deal with case sensitivity - // issues with using the siteId from the url) - siteId = siteInfo.getShortName(); - NodeRef nodeRef = siteInfo.getNodeRef(); + personId = people.validatePerson(personId); + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new RelationshipResourceNotFoundException(personId, siteId); + } + // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url) + siteId = siteInfo.getShortName(); + NodeRef nodeRef = siteInfo.getNodeRef(); - if (favouritesService.isFavourite(personId, nodeRef)) - { - SiteRole role = getSiteRole(siteId, personId); - return new FavouriteSite(siteInfo, role); - } - else - { - throw new RelationshipResourceNotFoundException(personId, siteId); - } + if(favouritesService.isFavourite(personId, nodeRef)) + { + SiteRole role = getSiteRole(siteId, personId); + return new FavouriteSite(siteInfo, role); + } + else + { + throw new RelationshipResourceNotFoundException(personId, siteId); + } } - + public void addFavouriteSite(String personId, FavouriteSite favouriteSite) { - personId = people.validatePerson(personId); - String siteId = favouriteSite.getId(); - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new EntityNotFoundException(siteId); - } - // set the site id to the short name (to deal with case sensitivity - // issues with using the siteId from the url) - siteId = siteInfo.getShortName(); + personId = people.validatePerson(personId); + String siteId = favouriteSite.getId(); + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new EntityNotFoundException(siteId); + } + // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url) + siteId = siteInfo.getShortName(); + + StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX); + prefKey.append(siteId); + String value = (String)preferenceService.getPreference(personId, prefKey.toString()); + boolean isFavouriteSite = (value == null ? false : value.equalsIgnoreCase("true")); - StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX); - prefKey.append(siteId); - String value = (String) preferenceService.getPreference(personId, prefKey.toString()); - boolean isFavouriteSite = (value == null ? false : value.equalsIgnoreCase("true")); + if(isFavouriteSite) + { + throw new ConstraintViolatedException("Site " + siteId + " is already a favourite site"); + } - if (isFavouriteSite) - { - throw new ConstraintViolatedException("Site " + siteId + " is already a favourite site"); - } + prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX); + prefKey.append(siteId); - prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX); - prefKey.append(siteId); - - Map preferences = new HashMap(1); - preferences.put(prefKey.toString(), Boolean.TRUE); - preferenceService.setPreferences(personId, preferences); + Map preferences = new HashMap(1); + preferences.put(prefKey.toString(), Boolean.TRUE); + preferenceService.setPreferences(personId, preferences); } - + public void removeFavouriteSite(String personId, String siteId) { - personId = people.validatePerson(personId); - SiteInfo siteInfo = validateSite(siteId); - if (siteInfo == null) - { - // site does not exist - throw new RelationshipResourceNotFoundException(personId, siteId); - } - siteId = siteInfo.getShortName(); + personId = people.validatePerson(personId); + SiteInfo siteInfo = validateSite(siteId); + if(siteInfo == null) + { + // site does not exist + throw new RelationshipResourceNotFoundException(personId, siteId); + } + siteId = siteInfo.getShortName(); - StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX); - prefKey.append(siteId); - String value = (String) preferenceService.getPreference(personId, prefKey.toString()); - boolean isFavouriteSite = (value == null ? false : value.equalsIgnoreCase("true")); + StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX); + prefKey.append(siteId); + String value = (String)preferenceService.getPreference(personId, prefKey.toString()); + boolean isFavouriteSite = (value == null ? false : value.equalsIgnoreCase("true")); + + if(!isFavouriteSite) + { + throw new NotFoundException("Site " + siteId + " is not a favourite site"); + } - if (!isFavouriteSite) - { - throw new NotFoundException("Site " + siteId + " is not a favourite site"); - } - - preferenceService.clearPreferences(personId, prefKey.toString()); + preferenceService.clearPreferences(personId, prefKey.toString()); } - + private PagingResults getFavouriteSites(String userName, PagingRequest pagingRequest) { - final Collator collator = Collator.getInstance(); + final Collator collator = Collator.getInstance(); final Set sortedFavouriteSites = new TreeSet(new Comparator() { - @Override - public int compare(SiteInfo o1, SiteInfo o2) - { - return collator.compare(o1.getTitle(), o2.getTitle()); - } - }); + @Override + public int compare(SiteInfo o1, SiteInfo o2) + { + return collator.compare(o1.getTitle(), o2.getTitle()); + } + }); Map prefs = preferenceService.getPreferences(userName, FAVOURITE_SITES_PREFIX); - for (Entry entry : prefs.entrySet()) + for(Entry entry : prefs.entrySet()) { - boolean isFavourite = false; - Serializable s = entry.getValue(); - if (s instanceof Boolean) - { - isFavourite = (Boolean) s; - } - if (isFavourite) - { - String siteShortName = entry.getKey().substring(FAVOURITE_SITES_PREFIX_LENGTH) - .replace(".favourited", ""); - SiteInfo siteInfo = siteService.getSite(siteShortName); - if (siteInfo != null) - { - sortedFavouriteSites.add(siteInfo); - } - } + boolean isFavourite = false; + Serializable s = entry.getValue(); + if(s instanceof Boolean) + { + isFavourite = (Boolean)s; + } + if(isFavourite) + { + String siteShortName = entry.getKey().substring(FAVOURITE_SITES_PREFIX_LENGTH).replace(".favourited", ""); + SiteInfo siteInfo = siteService.getSite(siteShortName); + if(siteInfo != null) + { + sortedFavouriteSites.add(siteInfo); + } + } } int totalSize = sortedFavouriteSites.size(); final PageDetails pageDetails = PageDetails.getPageDetails(pagingRequest, totalSize); - final List page = new ArrayList(pageDetails.getPageSize()); - Iterator it = sortedFavouriteSites.iterator(); - for (int counter = 0; counter < pageDetails.getEnd() && it.hasNext(); counter++) + final List page = new ArrayList(pageDetails.getPageSize()); + Iterator it = sortedFavouriteSites.iterator(); + for(int counter = 0; counter < pageDetails.getEnd() && it.hasNext(); counter++) { - SiteInfo favouriteSite = it.next(); + SiteInfo favouriteSite = it.next(); - if (counter < pageDetails.getSkipCount()) - { - continue; - } + if(counter < pageDetails.getSkipCount()) + { + continue; + } + + if(counter > pageDetails.getEnd() - 1) + { + break; + } - if (counter > pageDetails.getEnd() - 1) - { - break; - } - - page.add(favouriteSite); + page.add(favouriteSite); } return new PagingResults() { - @Override - public List getPage() - { - return page; - } + @Override + public List getPage() + { + return page; + } - @Override - public boolean hasMoreItems() - { - return pageDetails.hasMoreItems(); - } + @Override + public boolean hasMoreItems() + { + return pageDetails.hasMoreItems(); + } - @Override - public Pair getTotalResultCount() - { - Integer total = Integer.valueOf(sortedFavouriteSites.size()); - return new Pair(total, total); - } + @Override + public Pair getTotalResultCount() + { + Integer total = Integer.valueOf(sortedFavouriteSites.size()); + return new Pair(total, total); + } - @Override - public String getQueryExecutionId() - { - return null; - } + @Override + public String getQueryExecutionId() + { + return null; + } }; } public CollectionWithPagingInfo getFavouriteSites(String personId, Parameters parameters) { - personId = people.validatePerson(personId); + personId = people.validatePerson(personId); - Paging paging = parameters.getPaging(); - BeanPropertiesFilter filter = parameters.getFilter(); + Paging paging = parameters.getPaging(); + BeanPropertiesFilter filter = parameters.getFilter(); - PagingResults favouriteSites = getFavouriteSites(personId, Util.getPagingRequest(paging)); - List favourites = new ArrayList(favouriteSites.getPage().size()); - for (SiteInfo favouriteSite : favouriteSites.getPage()) - { - SiteRole role = null; - if (filter.isAllowed(Site.ROLE)) - { - role = getSiteRole(favouriteSite.getShortName(), personId); - } - FavouriteSite favourite = new FavouriteSite(favouriteSite, role); - favourites.add(favourite); - } + PagingResults favouriteSites = getFavouriteSites(personId, Util.getPagingRequest(paging)); + List favourites = new ArrayList(favouriteSites.getPage().size()); + for(SiteInfo favouriteSite : favouriteSites.getPage()) + { + SiteRole role = null; + if(filter.isAllowed(Site.ROLE)) + { + role = getSiteRole(favouriteSite.getShortName(), personId); + } + FavouriteSite favourite = new FavouriteSite(favouriteSite, role); + favourites.add(favourite); + } - return CollectionWithPagingInfo.asPaged(paging, favourites, favouriteSites.hasMoreItems(), favouriteSites - .getTotalResultCount().getFirst()); - } - - @Override - public SiteImpl updateSite(final String siteShortName, final SiteImpl siteImpl) - { - if (siteService.isSiteAdmin(AuthenticationUtil.getFullyAuthenticatedUser())) - { - return AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork() - { - public SiteImpl doWork() throws Exception - { - // We have to wrap the whole method not just - // siteService.updateSite, as validateSite - // won't give us the private sites for site-admins - return updateSiteImpl(siteShortName, siteImpl); - } - }, AuthenticationUtil.getSystemUserName()); - } - else - { - return updateSiteImpl(siteShortName, siteImpl); - } - } - - private SiteImpl updateSiteImpl(String siteShortName, SiteImpl siteImpl) - { - SiteInfo siteInfo = validateSite(siteShortName); - if (siteInfo == null) - { - // site does not exist - throw new EntityNotFoundException(siteShortName); - } - // Set the site's visibility - SiteVisibility siteVisibility = siteImpl.getVisibility(); - if (siteVisibility == null) - { - throw new InvalidArgumentException("Must provide visibility"); - } - siteInfo.setVisibility(siteImpl.getVisibility()); - siteService.updateSite(siteInfo); - - return siteImpl; - } - - @Override - public void deleteSite(final String siteShortName) - { - if (siteService.isSiteAdmin(AuthenticationUtil.getFullyAuthenticatedUser())) - { - AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork() - { - public Void doWork() throws Exception - { - deleteSiteImpl(siteShortName); - return null; - } - }, AuthenticationUtil.getSystemUserName()); - } - else - { - deleteSiteImpl(siteShortName); - } - } - - private void deleteSiteImpl(String siteShortName) - { - SiteInfo siteInfo = validateSite(siteShortName); - if (siteInfo == null) - { - // site does not exist - throw new EntityNotFoundException(siteShortName); - } - siteService.deleteSite(siteInfo.getShortName()); + return CollectionWithPagingInfo.asPaged(paging, favourites, favouriteSites.hasMoreItems(), favouriteSites.getTotalResultCount().getFirst()); } } diff --git a/source/java/org/alfresco/rest/api/sites/SiteEntityResource.java b/source/java/org/alfresco/rest/api/sites/SiteEntityResource.java index 48dc7bbd13..a5f3163f0d 100644 --- a/source/java/org/alfresco/rest/api/sites/SiteEntityResource.java +++ b/source/java/org/alfresco/rest/api/sites/SiteEntityResource.java @@ -16,15 +16,11 @@ * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ - package org.alfresco.rest.api.sites; import org.alfresco.rest.api.Sites; import org.alfresco.rest.api.model.Site; -import org.alfresco.rest.api.model.SiteImpl; import org.alfresco.rest.framework.WebApiDescription; -import org.alfresco.rest.framework.WebApiParam; -import org.alfresco.rest.framework.core.ResourceParameter.KIND; import org.alfresco.rest.framework.resource.EntityResource; import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction; import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; @@ -34,22 +30,21 @@ import org.springframework.beans.factory.InitializingBean; /** * An implementation of an Entity Resource for a Site - * + * * @author Gethin James * @author steveglover */ -@EntityResource(name = "sites", title = "Sites") -public class SiteEntityResource implements EntityResourceAction.Read, EntityResourceAction.ReadById, - EntityResourceAction.Delete, EntityResourceAction.Update, InitializingBean +@EntityResource(name="sites", title = "Sites") +public class SiteEntityResource implements EntityResourceAction.Read, EntityResourceAction.ReadById, InitializingBean { private Sites sites; - public void setSites(Sites sites) - { - this.sites = sites; - } + public void setSites(Sites sites) + { + this.sites = sites; + } - @Override + @Override public void afterPropertiesSet() { ParameterCheck.mandatory("sites", this.sites); @@ -61,44 +56,21 @@ public class SiteEntityResource implements EntityResourceAction.Read, Enti * @see org.alfresco.rest.framework.resource.actions.interfaces.CollectionResourceAction.Get#get() */ @Override - @WebApiDescription(title = "A paged list of visible sites in the network.", description = "A site is visible if it is public or if the person is a member") - @WebApiParam(name = "admin", title = "Admin", description = "An optional filter that when is set to true and the user has ‘site-admin’ permission, a paged list of all sites in the network will be returned.", kind = KIND.QUERY_STRING) + @WebApiDescription(title="A paged list of visible sites in the network.", description="A site is visible if it is public or if the person is a member") public CollectionWithPagingInfo readAll(Parameters parameters) - { + { return sites.getSites(parameters); } - + /** * Returns information regarding the site 'siteId'. + * */ @Override - @WebApiDescription(title = "Returns site information for site siteId.") + @WebApiDescription(title="Returns site information for site siteId.") public Site readById(String siteId, Parameters parameters) { return sites.getSite(siteId); } - /** - * PUT sites/{@literal } - *

- * Updates the visibility of the site. - */ - @Override - @WebApiDescription(title = "Updates the visibility of the site.") - public SiteImpl update(String siteId, SiteImpl entity, Parameters parameters) - { - return sites.updateSite(siteId, entity); - } - - /** - * Delete sites/{@literal } - *

- * Deletes the site. - */ - @Override - @WebApiDescription(title = "Deletes the site.") - public void delete(String siteId, Parameters parameters) - { - sites.deleteSite(siteId); - } } diff --git a/source/test-java/org/alfresco/rest/api/tests/TestSites.java b/source/test-java/org/alfresco/rest/api/tests/TestSites.java index 4577204f73..f495aa4514 100644 --- a/source/test-java/org/alfresco/rest/api/tests/TestSites.java +++ b/source/test-java/org/alfresco/rest/api/tests/TestSites.java @@ -131,8 +131,7 @@ public class TestSites extends EnterpriseTestApi } catch(PublicApiException e) { - // ACE-511: as we added Delete method, the status code needed to be changed from 405 (Method Not Allowed) to 404. - assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode()); + assertEquals(HttpStatus.SC_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode()); } // invalid site