/** * Finds application elements files by its identifier prefix * * @param project project a project the application element belongs * @param prefix application element prefix * @return application elements primary files collection */ public static Collection<AppElementInfo> appElementsByPrefix(Project project, String prefix) { if (prefix != null) { try { final Collection<FileObject> roots = new ArrayList<>( QuerySupport.findRoots( project, null, Collections.<String>emptyList(), Collections.<String>emptyList())); QuerySupport q = QuerySupport.forRoots( FileIndexer.INDEXER_NAME, FileIndexer.INDEXER_VERSION, roots.toArray(new FileObject[roots.size()])); // Hack! I could not make case insensitive prefix query work, at this moment I've decided to // retrieve all elements to filter them later Collection<? extends IndexResult> queryResults = q.query( FileIndexer.APP_ELEMENT_NAME, "", QuerySupport.Kind.CASE_INSENSITIVE_PREFIX); // NOI18N List<AppElementInfo> results = new ArrayList<>(); for (IndexResult queryResult : queryResults) { String appElementName = queryResult.getValue(FileIndexer.APP_ELEMENT_NAME); if (appElementName != null && appElementName.toLowerCase().startsWith(prefix.toLowerCase())) { results.add(new AppElementInfo(appElementName, queryResult.getFile())); } } return results; } catch (IOException ex) { Logger.getLogger(IndexerQuery.class.getName()).log(Level.WARNING, null, ex); } return null; } else { return Collections.EMPTY_LIST; } }
/** * Gets FileObject for application element by application element name from index * * @param project a project the application element belongs * @param appElementId application element name * @return primary file for application element */ public static FileObject appElementId2File(Project project, String appElementId) { try { final Collection<FileObject> roots = new ArrayList<>( QuerySupport.findRoots( project, null, Collections.<String>emptyList(), Collections.<String>emptyList())); QuerySupport q = QuerySupport.forRoots( FileIndexer.INDEXER_NAME, FileIndexer.INDEXER_VERSION, roots.toArray(new FileObject[roots.size()])); Collection<? extends IndexResult> results = q.query(FileIndexer.APP_ELEMENT_NAME, appElementId, QuerySupport.Kind.EXACT); if (!results.isEmpty()) { IndexResult result = results.iterator().next(); return result.getFile(); } } catch (IOException ex) { Logger.getLogger(IndexerQuery.class.getName()).log(Level.WARNING, null, ex); } return null; }