Search in sources :

Example 1 with Project

use of org.opensolaris.opengrok.configuration.Project in project OpenGrok by OpenGrok.

the class HttpBasicAuthorizationPlugin method discoverGroup.

private void discoverGroup(String group, HttpServletRequest request, Set<String> descendants) {
    Group g;
    if ((g = Group.getByName(group)) != null) {
        // group discovery
        for (Project p : g.getRepositories()) {
            userProjects.get(request.getUserPrincipal().getName()).add(p.getName());
        }
        for (Project p : g.getProjects()) {
            userProjects.get(request.getUserPrincipal().getName()).add(p.getName());
        }
        for (Group grp : g.getDescendants()) {
            for (Project p : grp.getRepositories()) {
                userProjects.get(request.getUserPrincipal().getName()).add(p.getName());
            }
            for (Project p : grp.getProjects()) {
                userProjects.get(request.getUserPrincipal().getName()).add(p.getName());
            }
            descendants.add(grp.getName());
        }
        while (g != null) {
            descendants.add(g.getName());
            g = g.getParent();
        }
    }
}
Also used : Group(org.opensolaris.opengrok.configuration.Group) Project(org.opensolaris.opengrok.configuration.Project)

Example 2 with Project

use of org.opensolaris.opengrok.configuration.Project in project OpenGrok by OpenGrok.

the class Indexer method prepareIndexer.

/*
     * This is the first phase of the indexing where history cache is being
     * generated for repositories (at least for those which support getting
     * history per directory).
     *
     * PMD wants us to use length() > 0 && charAt(0) instead of startsWith()
     * for performance. We prefer clarity over performance here, so silence it.
     */
