18
19
import static java.util.Arrays.asList;
19
20
import annis.WekaHelper;
20
21
import annis.dao.AnnisDao;
22
import annis.dao.Match;
21
23
import annis.ql.parser.QueryData;
22
24
import annis.resolver.ResolverEntry;
23
25
import annis.resolver.SingleResolverRequest;
24
26
import annis.service.objects.AnnisCorpus;
25
27
import annis.service.objects.CorpusConfig;
26
import annis.sqlgen.AnnotateSqlGenerator.AnnotateQueryData;
28
import annis.sqlgen.AnnotateQueryData;
29
import annis.sqlgen.LimitOffsetQueryData;
27
30
import de.hu_berlin.german.korpling.saltnpepper.salt.saltCommon.SaltProject;
28
31
import java.io.IOException;
29
32
import java.util.Arrays;
39
42
import javax.ws.rs.WebApplicationException;
40
43
import javax.ws.rs.core.MediaType;
41
44
import javax.ws.rs.core.Response;
42
import javax.xml.bind.annotation.XmlElementWrapper;
44
46
import org.apache.log4j.Logger;
45
47
import org.springframework.stereotype.Component;
64
66
* Log the successful initialization of this bean.
67
* XXX: This should be a private method annotated with <tt>@PostConstruct</tt>, but
68
* that doesn't seem to work. As a work-around, the method is called
69
* by Spring as an init-method.
68
* <p> XXX: This should be a private method annotated with
69
* <tt>@PostConstruct</tt>, but that doesn't seem to work. As a work-around,
70
* the method is called by Spring as an init-method.
71
72
public void sayHello()
152
153
"text/plain").entity("one ore more corpora are unknown to the system").
156
157
String logParameters = createAnnotateLogParameters(left, right, offset,
159
160
QueryData data = annisDao.parseAQL(query, corpusIDs);
160
data.addExtension(new AnnotateQueryData(offset, limit, left,
161
data.addExtension(new LimitOffsetQueryData(offset, limit));
162
data.addExtension(new AnnotateQueryData(left, right));
162
163
long start = new Date().getTime();
163
164
SaltProject p = annisDao.annotate(data);
164
165
long end = new Date().getTime();
173
@Produces("application/xml")
174
public List<Match> find(@QueryParam("q") String query,
175
@QueryParam("corpora") String rawCorpusNames,
176
@DefaultValue("0") @QueryParam("offset") String offsetRaw,
177
@DefaultValue("10") @QueryParam("limit") String limitRaw) throws IOException
181
throw new WebApplicationException(
182
Response.status(Response.Status.BAD_REQUEST).type(
183
MediaType.TEXT_PLAIN).entity(
184
"missing required parameter 'q'").build());
186
if (rawCorpusNames == null)
188
throw new WebApplicationException(
189
Response.status(Response.Status.BAD_REQUEST).type(
190
MediaType.TEXT_PLAIN).entity(
191
"missing required parameter 'corpora'").build());
194
int offset = Integer.parseInt(offsetRaw);
195
int limit = Integer.parseInt(limitRaw);
197
List<String> corpusNames = Arrays.asList(rawCorpusNames.split(","));
198
List<Long> corpusIDs = annisDao.listCorpusByName(
200
if (corpusIDs.size() != corpusNames.size())
202
throw new WebApplicationException(
203
Response.status(Response.Status.NOT_FOUND).type(
204
"text/plain").entity("one ore more corpora are unknown to the system").
208
QueryData data = annisDao.parseAQL(query, corpusIDs);
209
data.setCorpusConfiguration(annisDao.getCorpusConfiguration());
210
data.addExtension(new LimitOffsetQueryData(offset, limit));
211
return annisDao.find(data);
171
215
@Path("graphs/{top}/{doc}")
172
216
@Produces("application/xml")
173
217
public SaltProject graph(@PathParam("top") String toplevelCorpusName,
185
229
catch (Exception ex)
187
231
log.error("error when accessing graph " + toplevelCorpusName + "/"
189
233
throw new WebApplicationException(ex);
194
238
@Path("resolver/{corpusName}/{namespace}/{type}")
195
public List<ResolverEntry> resolver(@PathParam("corpusName") String corpusName,
196
@PathParam("namespace") String namespace,
239
public List<ResolverEntry> resolver(@PathParam("corpusName") String corpusName,
240
@PathParam("namespace") String namespace,
197
241
@PathParam("type") String type)
199
243
ResolverEntry.ElementType enumType = ResolverEntry.ElementType.valueOf(type);
202
246
return annisDao.getResolverEntries(r);
207
251
public List<AnnisCorpus> corpora()
209
253
return annisDao.listCorpora();
213
257
@Path("corpora/{top}/config")
214
258
public CorpusConfig corpusconfig(@PathParam("top") String toplevelName)
241
285
private void logQuery(String queryFunction, String toplevelCorpus,
242
String documentName, long runtime)
286
String documentName, long runtime)
244
288
logQuery(queryFunction, null, asList(toplevelCorpus), runtime, "document: "
248
292
private void logQuery(String queryFunction, String annisQuery,
249
List<String> corpusNames, long runtime)
293
List<String> corpusNames, long runtime)
251
295
logQuery(queryFunction, annisQuery, corpusNames, runtime, null);
254
298
private void logQuery(String queryFunction, String annisQuery,
255
List<String> corpusNames, long runtime, String options)
299
List<String> corpusNames, long runtime, String options)
257
301
StringBuilder sb = new StringBuilder();
258
302
sb.append("function: ");
259
303
sb.append(queryFunction);
261
if (annisQuery != null && ! annisQuery.isEmpty())
305
if (annisQuery != null && !annisQuery.isEmpty())
263
307
sb.append("query: ");
264
308
sb.append(annisQuery);