/*
* SonarQube
* Copyright (C) 2009-2017 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.api.resources;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.CheckForNull;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.batch.fs.InputModule;
import org.sonar.api.component.Component;
import org.sonar.api.scan.filesystem.PathResolver;
/**
* @since 1.10
* @deprecated since 5.6 replaced by {@link InputModule}.
*/
@Deprecated
public class Project extends Resource implements Component {
private final ProjectDefinition definition;
public Project(ProjectDefinition definition) {
this.definition = definition;
this.setKey(definition.getKey());
this.setEffectiveKey(definition.getKeyWithBranch());
}
public ProjectDefinition definition() {
return definition;
}
@Override
public String key() {
return definition.getKey();
}
@Override
public String path() {
ProjectDefinition parent = definition.getParent();
if (parent == null) {
return null;
}
return new PathResolver().relativePath(parent.getBaseDir(), definition.getBaseDir());
}
public String getBranch() {
return definition.getBranch();
}
@CheckForNull
public String getOriginalName() {
String name = definition.getOriginalName();
if (StringUtils.isNotEmpty(getBranch())) {
name = name + " " + getBranch();
}
return name;
}
java.io.File getBaseDir() {
return definition.getBaseDir();
}
@Override
public String name() {
String name = definition.getName();
if (StringUtils.isNotEmpty(getBranch())) {
name = name + " " + getBranch();
}
return name;
}
@Override
public String longName() {
return definition.getName();
}
@Override
public String qualifier() {
return getParent() == null ? Qualifiers.PROJECT : Qualifiers.MODULE;
}
@Override
public String getName() {
return name();
}
public boolean isRoot() {
return getParent() == null;
}
public Project getRoot() {
return getParent() == null ? this : getParent().getRoot();
}
/**
* @return whether the current project is a module
*/
public boolean isModule() {
return !isRoot();
}
@Override
public String getLongName() {
return longName();
}
@Override
public String getDescription() {
return definition.getDescription();
}
/**
* @deprecated since 4.2 use {@link org.sonar.api.batch.fs.FileSystem#languages()}
*/
@Override
public Language getLanguage() {
throw new UnsupportedOperationException();
}
@Override
public String getScope() {
return Scopes.PROJECT;
}
@Override
public String getQualifier() {
return qualifier();
}
@Override
public Project getParent() {
ProjectDefinition parent = definition.getParent();
if (parent == null) {
return null;
}
return new Project(parent);
}
/**
* @return the list of modules
*/
public List<Project> getModules() {
return definition.getSubProjects().stream()
.map(Project::new)
.collect(Collectors.toList());
}
@Override
public boolean matchFilePattern(String antPattern) {
return false;
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("id", getId())
.append("key", key())
.append("qualifier", getQualifier())
.toString();
}
}