@SuppressWarnings("PMD.SimplifyStartsWith")
public void prepareIndexer(RuntimeEnvironment env, boolean searchRepositories, boolean addProjects, String defaultProject, String configFilename, boolean refreshHistory, boolean listFiles, boolean createDict, List<String> subFiles, List<String> repositories, List<String> zapCache, boolean listRepoPaths) throws IndexerException, IOException {
    if (env.getDataRootPath() == null) {
        throw new IndexerException("ERROR: Please specify a DATA ROOT path");
    }
    if (env.getSourceRootFile() == null) {
        throw new IndexerException("ERROR: please specify a SRC_ROOT with option -s !");
    }
    if (zapCache.isEmpty() && !env.validateExuberantCtags()) {
        throw new IndexerException("Didn't find Exuberant Ctags");
    }
    if (zapCache == null) {
        throw new IndexerException("Internal error, zapCache shouldn't be null");
    }
    if (searchRepositories || listRepoPaths || !zapCache.isEmpty()) {
        LOGGER.log(Level.INFO, "Scanning for repositories...");
        long start = System.currentTimeMillis();
        if (refreshHistory == true) {
            HistoryGuru.getInstance().addRepositories(env.getSourceRootPath());
        }
        long time = (System.currentTimeMillis() - start) / 1000;
        LOGGER.log(Level.INFO, "Done scanning for repositories ({0}s)", time);
        if (listRepoPaths || !zapCache.isEmpty()) {
            List<RepositoryInfo> repos = env.getRepositories();
            String prefix = env.getSourceRootPath();
            if (listRepoPaths) {
                if (repos.isEmpty()) {
                    System.out.println("No repositories found.");
                    return;
                }
                System.out.println("Repositories in " + prefix + ":");
                for (RepositoryInfo info : env.getRepositories()) {
                    String dir = info.getDirectoryName();
                    System.out.println(dir.substring(prefix.length()));
                }
            }
            if (!zapCache.isEmpty()) {
                HashSet<String> toZap = new HashSet<>(zapCache.size() << 1);
                boolean all = false;
                for (String repo : zapCache) {
                    if ("*".equals(repo)) {
                        all = true;
                        break;
                    }
                    if (repo.startsWith(prefix)) {
                        repo = repo.substring(prefix.length());
                    }
                    toZap.add(repo);
                }
                if (all) {
                    toZap.clear();
                    for (RepositoryInfo info : env.getRepositories()) {
                        toZap.add(info.getDirectoryName().substring(prefix.length()));
                    }
                }
                try {
                    HistoryGuru.getInstance().removeCache(toZap);
                } catch (HistoryException e) {
                    LOGGER.log(Level.WARNING, "Clearing history cache failed: {0}", e.getLocalizedMessage());
                }
            }
            return;
        }
    }
    if (addProjects) {
        File[] files = env.getSourceRootFile().listFiles();
        List<Project> projects = env.getProjects();
        // Keep a copy of the old project list so that we can preserve
        // the customization of existing projects.
        Map<String, Project> oldProjects = new HashMap<>();
        for (Project p : projects) {
            oldProjects.put(p.getPath(), p);
        }
        projects.clear();
        // Add a project for each top-level directory in source root.
        for (File file : files) {
            String name = file.getName();
            String path = "/" + name;
            if (oldProjects.containsKey(path)) {
                // This is an existing object. Reuse the old project,
                // possibly with customizations, instead of creating a
                // new with default values.
                projects.add(oldProjects.get(path));
            } else if (!name.startsWith(".") && file.isDirectory()) {
                // Found a new directory with no matching project, so
                // create a new project with default properties.
                Project p = new Project();
                p.setName(name);
                p.setPath(path);
                p.setTabSize(env.getConfiguration().getTabSize());
                projects.add(p);
            }
        }
        // The projects should be sorted...
        Collections.sort(projects, new Comparator<Project>() {

            @Override
            public int compare(Project p1, Project p2) {
                String s1 = p1.getName();
                String s2 = p2.getName();
                int ret;
                if (s1 == null) {
                    ret = (s2 == null) ? 0 : 1;
                } else {
                    ret = s1.compareTo(s2);
                }
                return ret;
            }
        });
    }
    if (defaultProject != null) {
        for (Project p : env.getProjects()) {
            if (p.getPath().equals(defaultProject)) {
                env.setDefaultProject(p);
                break;
            }
        }
    }
    if (configFilename != null) {
        LOGGER.log(Level.INFO, "Writing configuration to {0}", configFilename);
        env.writeConfiguration(new File(configFilename));
        LOGGER.info("Done...");
    }
    if (refreshHistory) {
        if (repositories != null && !repositories.isEmpty()) {
            LOGGER.log(Level.INFO, "Generating history cache for repositories: " + repositories.stream().collect(Collectors.joining(",")));
            HistoryGuru.getInstance().createCache(repositories);
            LOGGER.info("Done...");
        } else {
            LOGGER.log(Level.INFO, "Generating history cache for all repositories ...");
            HistoryGuru.getInstance().createCache();
            LOGGER.info("Done...");
        }
    }
    if (listFiles) {
        IndexDatabase.listAllFiles(subFiles);
    }
    if (createDict) {
        IndexDatabase.listFrequentTokens(subFiles);
    }
}
Also used : RepositoryInfo(org.opensolaris.opengrok.history.RepositoryInfo) HashMap(java.util.HashMap) HistoryException(org.opensolaris.opengrok.history.HistoryException) Project(org.opensolaris.opengrok.configuration.Project) File(java.io.File) HashSet(java.util.HashSet)

Example 3 with Project

use of org.opensolaris.opengrok.configuration.Project in project OpenGrok by OpenGrok.

the class Results method prettyPrint.

/**
     * Prints out results in html form. The following search helper fields are
     * required to be properly initialized: <ul>
     * <li>{@link SearchHelper#dataRoot}</li>
     * <li>{@link SearchHelper#contextPath}</li>
     * <li>{@link SearchHelper#searcher}</li> <li>{@link SearchHelper#hits}</li>
     * <li>{@link SearchHelper#historyContext} (ignored if {@code null})</li>
     * <li>{@link SearchHelper#sourceContext} (ignored if {@code null})</li>
     * <li>{@link SearchHelper#summarizer} (if sourceContext is not
     * {@code null})</li> <li>{@link SearchHelper#compressed} (if sourceContext
     * is not {@code null})</li> <li>{@link SearchHelper#sourceRoot} (if
     * sourceContext or historyContext is not {@code null})</li> </ul>
     *
     * @param out write destination
     * @param sh search helper which has all required fields set
     * @param start index of the first hit to print
     * @param end index of the last hit to print
     * @throws HistoryException
     * @throws IOException
     * @throws ClassNotFoundException
     */
