Search in sources :

Example 1 with HistoryReader

use of org.opengrok.indexer.history.HistoryReader in project OpenGrok by OpenGrok.

the class AnalyzerGuru method populateDocument.

/**
 * Populate a Lucene document with the required fields.
 *
 * @param doc The document to populate
 * @param file The file to index
 * @param path Where the file is located (from source root)
 * @param fa The analyzer to use on the file
 * @param xrefOut Where to write the xref (possibly {@code null})
 * @throws IOException If an exception occurs while collecting the data
 * @throws InterruptedException if a timeout occurs
 */
public void populateDocument(Document doc, File file, String path, AbstractAnalyzer fa, Writer xrefOut) throws IOException, InterruptedException {
    String date = DateTools.timeToString(file.lastModified(), DateTools.Resolution.MILLISECOND);
    path = Util.fixPathIfWindows(path);
    doc.add(new Field(QueryBuilder.U, Util.path2uid(path, date), string_ft_stored_nanalyzed_norms));
    doc.add(new Field(QueryBuilder.FULLPATH, file.getAbsolutePath(), string_ft_nstored_nanalyzed_norms));
    doc.add(new SortedDocValuesField(QueryBuilder.FULLPATH, new BytesRef(file.getAbsolutePath())));
    if (RuntimeEnvironment.getInstance().isHistoryEnabled()) {
        try {
            HistoryGuru histGuru = HistoryGuru.getInstance();
            HistoryReader hr = histGuru.getHistoryReader(file);
            if (hr != null) {
                doc.add(new TextField(QueryBuilder.HIST, hr));
                History history;
                if ((history = histGuru.getHistory(file)) != null) {
                    List<HistoryEntry> historyEntries = history.getHistoryEntries(1, 0);
                    if (!historyEntries.isEmpty()) {
                        HistoryEntry histEntry = historyEntries.get(0);
                        doc.add(new TextField(QueryBuilder.LASTREV, histEntry.getRevision(), Store.YES));
                    }
                }
            }
        } catch (HistoryException e) {
            LOGGER.log(Level.WARNING, "An error occurred while reading history: ", e);
        }
    }
    doc.add(new Field(QueryBuilder.DATE, date, string_ft_stored_nanalyzed_norms));
    doc.add(new SortedDocValuesField(QueryBuilder.DATE, new BytesRef(date)));
    // `path' is not null, as it was passed to Util.path2uid() above.
    doc.add(new TextField(QueryBuilder.PATH, path, Store.YES));
    Project project = Project.getProject(path);
    if (project != null) {
        doc.add(new TextField(QueryBuilder.PROJECT, project.getPath(), Store.YES));
    }
    /*
         * Use the parent of the path -- not the absolute file as is done for
         * FULLPATH -- so that DIRPATH is the same convention as for PATH
         * above. A StringField, however, is used instead of a TextField.
         */
    File fpath = new File(path);
    String fileParent = fpath.getParent();
    if (fileParent != null && fileParent.length() > 0) {
        String normalizedPath = QueryBuilder.normalizeDirPath(fileParent);
        StringField npstring = new StringField(QueryBuilder.DIRPATH, normalizedPath, Store.NO);
        doc.add(npstring);
    }
    if (fa != null) {
        AbstractAnalyzer.Genre g = fa.getGenre();
        if (g == AbstractAnalyzer.Genre.PLAIN || g == AbstractAnalyzer.Genre.XREFABLE || g == AbstractAnalyzer.Genre.HTML) {
            doc.add(new Field(QueryBuilder.T, g.typeName(), string_ft_stored_nanalyzed_norms));
        }
        fa.analyze(doc, StreamSource.fromFile(file), xrefOut);
        String type = fa.getFileTypeName();
        doc.add(new StringField(QueryBuilder.TYPE, type, Store.YES));
    }
}
Also used : HistoryException(org.opengrok.indexer.history.HistoryException) History(org.opengrok.indexer.history.History) SortedDocValuesField(org.apache.lucene.document.SortedDocValuesField) TextField(org.apache.lucene.document.TextField) StringField(org.apache.lucene.document.StringField) Field(org.apache.lucene.document.Field) Project(org.opengrok.indexer.configuration.Project) StringField(org.apache.lucene.document.StringField) SortedDocValuesField(org.apache.lucene.document.SortedDocValuesField) TextField(org.apache.lucene.document.TextField) HistoryEntry(org.opengrok.indexer.history.HistoryEntry) HistoryGuru(org.opengrok.indexer.history.HistoryGuru) File(java.io.File) BytesRef(org.apache.lucene.util.BytesRef) HistoryReader(org.opengrok.indexer.history.HistoryReader)

Aggregations

File (java.io.File)1 Field (org.apache.lucene.document.Field)1 SortedDocValuesField (org.apache.lucene.document.SortedDocValuesField)1 StringField (org.apache.lucene.document.StringField)1 TextField (org.apache.lucene.document.TextField)1 BytesRef (org.apache.lucene.util.BytesRef)1 Project (org.opengrok.indexer.configuration.Project)1 History (org.opengrok.indexer.history.History)1 HistoryEntry (org.opengrok.indexer.history.HistoryEntry)1 HistoryException (org.opengrok.indexer.history.HistoryException)1 HistoryGuru (org.opengrok.indexer.history.HistoryGuru)1 HistoryReader (org.opengrok.indexer.history.HistoryReader)1