100 lines
3.3 KiB
Java
Executable File
100 lines
3.3 KiB
Java
Executable File
/*
|
|
* Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved.
|
|
*
|
|
* The contents of this file are subject to the ArsDigita Public
|
|
* License (the "License"); you may not use this file except in
|
|
* compliance with the License. You may obtain a copy of
|
|
* the License at http://www.arsdigita.com/ADPL.txt
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
*/
|
|
|
|
package com.arsdigita.london.search;
|
|
|
|
import com.arsdigita.search.QuerySpecification;
|
|
import com.arsdigita.search.ResultSet;
|
|
import com.arsdigita.search.Document;
|
|
import com.arsdigita.search.filters.PermissionFilterSpecification;
|
|
import com.arsdigita.search.filters.ContentSectionFilterSpecification;
|
|
import com.arsdigita.london.util.Transaction;
|
|
import com.arsdigita.cms.search.VersionFilterSpecification;
|
|
import com.arsdigita.cms.ContentItem;
|
|
import com.arsdigita.cms.SecurityManager;
|
|
|
|
import com.arsdigita.domain.DomainObjectFactory;
|
|
import com.arsdigita.kernel.Party;
|
|
import com.arsdigita.kernel.permissions.PermissionManager;
|
|
import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
|
|
import com.arsdigita.persistence.OID;
|
|
|
|
import java.util.Collection;
|
|
import java.util.Iterator;
|
|
import java.util.Vector;
|
|
import java.math.BigDecimal;
|
|
|
|
|
|
public class SOAPHandler {
|
|
|
|
private static final org.apache.log4j.Logger s_log =
|
|
org.apache.log4j.Logger.getLogger(SOAPHandler.class);
|
|
|
|
public Collection search(final String terms) {
|
|
final Vector results = new Vector();
|
|
|
|
new Transaction() {
|
|
public void doRun() {
|
|
doSearch(terms, results);
|
|
}
|
|
}.run();
|
|
|
|
return results;
|
|
}
|
|
|
|
private void doSearch(String terms,
|
|
Collection results) {
|
|
QuerySpecification spec = new QuerySpecification(terms, false);
|
|
if (com.arsdigita.search.Search.getConfig().isIntermediaEnabled()) {
|
|
spec.addFilter(new PermissionFilterSpecification());
|
|
}
|
|
|
|
String[] sections = Search.getConfig().getRemoteSearchContentSections();
|
|
if (sections != null) {
|
|
spec.addFilter(new ContentSectionFilterSpecification(sections));
|
|
}
|
|
|
|
spec.addFilter(new VersionFilterSpecification(ContentItem.LIVE));
|
|
|
|
ResultSet resultSet = com.arsdigita.search.Search.processInternal(
|
|
spec,
|
|
com.arsdigita.search.Search.getConfig().getIndexer());
|
|
|
|
// Get max. number of remote results as specified in config. param.
|
|
Iterator docs = resultSet.getDocuments(0,
|
|
Search.getConfig().getMaxRemoteResults().longValue());
|
|
|
|
s_log.debug("About to return results for query: " + terms);
|
|
|
|
while (docs.hasNext()) {
|
|
Document doc = (Document)docs.next();
|
|
|
|
SearchResult result = new SearchResult(
|
|
(BigDecimal)doc.getOID().get("id"),
|
|
doc.getTitle(),
|
|
doc.getURL().toString(),
|
|
doc.getSummary(),
|
|
doc.getScore());
|
|
|
|
results.add(result);
|
|
}
|
|
resultSet.close();
|
|
|
|
s_log.debug("results: " + results.size());
|
|
}
|
|
|
|
|
|
}
|