use of annis.resolver.ResolverEntry in project ANNIS by korpling.
the class ResolverProviderImpl method getResolverEntries.
@Override
public ResolverEntry[] getResolverEntries(SDocument doc) {
HashSet<ResolverEntry> visSet = new HashSet<ResolverEntry>();
// create a request for resolver entries
HashSet<SingleResolverRequest> resolverRequests = new HashSet<SingleResolverRequest>();
Set<String> nodeLayers = new HashSet<String>();
for (SNode n : doc.getDocumentGraph().getNodes()) {
for (SLayer layer : n.getLayers()) {
nodeLayers.add(layer.getName());
}
}
Set<String> edgeLayers = new HashSet<String>();
for (SRelation<SNode, SNode> e : doc.getDocumentGraph().getRelations()) {
for (SLayer layer : e.getLayers()) {
try {
edgeLayers.add(layer.getName());
} catch (NullPointerException ex) {
log.warn("NullPointerException when using Salt, was trying to get layer name", ex);
}
}
}
for (String ns : nodeLayers) {
resolverRequests.add(new SingleResolverRequest(doc.getGraph().getRoots().get(0).getName(), ns, ResolverEntry.ElementType.node));
}
for (String ns : edgeLayers) {
resolverRequests.add(new SingleResolverRequest(doc.getGraph().getRoots().get(0).getName(), ns, ResolverEntry.ElementType.edge));
}
// query with this resolver request and make sure it is unique
if (cacheResolver.containsKey(resolverRequests)) {
visSet.addAll(cacheResolver.get(resolverRequests));
} else {
List<ResolverEntry> resolverList = new LinkedList<ResolverEntry>();
WebResource resResolver = Helper.getAnnisWebResource().path("query").path("resolver");
for (SingleResolverRequest r : resolverRequests) {
List<ResolverEntry> tmp;
String corpusName = urlPathEscape.escape(r.getCorpusName());
String namespace = r.getNamespace();
String type = r.getType() == null ? null : r.getType().toString();
if (corpusName != null && namespace != null && type != null) {
WebResource res = resResolver.path(corpusName).path(namespace).path(type);
try {
tmp = res.get(new ResolverEntryListType());
resolverList.addAll(tmp);
} catch (UniformInterfaceException | ClientHandlerException ex) {
if (!AnnisBaseUI.handleCommonError(ex, "query resolver entries")) {
log.error("could not query resolver entries: " + res.toString(), ex);
}
}
}
}
visSet.addAll(resolverList);
cacheResolver.put(resolverRequests, resolverList);
}
// sort everything
ResolverEntry[] visArray = visSet.toArray(new ResolverEntry[visSet.size()]);
Arrays.sort(visArray, new ResolverEntryComparator());
return visArray;
}
use of annis.resolver.ResolverEntry in project ANNIS by korpling.
the class SingleResultPanel method initVisualizer.
private void initVisualizer() {
try {
ResolverEntry[] entries = resolverProvider == null ? new ResolverEntry[0] : resolverProvider.getResolverEntries(result);
visualizers = new LinkedList<>();
resolverEntries = new LinkedList<>();
List<VisualizerPanel> openVisualizers = new LinkedList<>();
List<SNode> segNodes = CommonHelper.getSortedSegmentationNodes(segmentationName, result.getDocumentGraph());
Map<String, Long> markedAndCovered = Helper.calculateMarkedAndCoveredIDs(result, segNodes, segmentationName);
Helper.calulcateColorsForMarkedAndCovered(result, markedAndCovered, markedCoveredMap);
String resultID = "" + new Random().nextInt(Integer.MAX_VALUE);
for (int i = 0; i < entries.length; i++) {
String htmlID = "resolver-" + resultNumber + "_" + i;
VisualizerPanel p = new VisualizerPanel(entries[i], result, match, visibleTokenAnnos, markedAndCovered, markedCoveredMap, markedExactMap, htmlID, resultID, this, segmentationName, ps, instanceConfig);
visualizers.add(p);
resolverEntries.add(entries[i]);
Properties mappings = entries[i].getMappings();
// resovler entry is used, for determine the visibility status
if (visualizerState.containsKey(entries[i].getId())) {
if (visualizerState.get(entries[i].getId())) {
openVisualizers.add(p);
}
} else {
if (Boolean.parseBoolean(mappings.getProperty(INITIAL_OPEN, "false"))) {
openVisualizers.add(p);
}
}
}
// attach visualizer
for (VisualizerPanel p : visualizers) {
addComponent(p);
}
for (VisualizerPanel p : openVisualizers) {
p.toggleVisualizer(true, null);
}
} catch (RuntimeException ex) {
log.error("problems with initializing Visualizer Panel", ex);
} catch (Exception ex) {
log.error("problems with initializing Visualizer Panel", ex);
}
}
use of annis.resolver.ResolverEntry in project ANNIS by korpling.
the class QueryServiceImpl method resolver.
@GET
@Path("resolver/{corpusName}/{namespace}/{type}")
@Produces("application/xml")
public List<ResolverEntry> resolver(@PathParam("corpusName") String corpusName, @PathParam("namespace") String namespace, @PathParam("type") String type) {
ResolverEntry.ElementType enumType = ResolverEntry.ElementType.valueOf(type);
SingleResolverRequest r = new SingleResolverRequest(corpusName, namespace, enumType);
return queryDao.getResolverEntries(r);
}
use of annis.resolver.ResolverEntry in project ANNIS by korpling.
the class QueryDaoImpl method getResolverEntries.
@Override
@Transactional(readOnly = true)
public List<ResolverEntry> getResolverEntries(SingleResolverRequest request) {
try (Connection conn = getDataSource().getConnection()) {
ResolverDaoHelper helper = new ResolverDaoHelper();
PreparedStatement stmt = helper.createPreparedStatement(conn);
helper.fillPreparedStatement(request, stmt);
List<ResolverEntry> result = helper.extractData(stmt.executeQuery());
return result;
} catch (SQLException ex) {
log.error("Could not get resolver entries from database", ex);
return new LinkedList<>();
}
}
use of annis.resolver.ResolverEntry in project ANNIS by korpling.
the class ResolverDaoHelper method extractData.
@Override
public List<ResolverEntry> extractData(ResultSet rs) throws SQLException, DataAccessException {
List<ResolverEntry> result = new LinkedList<>();
Set<RemoveIndexElement> removeEntries = new HashSet<>();
while (rs.next()) {
Properties mappings = new Properties();
String mappingsAsString = rs.getString("mappings");
if (mappingsAsString != null) {
// split the entrys
String[] entries = mappingsAsString.split(";");
for (String e : entries) {
// split key-value
String[] keyvalue = e.split(":", 2);
if (keyvalue.length == 2) {
mappings.put(keyvalue[0].trim(), keyvalue[1].trim());
}
}
}
String element = rs.getString("element");
ResolverEntry e = new ResolverEntry(rs.getLong("id"), rs.getString("corpus"), rs.getString("version"), rs.getString("namespace"), element == null ? null : ResolverEntry.ElementType.valueOf(element), rs.getString("vis_type"), rs.getString("display_name"), rs.getString("visibility"), mappings, rs.getInt("order"));
if ("removed".equals(e.getVisibility())) {
RemoveIndexElement r = new RemoveIndexElement(e);
removeEntries.add(r);
} else {
result.add(e);
}
}
// remove all entries which have a matching display_name,
// namespace, element and vis_type
ListIterator<ResolverEntry> it = result.listIterator();
while (it.hasNext()) {
ResolverEntry entry = it.next();
RemoveIndexElement idx = new RemoveIndexElement(entry);
if (removeEntries.contains(idx)) {
it.remove();
}
}
return result;
}
Aggregations