1 |
3189
|
berkley
|
/*
|
2 |
|
|
* Copyright 2006 Google Inc.
|
3 |
|
|
*
|
4 |
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
5 |
|
|
* use this file except in compliance with the License. You may obtain a copy of
|
6 |
|
|
* the License at
|
7 |
|
|
*
|
8 |
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
9 |
|
|
*
|
10 |
|
|
* Unless required by applicable law or agreed to in writing, software
|
11 |
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12 |
|
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13 |
|
|
* License for the specific language governing permissions and limitations under
|
14 |
|
|
* the License.
|
15 |
|
|
*/
|
16 |
|
|
package org.kepler.web.client;
|
17 |
|
|
|
18 |
|
|
import com.google.gwt.core.client.GWT;
|
19 |
|
|
import com.google.gwt.user.client.Command;
|
20 |
|
|
import com.google.gwt.user.client.DeferredCommand;
|
21 |
|
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
22 |
|
|
import com.google.gwt.user.client.rpc.ServiceDefTarget;
|
23 |
|
|
import com.google.gwt.user.client.ui.Composite;
|
24 |
|
|
|
25 |
|
|
public class MetacatResultsWidget extends Composite {
|
26 |
|
|
|
27 |
|
|
|
28 |
|
|
private final MetacatProvider metacatProvider = new MetacatProvider();
|
29 |
|
|
private final DynaTableWidget dynaTable;
|
30 |
|
|
private Command pendingRefresh;
|
31 |
|
|
private boolean queryPerformed = false;
|
32 |
|
|
private String lastSearch = null;
|
33 |
|
|
|
34 |
|
|
public class MetacatProvider implements DynaTableDataProvider {
|
35 |
|
|
|
36 |
|
|
public MetacatProvider() {
|
37 |
|
|
// Initialize the service.
|
38 |
|
|
//
|
39 |
|
|
keplerService = (KeplerServiceAsync) GWT.create(KeplerService.class);
|
40 |
|
|
|
41 |
|
|
// By default, we assume we'll make RPCs to a servlet, but see
|
42 |
|
|
// updateRowData(). There is special support for canned RPC responses.
|
43 |
|
|
// (Which is a totally demo hack, by the way :-)
|
44 |
|
|
//
|
45 |
|
|
ServiceDefTarget target = (ServiceDefTarget) keplerService;
|
46 |
|
|
|
47 |
|
|
// Use a module-relative URLs to ensure that this client code can find
|
48 |
|
|
// its way home, even when the URL changes (as might happen when you
|
49 |
|
|
// deploy this as a webapp under an external servlet container).
|
50 |
3207
|
berkley
|
|
51 |
|
|
//String moduleRelativeURL = GWT.getModuleBaseURL() + "kepler";
|
52 |
|
|
//String moduleRelativeURL = "http://library.kepler-project.org/kepler/gwt";
|
53 |
|
|
//String moduleRelativeURL = "http://offhegoes.kicks-ass.net:8080/kepler/gwt";
|
54 |
|
|
String moduleRelativeURL = "http://library.kepler-project.org/kepler/gwt";
|
55 |
|
|
System.out.println("connection url: " + moduleRelativeURL);
|
56 |
3189
|
berkley
|
target.setServiceEntryPoint(moduleRelativeURL);
|
57 |
|
|
}
|
58 |
|
|
|
59 |
|
|
public void updateRowData(final int startRow, final int maxRows,
|
60 |
|
|
final RowDataAcceptor acceptor, String searchTerm)
|
61 |
|
|
{
|
62 |
|
|
// Check the simple cache first.
|
63 |
|
|
if(searchTerm == null)
|
64 |
|
|
{
|
65 |
|
|
searchTerm = "%";
|
66 |
|
|
}
|
67 |
|
|
|
68 |
|
|
if(queryPerformed && lastSearch.trim().equals(searchTerm.trim()))
|
69 |
|
|
{
|
70 |
|
|
// Use the cached batch.
|
71 |
|
|
pushResults(acceptor, startRow, maxRows, lastResult);
|
72 |
|
|
return;
|
73 |
|
|
}
|
74 |
|
|
else
|
75 |
|
|
{
|
76 |
|
|
lastSearch = searchTerm;
|
77 |
|
|
}
|
78 |
|
|
|
79 |
|
|
/*keplerService.login("uid=kepler,o=unaffiliated,dc=ecoinformatics,dc=org",
|
80 |
|
|
new AsyncCallback() {
|
81 |
|
|
public void onFailure(Throwable caught) {
|
82 |
|
|
acceptor.failed(caught);
|
83 |
|
|
}
|
84 |
|
|
|
85 |
|
|
public void onSuccess(Object result) {
|
86 |
|
|
//handle successful login
|
87 |
|
|
}
|
88 |
|
|
});*/
|
89 |
|
|
|
90 |
|
|
//do the query
|
91 |
|
|
if(searchTerm == null)
|
92 |
|
|
{
|
93 |
|
|
lastSearch = "%";
|
94 |
|
|
}
|
95 |
|
|
|
96 |
|
|
keplerService.query(lastSearch, "", new AsyncCallback() {
|
97 |
|
|
public void onFailure(Throwable caught) {
|
98 |
|
|
acceptor.failed(caught);
|
99 |
|
|
}
|
100 |
|
|
|
101 |
|
|
public void onSuccess(Object result) {
|
102 |
|
|
//handle successful query
|
103 |
|
|
MetacatQueryResult[] queryResult = (MetacatQueryResult[])result;
|
104 |
|
|
lastStartRow = startRow;
|
105 |
|
|
lastMaxRows = maxRows;
|
106 |
|
|
lastResult = queryResult;
|
107 |
|
|
queryPerformed = true;
|
108 |
|
|
dynaTable.setMaxRowCount(queryResult.length);
|
109 |
|
|
pushResults(acceptor, startRow, maxRows, queryResult);
|
110 |
|
|
}
|
111 |
|
|
|
112 |
|
|
});
|
113 |
|
|
|
114 |
|
|
}
|
115 |
|
|
|
116 |
|
|
private void pushResults(RowDataAcceptor acceptor, int startRow,
|
117 |
|
|
int maxRows, MetacatQueryResult[] queryResults) {
|
118 |
|
|
int offset = (queryResults.length - 0) - startRow;
|
119 |
|
|
if(offset > maxRows)
|
120 |
|
|
{
|
121 |
|
|
offset = maxRows;
|
122 |
|
|
}
|
123 |
|
|
|
124 |
|
|
String[][] rows = new String[offset][];
|
125 |
|
|
for (int i = 0; i < offset; i++) {
|
126 |
|
|
MetacatQueryResult result = queryResults[startRow + i];
|
127 |
|
|
rows[i] = new String[3];
|
128 |
|
|
rows[i][0] = " ";
|
129 |
|
|
rows[i][1] = result.getName();
|
130 |
|
|
rows[i][2] = result.getDocid();
|
131 |
|
|
}
|
132 |
|
|
acceptor.accept(startRow, rows);
|
133 |
|
|
}
|
134 |
|
|
|
135 |
|
|
private final KeplerServiceAsync keplerService;
|
136 |
|
|
private int lastMaxRows = -1;
|
137 |
|
|
private MetacatQueryResult[] lastResult;
|
138 |
|
|
private int lastStartRow = -1;
|
139 |
|
|
}
|
140 |
|
|
|
141 |
|
|
public MetacatResultsWidget(int visibleRows) {
|
142 |
|
|
String[] columns = new String[]{"", "Name", "DocId"};
|
143 |
|
|
String[] styles = new String[]{"", "name", "docid"};
|
144 |
|
|
dynaTable = new DynaTableWidget(metacatProvider, columns, styles, visibleRows);
|
145 |
|
|
initWidget(dynaTable);
|
146 |
|
|
}
|
147 |
|
|
|
148 |
|
|
protected void onLoad() {
|
149 |
|
|
dynaTable.refresh();
|
150 |
|
|
}
|
151 |
|
|
}
|