Derek Hulley ced83b971b Merged 1.4 to HEAD
svn merge svn://svn.alfresco.com:3691/alfresco/BRANCHES/V1.4@4392 svn://svn.alfresco.com:3691/alfresco/BRANCHES/V1.4@4399 .
   svn resolved root\projects\repository\source\java\org\alfresco\repo\jscript\Node.java


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4660 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
2006-12-19 16:01:52 +00:00

100 lines
3.3 KiB
Java

/*
* Copyright (C) 2005 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the
* License.
*/
package org.alfresco.repo.template;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.TemplateNode;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
import org.alfresco.service.cmr.search.SearchService;
/**
* Class providing the base Search Query services to execute a search returning a list of TemplateNode objects from a Lucene search string.
*
* @author Kevin Roast
*/
public abstract class BaseSearchResultsMap extends BaseTemplateMap
{
/**
* Constructor
*
* @param parent
* The parent TemplateNode to execute searches from
* @param services
* The ServiceRegistry to use
*/
public BaseSearchResultsMap(TemplateNode parent, ServiceRegistry services)
{
super(parent, services);
}
/**
* Perform a SearchService query with the given Lucene search string
*/
protected List<TemplateNode> query(String search)
{
List<TemplateNode> nodes = null;
HashSet<NodeRef> nodeRefs = new HashSet<NodeRef>();
// check if a full Lucene search string has been supplied or extracted from XML
if (search != null && search.length() != 0)
{
// perform the search against the repo
ResultSet results = null;
try
{
results = this.services.getSearchService().query(this.parent.getNodeRef().getStoreRef(),
SearchService.LANGUAGE_LUCENE, search);
if (results.length() != 0)
{
nodes = new ArrayList<TemplateNode>(results.length());
for (ResultSetRow row : results)
{
NodeRef nodeRef = row.getNodeRef();
if (!nodeRefs.contains(nodeRef))
{
nodes.add(new TemplateNode(nodeRef, services, this.parent.getImageResolver()));
nodeRefs.add(nodeRef);
}
}
}
}
catch (Throwable err)
{
throw new AlfrescoRuntimeException("Failed to execute search: " + search, err);
}
finally
{
if (results != null)
{
results.close();
}
}
}
return nodes != null ? nodes : (List) Collections.emptyList();
}
}