blob: 4119e14362db67bf9622bfcc648545498fa2c004 [file] [log] [blame]
/*
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(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.apache.org/licenses/LICENSE-2.0
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.
*/
// flowscripts for using the Query Bean
// $Id: query.js,v 1.3 2004/10/22 12:14:23 jeremy Exp $
cocoon.load("resource://org/apache/cocoon/forms/flow/javascript/Form.js");
cocoon.load("flow/QuerySearcher.js");
cocoon.load("flow/QueryHistory.js");
cocoon.load("flow/QueryFavourites.js");
// display the User's Search History
function showHistory() {
var history = new QueryHistory(cocoon.parameters["history"]);
cocoon.sendPage(cocoon.parameters["screen"], {history: history.list()});
}
// erase the User's Search History
function clearHistory() {
var history = new QueryHistory(cocoon.parameters["history"]);
history.clear();
cocoon.sendPage(cocoon.parameters["screen"]);
}
// display the User's Favourite Searches
function showFavourites() {
var favourites = null;
try {
favourites = new QueryFavourites(cocoon.parameters["user-id"]);
cocoon.sendPage(cocoon.parameters["screen"], {queries: favourites.list()});
} catch (error) {
cocoon.sendPage("screen/error", {message: error});
}
}
// add a history item to the User's Favourite Searches
function addFavourite() {
var history = new QueryHistory(cocoon.parameters["history"]);
var favourites = null;
try {
favourites = new QueryFavourites(cocoon.parameters["user-id"]);
var query = history.get(cocoon.parameters["hid"], false);
if (query != null) {
favourites.add(query);
}
cocoon.sendPage(cocoon.parameters["screen"], {queries: favourites.list()});
} catch (error) {
cocoon.log.error(error);
cocoon.sendPage("screen/error", {message: error});
}
}
// add an item from the User's Favourite Searches, using it's ID
function removeFavourite() {
var favourites = null;
try {
favourites = new QueryFavourites(cocoon.parameters["user-id"]);
favourites.remove(cocoon.parameters["fid"]);
cocoon.sendPage(cocoon.parameters["screen"], {queries: favourites.list()});
} catch (error) {
cocoon.log.error(error);
cocoon.sendPage("screen/error", {message: error});
}
}
// perform searches
function doSearch() {
var screen = cocoon.parameters["screen"];
var searcher = null;
var favourites = null;
var history = new QueryHistory(cocoon.parameters["history"]);
try {
searcher = new QuerySearcher(cocoon.parameters["lucene-directory"], cocoon.parameters["lucene-analyzer"]);
favourites = new QueryFavourites();
var result = null;
if (!"".equals(cocoon.parameters["page"])) { // paging an existing Query
result = searcher.page(cocoon.parameters["page"], cocoon.parameters["hid"], history);
} else if (!"".equals(cocoon.parameters["query"])) { // running a quick Query
result = searcher.quicksearch(cocoon.parameters["type"], cocoon.parameters["bool"], cocoon.parameters["match"], cocoon.parameters["field"], cocoon.parameters["query"], cocoon.parameters["size"], history);
} else if (!"".equals(cocoon.parameters["fid"])) { // running a favourite Query
result = searcher.search(favourites.get(cocoon.parameters["fid"]), history);
} else if ("".equals(cocoon.parameters["hid"])) { // making a new Query to edit
var query = searcher.newquery(cocoon.parameters["type"], cocoon.parameters["bool"], cocoon.parameters["match"], cocoon.parameters["field"]);
if (edit(query)) {
result = searcher.search(query, history);
} else {
cocoon.sendPage("screen/cancelled", {message: "cancel.note"});
return;
}
} else { // editing a Query from history
var query = history.get(cocoon.parameters["hid"], true);
if (edit(query)) {
result = searcher.search(query, history);
} else {
cocoon.sendPage("screen/cancelled", {message: "cancel.note"});
return;
}
}
cocoon.sendPage(screen, {result: result});
} catch (error) {
cocoon.log.error(error);
cocoon.sendPage("screen/error", {message: error});
} finally {
if (searcher != null) searcher.close();
}
}
// allow the user to edit the query
function edit(query) {
var form = new Form(cocoon.parameters["form-definition"]);
form.createBinding(cocoon.parameters["bindingURI"]);
form.load(query);
form.showForm(cocoon.parameters["form"]);
if ("_submit".equals(form.submitId)) {
form.save(query);
cocoon.log.debug("form submitted");
query.id = null; // this is no longer a favourite, now it has been edited
return true;
} else {
cocoon.log.debug("form cancelled");
return false;
}
}