Skip to content
This repository has been archived by the owner on May 4, 2023. It is now read-only.

Commit

Permalink
Restored LuceneServlet original indentation.
Browse files Browse the repository at this point in the history
  • Loading branch information
cliffano committed May 26, 2011
1 parent 1c08058 commit 60e5d08
Showing 1 changed file with 150 additions and 151 deletions.
301 changes: 150 additions & 151 deletions src/main/java/com/github/rnewson/couchdb/lucene/LuceneServlet.java
Expand Up @@ -48,54 +48,53 @@


public final class LuceneServlet extends HttpServlet { public final class LuceneServlet extends HttpServlet {


private static final Logger LOG = Logger.getLogger(LuceneServlet.class); private static final Logger LOG = Logger.getLogger(LuceneServlet.class);


private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;


private final HttpClient client; private final HttpClient client;


private final Map<Database, DatabaseIndexer> indexers = new HashMap<Database, DatabaseIndexer>(); private final Map<Database, DatabaseIndexer> indexers = new HashMap<Database, DatabaseIndexer>();


private final HierarchicalINIConfiguration ini; private final HierarchicalINIConfiguration ini;


private final File root; private final File root;


private final Map<Database, Thread> threads = new HashMap<Database, Thread>(); private final Map<Database, Thread> threads = new HashMap<Database, Thread>();


public LuceneServlet() throws ConfigurationException, IOException { public LuceneServlet() throws ConfigurationException, IOException {
final Config config = new Config(); final Config config = new Config();
this.client = config.getClient(); this.client = config.getClient();
this.root = config.getDir(); this.root = config.getDir();
this.ini = config.getConfiguration(); this.ini = config.getConfiguration();
} }

public LuceneServlet(final HttpClient client, final File root,
public LuceneServlet(final HttpClient client, final File root, final HierarchicalINIConfiguration ini) {
final HierarchicalINIConfiguration ini) { this.client = client;
this.client = client; this.root = root;
this.root = root; this.ini = ini;
this.ini = ini; }
}

private void cleanup(final HttpServletRequest req,
private void cleanup(final HttpServletRequest req, final HttpServletResponse resp) throws IOException, JSONException {
final HttpServletResponse resp) throws IOException, JSONException { final Couch couch = getCouch(req);
final Couch couch = getCouch(req); final Set<String> dbKeep = new HashSet<String>();
final Set<String> dbKeep = new HashSet<String>(); final JSONArray databases = couch.getAllDatabases();
final JSONArray databases = couch.getAllDatabases(); for (int i=0; i< databases.length(); i++) {
for (int i=0; i< databases.length(); i++) { final Database db = couch.getDatabase(databases.getString(i));
final Database db = couch.getDatabase(databases.getString(i)); final UUID uuid = db.getUuid();
final UUID uuid = db.getUuid(); if (uuid == null) {
if (uuid == null) { continue;
continue; }
} dbKeep.add(uuid.toString());
dbKeep.add(uuid.toString());

final Set<String> viewKeep = new HashSet<String>();
final Set<String> viewKeep = new HashSet<String>();

for (final DesignDocument ddoc : db.getAllDesignDocuments()) {
for (final DesignDocument ddoc : db.getAllDesignDocuments()) { for (final View view : ddoc.getAllViews().values()) {
for (final View view : ddoc.getAllViews().values()) { viewKeep.add(view.getDigest());
viewKeep.add(view.getDigest()); }
} }
}


// Delete all indexes except the keepers. // Delete all indexes except the keepers.
final File[] dirs = DatabaseIndexer.uuidDir(root, db.getUuid()).listFiles(); final File[] dirs = DatabaseIndexer.uuidDir(root, db.getUuid()).listFiles();
Expand All @@ -112,127 +111,127 @@ private void cleanup(final HttpServletRequest req,
} }
} }
} }
} }


// Delete all directories except the keepers. // Delete all directories except the keepers.
for (final File dir : root.listFiles()) { for (final File dir : root.listFiles()) {
if (!dbKeep.contains(dir.getName())) { if (!dbKeep.contains(dir.getName())) {
LOG.info("Cleaning old index at " + dir); LOG.info("Cleaning old index at " + dir);
FileUtils.deleteDirectory(dir); FileUtils.deleteDirectory(dir);
} }
} }


resp.setStatus(202); resp.setStatus(202);
ServletUtils.sendJsonSuccess(req, resp); ServletUtils.sendJsonSuccess(req, resp);
} }


private Couch getCouch(final HttpServletRequest req) throws IOException { private Couch getCouch(final HttpServletRequest req) throws IOException {
final Configuration section = ini.getSection(new PathParts(req) final Configuration section = ini.getSection(new PathParts(req)
.getKey()); .getKey());
final String url = section.containsKey("url") ? section final String url = section.containsKey("url") ? section
.getString("url") : null; .getString("url") : null;
return new Couch(client, url); return new Couch(client, url);
} }