public static void prettyPrint(Writer out, SearchHelper sh, int start, int end) throws HistoryException, IOException, ClassNotFoundException {
    Project p;
    String ctxE = Util.URIEncodePath(sh.contextPath);
    String xrefPrefix = sh.contextPath + Prefix.XREF_P;
    String morePrefix = sh.contextPath + Prefix.MORE_P;
    String xrefPrefixE = ctxE + Prefix.XREF_P;
    File xrefDataDir = new File(sh.dataRoot, Prefix.XREF_P.toString());
    for (Map.Entry<String, ArrayList<Document>> entry : createMap(sh.searcher, sh.hits, start, end).entrySet()) {
        String parent = entry.getKey();
        out.write("<tr class=\"dir\"><td colspan=\"3\"><a href=\"");
        out.write(xrefPrefixE);
        out.write(Util.URIEncodePath(parent));
        out.write("/\">");
        // htmlize ???
        out.write(parent);
        out.write("/</a>");
        if (sh.desc != null) {
            out.write(" - <i>");
            // htmlize ???
            out.write(sh.desc.get(parent));
            out.write("</i>");
        }
        JSONArray messages;
        if ((p = Project.getProject(parent)) != null && (messages = Util.messagesToJson(p, RuntimeEnvironment.MESSAGES_MAIN_PAGE_TAG)).size() > 0) {
            out.write(" <a ");
            out.write("href=\"" + xrefPrefix + "/" + p.getName() + "\">");
            out.write("<span class=\"important-note important-note-rounded\" data-messages='" + messages + "'>!</span>");
            out.write("</a>");
        }
        out.write("</td></tr>");
        for (Document doc : entry.getValue()) {
            String rpath = doc.get(QueryBuilder.PATH);
            String rpathE = Util.URIEncodePath(rpath);
            DateFormat df;
            out.write("<tr>");
            Util.writeHAD(out, sh.contextPath, rpathE, false);
            out.write("<td class=\"f\"><a href=\"");
            out.write(xrefPrefixE);
            out.write(rpathE);
            out.write("\"");
            if (RuntimeEnvironment.getInstance().isLastEditedDisplayMode()) {
                try {
                    // insert last edited date if possible
                    df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
                    String dd = df.format(DateTools.stringToDate(doc.get("date")));
                    out.write(" class=\"result-annotate\" title=\"");
                    out.write("Last modified: ");
                    out.write(dd);
                    out.write("\"");
                } catch (ParseException ex) {
                    LOGGER.log(Level.WARNING, "An error parsing date information", ex);
                }
            }
            out.write(">");
            // htmlize ???
            out.write(rpath.substring(rpath.lastIndexOf('/') + 1));
            out.write("</a>");
            out.write("</td><td><tt class=\"con\">");
            if (sh.sourceContext != null) {
                Genre genre = Genre.get(doc.get("t"));
                Definitions tags = null;
                IndexableField tagsField = doc.getField(QueryBuilder.TAGS);
                if (tagsField != null) {
                    tags = Definitions.deserialize(tagsField.binaryValue().bytes);
                }
                Scopes scopes;
                IndexableField scopesField = doc.getField(QueryBuilder.SCOPES);
                if (scopesField != null) {
                    scopes = Scopes.deserialize(scopesField.binaryValue().bytes);
                } else {
                    scopes = new Scopes();
                }
                if (Genre.XREFABLE == genre && sh.summarizer != null) {
                    String xtags = getTags(xrefDataDir, rpath, sh.compressed);
                    // FIXME use Highlighter from lucene contrib here,
                    // instead of summarizer, we'd also get rid of
                    // apache lucene in whole source ...
                    out.write(sh.summarizer.getSummary(xtags).toString());
                } else if (Genre.HTML == genre && sh.summarizer != null) {
                    String htags = getTags(sh.sourceRoot, rpath, false);
                    out.write(sh.summarizer.getSummary(htags).toString());
                } else {
                    FileReader r = genre == Genre.PLAIN ? new FileReader(new File(sh.sourceRoot, rpath)) : null;
                    sh.sourceContext.getContext(r, out, xrefPrefix, morePrefix, rpath, tags, true, sh.builder.isDefSearch(), null, scopes);
                }
            }
            if (sh.historyContext != null) {
                sh.historyContext.getContext(new File(sh.sourceRoot, rpath), rpath, out, sh.contextPath);
            }
            out.write("</tt></td></tr>\n");
        }
    }
}
Also used : Definitions(org.opensolaris.opengrok.analysis.Definitions) ArrayList(java.util.ArrayList) JSONArray(org.json.simple.JSONArray) Document(org.apache.lucene.document.Document) IndexableField(org.apache.lucene.index.IndexableField) Project(org.opensolaris.opengrok.configuration.Project) Scopes(org.opensolaris.opengrok.analysis.Scopes) DateFormat(java.text.DateFormat) FileReader(java.io.FileReader) ParseException(java.text.ParseException) Genre(org.opensolaris.opengrok.analysis.FileAnalyzer.Genre) File(java.io.File) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map)

