Merged V2.2 to HEAD

7531: Merged V2.1 to V2.2
             7397: Fix and improvments to all web-client People pickers - all now search on Username and build Lucene queries rather than XPath. Fixes AWC-853, AWC-935, AWC-1180, AWC-1660
             Merge conflicts resolved around query strings and client session cluster changes
   7532: Added action to go back to last deployment report in history panel
   7533: Moved deploy actions to resources panel header in review task dialog

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@8400 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Gavin Cornwell
2008-02-29 08:44:21 +00:00
parent bbc2156235
commit ba5174613d
9 changed files with 144 additions and 81 deletions

View File

@@ -37,10 +37,12 @@ import javax.faces.model.SelectItem;
import javax.transaction.UserTransaction;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.search.impl.lucene.QueryParser;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
@@ -202,15 +204,21 @@ public class AddUsersDialog extends BaseDialogBean
{
SelectItem[] items;
// build xpath to match available User/Person objects
ServiceRegistry services = Repository.getServiceRegistry(context);
NodeRef peopleRef = getPersonService().getPeopleContainer();
String xpath = "*[like(@" + NamespaceService.CONTENT_MODEL_PREFIX + ":" + "firstName, '%" + contains +
"%', false)" + " or " + "like(@" + NamespaceService.CONTENT_MODEL_PREFIX + ":" +
"lastName, '%" + contains + "%', false)]";
List<NodeRef> nodes = services.getSearchService().selectNodes(peopleRef, xpath, null,
services.getNamespaceService(), false);
// Use lucene search to retrieve user details
String term = QueryParser.escape(contains.trim());
StringBuilder query = new StringBuilder(128);
query.append("@").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:firstName:*");
query.append(term);
query.append("* @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:lastName:*");
query.append(term);
query.append("* @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:userName:");
query.append(term);
query.append("*");
ResultSet resultSet = Repository.getServiceRegistry(context).getSearchService().query(
Repository.getStoreRef(),
SearchService.LANGUAGE_LUCENE,
query.toString());
List<NodeRef> nodes = resultSet.getNodeRefs();
ArrayList<SelectItem> itemList = new ArrayList<SelectItem>(nodes.size());
for (NodeRef personRef : nodes)
@@ -221,7 +229,7 @@ public class AddUsersDialog extends BaseDialogBean
String firstName = (String)getNodeService().getProperty(personRef, ContentModel.PROP_FIRSTNAME);
String lastName = (String)getNodeService().getProperty(personRef, ContentModel.PROP_LASTNAME);
SelectItem item = new SortableSelectItem(username, firstName + " " + lastName, lastName);
SelectItem item = new SortableSelectItem(username, firstName + " " + lastName + " [" + username + "]", lastName);
itemList.add(item);
}
}

View File

@@ -43,6 +43,7 @@ import org.alfresco.service.cmr.repository.InvalidNodeRefException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.web.app.Application;
import org.alfresco.web.app.context.IContextListener;
@@ -320,20 +321,18 @@ public class UsersDialog extends BaseDialogBean implements IContextListener, Cha
// define the query to find people by their first or last name
String search = properties.getSearchCriteria().trim();
StringBuilder query = new StringBuilder(256);
query.append("TYPE:\"{http://www.alfresco.org/model/content/1.0}person\" AND (");
StringBuilder query = new StringBuilder(128);
for (StringTokenizer t = new StringTokenizer(search, " "); t.hasMoreTokens(); /**/)
{
String term = QueryParser.escape(t.nextToken());
query.append("((@\\{http\\://www.alfresco.org/model/content/1.0\\}firstName:*");
query.append("@").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:firstName:*");
query.append(term);
query.append("*) OR (@\\{http\\://www.alfresco.org/model/content/1.0\\}lastName:*");
query.append("* @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:lastName:*");
query.append(term);
query.append("*) OR (@\\{http\\://www.alfresco.org/model/content/1.0\\}userName:");
query.append("* @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:userName:");
query.append(term);
query.append("*)) "); // final space here is important as default OR separator
query.append("*");
}
query.append(")");
if (logger.isDebugEnabled())
logger.debug("Query: " + query.toString());

View File

