Search in sources :

Example 1 with ResolverEntry

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;
}
Also used : ClientHandlerException(com.sun.jersey.api.client.ClientHandlerException) SLayer(org.corpus_tools.salt.core.SLayer) SNode(org.corpus_tools.salt.core.SNode) SingleResolverRequest(annis.resolver.SingleResolverRequest) ResolverEntry(annis.resolver.ResolverEntry) WebResource(com.sun.jersey.api.client.WebResource) LinkedList(java.util.LinkedList) UniformInterfaceException(com.sun.jersey.api.client.UniformInterfaceException) HashSet(java.util.HashSet)

Example 2 with ResolverEntry

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);
    }
}
Also used : SNode(org.corpus_tools.salt.core.SNode) ResolverEntry(annis.resolver.ResolverEntry) Properties(java.util.Properties) LinkedList(java.util.LinkedList) Random(java.util.Random)

Example 3 with ResolverEntry

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);
}
Also used : SingleResolverRequest(annis.resolver.SingleResolverRequest) ResolverEntry(annis.resolver.ResolverEntry) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Example 4 with ResolverEntry

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<>();
    }
}
Also used : SQLException(java.sql.SQLException) ResolverEntry(annis.resolver.ResolverEntry) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) Transactional(org.springframework.transaction.annotation.Transactional)

Example 5 with ResolverEntry

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;
}
Also used : ResolverEntry(annis.resolver.ResolverEntry) Properties(java.util.Properties) LinkedList(java.util.LinkedList) HashSet(java.util.HashSet)

Aggregations

ResolverEntry (annis.resolver.ResolverEntry)5 LinkedList (java.util.LinkedList)3 SingleResolverRequest (annis.resolver.SingleResolverRequest)2 HashSet (java.util.HashSet)2 Properties (java.util.Properties)2 SNode (org.corpus_tools.salt.core.SNode)2 ClientHandlerException (com.sun.jersey.api.client.ClientHandlerException)1 UniformInterfaceException (com.sun.jersey.api.client.UniformInterfaceException)1 WebResource (com.sun.jersey.api.client.WebResource)1 Connection (java.sql.Connection)1 PreparedStatement (java.sql.PreparedStatement)1 SQLException (java.sql.SQLException)1 Random (java.util.Random)1 GET (javax.ws.rs.GET)1 Path (javax.ws.rs.Path)1 Produces (javax.ws.rs.Produces)1 SLayer (org.corpus_tools.salt.core.SLayer)1 Transactional (org.springframework.transaction.annotation.Transactional)1