ALF-9242 - De-lucene SiteServiceImpl.matchPerson, and flesh out some of the comments around it to explain better how it works

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28616 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Nick Burch
2011-06-27 14:42:38 +00:00
parent ce540080f7
commit 0452c62a67

View File

@@ -37,7 +37,6 @@ import org.alfresco.repo.activities.ActivityType;
import org.alfresco.repo.admin.SysAdminParams; import org.alfresco.repo.admin.SysAdminParams;
import org.alfresco.repo.policy.BehaviourFilter; import org.alfresco.repo.policy.BehaviourFilter;
import org.alfresco.repo.search.impl.lucene.AbstractLuceneQueryParser; import org.alfresco.repo.search.impl.lucene.AbstractLuceneQueryParser;
import org.alfresco.repo.search.impl.lucene.LuceneQueryParser;
import org.alfresco.repo.security.authentication.AuthenticationContext; import org.alfresco.repo.security.authentication.AuthenticationContext;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
@@ -55,13 +54,12 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.ResultSet; import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.AccessPermission; import org.alfresco.service.cmr.security.AccessPermission;
import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType; import org.alfresco.service.cmr.security.AuthorityType;
import org.alfresco.service.cmr.security.NoSuchPersonException;
import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteInfo;
@@ -1201,7 +1199,10 @@ public class SiteServiceImpl implements SiteServiceInternal, SiteModel
throw new SiteServiceException(MSG_SITE_NO_EXIST, new Object[]{shortName}); throw new SiteServiceException(MSG_SITE_NO_EXIST, new Object[]{shortName});
} }
// build an array of name filter tokens pre lowercased to test against person properties // Build an array of name filter tokens pre lowercased to test against person properties
// We require that matching people have at least one match against one of these on
// either their firstname or last name
// For groups, we require a match against the whole filter on the group name
String[] nameFilters = new String[0]; String[] nameFilters = new String[0];
if (nameFilter != null && nameFilter.length() != 0) if (nameFilter != null && nameFilter.length() != 0)
{ {
@@ -1292,7 +1293,10 @@ public class SiteServiceImpl implements SiteServiceInternal, SiteModel
} }
/** /**
* Helper to match name filters to Person properties * Helper to match name filters to Person properties.
*
* One of the user's firstname or lastname must match at least
* one of the filters given.
* *
* @param filter * @param filter
* @param username * @param username
@@ -1302,20 +1306,11 @@ public class SiteServiceImpl implements SiteServiceInternal, SiteModel
{ {
boolean addUser = false; boolean addUser = false;
String query = "+TYPE:\"cm:person\" +@cm\\:userName:\"" + username + "\"";
SearchParameters searchParameters = new SearchParameters();
searchParameters.setLanguage(SearchService.LANGUAGE_LUCENE);
searchParameters.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
searchParameters.setQuery(query);
ResultSet resultSet = this.searchService.query(searchParameters);
try try
{ {
if (resultSet.length() != 0) NodeRef person = personService.getPerson(username, false);
{ String firstName = (String)nodeService.getProperty(person, ContentModel.PROP_FIRSTNAME);
ResultSetRow row = resultSet.getRow(0); String lastName = (String)nodeService.getProperty(person, ContentModel.PROP_LASTNAME);
Map<String, Serializable> values = row.getValues();
String firstName = (String)values.get(ContentModel.PROP_FIRSTNAME.toString());
String lastName = (String)values.get(ContentModel.PROP_LASTNAME.toString());
final String lowFirstName = (firstName != null ? firstName.toLowerCase() : ""); final String lowFirstName = (firstName != null ? firstName.toLowerCase() : "");
final String lowLastName = (lastName != null ? lastName.toLowerCase() : ""); final String lowLastName = (lastName != null ? lastName.toLowerCase() : "");
@@ -1333,10 +1328,9 @@ public class SiteServiceImpl implements SiteServiceInternal, SiteModel
} }
} }
} }
} catch(NoSuchPersonException e)
finally
{ {
resultSet.close(); // Group references a deleted user, shouldn't normally happen
} }
return addUser; return addUser;