@@ -166,6 +166,16 @@ public class ViewDeploymentReportDialog extends BaseDialogBean
this.panelExpanded = !this.panelExpanded;
}
/**
* Action handler called when user wants to go back to the last report
*/
public void showLastReport(ActionEvent event)
{
this.attempt = null;
this.attemptDate = null;
this.panelExpanded = false;
}
// ------------------------------------------------------------------------------
// Bean getters and setters

View File

@@ -44,6 +44,7 @@ import javax.faces.model.SelectItem;
import javax.transaction.UserTransaction;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.search.impl.lucene.QueryParser;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchService;
@@ -342,13 +343,20 @@ public abstract class BaseInviteUsersWizard extends BaseWizardBean
if (filterIndex == 0)
{
// build xpath to match available User/Person objects
NodeRef peopleRef = getPersonService().getPeopleContainer();
// Use lucene search to retrieve user details
String lucene = "@" + NamespaceService.CONTENT_MODEL_PREFIX + "\\:firstName:*" + contains + "* " +
"@" + NamespaceService.CONTENT_MODEL_PREFIX + "\\:lastName:*" + contains + "* ";
ResultSet resultSet = getSearchService().query(peopleRef.getStoreRef(), SearchService.LANGUAGE_LUCENE, lucene);
String term = QueryParser.escape(contains.trim());
StringBuilder query = new StringBuilder(128);
query.append("@").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:firstName:*");
query.append(term);
query.append("* @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:lastName:*");
query.append(term);
query.append("* @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:userName:");
query.append(term);
query.append("*");
ResultSet resultSet = Repository.getServiceRegistry(context).getSearchService().query(
Repository.getStoreRef(),
SearchService.LANGUAGE_LUCENE,
query.toString());
List<NodeRef> nodes = resultSet.getNodeRefs();
items = new SelectItem[nodes.size()];
@@ -369,7 +377,7 @@ public abstract class BaseInviteUsersWizard extends BaseWizardBean
groups.addAll(getAuthorityService().getAllAuthorities(AuthorityType.EVERYONE));
List<SelectItem> results = new ArrayList<SelectItem>(groups.size());
String containsLower = contains.toLowerCase();
String containsLower = contains.trim().toLowerCase();
int offset = PermissionService.GROUP_PREFIX.length();
for (String group : groups)
{

View File

@@ -26,6 +26,7 @@ package org.alfresco.web.bean.workflow;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -38,7 +39,11 @@ import javax.faces.model.SelectItem;
import javax.transaction.UserTransaction;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.search.impl.lucene.QueryParser;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.workflow.WorkflowService;
import org.alfresco.service.namespace.NamespaceService;
@@ -164,30 +169,36 @@ public class ReassignTaskDialog extends BaseDialogBean
tx = Repository.getUserTransaction(context, true);
tx.begin();
// build xpath to match available User/Person objects
NodeRef peopleRef = getPersonService().getPeopleContainer();
// NOTE: see SearcherComponentTest
String xpath = "*[not(@" + NamespaceService.CONTENT_MODEL_PREFIX + ":" + "userName='guest') and " +
"(like(@" + NamespaceService.CONTENT_MODEL_PREFIX + ":" + "firstName, '%" + contains + "%', false)" +
" or " + "like(@" + NamespaceService.CONTENT_MODEL_PREFIX + ":" + "lastName, '%" + contains + "%', false))]";
// Use lucene search to retrieve user details
String term = QueryParser.escape(contains.trim());
StringBuilder query = new StringBuilder(128);
query.append("@").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:firstName:*");
query.append(term);
query.append("* @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:lastName:*");
query.append(term);
query.append("* @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:userName:");
query.append(term);
query.append("*");
ResultSet resultSet = Repository.getServiceRegistry(context).getSearchService().query(
Repository.getStoreRef(),
SearchService.LANGUAGE_LUCENE,
query.toString());
List<NodeRef> nodes = resultSet.getNodeRefs();
List<NodeRef> nodes = getSearchService().selectNodes(
peopleRef,
xpath,
null,
this.getNamespaceService(),
false);
items = new SelectItem[nodes.size()];
for (int index=0; index<nodes.size(); index++)
ArrayList<SelectItem> itemList = new ArrayList<SelectItem>(nodes.size());
for (NodeRef personRef : nodes)
{
NodeRef personRef = nodes.get(index);
String firstName = (String)this.getNodeService().getProperty(personRef, ContentModel.PROP_FIRSTNAME);
String lastName = (String)this.getNodeService().getProperty(personRef, ContentModel.PROP_LASTNAME);
String username = (String)this.getNodeService().getProperty(personRef, ContentModel.PROP_USERNAME);
SelectItem item = new SortableSelectItem(username, firstName + " " + lastName, lastName);
items[index] = item;
String username = (String) getNodeService().getProperty(personRef, ContentModel.PROP_USERNAME);
if (PermissionService.GUEST_AUTHORITY.equals(username) == false)
{
String firstName = (String) getNodeService().getProperty(personRef, ContentModel.PROP_FIRSTNAME);
String lastName = (String) getNodeService().getProperty(personRef, ContentModel.PROP_LASTNAME);
SelectItem item = new SortableSelectItem(username, firstName + " " + lastName + " [" + username + "]", lastName);
itemList.add(item);
}
}
items = new SelectItem[itemList.size()];
itemList.toArray(items);
Arrays.sort(items);

View File

@@ -26,6 +26,7 @@ package org.alfresco.web.bean.workflow;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -38,7 +39,11 @@ import javax.faces.model.SelectItem;
import javax.transaction.UserTransaction;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.search.impl.lucene.QueryParser;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.workflow.WorkflowService;
import org.alfresco.service.namespace.NamespaceService;
@@ -164,29 +169,36 @@ public class ReassignWorkItemDialog extends BaseDialogBean
tx = Repository.getUserTransaction(context, true);
tx.begin();
// build xpath to match available User/Person objects
NodeRef peopleRef = getPersonService().getPeopleContainer();
// NOTE: see SearcherComponentTest
String xpath = "*[like(@" + NamespaceService.CONTENT_MODEL_PREFIX + ":" + "firstName, '%" + contains + "%', false)" +
" or " + "like(@" + NamespaceService.CONTENT_MODEL_PREFIX + ":" + "lastName, '%" + contains + "%', false)]";
// Use lucene search to retrieve user details
String term = QueryParser.escape(contains.trim());
StringBuilder query = new StringBuilder(128);
query.append("@").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:firstName:*");
query.append(term);
query.append("* @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:lastName:*");
query.append(term);
query.append("* @").append(NamespaceService.CONTENT_MODEL_PREFIX).append("\\:userName:");
query.append(term);
query.append("*");
ResultSet resultSet = Repository.getServiceRegistry(context).getSearchService().query(
Repository.getStoreRef(),
SearchService.LANGUAGE_LUCENE,
query.toString());
List<NodeRef> nodes = resultSet.getNodeRefs();
List<NodeRef> nodes = getSearchService().selectNodes(
peopleRef,
xpath,
null,
this.getNamespaceService(),
false);
items = new SelectItem[nodes.size()];
for (int index=0; index<nodes.size(); index++)
ArrayList<SelectItem> itemList = new ArrayList<SelectItem>(nodes.size());
for (NodeRef personRef : nodes)
{
NodeRef personRef = nodes.get(index);
String firstName = (String)this.getNodeService().getProperty(personRef, ContentModel.PROP_FIRSTNAME);
String lastName = (String)this.getNodeService().getProperty(personRef, ContentModel.PROP_LASTNAME);
String username = (String)this.getNodeService().getProperty(personRef, ContentModel.PROP_USERNAME);
SelectItem item = new SortableSelectItem(username, firstName + " " + lastName, lastName);
items[index] = item;
String username = (String) getNodeService().getProperty(personRef, ContentModel.PROP_USERNAME);
if (PermissionService.GUEST_AUTHORITY.equals(username) == false)
{
String firstName = (String) getNodeService().getProperty(personRef, ContentModel.PROP_FIRSTNAME);
String lastName = (String) getNodeService().getProperty(personRef, ContentModel.PROP_LASTNAME);
SelectItem item = new SortableSelectItem(username, firstName + " " + lastName + " [" + username + "]", lastName);
itemList.add(item);
}
}
items = new SelectItem[itemList.size()];
itemList.toArray(items);
Arrays.sort(items);