Example 4 with Project

use of org.opensolaris.opengrok.configuration.Project in project OpenGrok by OpenGrok.

the class AuthorizationFrameworkTest method createAllowedProject.

private Project createAllowedProject() {
    Project p = new Project();
    p.setName("allowed" + "_" + "project" + Math.random());
    return p;
}
Also used : Project(org.opensolaris.opengrok.configuration.Project)

Example 5 with Project

use of org.opensolaris.opengrok.configuration.Project in project OpenGrok by OpenGrok.

the class IndexerTest method testRFE2575.

@Test
public void testRFE2575() throws Exception {
    RuntimeEnvironment env = RuntimeEnvironment.getInstance();
    env.setCtags(System.getProperty(ctagsProperty, "ctags"));
    env.setSourceRoot(repository.getSourceRoot());
    env.setDataRoot(repository.getDataRoot());
    HistoryGuru.getInstance().addRepositories(repository.getSourceRoot());
    List<RepositoryInfo> repos = env.getRepositories();
    Repository r = null;
    for (RepositoryInfo ri : repos) {
        if (ri.getDirectoryName().equals(repository.getSourceRoot() + "/rfe2575")) {
            r = RepositoryFactory.getRepository(ri);
            break;
        }
    }
    if (r != null && r.isWorking() && env.validateExuberantCtags()) {
        Project project = new Project();
        project.setPath("/rfe2575");
        IndexDatabase idb = new IndexDatabase(project);
        assertNotNull(idb);
        MyIndexChangeListener listener = new MyIndexChangeListener();
        idb.addIndexChangedListener(listener);
        idb.update();
        assertEquals(2, listener.files.size());
        repository.purgeData();
        RuntimeEnvironment.getInstance().setIndexVersionedFilesOnly(true);
        idb = new IndexDatabase(project);
        listener = new MyIndexChangeListener();
        idb.addIndexChangedListener(listener);
        idb.update();
        assertEquals(1, listener.files.size());
        RuntimeEnvironment.getInstance().setIndexVersionedFilesOnly(false);
    } else {
        System.out.println("Skipping test. Repository for rfe2575 not found or could not find a ctags or an sccs I could use in path.");
    }
}
Also used : Project(org.opensolaris.opengrok.configuration.Project) Repository(org.opensolaris.opengrok.history.Repository) TestRepository(org.opensolaris.opengrok.util.TestRepository) RuntimeEnvironment(org.opensolaris.opengrok.configuration.RuntimeEnvironment) RepositoryInfo(org.opensolaris.opengrok.history.RepositoryInfo) Test(org.junit.Test)

Aggregations

Project (org.opensolaris.opengrok.configuration.Project)79 Test (org.junit.Test)40 RuntimeEnvironment (org.opensolaris.opengrok.configuration.RuntimeEnvironment)31 File (java.io.File)20 ArrayList (java.util.ArrayList)20 Group (org.opensolaris.opengrok.configuration.Group)17 RepositoryInfo (org.opensolaris.opengrok.history.RepositoryInfo)14 IOException (java.io.IOException)12 TreeSet (java.util.TreeSet)12 HistoryException (org.opensolaris.opengrok.history.HistoryException)8 List (java.util.List)6 ParseException (java.text.ParseException)5 HashMap (java.util.HashMap)5 Map (java.util.Map)5 Set (java.util.Set)5 Collectors (java.util.stream.Collectors)5 HttpServletRequest (javax.servlet.http.HttpServletRequest)5 Repository (org.opensolaris.opengrok.history.Repository)5 TestRepository (org.opensolaris.opengrok.util.TestRepository)5 ConnectException (java.net.ConnectException)4