added a search box and navigation to api steering servlet

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7178 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 15 years ago
parent 09c208a3ab
commit 4e8cf0c72c

@ -36,9 +36,22 @@
to a scheduler for a periodic execution. to a scheduler for a periodic execution.
</p>::#(/inline)# </p>::#(/inline)#
#(showtable)#:: #(showtable)#::
<form action="Table_API_p.html" method="post" enctype="multipart/form-data" accept-charset="UTF-8" name="apilist"> <form action="Table_API_p.html" method="post" enctype="multipart/form-data" accept-charset="UTF-8" name="apilist" target="_self">
<fieldset> <fieldset>
<legend><label for="table">Recorded Actions</label></legend> <legend><label for="table">Recorded Actions</label></legend>
<p><span id="resCounter" style="display: inline;">
#(navigation)#
::
#(left)#<img src="env/grafics/navdl.gif">::<a href="Table_API_p.html?startRecord=#[startRecord]#&maximumRecords=#[maximumRecords]#&inline=#(inline)#false::true#(/inline)#&filter=#[filter]#" target="_self"><img src="env/grafics/navsl.gif"></a>#(/left)#
#[startRecord]#-#[to]# of #[of]#
#(right)#<img src="env/grafics/navdr.gif">::<a href="Table_API_p.html?startRecord=#[startRecord]#&maximumRecords=#[maximumRecords]#&inline=#(inline)#false::true#(/inline)#&filter=#[filter]#" target="_self"><img src="env/grafics/navsr.gif"></a>#(/right)#
<img src="env/grafics/nave.gif">#(/navigation)#
<input type="hidden" name="startRecord" value="#[startRecord]#">
<input type="hidden" name="maximumRecords" value="#[maximumRecords]#">
<input type="hidden" name="inline" value="#(inline)#false::true#(/inline)#">
<input type="hidden" name="filter" value="#[filter]#">
<input type="text" name="query" value="#[query]#" style="border:0px;height:20px;background-image:url('env/grafics/find.gif');background-repeat:no-repeat;background-position:right top;">
</span><br/></p>
<table class="sortable" border="0" cellpadding="2" cellspacing="1"> <table class="sortable" border="0" cellpadding="2" cellspacing="1">
<tr class="TableHeader" valign="bottom"> <tr class="TableHeader" valign="bottom">
<td><input type="checkbox" name="allswitch" onclick="setall(this.form.name, this.value)" /></td> <td><input type="checkbox" name="allswitch" onclick="setall(this.form.name, this.value)" /></td>

