Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud)

64426: Merged WAT1 (4.3/Cloud) to HEAD-BUG-FIX (4.3/Cloud)
      62536: Reverted Sites Public REST API changes, committed in r61735 and r62502. Also updated CloudSiteServiceImpl overlay to override isSiteAdmin method.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@64572 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Alan Davis
2014-03-15 01:40:20 +00:00
parent 25895187d8
commit b0add3b79a
4 changed files with 549 additions and 705 deletions

View File

@@ -16,7 +16,6 @@
* You should have received a copy of the GNU Lesser General Public License * You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.alfresco.rest.api; package org.alfresco.rest.api;
import org.alfresco.query.PagingResults; 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.MemberOfSite;
import org.alfresco.rest.api.model.Site; import org.alfresco.rest.api.model.Site;
import org.alfresco.rest.api.model.SiteContainer; 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.api.model.SiteMember;
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
import org.alfresco.rest.framework.resource.parameters.Paging; import org.alfresco.rest.framework.resource.parameters.Paging;
@@ -36,17 +34,10 @@ import org.alfresco.service.cmr.site.SiteRole;
public interface Sites public interface Sites
{ {
SiteInfo validateSite(String siteShortName); SiteInfo validateSite(String siteShortName);
SiteInfo validateSite(NodeRef nodeRef); SiteInfo validateSite(NodeRef nodeRef);
CollectionWithPagingInfo<SiteMember> getSiteMembers(String siteShortName, Parameters parameters); CollectionWithPagingInfo<SiteMember> getSiteMembers(String siteShortName, Parameters parameters);
Site getSite(String siteId); Site getSite(String siteId);
SiteImpl updateSite(String siteShortName, SiteImpl site);
void deleteSite(String siteShortName);
/** /**
* people/<personId>/sites/<siteId> * people/<personId>/sites/<siteId>
* *
@@ -55,32 +46,19 @@ public interface Sites
* @return * @return
*/ */
MemberOfSite getMemberOfSite(String personId, String siteShortName); MemberOfSite getMemberOfSite(String personId, String siteShortName);
SiteMember getSiteMember(String personId, String siteShortName); SiteMember getSiteMember(String personId, String siteShortName);
SiteMember addSiteMember(String siteShortName, SiteMember siteMember); SiteMember addSiteMember(String siteShortName, SiteMember siteMember);
void removeSiteMember(String personId, String siteId); void removeSiteMember(String personId, String siteId);
SiteMember updateSiteMember(String siteShortName, SiteMember siteMember); SiteMember updateSiteMember(String siteShortName, SiteMember siteMember);
CollectionWithPagingInfo<MemberOfSite> getSites(String personId, Parameters parameters); CollectionWithPagingInfo<MemberOfSite> getSites(String personId, Parameters parameters);
SiteContainer getSiteContainer(String siteShortName, String containerId); SiteContainer getSiteContainer(String siteShortName, String containerId);
PagingResults<SiteContainer> getSiteContainers(String siteShortName, Paging paging); PagingResults<SiteContainer> getSiteContainers(String siteShortName, Paging paging);
CollectionWithPagingInfo<Site> getSites(Parameters parameters); CollectionWithPagingInfo<Site> getSites(Parameters parameters);
FavouriteSite getFavouriteSite(String personId, String siteShortName); FavouriteSite getFavouriteSite(String personId, String siteShortName);
void addFavouriteSite(String personId, FavouriteSite favouriteSite); void addFavouriteSite(String personId, FavouriteSite favouriteSite);
void removeFavouriteSite(String personId, String siteId); void removeFavouriteSite(String personId, String siteId);
CollectionWithPagingInfo<FavouriteSite> getFavouriteSites(String personId, Parameters parameters); CollectionWithPagingInfo<FavouriteSite> getFavouriteSites(String personId, Parameters parameters);
SiteRole getSiteRole(String siteId); SiteRole getSiteRole(String siteId);
SiteRole getSiteRole(String siteId, String personId); SiteRole getSiteRole(String siteId, String personId);
} }

