Skip to Content.
Sympa Menu

idok-commit - [idok-commit] idok commit r179 - branches/rest/java/ch/idok/service/server/search/rest

idok-commit AT lists.psi.ch

Subject: Commit emails of the iDok project

List archive

[idok-commit] idok commit r179 - branches/rest/java/ch/idok/service/server/search/rest


Chronological Thread 
  • From: "AFS account Roman Geus" <geus AT savannah.psi.ch>
  • To: idok-commit AT lists.psi.ch
  • Subject: [idok-commit] idok commit r179 - branches/rest/java/ch/idok/service/server/search/rest
  • Date: Mon, 18 Aug 2008 17:13:15 +0200
  • List-archive: <https://lists.web.psi.ch/pipermail/idok-commit/>
  • List-id: Commit emails of the iDok project <idok-commit.lists.psi.ch>

Author: geus
Date: Mon Aug 18 17:13:15 2008
New Revision: 179

Log:
Implemented per folder and per project REST search

Modified:

branches/rest/java/ch/idok/service/server/search/rest/RestSearchServiceResource.java

Modified:
branches/rest/java/ch/idok/service/server/search/rest/RestSearchServiceResource.java
==============================================================================
---
branches/rest/java/ch/idok/service/server/search/rest/RestSearchServiceResource.java
(original)
+++
branches/rest/java/ch/idok/service/server/search/rest/RestSearchServiceResource.java
Mon Aug 18 17:13:15 2008
@@ -14,6 +14,7 @@
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.UriInfo;
import javax.ws.rs.core.Response.Status;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -29,13 +30,14 @@
import ch.idok.common.util.Pair;
import ch.idok.service.common.search.QueryMatch;
import ch.idok.service.common.search.SearchService;
+import ch.idok.service.server.admin.Admin;
import ch.idok.service.server.rest.RestServer;
import ch.idok.service.server.rest.SpnegoFilter;

/**
* JAX-RS resource class for the iDok search service
*/
-@Path("")
+@Path("search")
public class RestSearchServiceResource {

/** The search service used to produce results. */
@@ -43,6 +45,10 @@

static Logger logger;

+ /**
+ * Cache for Iterator<QueryMatch> objects, that allows to handle requests
+ * for successive query result items efficiently
+ */
static IteratorCache iteratorCache;

/**
@@ -51,22 +57,56 @@
@Context
SecurityContext securityContext;

+ /**
+ * Provides both static and dynamic, per-request information, about the
+ * components of a request URI.
+ */
+ @Context
+ UriInfo uriInfo;
+
static public void init(RestServer server) throws DmsException {
searchService = server.serviceProvider.getSearchService();
logger = server.getLogger();
iteratorCache = IteratorCache.getIteratorCache(searchService,
logger);
}

+ /**
+ * Resource method for all iDok search queries
+ *
+ * @param path
+ * The path parameter holds {project}/{repository}/{folder},
+ * where {repository} and {folder} are optional. {folder} may
+ * contain an arbitrary number of path segments.
+ * @param query
+ * Lucene query string
+ * @param metaFields
+ * @param resultTypeString
+ * @param startString
+ * @param numString
+ * @return
+ */
@GET
- @Path("{project}/{repository}/")
- @Produces("text/xml")
- public Response query(@PathParam("project") String project,
- @PathParam("repository") String repository,
+ @Path(value = "{path}", limited = false)
+ @Produces("text/plain")
+ public Response query(@PathParam("path") String path,
@QueryParam("q") String query,
@QueryParam("metafields") String metaFields,
@QueryParam("outputfields") String resultTypeString,
@QueryParam("start") @DefaultValue("0") String startString,
@QueryParam("num") @DefaultValue("20") String numString) {
+ logger.entering(this.getClass().getName(), "query");
+
+ // Parse project, repository and folder
+ String project;
+ String repository = null;
+ String folder = null;
+
+ String[] sa = path.split("/", 3);
+ project = sa[0];
+ if (sa.length > 1)
+ repository = sa[1];
+ if (sa.length > 2)
+ folder = sa[2];

// parse and validate query parameters
if (query == null)
@@ -106,8 +146,30 @@
}

// build Lucene query string
- String luceneQuery = String.format("%s/%s::%s", project,
- repository, query);
+ String luceneQuery;
+ if (repository == null) {
+ StringBuilder buf = new StringBuilder();
+ boolean first = true;
+ for (String repository1 : Admin.listRepositories(project)) {
+ if (!first)
+ buf.append(',');
+ buf.append(project);
+ buf.append('/');
+ buf.append(repository1);
+ first = false;
+ }
+ luceneQuery = String.format("%s::%s", buf.toString(), query);
+ } else {
+ if (folder == null) {
+ luceneQuery = String.format("%s/%s::%s", project,
+ repository, query);
+ } else {
+ luceneQuery = String.format(
+ "%s/%s::auto\\:relpath:%s/* AND (%s)", project,
+ repository, folder, query);
+ }
+
+ }

// initialize XML DOM
DocumentBuilderFactory factory = DocumentBuilderFactory
@@ -190,6 +252,5 @@
logger.log(Level.FINER, "Error in REST call", e);
return Response.serverError().entity("DmsException: " +
e).build();
}
-
}
}



  • [idok-commit] idok commit r179 - branches/rest/java/ch/idok/service/server/search/rest, AFS account Roman Geus, 08/18/2008

Archive powered by MHonArc 2.6.19.

Top of Page