@ -19,10 +19,13 @@
import java.io.IOException; import java.io.IOException;
import java.text.DateFormat; import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TreeSet; import java.util.TreeSet;
import java.util.regex.Pattern;
import net.yacy.cora.protocol.RequestHeader; import net.yacy.cora.protocol.RequestHeader;
import net.yacy.kelondro.blob.Tables; import net.yacy.kelondro.blob.Tables;
@ -44,16 +47,24 @@ public class Table_API_p {
prop.put("showexec", 0); prop.put("showexec", 0);
prop.put("showtable", 0); prop.put("showtable", 0);
prop.put("inline", 0); int startRecord = 0;
int maximumRecords = 25;
boolean inline = false; boolean inline = false;
if (post != null && post.get("inline","false").equals("true")) { Pattern query = Pattern.compile(".*");
prop.put("inline", 1); if (post != null && post.containsKey("startRecord")) startRecord = post.getInt("startRecord", 0);
inline = true; if (post != null && post.containsKey("maximumRecords")) maximumRecords = post.getInt("maximumRecords", 0);
if (post != null && post.containsKey("query") && post.get("query", "").length() > 0) {
query = Pattern.compile(".*" + post.get("query", "") + ".*");
startRecord = 0;
maximumRecords = 1000;
} }
if (post != null && post.get("inline","false").equals("true")) inline = true;
prop.put("inline", (inline) ? 1 : 0);
String typefilter = ".*"; Pattern typefilter = Pattern.compile(".*");
if (post != null && post.containsKey("filter")) { if (post != null && post.containsKey("filter") && post.get("filter", "").length() > 0) {
typefilter = post.get("filter", ".*"); typefilter = Pattern.compile(post.get("filter", ".*"));
} }
String pk; String pk;
@ -136,7 +147,7 @@ public class Table_API_p {
Map<String, Integer> l = sb.tables.execAPICall(pks, "localhost", (int) sb.getConfigLong("port", 8080), sb.getConfig("adminAccountBase64MD5", "")); Map<String, Integer> l = sb.tables.execAPICall(pks, "localhost", (int) sb.getConfigLong("port", 8080), sb.getConfig("adminAccountBase64MD5", ""));
// construct result table // construct result table
prop.put("showexec", 1); prop.put("showexec", l.size() > 0 ? 1 : 0);
final Iterator<Map.Entry<String, Integer>> resultIterator = l.entrySet().iterator(); final Iterator<Map.Entry<String, Integer>> resultIterator = l.entrySet().iterator();
Map.Entry<String, Integer> record; Map.Entry<String, Integer> record;
@ -158,18 +169,32 @@ public class Table_API_p {
prop.put("showtable_inline", inline ? 1 : 0); prop.put("showtable_inline", inline ? 1 : 0);
// insert rows // insert rows
List<Tables.Row> table = new ArrayList<Tables.Row>(maximumRecords);
int count = 0; int count = 0;
int tablesize = 0;
try { try {
tablesize = sb.tables.size(WorkTables.TABLE_API_NAME);
final Iterator<Tables.Row> plainIterator = sb.tables.iterator(WorkTables.TABLE_API_NAME); final Iterator<Tables.Row> plainIterator = sb.tables.iterator(WorkTables.TABLE_API_NAME);
final Iterator<Tables.Row> mapIterator = sb.tables.orderBy(plainIterator, -1, WorkTables.TABLE_API_COL_DATE_RECORDING).iterator(); final Iterator<Tables.Row> mapIterator = sb.tables.orderBy(plainIterator, -1, WorkTables.TABLE_API_COL_DATE_RECORDING).iterator();
Tables.Row row; Tables.Row r;
boolean dark = true; boolean dark = true;
boolean scheduledactions = false; boolean scheduledactions = false;
int c = 0;
String type, comment;
// first prepare a list
while (mapIterator.hasNext()) { while (mapIterator.hasNext()) {
row = mapIterator.next(); r = mapIterator.next();
if (row == null) continue; if (r == null) continue;
String type = new String(row.get(WorkTables.TABLE_API_COL_TYPE)); type = new String(r.get(WorkTables.TABLE_API_COL_TYPE));
if (!type.matches(typefilter)) continue; if (!typefilter.matcher(type).matches()) continue;
comment = new String(r.get(WorkTables.TABLE_API_COL_COMMENT));
if (!query.matcher(comment).matches()) continue;
if (c >= startRecord) table.add(r);
c++;
if (table.size() >= maximumRecords) break;
}
// then work on the list
for (Tables.Row row: table) {
Date now = new Date(); Date now = new Date();
Date date = row.containsKey(WorkTables.TABLE_API_COL_DATE) ? row.get(WorkTables.TABLE_API_COL_DATE, now) : null; Date date = row.containsKey(WorkTables.TABLE_API_COL_DATE) ? row.get(WorkTables.TABLE_API_COL_DATE, now) : null;
Date date_recording = row.get(WorkTables.TABLE_API_COL_DATE_RECORDING, date); Date date_recording = row.get(WorkTables.TABLE_API_COL_DATE_RECORDING, date);
@ -190,7 +215,7 @@ public class Table_API_p {
prop.put("showtable_list_" + count + "_selectedHours", unit.equals("hours") ? 1 : 0); prop.put("showtable_list_" + count + "_selectedHours", unit.equals("hours") ? 1 : 0);
prop.put("showtable_list_" + count + "_selectedDays", (unit.length() == 0 || unit.equals("days")) ? 1 : 0); prop.put("showtable_list_" + count + "_selectedDays", (unit.length() == 0 || unit.equals("days")) ? 1 : 0);
prop.put("showtable_list_" + count + "_repeatTime", time); prop.put("showtable_list_" + count + "_repeatTime", time);
prop.put("showtable_list_" + count + "_type", type); prop.put("showtable_list_" + count + "_type", row.get(WorkTables.TABLE_API_COL_TYPE));
prop.put("showtable_list_" + count + "_comment", row.get(WorkTables.TABLE_API_COL_COMMENT)); prop.put("showtable_list_" + count + "_comment", row.get(WorkTables.TABLE_API_COL_COMMENT));
prop.put("showtable_list_" + count + "_inline_url", "http://" + sb.myPublicIP() + ":" + sb.getConfig("port", "8080") + new String(row.get(WorkTables.TABLE_API_COL_URL))); prop.put("showtable_list_" + count + "_inline_url", "http://" + sb.myPublicIP() + ":" + sb.getConfig("port", "8080") + new String(row.get(WorkTables.TABLE_API_COL_URL)));
@ -232,7 +257,8 @@ public class Table_API_p {
} }
} }
prop.put("showtable_list_" + count + "_scheduler_inline", inline ? "true" : "false"); prop.put("showtable_list_" + count + "_scheduler_inline", inline ? "true" : "false");
prop.put("showtable_list_" + count + "_scheduler_filter", typefilter); prop.put("showtable_list_" + count + "_scheduler_filter", typefilter.pattern());
prop.put("showtable_list_" + count + "_scheduler_query", query.pattern());
count++; count++;
} }
if (scheduledactions) { if (scheduledactions) {
@ -247,6 +273,33 @@ public class Table_API_p {
prop.put("showtable_list", count); prop.put("showtable_list", count);
prop.put("showtable_num", count); prop.put("showtable_num", count);
// write navigation details
prop.put("showtable_startRecord", startRecord);
prop.put("showtable_maximumRecords", maximumRecords);
prop.put("showtable_inline", (inline) ? 1 : 0);
prop.put("showtable_filter", typefilter.pattern());
prop.put("showtable_query", query.pattern().replaceAll("\\.\\*", ""));
if (tablesize >= 50) {
prop.put("showtable_navigation", 1);
prop.put("showtable_navigation_startRecord", startRecord);
prop.put("showtable_navigation_to", Math.min(tablesize, startRecord + maximumRecords));
prop.put("showtable_navigation_of", tablesize);
prop.put("showtable_navigation_left", startRecord == 0 ? 0 : 1);
prop.put("showtable_navigation_left_startRecord", Math.max(0, startRecord - maximumRecords));
prop.put("showtable_navigation_left_maximumRecords", maximumRecords);
prop.put("showtable_navigation_left_inline", (inline) ? 1 : 0);
prop.put("showtable_navigation_left_filter", typefilter.pattern());
prop.put("showtable_navigation_left", startRecord == 0 ? 0 : 1);
prop.put("showtable_navigation_filter", typefilter.pattern());
prop.put("showtable_navigation_right", startRecord + maximumRecords >= tablesize ? 0 : 1);
prop.put("showtable_navigation_right_startRecord", Math.min(tablesize - maximumRecords, startRecord + maximumRecords));
prop.put("showtable_navigation_right_maximumRecords", maximumRecords);
prop.put("showtable_navigation_right_inline", (inline) ? 1 : 0);
prop.put("showtable_navigation_right_filter", typefilter.pattern());
} else {
prop.put("showtable_navigation", 0);
}
// return rewrite properties // return rewrite properties
return prop; return prop;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 B

Loading…
Cancel
Save