From 2c4637723fe7f21a5c3a47d51f263e1e9a269c93 Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Wed, 4 Jul 2007 16:03:31 +0000 Subject: [PATCH] Merged V2.0 to HEAD 5910: Web Services getUsers 5913: Web Services admin user password change 5956: LDAP anon simple bind test 6133: WCM-486 6158: Merged V1.4 to V2.0 5600: Split person bootstrap 5642: AR-439 NetBIOS adaptor status request 6160: VersionHistoryPerformance patch with no versionedNodeId git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@6166 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../AdministrationWebService.java | 41 +++++++++++++++++-- .../repository/RepositoryWebService.java | 37 ++++++++++------- .../repository/ResultSetQuerySession.java | 28 +++++++++---- source/wsdl/administration-service.wsdl | 2 +- 4 files changed, 83 insertions(+), 25 deletions(-) diff --git a/source/java/org/alfresco/repo/webservice/administration/AdministrationWebService.java b/source/java/org/alfresco/repo/webservice/administration/AdministrationWebService.java index 9fce9eaa42..be7753c0a5 100644 --- a/source/java/org/alfresco/repo/webservice/administration/AdministrationWebService.java +++ b/source/java/org/alfresco/repo/webservice/administration/AdministrationWebService.java @@ -481,7 +481,14 @@ public class AdministrationWebService extends AbstractWebService implements private void changePasswordImpl(String userName, String oldPassword, String newPassword) { // Update the authentication details - this.authenticationService.updateAuthentication(userName, oldPassword.toCharArray(), newPassword.toCharArray()); + if (this.authenticationService.getCurrentUserName().equals("admin") == true) + { + this.authenticationService.setAuthentication(userName, newPassword.toCharArray()); + } + else + { + this.authenticationService.updateAuthentication(userName, oldPassword.toCharArray(), newPassword.toCharArray()); + } } /** @@ -624,8 +631,36 @@ public class AdministrationWebService extends AbstractWebService implements Set nodeRefs = AdministrationWebService.this.personService.getAllPeople(); - // TODO do the filter of the resulting list here .... - List filteredNodeRefs = new ArrayList(nodeRefs); + // Filter the results + List filteredNodeRefs = null; + if (filter != null && filter.getUserName() != null && filter.getUserName().length() != 0) + { + String userNameFilter = filter.getUserName(); + + if (logger.isDebugEnabled() == true) + { + logger.debug("Applying user query filter (" + userNameFilter + ")"); + } + + filteredNodeRefs = new ArrayList(nodeRefs.size()); + for (NodeRef nodeRef : nodeRefs) + { + String userName = (String)AdministrationWebService.this.nodeService.getProperty(nodeRef, ContentModel.PROP_USERNAME); + if (userName.matches(userNameFilter) == true) + { + filteredNodeRefs.add(nodeRef); + } + } + } + else + { + if (logger.isDebugEnabled() == true) + { + logger.debug("No user filter specified"); + } + + filteredNodeRefs = new ArrayList(nodeRefs); + } int totalRows = filteredNodeRefs.size(); int lastRow = calculateLastRowIndex(totalRows); diff --git a/source/java/org/alfresco/repo/webservice/repository/RepositoryWebService.java b/source/java/org/alfresco/repo/webservice/repository/RepositoryWebService.java index a3f7fe7496..836f79e6e4 100644 --- a/source/java/org/alfresco/repo/webservice/repository/RepositoryWebService.java +++ b/source/java/org/alfresco/repo/webservice/repository/RepositoryWebService.java @@ -26,6 +26,7 @@ package org.alfresco.repo.webservice.repository; import java.io.Serializable; import java.rmi.RemoteException; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -164,7 +165,7 @@ public class RepositoryWebService extends AbstractWebService implements logger.error("Unexpected error occurred", e); } - throw new RepositoryFault(0, e.getMessage()); + throw new RepositoryFault(0, e.toString()); } } @@ -230,7 +231,7 @@ public class RepositoryWebService extends AbstractWebService implements e.printStackTrace(); - throw new RepositoryFault(0, e.getMessage()); + throw new RepositoryFault(0, e.toString()); } } @@ -291,7 +292,7 @@ public class RepositoryWebService extends AbstractWebService implements logger.error("Unexpected error occurred", e); } - throw new RepositoryFault(0, e.getMessage()); + throw new RepositoryFault(0, e.toString()); } } @@ -345,7 +346,7 @@ public class RepositoryWebService extends AbstractWebService implements logger.error("Unexpected error occurred", e); } - throw new RepositoryFault(0, e.getMessage()); + throw new RepositoryFault(0, e.toString()); } } @@ -400,7 +401,7 @@ public class RepositoryWebService extends AbstractWebService implements logger.error("Unexpected error occurred", e); } - throw new RepositoryFault(0, e.getMessage()); + throw new RepositoryFault(0, e.toString()); } } @@ -470,7 +471,7 @@ public class RepositoryWebService extends AbstractWebService implements logger.error("Unexpected error occurred", e); } - throw new RepositoryFault(0, e.getMessage()); + throw new RepositoryFault(0, e.toString()); } } } @@ -514,7 +515,7 @@ public class RepositoryWebService extends AbstractWebService implements logger.error("Unexpected error occurred", e); } - throw new RepositoryFault(0, e.getMessage()); + throw new RepositoryFault(0, e.toString()); } } @@ -564,7 +565,7 @@ public class RepositoryWebService extends AbstractWebService implements logger.error("Unexpected error occurred", e); } - throw new RepositoryFault(0, e.getMessage()); + throw new RepositoryFault(0, e.toString()); } } @@ -617,10 +618,18 @@ public class RepositoryWebService extends AbstractWebService implements // Resolve the predicate to a list of node references List nodeRefs = Utils.resolvePredicate(where, this.nodeService, this.searchService, this.namespaceService); - nodes = new Node[nodeRefs.size()]; - int index = 0; + List nodeList = new ArrayList(); for (NodeRef nodeRef : nodeRefs) { + // search can return nodes that no longer exist, so we need to ignore these + if(nodeService.exists(nodeRef) == false) + { + if(logger.isDebugEnabled()) + { + logger.warn("Search returned node that doesn't exist: " + nodeRef); + } + } + // Get the nodes reference Reference reference = Utils.convertToReference(this.nodeService, this.namespaceService, nodeRef); @@ -649,11 +658,11 @@ public class RepositoryWebService extends AbstractWebService implements // Create the node and add to the array Node node = new Node(reference, type, aspects, properties); - nodes[index] = node; - - index++; + nodeList.add(node); } + nodes = nodeList.toArray(new Node[nodeList.size()]); + // commit the transaction tx.commit(); } @@ -677,7 +686,7 @@ public class RepositoryWebService extends AbstractWebService implements logger.error("Unexpected error occurred", e); } - throw new RepositoryFault(0, e.getMessage()); + throw new RepositoryFault(0, e.toString()); } return nodes; diff --git a/source/java/org/alfresco/repo/webservice/repository/ResultSetQuerySession.java b/source/java/org/alfresco/repo/webservice/repository/ResultSetQuerySession.java index 1cec67bc87..3a455d3874 100644 --- a/source/java/org/alfresco/repo/webservice/repository/ResultSetQuerySession.java +++ b/source/java/org/alfresco/repo/webservice/repository/ResultSetQuerySession.java @@ -25,6 +25,8 @@ package org.alfresco.repo.webservice.repository; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.alfresco.repo.webservice.Utils; @@ -109,13 +111,24 @@ public class ResultSetQuerySession extends AbstractQuerySession logger.debug("Total rows = " + totalRows + ", current batch size = " + currentBatchSize); org.alfresco.repo.webservice.types.ResultSet batchResults = new org.alfresco.repo.webservice.types.ResultSet(); - org.alfresco.repo.webservice.types.ResultSetRow[] rows = new org.alfresco.repo.webservice.types.ResultSetRow[currentBatchSize]; - - int arrPos = 0; + List rowList = + new ArrayList(); + for (int x = this.position; x < lastRow; x++) { ResultSetRow origRow = searchResults.getRow(x); NodeRef nodeRef = origRow.getNodeRef(); + + // search can return nodes that no longer exist, so we need to ignore these + if(nodeService.exists(nodeRef) == false) + { + if(logger.isDebugEnabled()) + { + logger.warn("Search returned node that doesn't exist: " + nodeRef); + } + continue; + } + ResultSetRowNode rowNode = createResultSetRowNode(nodeRef, nodeService); // get the data for the row and build up the columns structure @@ -143,15 +156,16 @@ public class ResultSetQuerySession extends AbstractQuerySession row.setScore(origRow.getScore()); row.setRowIndex(x); row.setNode(rowNode); - - // add the row to the overall results - rows[arrPos] = row; - arrPos++; + + // add the row to the overall results list + rowList.add(row); } // TODO: build up the meta data data structure if we've been asked to // add the rows to the result set and set the total row count + org.alfresco.repo.webservice.types.ResultSetRow[] rows = + rowList.toArray(new org.alfresco.repo.webservice.types.ResultSetRow[rowList.size()]);; batchResults.setRows(rows); batchResults.setTotalRowCount(totalRows); diff --git a/source/wsdl/administration-service.wsdl b/source/wsdl/administration-service.wsdl index e63da891f1..6a9da56c79 100644 --- a/source/wsdl/administration-service.wsdl +++ b/source/wsdl/administration-service.wsdl @@ -145,7 +145,7 @@ - +