/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * See LICENSE.txt included in this distribution for the specific * language governing permissions and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at LICENSE.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ package org.opensolaris.opengrok.configuration; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; /** * Placeholder for the information that builds up a project */ public class Project { private String path; // this variable is very important, since it's used as the project identifier // all over xrefs and webapp // jel: and yes - awefully misleading. It should be called 'name'! private String description; /** * Size of tabs in this project. Used for displaying the xrefs correctly in * projects with non-standard tab size. */ private int tabSize; /** * Get a textual description of this project * @return a textual description of the project */ public String getDescription() { return description; } /** * Get the path (relative from source root) where this project is located * @return the relative path */ public String getPath() { return path; } /** * Get the project id * @return the id of the project */ public String getId() { return path; } /** * Get the tab size for this project, if tab size has been set. * * @return tab size if set, 0 otherwise * @see #hasTabSizeSetting() */ public int getTabSize() { return tabSize; } /** * Set a textual description of this project, prefferably don't use " , " * in the name, since it's used as delimiter for more projects * @param description a textual description of the project */ public void setDescription(String description) { this.description = description; } /** * Set the path (relative from source root) this project is located * It seems that you should ALWAYS prefix the path with current * file.separator , current environment should always have it set up * @param path the relative path from source sroot where this project is * located. */ public void setPath(String path) { this.path = path; } /** * Set tab size for this project. Used for expanding tabs to spaces * in xrefs. * * @param tabSize the size of tabs in this project */ public void setTabSize(int tabSize) { this.tabSize = tabSize; } /** * Has this project an explicit tab size setting? * * @return {@code true} if the tab size has been set for this project, or * {@code false} if it hasn't and the default should be used */ public boolean hasTabSizeSetting() { return tabSize > 0; } /** * Get the project for a specific file * @param path the file to lookup (relative from source root) * @return the project that this file belongs to (or null if the file * doesn't belong to a project) */ public static Project getProject(String path) { Project ret = null; String lpath=path; if (File.separatorChar != '/') { lpath = path.replace(File.separatorChar, '/'); } //FIXME bogus if sub projects are used Configuration cfg = RuntimeEnvironment.getConfig(); if (cfg.hasProjects()) { for (Project proj : cfg.getProjects()) { if (lpath.indexOf(proj.getPath()) == 0) { ret = proj; } } } return ret; } /** * Get the project for a specific file * @param file the file to lookup * @return the project that this file belongs to (or null if the file * doesn't belong to a project) */ public static Project getProject(File file) { Project ret = null; try { ret = getProject(RuntimeEnvironment.getConfig() .getPathRelativeToSourceRoot(file, 0)); } catch (FileNotFoundException e) { // NOPMD // ignore if not under source root } catch (IOException e) { // NOPMD // problem has already been logged, just return null } return ret; } /** * Returns project object by its description, used in webapp to figure out * which project is to be searched. * @param desc description of the project * @return project that fits the description */ public static Project getByDescription(String desc) { Project ret = null; Configuration cfg = RuntimeEnvironment.getConfig(); if (cfg.hasProjects()) { for (Project proj : cfg.getProjects()) { if (desc.indexOf(proj.getDescription()) == 0) { ret = proj; } } } return ret; } }