View File

@@ -34,7 +34,6 @@
* You should have received a copy of the GNU Lesser General Public License * You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.alfresco.rest.api.impl; package org.alfresco.rest.api.impl;
import java.io.Serializable; 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.SiteInfo;
import org.alfresco.service.cmr.site.SiteRole; import org.alfresco.service.cmr.site.SiteRole;
import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.cmr.site.SiteVisibility;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.util.Pair; import org.alfresco.util.Pair;
@@ -148,17 +146,17 @@ public class SitesImpl implements Sites
{ {
SiteInfo siteInfo = null; SiteInfo siteInfo = null;
if (guid == null) if(guid == null)
{ {
throw new InvalidArgumentException("guid is null"); throw new InvalidArgumentException("guid is null");
} }
nodes.validateNode(guid); nodes.validateNode(guid);
QName type = nodeService.getType(guid); QName type = nodeService.getType(guid);
boolean isSiteNodeRef = dictionaryService.isSubClass(type, SiteModel.TYPE_SITE); boolean isSiteNodeRef = dictionaryService.isSubClass(type, SiteModel.TYPE_SITE);
if (isSiteNodeRef) if(isSiteNodeRef)
{ {
siteInfo = siteService.getSite(guid); siteInfo = siteService.getSite(guid);
if (siteInfo == null) if(siteInfo == null)
{ {
// not a site // not a site
throw new InvalidArgumentException(guid.getId() + " is not a site"); throw new InvalidArgumentException(guid.getId() + " is not a site");
@@ -175,7 +173,7 @@ public class SitesImpl implements Sites
public SiteInfo validateSite(String siteId) public SiteInfo validateSite(String siteId)
{ {
if (siteId == null) if(siteId == null)
{ {
throw new InvalidArgumentException("siteId is null"); throw new InvalidArgumentException("siteId is null");
} }
@@ -186,13 +184,12 @@ public class SitesImpl implements Sites
public CollectionWithPagingInfo<SiteMember> getSiteMembers(String siteId, Parameters parameters) public CollectionWithPagingInfo<SiteMember> getSiteMembers(String siteId, Parameters parameters)
{ {
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new EntityNotFoundException(siteId); throw new EntityNotFoundException(siteId);
} }
// set the site id to the short name (to deal with case sensitivity // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
// issues with using the siteId from the url)
siteId = siteInfo.getShortName(); siteId = siteInfo.getShortName();
Paging paging = parameters.getPaging(); Paging paging = parameters.getPaging();
@@ -208,7 +205,7 @@ public class SitesImpl implements Sites
List<SiteMembership> siteMembers = pagedResults.getPage(); List<SiteMembership> siteMembers = pagedResults.getPage();
List<SiteMember> ret = new ArrayList<SiteMember>(siteMembers.size()); List<SiteMember> ret = new ArrayList<SiteMember>(siteMembers.size());
for (SiteMembership siteMembership : siteMembers) for(SiteMembership siteMembership : siteMembers)
{ {
SiteMember siteMember = new SiteMember(siteMembership.getPersonId(), siteMembership.getRole()); SiteMember siteMember = new SiteMember(siteMembership.getPersonId(), siteMembership.getRole());
ret.add(siteMember); ret.add(siteMember);
@@ -238,16 +235,15 @@ public class SitesImpl implements Sites
public Site getSite(String siteId, boolean includeRole) public Site getSite(String siteId, boolean includeRole)
{ {
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new EntityNotFoundException(siteId); throw new EntityNotFoundException(siteId);
} }
// set the site id to the short name (to deal with case sensitivity // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
// issues with using the siteId from the url)
siteId = siteInfo.getShortName(); siteId = siteInfo.getShortName();
SiteRole role = null; SiteRole role = null;
if (includeRole) if(includeRole)
{ {
role = getSiteRole(siteId); role = getSiteRole(siteId);
} }
@@ -267,17 +263,16 @@ public class SitesImpl implements Sites
personId = people.validatePerson(personId); personId = people.validatePerson(personId);
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new RelationshipResourceNotFoundException(personId, siteId); throw new RelationshipResourceNotFoundException(personId, siteId);
} }
// set the site id to the short name (to deal with case sensitivity // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
// issues with using the siteId from the url)
siteId = siteInfo.getShortName(); siteId = siteInfo.getShortName();
String roleStr = siteService.getMembersRole(siteInfo.getShortName(), personId); String roleStr = siteService.getMembersRole(siteInfo.getShortName(), personId);
if (roleStr != null) if(roleStr != null)
{ {
SiteRole role = SiteRole.valueOf(roleStr); SiteRole role = SiteRole.valueOf(roleStr);
SiteImpl site = new SiteImpl(siteInfo, role); SiteImpl site = new SiteImpl(siteInfo, role);
@@ -297,7 +292,7 @@ public class SitesImpl implements Sites
personId = people.validatePerson(personId); personId = people.validatePerson(personId);
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new RelationshipResourceNotFoundException(personId, siteId); throw new RelationshipResourceNotFoundException(personId, siteId);
@@ -305,7 +300,7 @@ public class SitesImpl implements Sites
siteId = siteInfo.getShortName(); siteId = siteInfo.getShortName();
String role = siteService.getMembersRole(siteId, personId); String role = siteService.getMembersRole(siteId, personId);
if (role != null) if(role != null)
{ {
siteMember = new SiteMember(personId, SiteRole.valueOf(role)); siteMember = new SiteMember(personId, SiteRole.valueOf(role));
} }
@@ -321,28 +316,27 @@ public class SitesImpl implements Sites
{ {
String personId = people.validatePerson(siteMember.getPersonId()); String personId = people.validatePerson(siteMember.getPersonId());
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new EntityNotFoundException(siteId); throw new EntityNotFoundException(siteId);
} }
// set the site id to the short name (to deal with case sensitivity // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
// issues with using the siteId from the url)
siteId = siteInfo.getShortName(); siteId = siteInfo.getShortName();
SiteRole siteRole = siteMember.getRole(); SiteRole siteRole = siteMember.getRole();
if (siteRole == null) if(siteRole == null)
{ {
throw new InvalidArgumentException("Must provide a role"); throw new InvalidArgumentException("Must provide a role");
} }
String role = siteRole.name(); String role = siteRole.name();
if (siteService.isMember(siteId, personId)) if(siteService.isMember(siteId, personId))
{ {
throw new ConstraintViolatedException(personId + " is already a member of site " + siteId); throw new ConstraintViolatedException(personId + " is already a member of site " + siteId);
} }
if (!siteService.canAddMember(siteId, personId, role)) if(!siteService.canAddMember(siteId, personId, role))
{ {
throw new PermissionDeniedException(); throw new PermissionDeniedException();
} }
@@ -355,27 +349,26 @@ public class SitesImpl implements Sites
{ {
personId = people.validatePerson(personId); personId = people.validatePerson(personId);
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new RelationshipResourceNotFoundException(personId, siteId); throw new RelationshipResourceNotFoundException(personId, siteId);
} }
// set the site id to the short name (to deal with case sensitivity // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
// issues with using the siteId from the url)
siteId = siteInfo.getShortName(); siteId = siteInfo.getShortName();
boolean isMember = siteService.isMember(siteId, personId); boolean isMember = siteService.isMember(siteId, personId);
if (!isMember) if(!isMember)
{ {
throw new InvalidArgumentException(); throw new InvalidArgumentException();
} }
String role = siteService.getMembersRole(siteId, personId); String role = siteService.getMembersRole(siteId, personId);
if (role != null) if(role != null)
{ {
if (role.equals(SiteModel.SITE_MANAGER)) if(role.equals(SiteModel.SITE_MANAGER))
{ {
int numAuthorities = siteService.countAuthoritiesWithRole(siteId, SiteModel.SITE_MANAGER); int numAuthorities = siteService.countAuthoritiesWithRole(siteId, SiteModel.SITE_MANAGER);
if (numAuthorities <= 1) if(numAuthorities <= 1)
{ {
throw new InvalidArgumentException("Can't remove last manager of site " + siteId); throw new InvalidArgumentException("Can't remove last manager of site " + siteId);
} }
@@ -395,20 +388,20 @@ public class SitesImpl implements Sites
public SiteMember updateSiteMember(String siteId, SiteMember siteMember) public SiteMember updateSiteMember(String siteId, SiteMember siteMember)
{ {
String siteMemberId = siteMember.getPersonId(); String siteMemberId = siteMember.getPersonId();
if (siteMemberId == null) if(siteMemberId == null)
{ {
throw new InvalidArgumentException("Member id is null"); throw new InvalidArgumentException("Member id is null");
} }
siteMemberId = people.validatePerson(siteMemberId); siteMemberId = people.validatePerson(siteMemberId);
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new EntityNotFoundException(siteId); throw new EntityNotFoundException(siteId);
} }
siteId = siteInfo.getShortName(); siteId = siteInfo.getShortName();
SiteRole siteRole = siteMember.getRole(); SiteRole siteRole = siteMember.getRole();
if (siteRole == null) if(siteRole == null)
{ {
throw new InvalidArgumentException("Must provide a role"); throw new InvalidArgumentException("Must provide a role");
} }
@@ -432,11 +425,10 @@ public class SitesImpl implements Sites
PagingResults<SiteMembership> results = siteService.listSitesPaged(personId, sort, pagingRequest); PagingResults<SiteMembership> results = siteService.listSitesPaged(personId, sort, pagingRequest);
List<SiteMembership> siteMembers = results.getPage(); List<SiteMembership> siteMembers = results.getPage();
List<MemberOfSite> ret = new ArrayList<MemberOfSite>(siteMembers.size()); List<MemberOfSite> ret = new ArrayList<MemberOfSite>(siteMembers.size());
for (SiteMembership siteMember : siteMembers) for(SiteMembership siteMember : siteMembers)
{ {
SiteInfo siteInfo = siteMember.getSiteInfo(); SiteInfo siteInfo = siteMember.getSiteInfo();
MemberOfSite memberOfSite = new MemberOfSite(siteInfo.getShortName(), siteInfo.getNodeRef(), MemberOfSite memberOfSite = new MemberOfSite(siteInfo.getShortName(), siteInfo.getNodeRef(), siteMember.getRole());
siteMember.getRole());
ret.add(memberOfSite); ret.add(memberOfSite);
} }
@@ -447,37 +439,35 @@ public class SitesImpl implements Sites
{ {
// check site and container node validity // check site and container node validity
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new RelationshipResourceNotFoundException(siteId, containerId); throw new RelationshipResourceNotFoundException(siteId, containerId);
} }
// set the site id to the short name (to deal with case sensitivity // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
// issues with using the siteId from the url)
siteId = siteInfo.getShortName(); siteId = siteInfo.getShortName();
NodeRef containerNodeRef = siteService.getContainer(siteId, containerId); NodeRef containerNodeRef = siteService.getContainer(siteId, containerId);
if (containerNodeRef == null) if(containerNodeRef == null)
{ {
throw new RelationshipResourceNotFoundException(siteId, containerId); throw new RelationshipResourceNotFoundException(siteId, containerId);
} }
// check that the containerId is actually a container for the specified // check that the containerId is actually a container for the specified site
// site
SiteInfo testSiteInfo = siteService.getSite(containerNodeRef); SiteInfo testSiteInfo = siteService.getSite(containerNodeRef);
if (testSiteInfo == null) if(testSiteInfo == null)
{ {
throw new RelationshipResourceNotFoundException(siteId, containerId); throw new RelationshipResourceNotFoundException(siteId, containerId);
} }
else else
{ {
if (!testSiteInfo.getShortName().equals(siteId)) if(!testSiteInfo.getShortName().equals(siteId))
{ {
throw new RelationshipResourceNotFoundException(siteId, containerId); throw new RelationshipResourceNotFoundException(siteId, containerId);
} }
} }
String folderId = (String) nodeService.getProperty(containerNodeRef, SiteModel.PROP_COMPONENT_ID); String folderId = (String)nodeService.getProperty(containerNodeRef, SiteModel.PROP_COMPONENT_ID);
SiteContainer siteContainer = new SiteContainer(folderId, containerNodeRef); SiteContainer siteContainer = new SiteContainer(folderId, containerNodeRef);
return siteContainer; return siteContainer;
@@ -486,20 +476,19 @@ public class SitesImpl implements Sites
public PagingResults<SiteContainer> getSiteContainers(String siteId, Paging paging) public PagingResults<SiteContainer> getSiteContainers(String siteId, Paging paging)
{ {
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new EntityNotFoundException(siteId); throw new EntityNotFoundException(siteId);
} }
final PagingResults<FileInfo> pagingResults = siteService.listContainers(siteInfo.getShortName(), final PagingResults<FileInfo> pagingResults = siteService.listContainers(siteInfo.getShortName(), Util.getPagingRequest(paging));
Util.getPagingRequest(paging));
List<FileInfo> containerFileInfos = pagingResults.getPage(); List<FileInfo> containerFileInfos = pagingResults.getPage();
final List<SiteContainer> siteContainers = new ArrayList<SiteContainer>(containerFileInfos.size()); final List<SiteContainer> siteContainers = new ArrayList<SiteContainer>(containerFileInfos.size());
for (FileInfo containerFileInfo : containerFileInfos) for(FileInfo containerFileInfo : containerFileInfos)
{ {
NodeRef nodeRef = containerFileInfo.getNodeRef(); NodeRef nodeRef = containerFileInfo.getNodeRef();
String containerId = (String) nodeService.getProperty(nodeRef, SiteModel.PROP_COMPONENT_ID); String containerId = (String)nodeService.getProperty(nodeRef, SiteModel.PROP_COMPONENT_ID);
SiteContainer siteContainer = new SiteContainer(containerId, nodeRef); SiteContainer siteContainer = new SiteContainer(containerId, nodeRef);
siteContainers.add(siteContainer); siteContainers.add(siteContainer);
} }
@@ -537,28 +526,11 @@ public class SitesImpl implements Sites
final BeanPropertiesFilter filter = parameters.getFilter(); final BeanPropertiesFilter filter = parameters.getFilter();
Paging paging = parameters.getPaging(); Paging paging = parameters.getPaging();
final PagingRequest pagingRequest = Util.getPagingRequest(paging); PagingRequest pagingRequest = Util.getPagingRequest(paging);
// pagingRequest.setRequestTotalCountMax(requestTotalCountMax) // pagingRequest.setRequestTotalCountMax(requestTotalCountMax)
final List<Pair<QName, Boolean>> sortProps = new ArrayList<Pair<QName, Boolean>>(); List<Pair<QName, Boolean>> sortProps = new ArrayList<Pair<QName, Boolean>>();
sortProps.add(new Pair<QName, Boolean>(ContentModel.PROP_NAME, Boolean.TRUE)); sortProps.add(new Pair<QName, Boolean>(ContentModel.PROP_NAME, Boolean.TRUE));
final PagingResults<SiteInfo> pagingResult = siteService.listSites(null, sortProps, pagingRequest);
PagingResults<SiteInfo> pagingResult = null;
boolean withSiteAdminScope = Boolean.valueOf(parameters.getParameter("admin"));
if (withSiteAdminScope && siteService.isSiteAdmin(AuthenticationUtil.getFullyAuthenticatedUser()))
{
pagingResult = AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<PagingResults<SiteInfo>>()
{
public PagingResults<SiteInfo> doWork() throws Exception
{
return siteService.listSites(null, sortProps, pagingRequest);
}
}, AuthenticationUtil.getSystemUserName());
}
else
{
pagingResult = siteService.listSites(null, sortProps, pagingRequest);
}
final List<SiteInfo> sites = pagingResult.getPage(); final List<SiteInfo> sites = pagingResult.getPage();
int totalItems = pagingResult.getTotalResultCount().getFirst(); int totalItems = pagingResult.getTotalResultCount().getFirst();
final String personId = AuthenticationUtil.getFullyAuthenticatedUser(); final String personId = AuthenticationUtil.getFullyAuthenticatedUser();
@@ -570,7 +542,7 @@ public class SitesImpl implements Sites
SiteInfo siteInfo = sites.get(index); SiteInfo siteInfo = sites.get(index);
SiteRole role = null; SiteRole role = null;
if (filter.isAllowed(Site.ROLE)) if(filter.isAllowed(Site.ROLE))
{ {
String roleStr = siteService.getMembersRole(siteInfo.getShortName(), personId); String roleStr = siteService.getMembersRole(siteInfo.getShortName(), personId);
role = (roleStr != null ? SiteRole.valueOf(roleStr) : null); role = (roleStr != null ? SiteRole.valueOf(roleStr) : null);
@@ -592,17 +564,16 @@ public class SitesImpl implements Sites
{ {
personId = people.validatePerson(personId); personId = people.validatePerson(personId);
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new RelationshipResourceNotFoundException(personId, siteId); throw new RelationshipResourceNotFoundException(personId, siteId);
} }
// set the site id to the short name (to deal with case sensitivity // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
// issues with using the siteId from the url)
siteId = siteInfo.getShortName(); siteId = siteInfo.getShortName();
NodeRef nodeRef = siteInfo.getNodeRef(); NodeRef nodeRef = siteInfo.getNodeRef();
if (favouritesService.isFavourite(personId, nodeRef)) if(favouritesService.isFavourite(personId, nodeRef))
{ {
SiteRole role = getSiteRole(siteId, personId); SiteRole role = getSiteRole(siteId, personId);
return new FavouriteSite(siteInfo, role); return new FavouriteSite(siteInfo, role);
@@ -618,21 +589,20 @@ public class SitesImpl implements Sites
personId = people.validatePerson(personId); personId = people.validatePerson(personId);
String siteId = favouriteSite.getId(); String siteId = favouriteSite.getId();
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new EntityNotFoundException(siteId); throw new EntityNotFoundException(siteId);
} }
// set the site id to the short name (to deal with case sensitivity // set the site id to the short name (to deal with case sensitivity issues with using the siteId from the url)
// issues with using the siteId from the url)
siteId = siteInfo.getShortName(); siteId = siteInfo.getShortName();
StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX); StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX);
prefKey.append(siteId); prefKey.append(siteId);
String value = (String) preferenceService.getPreference(personId, prefKey.toString()); String value = (String)preferenceService.getPreference(personId, prefKey.toString());
boolean isFavouriteSite = (value == null ? false : value.equalsIgnoreCase("true")); boolean isFavouriteSite = (value == null ? false : value.equalsIgnoreCase("true"));
if (isFavouriteSite) if(isFavouriteSite)
{ {
throw new ConstraintViolatedException("Site " + siteId + " is already a favourite site"); throw new ConstraintViolatedException("Site " + siteId + " is already a favourite site");
} }
@@ -649,7 +619,7 @@ public class SitesImpl implements Sites
{ {
personId = people.validatePerson(personId); personId = people.validatePerson(personId);
SiteInfo siteInfo = validateSite(siteId); SiteInfo siteInfo = validateSite(siteId);
if (siteInfo == null) if(siteInfo == null)
{ {
// site does not exist // site does not exist
throw new RelationshipResourceNotFoundException(personId, siteId); throw new RelationshipResourceNotFoundException(personId, siteId);
@@ -658,10 +628,10 @@ public class SitesImpl implements Sites
StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX); StringBuilder prefKey = new StringBuilder(FAVOURITE_SITES_PREFIX);
prefKey.append(siteId); prefKey.append(siteId);
String value = (String) preferenceService.getPreference(personId, prefKey.toString()); String value = (String)preferenceService.getPreference(personId, prefKey.toString());
boolean isFavouriteSite = (value == null ? false : value.equalsIgnoreCase("true")); boolean isFavouriteSite = (value == null ? false : value.equalsIgnoreCase("true"));
if (!isFavouriteSite) if(!isFavouriteSite)
{ {
throw new NotFoundException("Site " + siteId + " is not a favourite site"); throw new NotFoundException("Site " + siteId + " is not a favourite site");
} }
@@ -683,20 +653,19 @@ public class SitesImpl implements Sites
}); });
Map<String, Serializable> prefs = preferenceService.getPreferences(userName, FAVOURITE_SITES_PREFIX); Map<String, Serializable> prefs = preferenceService.getPreferences(userName, FAVOURITE_SITES_PREFIX);
for (Entry<String, Serializable> entry : prefs.entrySet()) for(Entry<String, Serializable> entry : prefs.entrySet())
{ {
boolean isFavourite = false; boolean isFavourite = false;
Serializable s = entry.getValue(); Serializable s = entry.getValue();
if (s instanceof Boolean) if(s instanceof Boolean)
{ {
isFavourite = (Boolean) s; isFavourite = (Boolean)s;
} }
if (isFavourite) if(isFavourite)
{ {
String siteShortName = entry.getKey().substring(FAVOURITE_SITES_PREFIX_LENGTH) String siteShortName = entry.getKey().substring(FAVOURITE_SITES_PREFIX_LENGTH).replace(".favourited", "");
.replace(".favourited", "");
SiteInfo siteInfo = siteService.getSite(siteShortName); SiteInfo siteInfo = siteService.getSite(siteShortName);
if (siteInfo != null) if(siteInfo != null)
{ {
sortedFavouriteSites.add(siteInfo); sortedFavouriteSites.add(siteInfo);
} }
@@ -708,16 +677,16 @@ public class SitesImpl implements Sites
final List<SiteInfo> page = new ArrayList<SiteInfo>(pageDetails.getPageSize()); final List<SiteInfo> page = new ArrayList<SiteInfo>(pageDetails.getPageSize());
Iterator<SiteInfo> it = sortedFavouriteSites.iterator(); Iterator<SiteInfo> it = sortedFavouriteSites.iterator();
for (int counter = 0; counter < pageDetails.getEnd() && it.hasNext(); counter++) for(int counter = 0; counter < pageDetails.getEnd() && it.hasNext(); counter++)
{ {
SiteInfo favouriteSite = it.next(); SiteInfo favouriteSite = it.next();
if (counter < pageDetails.getSkipCount()) if(counter < pageDetails.getSkipCount())
{ {
continue; continue;
} }
if (counter > pageDetails.getEnd() - 1) if(counter > pageDetails.getEnd() - 1)
{ {
break; break;
} }
@@ -763,10 +732,10 @@ public class SitesImpl implements Sites
PagingResults<SiteInfo> favouriteSites = getFavouriteSites(personId, Util.getPagingRequest(paging)); PagingResults<SiteInfo> favouriteSites = getFavouriteSites(personId, Util.getPagingRequest(paging));
List<FavouriteSite> favourites = new ArrayList<FavouriteSite>(favouriteSites.getPage().size()); List<FavouriteSite> favourites = new ArrayList<FavouriteSite>(favouriteSites.getPage().size());
for (SiteInfo favouriteSite : favouriteSites.getPage()) for(SiteInfo favouriteSite : favouriteSites.getPage())
{ {
SiteRole role = null; SiteRole role = null;
if (filter.isAllowed(Site.ROLE)) if(filter.isAllowed(Site.ROLE))
{ {
role = getSiteRole(favouriteSite.getShortName(), personId); role = getSiteRole(favouriteSite.getShortName(), personId);
} }
@@ -774,80 +743,6 @@ public class SitesImpl implements Sites
favourites.add(favourite); favourites.add(favourite);
} }
return CollectionWithPagingInfo.asPaged(paging, favourites, favouriteSites.hasMoreItems(), favouriteSites return CollectionWithPagingInfo.asPaged(paging, favourites, favouriteSites.hasMoreItems(), favouriteSites.getTotalResultCount().getFirst());
.getTotalResultCount().getFirst());
}
@Override
public SiteImpl updateSite(final String siteShortName, final SiteImpl siteImpl)
{
if (siteService.isSiteAdmin(AuthenticationUtil.getFullyAuthenticatedUser()))
{
return AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<SiteImpl>()
{
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<Void>()
{
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());
} }
} }

View File

@@ -16,15 +16,11 @@
* You should have received a copy of the GNU Lesser General Public License * You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.alfresco.rest.api.sites; package org.alfresco.rest.api.sites;
import org.alfresco.rest.api.Sites; import org.alfresco.rest.api.Sites;
import org.alfresco.rest.api.model.Site; 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.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.EntityResource;
import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction; import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction;
import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo; import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
@@ -38,9 +34,8 @@ import org.springframework.beans.factory.InitializingBean;
* @author Gethin James * @author Gethin James
* @author steveglover * @author steveglover
*/ */
@EntityResource(name = "sites", title = "Sites") @EntityResource(name="sites", title = "Sites")
public class SiteEntityResource implements EntityResourceAction.Read<Site>, EntityResourceAction.ReadById<Site>, public class SiteEntityResource implements EntityResourceAction.Read<Site>, EntityResourceAction.ReadById<Site>, InitializingBean
EntityResourceAction.Delete, EntityResourceAction.Update<SiteImpl>, InitializingBean
{ {
private Sites sites; private Sites sites;
@@ -61,8 +56,7 @@ public class SiteEntityResource implements EntityResourceAction.Read<Site>, Enti
* @see org.alfresco.rest.framework.resource.actions.interfaces.CollectionResourceAction.Get#get() * @see org.alfresco.rest.framework.resource.actions.interfaces.CollectionResourceAction.Get#get()
*/ */
@Override @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") @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)
public CollectionWithPagingInfo<Site> readAll(Parameters parameters) public CollectionWithPagingInfo<Site> readAll(Parameters parameters)
{ {
return sites.getSites(parameters); return sites.getSites(parameters);
@@ -70,35 +64,13 @@ public class SiteEntityResource implements EntityResourceAction.Read<Site>, Enti
/** /**
* Returns information regarding the site 'siteId'. * Returns information regarding the site 'siteId'.
*
*/ */
@Override @Override
@WebApiDescription(title = "Returns site information for site siteId.") @WebApiDescription(title="Returns site information for site siteId.")
public Site readById(String siteId, Parameters parameters) public Site readById(String siteId, Parameters parameters)
{ {
return sites.getSite(siteId); return sites.getSite(siteId);
} }
/**
* PUT sites/{@literal <siteId>}
* <p>
* Updates the <i>visibility</i> 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 <siteId>}
* <p>
* Deletes the site.
*/
@Override
@WebApiDescription(title = "Deletes the site.")
public void delete(String siteId, Parameters parameters)
{
sites.deleteSite(siteId);
}
} }

View File

@@ -131,8 +131,7 @@ public class TestSites extends EnterpriseTestApi
} }
catch(PublicApiException e) 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_METHOD_NOT_ALLOWED, e.getHttpResponse().getStatusCode());
assertEquals(HttpStatus.SC_NOT_FOUND, e.getHttpResponse().getStatusCode());
} }
// invalid site // invalid site