use of annis.service.objects.CorpusConfig in project ANNIS by korpling.
the class QueryController method executeSearch.
/**
* Executes a query.
* @param replaceOldTab
* @param freshQuery If true the offset and the selected matches are reset before executing the query.
*/
public void executeSearch(boolean replaceOldTab, boolean freshQuery) {
if (freshQuery) {
getState().getOffset().setValue(0l);
getState().getSelectedMatches().setValue(new TreeSet<Long>());
// get the value for the visible segmentation from the configured context
Set<String> selectedCorpora = getState().getSelectedCorpora().getValue();
CorpusConfig config = new CorpusConfig();
if (selectedCorpora != null && !selectedCorpora.isEmpty()) {
config = ui.getCorpusConfigWithCache(selectedCorpora.iterator().next());
}
if (config.containsKey(SearchOptionsPanel.KEY_DEFAULT_BASE_TEXT_SEGMENTATION)) {
String configVal = config.getConfig(SearchOptionsPanel.KEY_DEFAULT_BASE_TEXT_SEGMENTATION);
if ("".equals(configVal) || "tok".equals(configVal)) {
configVal = null;
}
getState().getVisibleBaseText().setValue(configVal);
} else {
getState().getVisibleBaseText().setValue(getState().getContextSegmentation().getValue());
}
}
// construct a query from the current properties
DisplayedResultQuery displayedQuery = getSearchQuery();
searchView.getControlPanel().getQueryPanel().setStatus("Searching...");
cancelSearch();
// cleanup resources
VaadinSession session = VaadinSession.getCurrent();
session.setAttribute(IFrameResourceMap.class, new IFrameResourceMap());
if (session.getAttribute(MediaController.class) != null) {
session.getAttribute(MediaController.class).clearMediaPlayers();
}
searchView.updateFragment(displayedQuery);
if (displayedQuery.getCorpora() == null || displayedQuery.getCorpora().isEmpty()) {
Notification.show("Please select a corpus", Notification.Type.WARNING_MESSAGE);
return;
}
if ("".equals(displayedQuery.getQuery())) {
Notification.show("Empty query", Notification.Type.WARNING_MESSAGE);
return;
}
addHistoryEntry(displayedQuery);
AsyncWebResource res = Helper.getAnnisAsyncWebResource();
//
// begin execute match fetching
//
ResultViewPanel oldPanel = searchView.getLastSelectedResultView();
if (replaceOldTab) {
// remove old panel from view
searchView.closeTab(oldPanel);
}
ResultViewPanel newResultView = new ResultViewPanel(ui, ui, ui.getInstanceConfig(), displayedQuery);
newResultView.getPaging().addCallback(new SpecificPagingCallback(ui, searchView, newResultView, displayedQuery));
TabSheet.Tab newTab;
List<ResultViewPanel> existingResultPanels = getResultPanels();
String caption = existingResultPanels.isEmpty() ? "Query Result" : "Query Result #" + (existingResultPanels.size() + 1);
newTab = searchView.getMainTab().addTab(newResultView, caption);
newTab.setClosable(true);
newTab.setIcon(FontAwesome.SEARCH);
searchView.getMainTab().setSelectedTab(newResultView);
searchView.notifiyQueryStarted();
Background.run(new ResultFetchJob(displayedQuery, newResultView, ui));
//
// end execute match fetching
//
//
// begin execute count
//
// start count query
searchView.getControlPanel().getQueryPanel().setCountIndicatorEnabled(true);
AsyncWebResource countRes = res.path("query").path("search").path("count").queryParam("q", Helper.encodeJersey(displayedQuery.getQuery())).queryParam("corpora", Helper.encodeJersey(StringUtils.join(displayedQuery.getCorpora(), ",")));
Future<MatchAndDocumentCount> futureCount = countRes.get(MatchAndDocumentCount.class);
state.getExecutedTasks().put(QueryUIState.QueryType.COUNT, futureCount);
Background.run(new CountCallback(newResultView, displayedQuery.getLimit(), ui));
//
// end execute count
//
}
use of annis.service.objects.CorpusConfig in project ANNIS by korpling.
the class ExportBackgroundJob method call.
@Override
public File call() throws Exception {
final File currentTmpFile = File.createTempFile("annis-export", "." + exporter.getFileEnding());
currentTmpFile.deleteOnExit();
final Map<String, CorpusConfig> corpusConfigs = new LinkedHashMap<>();
for (String c : query.getCorpora()) {
corpusConfigs.put(c, ui.getCorpusConfigWithCache(c));
}
try (final OutputStreamWriter outWriter = new OutputStreamWriter(new FileOutputStream(currentTmpFile), "UTF-8")) {
exportError = exporter.convertText(query.getQuery(), query.getLeftContext(), query.getRightContext(), query.getCorpora(), query.getAnnotationKeys(), query.getParameters(), query.getAlignmc(), Helper.getAnnisWebResource().path("query"), outWriter, eventBus, corpusConfigs);
} finally {
ui.access(new Runnable() {
@Override
public void run() {
if (panel != null) {
panel.showResult(currentTmpFile, exportError);
}
if (exportError instanceof UniformInterfaceException) {
ui.getQueryController().reportServiceException((UniformInterfaceException) exportError, true);
}
}
});
}
return currentTmpFile;
}
use of annis.service.objects.CorpusConfig in project ANNIS by korpling.
the class QueryServiceImpl method corpusConfig.
@GET
@Path("corpora/{top}/config")
@Produces("application/xml")
public CorpusConfig corpusConfig(@PathParam("top") String toplevelName) {
Subject user = SecurityUtils.getSubject();
user.checkPermission("query:config:" + toplevelName);
try {
Properties tmp = queryDao.getCorpusConfigurationSave(toplevelName);
CorpusConfig corpusConfig = new CorpusConfig();
corpusConfig.setConfig(tmp);
return corpusConfig;
} catch (Exception ex) {
log.error("problems with reading config", ex);
throw new WebApplicationException(ex, 500);
}
}
use of annis.service.objects.CorpusConfig in project ANNIS by korpling.
the class ResultViewPanel method updateVariables.
private void updateVariables(SaltProject p) {
segmentationLayerSet.addAll(getSegmentationNames(p));
tokenAnnotationLevelSet.addAll(CommonHelper.getTokenAnnotationLevelSet(p));
Set<String> hiddenTokenAnnos = null;
Set<String> corpusNames = CommonHelper.getToplevelCorpusNames(p);
for (String corpusName : corpusNames) {
CorpusConfig corpusConfig = Helper.getCorpusConfig(corpusName);
if (corpusConfig != null && corpusConfig.containsKey(MAPPING_HIDDEN_ANNOS)) {
hiddenTokenAnnos = new HashSet<>(Arrays.asList(StringUtils.split(corpusConfig.getConfig(MAPPING_HIDDEN_ANNOS), ",")));
}
}
if (hiddenTokenAnnos != null) {
for (String tokenLevel : hiddenTokenAnnos) {
if (tokenAnnotationLevelSet.contains(tokenLevel)) {
tokenAnnotationLevelSet.remove(tokenLevel);
}
}
}
updateSegmentationLayer(segmentationLayerSet);
updateVisibleToken(tokenAnnotationLevelSet);
}
Aggregations