private synchronized DatabaseIndexer getIndexer(final Database database) private synchronized DatabaseIndexer getIndexer(final Database database)
throws IOException, JSONException { throws IOException, JSONException {
DatabaseIndexer result = indexers.get(database); DatabaseIndexer result = indexers.get(database);
Thread thread = threads.get(database); Thread thread = threads.get(database);
if (result == null || thread == null || !thread.isAlive()) { if (result == null || thread == null || !thread.isAlive()) {
result = new DatabaseIndexer(client, root, database, ini); result = new DatabaseIndexer(client, root, database, ini);
thread = new Thread(result); thread = new Thread(result);
thread.start(); thread.start();
result.awaitInitialization(); result.awaitInitialization();
if (result.isClosed()) { if (result.isClosed()) {
return null; return null;
} else { } else {
indexers.put(database, result); indexers.put(database, result);
threads.put(database, thread); threads.put(database, thread);
} }
} }


return result; return result;
} }


private DatabaseIndexer getIndexer(final HttpServletRequest req) private DatabaseIndexer getIndexer(final HttpServletRequest req)
throws IOException, JSONException { throws IOException, JSONException {
final Couch couch = getCouch(req); final Couch couch = getCouch(req);
final Database database = couch.getDatabase(new PathParts(req) final Database database = couch.getDatabase(new PathParts(req)
.getDatabaseName()); .getDatabaseName());
return getIndexer(database); return getIndexer(database);
} }


private void handleWelcomeReq(final HttpServletRequest req, private void handleWelcomeReq(final HttpServletRequest req,
final HttpServletResponse resp) throws ServletException, final HttpServletResponse resp) throws ServletException,
IOException, JSONException { IOException, JSONException {
final Package p = this.getClass().getPackage(); final Package p = this.getClass().getPackage();
final JSONObject welcome = new JSONObject(); final JSONObject welcome = new JSONObject();
welcome.put("couchdb-lucene", "Welcome"); welcome.put("couchdb-lucene", "Welcome");
welcome.put("version", p.getImplementationVersion()); welcome.put("version", p.getImplementationVersion());
ServletUtils.sendJson(req, resp, welcome); ServletUtils.sendJson(req, resp, welcome);
} }


@Override @Override
protected void doGet(final HttpServletRequest req, protected void doGet(final HttpServletRequest req,
final HttpServletResponse resp) throws ServletException, final HttpServletResponse resp) throws ServletException,
IOException { IOException {
try { try {
doGetInternal(req, resp); doGetInternal(req, resp);
} catch (final JSONException e) { } catch (final JSONException e) {
resp.sendError(500); resp.sendError(500);
} }
} }


private void doGetInternal(final HttpServletRequest req, final HttpServletResponse resp) private void doGetInternal(final HttpServletRequest req, final HttpServletResponse resp)
throws ServletException, IOException, JSONException { throws ServletException, IOException, JSONException {
switch (StringUtils.countMatches(req.getRequestURI(), "/")) { switch (StringUtils.countMatches(req.getRequestURI(), "/")) {
case 1: case 1:
handleWelcomeReq(req, resp); handleWelcomeReq(req, resp);
return; return;
case 5: case 5:
final DatabaseIndexer indexer = getIndexer(req); final DatabaseIndexer indexer = getIndexer(req);
if (indexer == null) { if (indexer == null) {
ServletUtils.sendJsonError(req, resp, 500, "error_creating_index"); ServletUtils.sendJsonError(req, resp, 500, "error_creating_index");
return; return;
} }
if (req.getParameter("q") == null) { if (req.getParameter("q") == null) {
indexer.info(req, resp); indexer.info(req, resp);
} else { } else {
indexer.search(req, resp); indexer.search(req, resp);
} }
return; return;
} }


ServletUtils.sendJsonError(req, resp, 400, "bad_request"); ServletUtils.sendJsonError(req, resp, 400, "bad_request");
} }


@Override @Override
protected void doPost(final HttpServletRequest req, protected void doPost(final HttpServletRequest req,
final HttpServletResponse resp) throws ServletException, final HttpServletResponse resp) throws ServletException,
IOException { IOException {
try { try {
doPostInternal(req, resp); doPostInternal(req, resp);
} catch (final JSONException e) { } catch (final JSONException e) {
resp.sendError(500); resp.sendError(500);
} }
} }


private void doPostInternal(final HttpServletRequest req, final HttpServletResponse resp) private void doPostInternal(final HttpServletRequest req, final HttpServletResponse resp)
throws IOException, JSONException { throws IOException, JSONException {
switch (StringUtils.countMatches(req.getRequestURI(), "/")) { switch (StringUtils.countMatches(req.getRequestURI(), "/")) {
case 3: case 3:
if (req.getPathInfo().endsWith("/_cleanup")) { if (req.getPathInfo().endsWith("/_cleanup")) {
cleanup(req, resp); cleanup(req, resp);
return; return;
} }
break; break;
case 6: case 6:
final DatabaseIndexer indexer = getIndexer(req); final DatabaseIndexer indexer = getIndexer(req);
indexer.admin(req, resp); indexer.admin(req, resp);
return; return;
} }
ServletUtils.sendJsonError(req, resp, 400, "bad_request"); ServletUtils.sendJsonError(req, resp, 400, "bad_request");
} }


} }

0 comments on commit 60e5d08

Please sign in to comment.