.setMessage(messageBody);
}
- private String generateSubject(String projectName, String alertLevel, boolean isNewAlert) {
+ private static String generateSubject(String projectName, String alertLevel, boolean isNewAlert) {
StringBuilder subjectBuilder = new StringBuilder();
if (Metric.Level.OK.toString().equals(alertLevel)) {
subjectBuilder.append("\"").append(projectName).append("\" is back to green");
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Nullable;
import org.sonar.api.resources.Language;
import org.sonar.api.resources.Languages;
import org.sonar.api.rule.RuleKey;
import org.sonar.server.search.Result;
import org.sonar.server.user.UserSession;
-import javax.annotation.Nullable;
-
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
}
}
- private Map<String, String> getPropertiesMap(List<PropertyDto> propertyDtos, boolean hasScanPerm) {
+ private static Map<String, String> getPropertiesMap(List<PropertyDto> propertyDtos, boolean hasScanPerm) {
Map<String, String> properties = newHashMap();
for (PropertyDto propertyDto : propertyDtos) {
String key = propertyDto.getKey();
}
}
- private void addFileData(DbSession session, ProjectRepositories ref, List<ComponentDto> moduleChildren, List<FilePathWithHashDto> files) {
+ private static void addFileData(DbSession session, ProjectRepositories ref, List<ComponentDto> moduleChildren, List<FilePathWithHashDto> files) {
Map<String, String> moduleKeysByUuid = newHashMap();
for (ComponentDto module : moduleChildren) {
moduleKeysByUuid.put(module.uuid(), module.key());
}
}
- private Map<String, String> moduleUuidsByKey(ComponentDto module, List<ComponentDto> moduleChildren) {
+ private static Map<String, String> moduleUuidsByKey(ComponentDto module, List<ComponentDto> moduleChildren) {
Map<String, String> moduleUuidsByKey = newHashMap();
for (ComponentDto componentDto : moduleChildren) {
moduleUuidsByKey.put(componentDto.key(), componentDto.uuid());
return moduleUuidsByKey;
}
- private Map<String, Long> moduleIdsByKey(ComponentDto module, List<ComponentDto> moduleChildren) {
+ private static Map<String, Long> moduleIdsByKey(ComponentDto module, List<ComponentDto> moduleChildren) {
Map<String, Long> moduleIdsByKey = newHashMap();
for (ComponentDto componentDto : moduleChildren) {
moduleIdsByKey.put(componentDto.key(), componentDto.getId());
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
import org.sonar.api.component.Component;
import org.sonar.api.utils.Paging;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
import static com.google.common.collect.Lists.newArrayList;
/**
}
}
- private Collection<? extends Component> pagedComponents(Collection<? extends Component> components, Paging paging) {
+ private static Collection<? extends Component> pagedComponents(Collection<? extends Component> components, Paging paging) {
Set<Component> pagedComponents = Sets.newLinkedHashSet();
int index = 0;
for (Component component : components) {
package org.sonar.server.component.ws;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.apache.commons.lang.BooleanUtils;
import org.sonar.api.i18n.I18n;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.user.UserSession;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.util.List;
-import java.util.Map;
-
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
json.prop("fav", isFavourite);
}
- private void appendPermissions(JsonWriter json, ComponentDto component, UserSession userSession) {
+ private static void appendPermissions(JsonWriter json, ComponentDto component, UserSession userSession) {
boolean hasBrowsePermission = userSession.hasComponentPermission(UserRole.USER, component.key());
json.prop("canMarkAsFavourite", userSession.isLoggedIn() && hasBrowsePermission);
json.prop("canCreateManualIssue", userSession.isLoggedIn() && hasBrowsePermission);
json.endObject();
}
- private MeasureDto coverageMeasure(Map<String, MeasureDto> measuresByMetricKey) {
+ private static MeasureDto coverageMeasure(Map<String, MeasureDto> measuresByMetricKey) {
MeasureDto overallCoverage = measuresByMetricKey.get(CoreMetrics.OVERALL_COVERAGE_KEY);
MeasureDto itCoverage = measuresByMetricKey.get(CoreMetrics.IT_COVERAGE_KEY);
MeasureDto utCoverage = measuresByMetricKey.get(CoreMetrics.COVERAGE_KEY);
controller.done();
}
- private void defineIndexAction(NewController controller) {
+ private static void defineIndexAction(NewController controller) {
controller.createAction("index")
.setDescription("Documentation of this web service is available <a href=\"http://redirect.sonarsource.com/doc/old-web-service-api.html\">here</a>")
.setSince("2.6")
json.close();
}
- private Set<Long> pagedProjectIds(Collection<Long> projectIds, SearchOptions options) {
+ private static Set<Long> pagedProjectIds(Collection<Long> projectIds, SearchOptions options) {
Set<Long> results = Sets.newLinkedHashSet();
int index = 0;
for (Long projectId : projectIds) {
return ref;
}
+ @Override
public String getUuid() {
if (uuid == null) {
throw new UnsupportedOperationException(String.format("Component uuid of ref '%s' has not be fed yet", getRef()));
return this;
}
+ @Override
public String getKey() {
if (key == null) {
throw new UnsupportedOperationException(String.format("Component key of ref '%s' has not be fed yet", getRef()));
package org.sonar.server.computation.source;
-import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.server.source.db.FileSourceDb;
-
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.sonar.batch.protocol.output.BatchReport;
+import org.sonar.server.source.db.FileSourceDb;
import static com.google.common.collect.Lists.newArrayList;
}
}
- private void appendSymbol(StringBuilder lineSymbol, BatchReport.Range range, int line, int symbolId, String sourceLine) {
+ private static void appendSymbol(StringBuilder lineSymbol, BatchReport.Range range, int line, int symbolId, String sourceLine) {
if (matchLine(range, line)) {
String offsets = RangeOffsetHelper.offsetToString(range, line, sourceLine.length());
if (!offsets.isEmpty()) {
return range.getStartLine() <= line && range.getEndLine() >= line;
}
- private Map<BatchReport.Symbols.Symbol, Integer> createIdsBySymbolMap(List<BatchReport.Symbols.Symbol> symbols) {
+ private static Map<BatchReport.Symbols.Symbol, Integer> createIdsBySymbolMap(List<BatchReport.Symbols.Symbol> symbols) {
Map<BatchReport.Symbols.Symbol, Integer> map = new HashMap<>();
int symbolId = 1;
for (BatchReport.Symbols.Symbol symbol : symbols) {
QualityProfileEventsStep.class,
// Persist data
- PersistComponentsStep.class,
+ PersistComponentsAndSnapshotsStep.class,
PersistNumberOfDaysSinceLastCommitStep.class,
PersistMeasuresStep.class,
PersistIssuesStep.class,
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.server.computation.step;
+
+import com.google.common.collect.Maps;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.StringUtils;
+import org.sonar.api.resources.Qualifiers;
+import org.sonar.api.resources.Scopes;
+import org.sonar.api.utils.System2;
+import org.sonar.batch.protocol.output.BatchReport;
+import org.sonar.core.component.ComponentDto;
+import org.sonar.core.component.SnapshotDto;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.core.util.NonNullInputFunction;
+import org.sonar.server.computation.batch.BatchReportReader;
+import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.DbIdsRepository;
+import org.sonar.server.computation.component.TreeRootHolder;
+import org.sonar.server.db.DbClient;
+
+/**
+ * Persist components and snapshots
+ * Also feed the components cache {@link DbIdsRepository}
+ */
+public class PersistComponentsAndSnapshotsStep implements ComputationStep {
+
+ private final System2 system2;
+ private final DbClient dbClient;
+ private final TreeRootHolder treeRootHolder;
+ private final BatchReportReader reportReader;
+
+ private final DbIdsRepository dbIdsRepositor;
+
+ public PersistComponentsAndSnapshotsStep(System2 system2, DbClient dbClient, TreeRootHolder treeRootHolder, BatchReportReader reportReader, DbIdsRepository dbIdsRepositor) {
+ this.system2 = system2;
+ this.dbClient = dbClient;
+ this.treeRootHolder = treeRootHolder;
+ this.reportReader = reportReader;
+ this.dbIdsRepositor = dbIdsRepositor;
+ }
+
+ @Override
+ public void execute() {
+ DbSession session = dbClient.openSession(false);
+ try {
+ org.sonar.server.computation.component.Component root = treeRootHolder.getRoot();
+ List<ComponentDto> components = dbClient.componentDao().selectComponentsFromProjectKey(session, root.getKey());
+ Map<String, ComponentDto> componentDtosByKey = componentDtosByKey(components);
+ PersisComponentExecutor componentContext = new PersisComponentExecutor(session, componentDtosByKey, reportReader, reportReader.readMetadata().getAnalysisDate());
+
+ componentContext.recursivelyProcessComponent(root, null, null);
+ session.commit();
+ } finally {
+ session.close();
+ }
+ }
+
+ private class PersisComponentExecutor {
+
+ private final BatchReportReader reportReader;
+ private final Map<String, ComponentDto> componentDtosByKey;
+ private final DbSession dbSession;
+ private final long analysisDate;
+
+ private ComponentDto project;
+ private SnapshotDto projectSnapshot;
+
+ public PersisComponentExecutor(DbSession dbSession, Map<String, ComponentDto> componentDtosByKey, BatchReportReader reportReader, long analysisDate) {
+ this.reportReader = reportReader;
+ this.componentDtosByKey = componentDtosByKey;
+ this.dbSession = dbSession;
+ this.analysisDate = analysisDate;
+ }
+
+ private void recursivelyProcessComponent(Component component, @Nullable ComponentDto lastModule, @Nullable SnapshotDto parentSnapshot) {
+ BatchReport.Component reportComponent = reportReader.readComponent(component.getRef());
+
+ switch (component.getType()) {
+ case PROJECT:
+ PersistedComponent persistedProject = processProject(component, reportComponent);
+ this.project = persistedProject.componentDto;
+ this.projectSnapshot = persistedProject.parentSnapshot;
+ processChildren(component, project, persistedProject.parentSnapshot);
+ break;
+ case MODULE:
+ PersistedComponent persistedModule = processModule(component, reportComponent, nonNullLastModule(lastModule), nonNullParentSnapshot(parentSnapshot));
+ processChildren(component, persistedModule.componentDto, persistedModule.parentSnapshot);
+ break;
+ case DIRECTORY:
+ PersistedComponent persistedDirectory = processDirectory(component, reportComponent, nonNullLastModule(lastModule), nonNullParentSnapshot(parentSnapshot));
+ processChildren(component, nonNullLastModule(lastModule), persistedDirectory.parentSnapshot);
+ break;
+ case FILE:
+ processFile(component, reportComponent, nonNullLastModule(lastModule), nonNullParentSnapshot(parentSnapshot));
+ break;
+ default:
+ throw new IllegalStateException(String.format("Unsupported component type '%s'", component.getType()));
+ }
+ }
+
+ private void processChildren(Component component, ComponentDto lastModule, SnapshotDto parentSnapshot) {
+ for (Component child : component.getChildren()) {
+ recursivelyProcessComponent(child, lastModule, parentSnapshot);
+ }
+ }
+
+ private ComponentDto nonNullLastModule(@Nullable ComponentDto lastModule) {
+ return lastModule == null ? project : lastModule;
+ }
+
+ private SnapshotDto nonNullParentSnapshot(@Nullable SnapshotDto parentSnapshot) {
+ return parentSnapshot == null ? projectSnapshot : parentSnapshot;
+ }
+
+ public PersistedComponent processProject(Component project, BatchReport.Component reportComponent) {
+ ComponentDto componentDto = createComponentDto(reportComponent, project);
+
+ componentDto.setScope(Scopes.PROJECT);
+ componentDto.setQualifier(Qualifiers.PROJECT);
+ componentDto.setName(reportComponent.getName());
+ componentDto.setLongName(componentDto.name());
+ if (reportComponent.hasDescription()) {
+ componentDto.setDescription(reportComponent.getDescription());
+ }
+ componentDto.setProjectUuid(componentDto.uuid());
+ componentDto.setModuleUuidPath(ComponentDto.MODULE_UUID_PATH_SEP + componentDto.uuid() + ComponentDto.MODULE_UUID_PATH_SEP);
+
+ ComponentDto projectDto = persistComponent(project.getRef(), componentDto);
+ SnapshotDto snapshotDto = persistSnapshot(projectDto, reportComponent.getVersion(), null);
+
+ addToCache(project, projectDto, snapshotDto);
+
+ return new PersistedComponent(projectDto, snapshotDto);
+ }
+
+ public PersistedComponent processModule(Component module, BatchReport.Component reportComponent, ComponentDto lastModule, SnapshotDto parentSnapshot) {
+ ComponentDto componentDto = createComponentDto(reportComponent, module);
+
+ componentDto.setScope(Scopes.PROJECT);
+ componentDto.setQualifier(Qualifiers.MODULE);
+ componentDto.setName(reportComponent.getName());
+ componentDto.setLongName(componentDto.name());
+ if (reportComponent.hasPath()) {
+ componentDto.setPath(reportComponent.getPath());
+ }
+ if (reportComponent.hasDescription()) {
+ componentDto.setDescription(reportComponent.getDescription());
+ }
+ componentDto.setParentProjectId(project.getId());
+ componentDto.setProjectUuid(lastModule.projectUuid());
+ componentDto.setModuleUuid(lastModule.uuid());
+ componentDto.setModuleUuidPath(lastModule.moduleUuidPath() + componentDto.uuid() + ComponentDto.MODULE_UUID_PATH_SEP);
+
+ ComponentDto moduleDto = persistComponent(module.getRef(), componentDto);
+ SnapshotDto snapshotDto = persistSnapshot(moduleDto, reportComponent.getVersion(), parentSnapshot);
+
+ addToCache(module, moduleDto, snapshotDto);
+ return new PersistedComponent(moduleDto, snapshotDto);
+ }
+
+ public PersistedComponent processDirectory(org.sonar.server.computation.component.Component directory, BatchReport.Component reportComponent,
+ ComponentDto lastModule, SnapshotDto parentSnapshot) {
+ ComponentDto componentDto = createComponentDto(reportComponent, directory);
+
+ componentDto.setScope(Scopes.DIRECTORY);
+ componentDto.setQualifier(Qualifiers.DIRECTORY);
+ componentDto.setName(reportComponent.getPath());
+ componentDto.setLongName(reportComponent.getPath());
+ if (reportComponent.hasPath()) {
+ componentDto.setPath(reportComponent.getPath());
+ }
+
+ componentDto.setParentProjectId(lastModule.getId());
+ componentDto.setProjectUuid(lastModule.projectUuid());
+ componentDto.setModuleUuid(lastModule.uuid());
+ componentDto.setModuleUuidPath(lastModule.moduleUuidPath());
+
+ ComponentDto directoryDto = persistComponent(directory.getRef(), componentDto);
+ SnapshotDto snapshotDto = persistSnapshot(directoryDto, null, parentSnapshot);
+
+ addToCache(directory, directoryDto, snapshotDto);
+ return new PersistedComponent(directoryDto, snapshotDto);
+ }
+
+ public void processFile(org.sonar.server.computation.component.Component file, BatchReport.Component reportComponent,
+ ComponentDto lastModule, SnapshotDto parentSnapshot) {
+ ComponentDto componentDto = createComponentDto(reportComponent, file);
+
+ componentDto.setScope(Scopes.FILE);
+ componentDto.setQualifier(getFileQualifier(reportComponent));
+ componentDto.setName(FilenameUtils.getName(reportComponent.getPath()));
+ componentDto.setLongName(reportComponent.getPath());
+ if (reportComponent.hasPath()) {
+ componentDto.setPath(reportComponent.getPath());
+ }
+ if (reportComponent.hasLanguage()) {
+ componentDto.setLanguage(reportComponent.getLanguage());
+ }
+
+ componentDto.setParentProjectId(lastModule.getId());
+ componentDto.setProjectUuid(lastModule.projectUuid());
+ componentDto.setModuleUuid(lastModule.uuid());
+ componentDto.setModuleUuidPath(lastModule.moduleUuidPath());
+
+ ComponentDto fileDto = persistComponent(file.getRef(), componentDto);
+ SnapshotDto snapshotDto = persistSnapshot(fileDto, null, parentSnapshot);
+
+ addToCache(file, fileDto, snapshotDto);
+ }
+
+ private ComponentDto createComponentDto(BatchReport.Component reportComponent, org.sonar.server.computation.component.Component component) {
+ String componentKey = component.getKey();
+ String componentUuid = component.getUuid();
+
+ ComponentDto componentDto = new ComponentDto();
+ componentDto.setUuid(componentUuid);
+ componentDto.setKey(componentKey);
+ componentDto.setDeprecatedKey(componentKey);
+ componentDto.setEnabled(true);
+ return componentDto;
+ }
+
+ private ComponentDto persistComponent(int componentRef, ComponentDto componentDto) {
+ ComponentDto existingComponent = componentDtosByKey.get(componentDto.getKey());
+ if (existingComponent == null) {
+ dbClient.componentDao().insert(dbSession, componentDto);
+ return componentDto;
+ } else {
+ if (updateComponent(existingComponent, componentDto)) {
+ dbClient.componentDao().update(dbSession, existingComponent);
+ }
+ return existingComponent;
+ }
+ }
+
+ private SnapshotDto persistSnapshot(ComponentDto componentDto, @Nullable String version, @Nullable SnapshotDto parentSnapshot){
+ SnapshotDto snapshotDto = new SnapshotDto();
+// .setRootProjectId(project.getId())
+// .setVersion(version)
+// .setComponentId(componentDto.getId())
+// .setQualifier(componentDto.qualifier())
+// .setScope(componentDto.scope())
+// .setCreatedAt(analysisDate)
+// .setBuildDate(system2.now());
+//
+// if (parentSnapshot != null) {
+// snapshotDto
+// .setParentId(parentSnapshot.getId())
+// .setRootId(parentSnapshot.getRootId() == null ? parentSnapshot.getId() : parentSnapshot.getRootId())
+// .setDepth(parentSnapshot.getDepth() + 1)
+// .setPath(parentSnapshot.getPath() + parentSnapshot.getId() + ".");
+// } else {
+// snapshotDto
+// .setPath("")
+// .setDepth(0);
+// }
+// dbClient.snapshotDao().insert(dbSession, snapshotDto);
+ return snapshotDto;
+ }
+
+ private void addToCache(Component component, ComponentDto componentDto, SnapshotDto snapshotDto) {
+ dbIdsRepositor.setComponentId(component, componentDto.getId());
+ }
+
+ private boolean updateComponent(ComponentDto existingComponent, ComponentDto newComponent) {
+ boolean isUpdated = false;
+ if (!StringUtils.equals(existingComponent.name(), newComponent.name())) {
+ existingComponent.setName(newComponent.name());
+ isUpdated = true;
+ }
+ if (!StringUtils.equals(existingComponent.description(), newComponent.description())) {
+ existingComponent.setDescription(newComponent.description());
+ isUpdated = true;
+ }
+ if (!StringUtils.equals(existingComponent.path(), newComponent.path())) {
+ existingComponent.setPath(newComponent.path());
+ isUpdated = true;
+ }
+ if (!StringUtils.equals(existingComponent.moduleUuid(), newComponent.moduleUuid())) {
+ existingComponent.setModuleUuid(newComponent.moduleUuid());
+ isUpdated = true;
+ }
+ if (!existingComponent.moduleUuidPath().equals(newComponent.moduleUuidPath())) {
+ existingComponent.setModuleUuidPath(newComponent.moduleUuidPath());
+ isUpdated = true;
+ }
+ if (!ObjectUtils.equals(existingComponent.parentProjectId(), newComponent.parentProjectId())) {
+ existingComponent.setParentProjectId(newComponent.parentProjectId());
+ isUpdated = true;
+ }
+ return isUpdated;
+ }
+
+ private String getFileQualifier(BatchReport.Component reportComponent) {
+ return reportComponent.getIsTest() ? Qualifiers.UNIT_TEST_FILE : Qualifiers.FILE;
+ }
+
+ private class PersistedComponent {
+ private ComponentDto componentDto;
+ private SnapshotDto parentSnapshot;
+
+ public PersistedComponent(ComponentDto componentDto, SnapshotDto parentSnapshot) {
+ this.componentDto = componentDto;
+ this.parentSnapshot = parentSnapshot;
+ }
+ }
+
+ }
+
+ private static Map<String, ComponentDto> componentDtosByKey(List<ComponentDto> components) {
+ return Maps.uniqueIndex(components, new NonNullInputFunction<ComponentDto, String>() {
+ @Override
+ public String doApply(ComponentDto input) {
+ return input.key();
+ }
+ });
+ }
+
+ @Override
+ public String getDescription() {
+ return "Feed components and snapshots";
+ }
+}
+++ /dev/null
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube 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.
- *
- * SonarQube 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.server.computation.step;
-
-import com.google.common.collect.Maps;
-import java.util.List;
-import java.util.Map;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.lang.ObjectUtils;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.api.resources.Qualifiers;
-import org.sonar.api.resources.Scopes;
-import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.core.component.ComponentDto;
-import org.sonar.core.persistence.DbSession;
-import org.sonar.core.util.NonNullInputFunction;
-import org.sonar.server.computation.batch.BatchReportReader;
-import org.sonar.server.computation.component.Component;
-import org.sonar.server.computation.component.DbIdsRepository;
-import org.sonar.server.computation.component.TreeRootHolder;
-import org.sonar.server.db.DbClient;
-
-public class PersistComponentsStep implements ComputationStep {
-
- private final DbClient dbClient;
- private final DbIdsRepository dbIdsRepository;
- private final BatchReportReader reportReader;
- private final TreeRootHolder treeRootHolder;
-
- public PersistComponentsStep(DbClient dbClient, DbIdsRepository dbIdsRepository, BatchReportReader reportReader, TreeRootHolder treeRootHolder) {
- this.dbClient = dbClient;
- this.dbIdsRepository = dbIdsRepository;
- this.reportReader = reportReader;
- this.treeRootHolder = treeRootHolder;
- }
-
- @Override
- public void execute() {
- DbSession session = dbClient.openSession(false);
- try {
- Component root = treeRootHolder.getRoot();
- List<ComponentDto> components = dbClient.componentDao().selectComponentsFromProjectKey(session, root.getKey());
- Map<String, ComponentDto> componentDtosByKey = componentDtosByKey(components);
- ComponentContext componentContext = new ComponentContext(session, componentDtosByKey);
-
- ComponentDto projectDto = processProject(root, reportReader.readComponent(root.getRef()), componentContext);
- processChildren(componentContext, root, projectDto, projectDto);
- session.commit();
- } finally {
- session.close();
- }
- }
-
- private void recursivelyProcessComponent(ComponentContext componentContext, Component component, ComponentDto parentModule, ComponentDto project) {
- BatchReport.Component reportComponent = reportReader.readComponent(component.getRef());
-
- switch (component.getType()) {
- case MODULE:
- ComponentDto moduleDto = processModule(component, reportComponent, componentContext, parentModule, project.getId());
- processChildren(componentContext, component, moduleDto, project);
- break;
- case DIRECTORY:
- processDirectory(component, reportComponent, componentContext, parentModule, project.getId());
- processChildren(componentContext, component, parentModule, project);
- break;
- case FILE:
- processFile(component, reportComponent, componentContext, parentModule, project.getId());
- processChildren(componentContext, component, parentModule, project);
- break;
- default:
- throw new IllegalStateException(String.format("Unsupported component type '%s'", component.getType()));
- }
- }
-
- private void processChildren(ComponentContext componentContext, Component component, ComponentDto parentModule, ComponentDto project) {
- for (Component child : component.getChildren()) {
- recursivelyProcessComponent(componentContext, child, parentModule, project);
- }
- }
-
- public ComponentDto processProject(Component project, BatchReport.Component reportComponent, ComponentContext componentContext) {
- ComponentDto componentDto = createComponentDto(project);
-
- componentDto.setScope(Scopes.PROJECT);
- componentDto.setQualifier(Qualifiers.PROJECT);
- componentDto.setName(reportComponent.getName());
- componentDto.setLongName(componentDto.name());
- if (reportComponent.hasDescription()) {
- componentDto.setDescription(reportComponent.getDescription());
- }
- componentDto.setProjectUuid(componentDto.uuid());
- componentDto.setModuleUuidPath(ComponentDto.MODULE_UUID_PATH_SEP + componentDto.uuid() + ComponentDto.MODULE_UUID_PATH_SEP);
-
- return persistComponent(project, componentDto, componentContext);
- }
-
- public ComponentDto processModule(Component module, BatchReport.Component reportComponent, ComponentContext componentContext, ComponentDto lastModule, long projectId) {
- ComponentDto componentDto = createComponentDto(module);
-
- componentDto.setScope(Scopes.PROJECT);
- componentDto.setQualifier(Qualifiers.MODULE);
- componentDto.setName(reportComponent.getName());
- componentDto.setLongName(componentDto.name());
- if (reportComponent.hasPath()) {
- componentDto.setPath(reportComponent.getPath());
- }
- if (reportComponent.hasDescription()) {
- componentDto.setDescription(reportComponent.getDescription());
- }
- componentDto.setParentProjectId(projectId);
- componentDto.setProjectUuid(lastModule.projectUuid());
- componentDto.setModuleUuid(lastModule.uuid());
- componentDto.setModuleUuidPath((lastModule.moduleUuidPath() + componentDto.uuid() + ComponentDto.MODULE_UUID_PATH_SEP));
-
- return persistComponent(module, componentDto, componentContext);
- }
-
- public void processDirectory(Component directory, BatchReport.Component reportComponent, ComponentContext componentContext, ComponentDto lastModule, long projectId) {
- ComponentDto componentDto = createComponentDto(directory);
-
- componentDto.setScope(Scopes.DIRECTORY);
- componentDto.setQualifier(Qualifiers.DIRECTORY);
- componentDto.setName(reportComponent.getPath());
- componentDto.setLongName(reportComponent.getPath());
- if (reportComponent.hasPath()) {
- componentDto.setPath(reportComponent.getPath());
- }
-
- componentDto.setParentProjectId(lastModule.getId());
- componentDto.setProjectUuid(lastModule.projectUuid());
- componentDto.setModuleUuid(lastModule.uuid());
- componentDto.setModuleUuidPath(lastModule.moduleUuidPath());
-
- persistComponent(directory, componentDto, componentContext);
- }
-
- public void processFile(Component file, BatchReport.Component reportComponent, ComponentContext componentContext, ComponentDto lastModule, long projectId) {
- ComponentDto componentDto = createComponentDto(file);
-
- componentDto.setScope(Scopes.FILE);
- componentDto.setQualifier(getFileQualifier(reportComponent));
- componentDto.setName(FilenameUtils.getName(reportComponent.getPath()));
- componentDto.setLongName(reportComponent.getPath());
- if (reportComponent.hasPath()) {
- componentDto.setPath(reportComponent.getPath());
- }
- if (reportComponent.hasLanguage()) {
- componentDto.setLanguage(reportComponent.getLanguage());
- }
-
- componentDto.setParentProjectId(lastModule.getId());
- componentDto.setProjectUuid(lastModule.projectUuid());
- componentDto.setModuleUuid(lastModule.uuid());
- componentDto.setModuleUuidPath(lastModule.moduleUuidPath());
-
- persistComponent(file, componentDto, componentContext);
- }
-
- private ComponentDto createComponentDto(Component component) {
- String componentKey = component.getKey();
- String componentUuid = component.getUuid();
-
- ComponentDto componentDto = new ComponentDto();
- componentDto.setUuid(componentUuid);
- componentDto.setKey(componentKey);
- componentDto.setDeprecatedKey(componentKey);
- componentDto.setEnabled(true);
- return componentDto;
- }
-
- private ComponentDto persistComponent(Component component, ComponentDto componentDto, ComponentContext componentContext) {
- ComponentDto existingComponent = componentContext.componentDtosByKey.get(componentDto.getKey());
- if (existingComponent == null) {
- dbClient.componentDao().insert(componentContext.dbSession, componentDto);
- dbIdsRepository.setComponentId(component, componentDto.getId());
- return componentDto;
- } else {
- if (updateComponent(existingComponent, componentDto)) {
- dbClient.componentDao().update(componentContext.dbSession, existingComponent);
- }
- dbIdsRepository.setComponentId(component, existingComponent.getId());
- return existingComponent;
- }
- }
-
- private static boolean updateComponent(ComponentDto existingComponent, ComponentDto newComponent) {
- boolean isUpdated = false;
- if (!StringUtils.equals(existingComponent.name(), newComponent.name())) {
- existingComponent.setName(newComponent.name());
- isUpdated = true;
- }
- if (!StringUtils.equals(existingComponent.description(), newComponent.description())) {
- existingComponent.setDescription(newComponent.description());
- isUpdated = true;
- }
- if (!StringUtils.equals(existingComponent.path(), newComponent.path())) {
- existingComponent.setPath(newComponent.path());
- isUpdated = true;
- }
- if (!StringUtils.equals(existingComponent.moduleUuid(), newComponent.moduleUuid())) {
- existingComponent.setModuleUuid(newComponent.moduleUuid());
- isUpdated = true;
- }
- if (!existingComponent.moduleUuidPath().equals(newComponent.moduleUuidPath())) {
- existingComponent.setModuleUuidPath(newComponent.moduleUuidPath());
- isUpdated = true;
- }
- if (!ObjectUtils.equals(existingComponent.parentProjectId(), newComponent.parentProjectId())) {
- existingComponent.setParentProjectId(newComponent.parentProjectId());
- isUpdated = true;
- }
- return isUpdated;
- }
-
- private static String getFileQualifier(BatchReport.Component reportComponent) {
- return reportComponent.getIsTest() ? Qualifiers.UNIT_TEST_FILE : Qualifiers.FILE;
- }
-
- private Map<String, ComponentDto> componentDtosByKey(List<ComponentDto> components) {
- return Maps.uniqueIndex(components, new NonNullInputFunction<ComponentDto, String>() {
- @Override
- public String doApply(ComponentDto input) {
- return input.key();
- }
- });
- }
-
- private static class ComponentContext {
- private final Map<String, ComponentDto> componentDtosByKey;
- private final DbSession dbSession;
-
- public ComponentContext(DbSession dbSession, Map<String, ComponentDto> componentDtosByKey) {
- this.componentDtosByKey = componentDtosByKey;
- this.dbSession = dbSession;
- }
- }
-
- @Override
- public String getDescription() {
- return "Feed components cache";
- }
-}
}
}
- private void insertChanges(IssueChangeMapper mapper, DefaultIssue issue) {
+ private static void insertChanges(IssueChangeMapper mapper, DefaultIssue issue) {
for (IssueComment comment : issue.comments()) {
DefaultIssueComment c = (DefaultIssueComment) comment;
if (c.isNew()) {
BatchReport.Component component) {
Set<String> unprocessedCoverageDetailNames = new HashSet<>(coveredFilesByName.rowKeySet());
unprocessedCoverageDetailNames.removeAll(testsByName.keySet());
- boolean hasUnprocessedCoverageDetails = !unprocessedCoverageDetailNames.isEmpty();
- if (hasUnprocessedCoverageDetails) {
+ boolean hasUnprocessedCoverage = !unprocessedCoverageDetailNames.isEmpty();
+ if (hasUnprocessedCoverage) {
LOG.trace("The following test coverages for file '{}' have not been taken into account: {}", component.getPath(), Joiner.on(", ").join(unprocessedCoverageDetailNames));
}
- return hasUnprocessedCoverageDetails;
+ return hasUnprocessedCoverage;
}
private List<FileSourceDb.Test> addCoveredFilesToTests(Multimap<String, FileSourceDb.Test.Builder> testsByName,
feedComponent((ComponentImpl) component, componentKey, componentContext.componentUuidsByKey);
}
- private void feedComponent(ComponentImpl component, String componentKey, Map<String, String> componentUuidByKey) {
+ private static void feedComponent(ComponentImpl component, String componentKey, Map<String, String> componentUuidByKey) {
component.setKey(componentKey);
String componentUuid = componentUuidByKey.get(componentKey);
controller.done();
}
- private void defineIndexAction(NewController controller) {
+ private static void defineIndexAction(NewController controller) {
controller.createAction("index")
.setDescription("Documentation of this web service is available <a href=\"http://redirect.sonarsource.com/doc/old-web-service-api.html\">here</a>")
.setSince("2.6")
return dashboard;
}
- private void addFirstColumn(Dashboard dashboard) {
+ private static void addFirstColumn(Dashboard dashboard) {
Widget timelineWidget = dashboard.addWidget("timeline", 1);
timelineWidget.setProperty(METRIC1, CoreMetrics.COMPLEXITY_KEY);
timelineWidget.setProperty(METRIC2, CoreMetrics.TECHNICAL_DEBT_KEY);
duplicationTimeMachineWidget.setProperty(METRIC4, CoreMetrics.DUPLICATED_FILES_KEY);
}
- private void addSecondColumn(Dashboard dashboard) {
+ private static void addSecondColumn(Dashboard dashboard) {
Widget rulesTimeMachineWidget = addTimeMachineWidgetOnSecondColumn(dashboard);
rulesTimeMachineWidget.setProperty(METRIC1, CoreMetrics.VIOLATIONS_KEY);
rulesTimeMachineWidget.setProperty(METRIC2, CoreMetrics.BLOCKER_VIOLATIONS_KEY);
testsTimeMachineWidget.setProperty(METRIC8, CoreMetrics.TEST_EXECUTION_TIME_KEY);
}
- private Widget addTimeMachineWidgetOnFirstColumn(Dashboard dashboard) {
+ private static Widget addTimeMachineWidgetOnFirstColumn(Dashboard dashboard) {
return addTimeMachineWidget(dashboard, 1);
}
- private Widget addTimeMachineWidgetOnSecondColumn(Dashboard dashboard) {
+ private static Widget addTimeMachineWidgetOnSecondColumn(Dashboard dashboard) {
return addTimeMachineWidget(dashboard, 2);
}
- private Widget addTimeMachineWidget(Dashboard dashboard, int columnIndex) {
+ private static Widget addTimeMachineWidget(Dashboard dashboard, int columnIndex) {
Widget widget = dashboard.addWidget("time_machine", columnIndex);
widget.setProperty("displaySparkLine", "true");
return widget;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
-
import javax.annotation.Nullable;
-
import org.apache.commons.dbutils.DbUtils;
import org.sonar.api.utils.System2;
import org.sonar.core.persistence.Database;
return newFields.toString();
}
- private void append(PreparedStatement pstmt, StringBuilder newFields, @Nullable String projectKey) throws SQLException {
+ private static void append(PreparedStatement pstmt, StringBuilder newFields, @Nullable String projectKey) throws SQLException {
if (projectKey != null) {
pstmt.setString(1, projectKey);
ResultSet rs = null;
*/
package org.sonar.server.db.migrations.v51;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
-
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.utils.MessageException;
import org.sonar.server.db.migrations.BaseDataChange;
import org.sonar.server.db.migrations.Select;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-
/**
* See http://jira.sonarsource.com/browse/SONAR-6187
*
*
* If the characteristic 'Usability' is already at the right place, nothing will be done.
*/
- private int moveCharacteristicsDownToBeAbleToInsertUsability(CharacteristicsContext characteristicsContext) throws SQLException {
+ private static int moveCharacteristicsDownToBeAbleToInsertUsability(CharacteristicsContext characteristicsContext) throws SQLException {
Characteristic security = characteristicsContext.findCharacteristicByKey(SECURITY_KEY);
Characteristic usability = characteristicsContext.findCharacteristicByKey(USABILITY_KEY);
package org.sonar.server.debt;
+import java.io.Reader;
+import java.io.StringReader;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
import org.apache.commons.lang.StringUtils;
import org.codehaus.stax2.XMLInputFactory2;
import org.codehaus.staxmate.SMInputFactory;
import org.sonar.api.server.rule.RulesDefinition;
import org.sonar.server.debt.DebtModelXMLExporter.DebtModel;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-
-import java.io.Reader;
-import java.io.StringReader;
-
import static org.sonar.server.debt.DebtModelXMLExporter.CHARACTERISTIC;
import static org.sonar.server.debt.DebtModelXMLExporter.CHARACTERISTIC_KEY;
import static org.sonar.server.debt.DebtModelXMLExporter.CHARACTERISTIC_NAME;
return debtModel;
}
- private SMInputFactory initStax() {
+ private static SMInputFactory initStax() {
XMLInputFactory xmlFactory = XMLInputFactory2.newInstance();
xmlFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
xmlFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.FALSE);
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
+import java.util.Date;
+import java.util.List;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.apache.ibatis.session.SqlSession;
import org.sonar.api.server.ServerSide;
import org.sonar.api.server.debt.DebtCharacteristic;
import org.sonar.server.user.UserSession;
import org.sonar.server.util.Validation;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.util.Date;
-import java.util.List;
-
@ServerSide
public class DebtModelOperations {
}
}
- private int getOrder(CharacteristicDto characteristicDto) {
+ private static int getOrder(CharacteristicDto characteristicDto) {
Integer order = characteristicDto.getOrder();
if (order == null) {
throw new IllegalArgumentException(String.format("The order of the characteristic '%s' should not be null", characteristicDto.getKey()));
import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap;
import com.google.common.collect.Ordering;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.api.server.ServerSide;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.api.server.debt.DebtCharacteristic;
-import org.sonar.api.server.debt.internal.DefaultDebtCharacteristic;
-import org.xml.sax.InputSource;
-
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.stream.StreamResult;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
+import org.sonar.api.rule.RuleKey;
+import org.sonar.api.server.ServerSide;
+import org.sonar.api.server.debt.DebtCharacteristic;
+import org.sonar.api.server.debt.internal.DefaultDebtCharacteristic;
+import org.xml.sax.InputSource;
import static com.google.common.collect.Lists.newArrayList;
return result;
}
- private void processProperty(String key, @Nullable String val, String text, StringBuilder xml) {
+ private static void processProperty(String key, @Nullable String val, String text, StringBuilder xml) {
xml.append("<" + PROPERTY + "><" + PROPERTY_KEY + ">");
xml.append(StringEscapeUtils.escapeXml(key));
xml.append("</" + PROPERTY_KEY + ">");
xml.append("</" + PROPERTY + ">");
}
- private String prettyFormatXml(String xml) {
+ private static String prettyFormatXml(String xml) {
try {
Transformer serializer = SAXTransformerFactory.newInstance().newTransformer();
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
});
}
- private List<DebtCharacteristic> sortByOrder(List<DebtCharacteristic> characteristics) {
+ private static List<DebtCharacteristic> sortByOrder(List<DebtCharacteristic> characteristics) {
Collections.sort(characteristics, new Ordering<DebtCharacteristic>() {
@Override
public int compare(@Nullable DebtCharacteristic left, @Nullable DebtCharacteristic right) {
return characteristics;
}
- private List<DebtCharacteristic> sortByName(List<DebtCharacteristic> characteristics) {
+ private static List<DebtCharacteristic> sortByName(List<DebtCharacteristic> characteristics) {
Collections.sort(characteristics, new Ordering<DebtCharacteristic>() {
@Override
public int compare(@Nullable DebtCharacteristic left, @Nullable DebtCharacteristic right) {
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
import com.google.common.collect.Iterables;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.List;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.codehaus.stax2.XMLInputFactory2;
import org.codehaus.staxmate.SMInputFactory;
import org.codehaus.staxmate.in.SMHierarchicCursor;
import org.codehaus.staxmate.in.SMInputCursor;
-import org.sonar.api.server.ServerSide;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.server.debt.DebtRemediationFunction;
import org.sonar.api.utils.Duration;
import org.sonar.api.utils.ValidationMessages;
import org.sonar.server.debt.DebtModelXMLExporter.RuleDebt;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.List;
-
import static com.google.common.collect.Lists.newArrayList;
import static org.sonar.server.debt.DebtModelXMLExporter.CHARACTERISTIC;
import static org.sonar.server.debt.DebtModelXMLExporter.CHARACTERISTIC_KEY;
return ruleDebts;
}
- private SMInputFactory initStax() {
+ private static SMInputFactory initStax() {
XMLInputFactory xmlFactory = XMLInputFactory2.newInstance();
xmlFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
xmlFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, Boolean.FALSE);
return null;
}
- private Property processProperty(ValidationMessages validationMessages, SMInputCursor cursor) throws XMLStreamException {
+ private static Property processProperty(ValidationMessages validationMessages, SMInputCursor cursor) throws XMLStreamException {
SMInputCursor c = cursor.childElementCursor();
String key = null;
int value = 0;
}
@CheckForNull
- private RuleDebt createRuleDebt(RuleKey ruleKey, String function, @Nullable String coefficient, @Nullable String offset, ValidationMessages validationMessages) {
+ private static RuleDebt createRuleDebt(RuleKey ruleKey, String function, @Nullable String coefficient, @Nullable String offset, ValidationMessages validationMessages) {
if ("linear_threshold".equals(function) && coefficient != null) {
validationMessages.addWarningText(String.format("Linear with threshold function is no longer used, remediation function of '%s' is replaced by linear.", ruleKey));
return new RuleDebt().setRuleKey(ruleKey).setFunction(DebtRemediationFunction.Type.LINEAR.name()).setCoefficient(coefficient);
package org.sonar.server.duplication.ws;
import com.google.common.annotations.VisibleForTesting;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Nullable;
import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.text.JsonWriter;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.component.db.ComponentDao;
-import javax.annotation.Nullable;
-
-import java.util.List;
-import java.util.Map;
-
import static com.google.common.collect.Maps.newHashMap;
@ServerSide
}
}
- private void writeDuplication(Map<String, String> refByComponentKey, DuplicationsParser.Duplication duplication, JsonWriter json) {
+ private static void writeDuplication(Map<String, String> refByComponentKey, DuplicationsParser.Duplication duplication, JsonWriter json) {
String ref = null;
ComponentDto componentDto = duplication.file();
if (componentDto != null) {
}
}
- private void addFile(JsonWriter json, ComponentDto file) {
+ private static void addFile(JsonWriter json, ComponentDto file) {
json.prop("key", file.key());
json.prop("uuid", file.uuid());
json.prop("name", file.longName());
}
- private void addProject(JsonWriter json, @Nullable ComponentDto project, @Nullable ComponentDto subProject) {
+ private static void addProject(JsonWriter json, @Nullable ComponentDto project, @Nullable ComponentDto subProject) {
if (project != null) {
json.prop("project", project.key());
json.prop("projectUuid", project.uuid());
package org.sonar.server.es.request;
+import java.io.IOException;
+import java.util.Arrays;
import org.elasticsearch.action.ListenableActionFuture;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.sonar.api.utils.log.Profiler;
import org.sonar.server.es.EsClient;
-import java.io.IOException;
-import java.util.Arrays;
-
public class ProxySearchRequestBuilder extends SearchRequestBuilder {
public ProxySearchRequestBuilder(Client client) {
return message.toString();
}
- private String xContentToString(ToXContent toXContent) {
+ private static String xContentToString(ToXContent toXContent) {
try {
XContentBuilder builder = XContentFactory.jsonBuilder();
toXContent.toXContent(builder, ToXContent.EMPTY_PARAMS);
package org.sonar.server.issue;
import com.google.common.base.Strings;
-import org.sonar.api.server.ServerSide;
+import java.util.Collection;
+import java.util.Map;
import org.sonar.api.issue.Issue;
import org.sonar.api.issue.internal.DefaultIssue;
+import org.sonar.api.server.ServerSide;
import org.sonar.core.issue.IssueUpdater;
import org.sonar.server.user.UserSession;
-import java.util.Collection;
-import java.util.Map;
-
@ServerSide
public class CommentAction extends Action {
return true;
}
- private String comment(Map<String, Object> properties) {
+ private static String comment(Map<String, Object> properties) {
String param = (String) properties.get(COMMENT_PROPERTY);
if (Strings.isNullOrEmpty(param)) {
throw new IllegalArgumentException("Missing parameter : '" + COMMENT_PROPERTY + "'");
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.apache.commons.lang.StringUtils;
-import org.sonar.api.server.ServerSide;
import org.sonar.api.issue.ActionPlan;
import org.sonar.api.issue.Issue;
import org.sonar.api.issue.IssueComment;
import org.sonar.api.issue.internal.DefaultIssueComment;
import org.sonar.api.issue.internal.FieldDiffs;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.SonarException;
import org.sonar.api.web.UserRole;
import org.sonar.core.issue.ActionPlanStats;
import org.sonar.server.util.RubyUtils;
import org.sonar.server.util.Validation;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
import static com.google.common.collect.Lists.newArrayList;
/**
}
}
- private Date checkAndReturnDeadline(String deadLineParam, Result<ActionPlan> result) {
+ private static Date checkAndReturnDeadline(String deadLineParam, Result<ActionPlan> result) {
Date deadLine = null;
if (!Strings.isNullOrEmpty(deadLineParam)) {
try {
return execute(props);
}
- private void overrideProps(Map<String, Object> props, Map<String, Object> overrideProps) {
+ private static void overrideProps(Map<String, Object> props, Map<String, Object> overrideProps) {
for (Map.Entry<String, Object> entry : overrideProps.entrySet()) {
props.put(entry.getKey(), entry.getValue());
}
return issueBulkChangeService.execute(issueBulkChangeQuery, userSession);
}
- private void checkMandatoryParameter(String value, String paramName, Result result) {
+ private static void checkMandatoryParameter(String value, String paramName, Result result) {
if (Strings.isNullOrEmpty(value)) {
result.addError(Result.Message.ofL10n(Validation.CANT_BE_EMPTY_MESSAGE, paramName));
}
}
- private void checkMandatorySizeParameter(String value, String paramName, Integer size, Result result) {
+ private static void checkMandatorySizeParameter(String value, String paramName, Integer size, Result result) {
checkMandatoryParameter(value, paramName, result);
if (!Strings.isNullOrEmpty(value) && value.length() > size) {
result.addError(Result.Message.ofL10n(Validation.IS_TOO_LONG_MESSAGE, paramName, size));
}
}
- private void checkOptionalSizeParameter(String value, String paramName, Integer size, Result result) {
+ private static void checkOptionalSizeParameter(String value, String paramName, Integer size, Result result) {
if (!Strings.isNullOrEmpty(value) && value.length() > size) {
result.addError(Result.Message.ofL10n(Validation.IS_TOO_LONG_MESSAGE, paramName, size));
}
}
- private void checkOptionalSizeParameter(String value, String paramName, Integer size) {
+ private static void checkOptionalSizeParameter(String value, String paramName, Integer size) {
if (!Strings.isNullOrEmpty(value) && value.length() > size) {
throw new BadRequestException(Validation.IS_TOO_LONG_MESSAGE, paramName, size);
}
}
- public int maxPageSize() {
+ public static int maxPageSize() {
return QueryContext.MAX_LIMIT;
}
import com.google.common.collect.Collections2;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.sonar.api.issue.Issue;
import org.sonar.api.issue.internal.DefaultIssue;
import org.sonar.api.issue.internal.IssueChangeContext;
-import org.sonar.core.notification.NotificationManager;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rules.Rule;
import org.sonar.api.utils.log.Logger;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.issue.db.IssueDto;
import org.sonar.core.issue.db.IssueStorage;
+import org.sonar.core.notification.NotificationManager;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
import org.sonar.server.db.DbClient;
import org.sonar.server.rule.DefaultRuleFinder;
import org.sonar.server.user.UserSession;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
import static com.google.common.collect.Sets.newHashSet;
return bulkActions;
}
- private void applyAction(Action action, ActionContext actionContext, IssueBulkChangeQuery issueBulkChangeQuery, IssueBulkChangeResult result) {
+ private static void applyAction(Action action, ActionContext actionContext, IssueBulkChangeQuery issueBulkChangeQuery, IssueBulkChangeResult result) {
Issue issue = actionContext.issue();
try {
if (action.supports(issue) && action.execute(issueBulkChangeQuery.properties(action.key()), actionContext)) {
package org.sonar.server.issue;
+import com.google.common.base.Strings;
import java.util.Collection;
import java.util.Map;
-
-import org.sonar.api.server.ServerSide;
import org.sonar.api.issue.Issue;
import org.sonar.api.issue.condition.Condition;
import org.sonar.api.issue.condition.IsUnResolved;
import org.sonar.api.issue.internal.DefaultIssue;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.web.UserRole;
import org.sonar.core.issue.IssueUpdater;
import org.sonar.server.user.UserSession;
-import com.google.common.base.Strings;
-
@ServerSide
public class SetSeverityAction extends Action {
return issueUpdater.setManualSeverity((DefaultIssue) context.issue(), severity(properties), context.issueChangeContext());
}
- private String severity(Map<String, Object> properties) {
+ private static String severity(Map<String, Object> properties) {
String param = (String) properties.get("severity");
if (Strings.isNullOrEmpty(param)) {
throw new IllegalArgumentException("Missing parameter : 'severity'");
package org.sonar.server.issue;
+import com.google.common.base.Predicate;
+import com.google.common.base.Strings;
+import com.google.common.collect.Iterables;
import java.util.Collection;
import java.util.Map;
-
import org.apache.commons.lang.StringUtils;
-import org.sonar.api.server.ServerSide;
import org.sonar.api.issue.Issue;
import org.sonar.api.issue.internal.DefaultIssue;
+import org.sonar.api.server.ServerSide;
import org.sonar.core.issue.workflow.IssueWorkflow;
import org.sonar.core.issue.workflow.Transition;
import org.sonar.server.user.UserSession;
-import com.google.common.base.Predicate;
-import com.google.common.base.Strings;
-import com.google.common.collect.Iterables;
-
@ServerSide
public class TransitionAction extends Action {
}, null) != null;
}
- private String transition(Map<String, Object> properties) {
+ private static String transition(Map<String, Object> properties) {
String param = (String) properties.get("transition");
if (Strings.isNullOrEmpty(param)) {
throw new IllegalArgumentException("Missing parameter : 'transition'");
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
-import org.sonar.api.server.ServerSide;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import javax.annotation.CheckForNull;
import org.sonar.api.issue.ActionPlan;
import org.sonar.api.issue.internal.DefaultIssue;
import org.sonar.api.issue.internal.IssueChangeContext;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.web.UserRole;
import org.sonar.core.issue.ActionPlanDeadlineComparator;
import org.sonar.core.issue.ActionPlanStats;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.user.UserSession;
-import javax.annotation.CheckForNull;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
import static com.google.common.collect.Lists.newArrayList;
/**
return resourceDto;
}
- private void checkUserCanAccessProject(String projectKey, UserSession userSession) {
+ private static void checkUserCanAccessProject(String projectKey, UserSession userSession) {
userSession.checkProjectPermission(UserRole.USER, projectKey);
}
- private void checkUserIsProjectAdministrator(String projectKey, UserSession userSession) {
+ private static void checkUserIsProjectAdministrator(String projectKey, UserSession userSession) {
userSession.checkProjectPermission(UserRole.ADMIN, projectKey);
}
controller.done();
}
- private void defineSearchAction(NewController controller) {
+ private static void defineSearchAction(NewController controller) {
WebService.NewAction action = controller.createAction("search")
.setDescription("Get a list of action plans. Requires Browse permission on project")
.setSince("3.6")
.setHandler(RailsHandler.INSTANCE)
- .setResponseExample(Resources.getResource(this.getClass(), "example-search.json"));
+ .setResponseExample(Resources.getResource(ActionPlanWs.class, "example-search.json"));
addProjectParam(action);
addFormatParam(action);
}
- private void defineCreateAction(NewController controller) {
+ private static void defineCreateAction(NewController controller) {
WebService.NewAction action = controller.createAction("create")
.setDescription("Create an action plan. Requires Administer permission on project")
.setSince("3.6")
addFormatParam(action);
}
- private void defineUpdateAction(NewController controller) {
+ private static void defineUpdateAction(NewController controller) {
WebService.NewAction action = controller.createAction("update")
.setDescription("Update an action plan. Requires Administer permission on project")
.setSince("3.6")
addFormatParam(action);
}
- private void defineDeleteAction(NewController controller) {
+ private static void defineDeleteAction(NewController controller) {
WebService.NewAction action = controller.createAction("delete")
.setDescription("Delete an action plan. Requires Administer permission on project")
.setSince("3.6")
addFormatParam(action);
}
- private void defineOpenAction(NewController controller) {
+ private static void defineOpenAction(NewController controller) {
WebService.NewAction action = controller.createAction("open")
.setDescription("Open an action plan. Requires Administer permission on project")
.setSince("3.6")
addFormatParam(action);
}
- private void defineCloseAction(NewController controller) {
+ private static void defineCloseAction(NewController controller) {
WebService.NewAction action = controller.createAction("close")
.setDescription("Close an action plan. Requires Administer permission on project")
.setSince("3.6")
defineBulkChangeAction(controller);
}
- private void defineChangelogAction(NewController controller) {
+ private static void defineChangelogAction(NewController controller) {
WebService.NewAction action = controller.createAction(CHANGELOG_ACTION)
.setDescription("Display changelog of an issue")
.setSince("4.1")
.setHandler(RailsHandler.INSTANCE)
- .setResponseExample(Resources.getResource(this.getClass(), "example-changelog.json"));
+ .setResponseExample(Resources.getResource(IssuesWs.class, "example-changelog.json"));
action.createParam("issue")
.setDescription("Key of the issue")
RailsHandler.addFormatParam(action);
}
- private void defineAssignAction(NewController controller) {
+ private static void defineAssignAction(NewController controller) {
WebService.NewAction action = controller.createAction(ASSIGN_ACTION)
.setDescription("Assign/Unassign an issue. Requires authentication and Browse permission on project")
.setSince("3.6")
RailsHandler.addFormatParam(action);
}
- private void defineAddCommentAction(NewController controller) {
+ private static void defineAddCommentAction(NewController controller) {
WebService.NewAction action = controller.createAction(ADD_COMMENT_ACTION)
.setDescription("Add a comment. Requires authentication and Browse permission on project")
.setSince("3.6")
RailsHandler.addFormatParam(action);
}
- private void defineDeleteCommentAction(NewController controller) {
+ private static void defineDeleteCommentAction(NewController controller) {
WebService.NewAction action = controller.createAction(DELETE_COMMENT_ACTION)
.setDescription("Delete a comment. Requires authentication and Browse permission on project")
.setSince("3.6")
.setExampleValue("392160d3-a4f2-4c52-a565-e4542cfa2096");
}
- private void defineEditCommentAction(NewController controller) {
+ private static void defineEditCommentAction(NewController controller) {
WebService.NewAction action = controller.createAction(EDIT_COMMENT_ACTION)
.setDescription("Edit a comment. Requires authentication and User role on project")
.setSince("3.6")
RailsHandler.addFormatParam(action);
}
- private void defineSetSeverityAction(NewController controller) {
+ private static void defineSetSeverityAction(NewController controller) {
WebService.NewAction action = controller.createAction(SET_SEVERITY_ACTION)
.setDescription("Change severity. Requires authentication and Browse permission on project")
.setSince("3.6")
RailsHandler.addFormatParam(action);
}
- private void definePlanAction(NewController controller) {
+ private static void definePlanAction(NewController controller) {
WebService.NewAction action = controller.createAction(PLAN_ACTION)
.setDescription("Plan/Unplan an issue. Requires authentication and Browse permission on project")
.setSince("3.6")
RailsHandler.addFormatParam(action);
}
- private void defineDoTransitionAction(NewController controller) {
+ private static void defineDoTransitionAction(NewController controller) {
WebService.NewAction action = controller.createAction(DO_TRANSITION_ACTION)
.setDescription("Do workflow transition on an issue. Requires authentication and Browse permission on project")
.setSince("3.6")
RailsHandler.addFormatParam(action);
}
- private void defineTransitionsAction(NewController controller) {
+ private static void defineTransitionsAction(NewController controller) {
WebService.NewAction action = controller.createAction(TRANSITIONS_ACTION)
.setDescription("Get Possible Workflow Transitions for an Issue. Requires Browse permission on project")
.setSince("3.6")
.setHandler(RailsHandler.INSTANCE)
- .setResponseExample(Resources.getResource(this.getClass(), "example-transitions.json"));
+ .setResponseExample(Resources.getResource(IssuesWs.class, "example-transitions.json"));
action.createParam("issue")
.setDescription("Key of the issue")
.setExampleValue("5bccd6e8-f525-43a2-8d76-fcb13dde79ef");
}
- private void defineCreateAction(NewController controller) {
+ private static void defineCreateAction(NewController controller) {
WebService.NewAction action = controller.createAction(CREATE_ACTION)
.setDescription("Create a manual issue. Requires authentication and Browse permission on project")
.setSince("3.6")
RailsHandler.addFormatParam(action);
}
- private void defineDoActionAction(NewController controller) {
+ private static void defineDoActionAction(NewController controller) {
WebService.NewAction action = controller.createAction(DO_ACTION_ACTION)
.setDescription("Do workflow transition on an issue. Requires authentication and Browse permission on project")
.setSince("3.6")
RailsHandler.addFormatParam(action);
}
- private void defineBulkChangeAction(NewController controller) {
+ private static void defineBulkChangeAction(NewController controller) {
WebService.NewAction action = controller.createAction(BULK_CHANGE_ACTION)
.setDescription("Bulk change on issues. Requires authentication and User role on project(s)")
.setSince("3.7")
json.endArray();
}
- private void writeUsers(JsonWriter json, Map<String, User> usersByLogin) {
+ private static void writeUsers(JsonWriter json, Map<String, User> usersByLogin) {
json.name("users").beginArray();
for (User user : usersByLogin.values()) {
json.beginObject()
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
-import org.apache.commons.dbutils.DbUtils;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.core.component.SnapshotDto;
-import org.sonar.core.persistence.Database;
-import org.sonar.core.persistence.dialect.MsSql;
-import org.sonar.core.persistence.dialect.Oracle;
-
-import javax.annotation.Nullable;
-
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
+import javax.annotation.Nullable;
+import org.apache.commons.dbutils.DbUtils;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
+import org.sonar.core.component.SnapshotDto;
+import org.sonar.core.persistence.Database;
+import org.sonar.core.persistence.dialect.MsSql;
+import org.sonar.core.persistence.dialect.Oracle;
class MeasureFilterSql {
/**
* Replace escape percent and underscore by adding a slash just before
*/
- private String escapePercentAndUnderscrore(String value) {
+ private static String escapePercentAndUnderscrore(String value) {
return value.replaceAll("%", "\\\\%").replaceAll("_", "\\\\_");
}
controller.done();
}
- private void defineIndexAction(NewController controller) {
+ private static void defineIndexAction(NewController controller) {
controller.createAction("index")
.setDescription("Documentation of this web service is available <a href=\"http://redirect.sonarsource.com/doc/old-web-service-api.html\">here</a>")
.setSince("2.10")
}
}
- private MetricDto newMetricTemplate(Request request) {
+ private static MetricDto newMetricTemplate(Request request) {
String key = request.mandatoryParam(PARAM_KEY);
String name = request.mandatoryParam(PARAM_NAME);
String type = Metric.ValueType.valueOf(request.mandatoryParam(PARAM_TYPE)).name();
controller.done();
}
- private void defineIndexAction(NewController controller) {
+ private static void defineIndexAction(NewController controller) {
controller.createAction("index")
.setDescription("Documentation of this web service is available <a href=\"http://redirect.sonarsource.com/doc/old-web-service-api.html\">here</a>")
.setSince("2.6")
package org.sonar.server.permission;
-import org.sonar.api.server.ServerSide;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.sonar.api.security.DefaultGroups;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.web.UserRole;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.server.issue.index.IssueAuthorizationIndexer;
import org.sonar.server.user.UserSession;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.util.List;
-import java.util.Map;
-
/**
* Used by ruby code <pre>Internal.permissions</pre>
*/
}
}
- private Object badRequestIfNullResult(@Nullable Object component, String objectType, String objectKey) {
+ private static Object badRequestIfNullResult(@Nullable Object component, String objectType, String objectKey) {
if (component == null) {
throw new BadRequestException(String.format(NOT_FOUND_FORMAT, objectType, objectKey));
}
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
+import java.util.Collection;
+import java.util.List;
+import javax.annotation.Nullable;
import org.apache.commons.lang.StringUtils;
-import org.sonar.api.server.ServerSide;
import org.sonar.api.security.DefaultGroups;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.Paging;
import org.sonar.core.permission.GroupWithPermission;
import org.sonar.core.permission.GroupWithPermissionDto;
import org.sonar.core.resource.ResourceQuery;
import org.sonar.server.exceptions.NotFoundException;
-import javax.annotation.Nullable;
-
-import java.util.Collection;
-import java.util.List;
-
import static com.google.common.collect.Lists.newArrayList;
@ServerSide
return new UserWithPermissionQueryResult(toUserWithPermissionList(dtos), hasMoreResults);
}
- private List<UserWithPermission> toUserWithPermissionList(List<UserWithPermissionDto> dtos) {
+ private static List<UserWithPermission> toUserWithPermissionList(List<UserWithPermissionDto> dtos) {
List<UserWithPermission> users = newArrayList();
for (UserWithPermissionDto dto : dtos) {
users.add(dto.toUserWithPermission());
}
@Nullable
- private Long componentId(String componentKey) {
+ private Long componentId(@Nullable String componentKey) {
if (componentKey == null) {
return null;
} else {
return dto.getId();
}
- private int offset(PermissionQuery query) {
+ private static int offset(PermissionQuery query) {
int pageSize = query.pageSize();
int pageIndex = query.pageIndex();
return (pageIndex - 1) * pageSize;
}
- private int limit(PermissionQuery query) {
+ private static int limit(PermissionQuery query) {
// Add one to page size in order to be able to know if there's more results or not
return query.pageSize() + 1;
}
}
}
- private List<GroupWithPermission> pagedGroups(Collection<GroupWithPermissionDto> dtos, Paging paging) {
+ private static List<GroupWithPermission> pagedGroups(Collection<GroupWithPermissionDto> dtos, Paging paging) {
List<GroupWithPermission> groups = newArrayList();
int index = 0;
for (GroupWithPermissionDto dto : dtos) {
controller.done();
}
- private void defineAddAction(NewController controller) {
+ private static void defineAddAction(NewController controller) {
NewAction action = controller.createAction("add")
.setDescription("Add a global or a project permission. Requires Administer System permission for global permissions, " +
"requires Administer permission on project for project permissions")
RailsHandler.addFormatParam(action);
}
- private void defineRemoveAction(NewController controller) {
+ private static void defineRemoveAction(NewController controller) {
NewAction action = controller.createAction("remove")
.setDescription("Remove a global or a project permission. Requires Administer System permission for global permissions, " +
"requires Administer permission on project for project permissions")
*/
package org.sonar.server.platform;
+import java.sql.Connection;
+import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.elasticsearch.index.query.QueryBuilders;
import org.sonar.api.server.ServerSide;
import org.sonar.server.source.index.SourceLineIndexDefinition;
import org.sonar.server.view.index.ViewIndexDefinition;
-import java.sql.Connection;
-import java.sql.SQLException;
-
@ServerSide
public class BackendCleanup {
}
}
- private void deleteWhereResourceIdNotNull(String tableName, Connection connection) {
+ private static void deleteWhereResourceIdNotNull(String tableName, Connection connection) {
try {
connection.prepareStatement("DELETE FROM " + tableName + " WHERE resource_id IS NOT NULL").execute();
// commit is useless on some databases
}
}
- private void deleteManualRules(Connection connection) {
+ private static void deleteManualRules(Connection connection) {
try {
connection.prepareStatement("DELETE FROM rules WHERE rules.plugin_name='manual'").execute();
// commit is useless on some databases
package org.sonar.server.qualitygate.ws;
import com.google.common.io.Resources;
+import java.util.Collection;
+import javax.annotation.Nullable;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.qualitygate.QualityGates;
-import javax.annotation.Nullable;
-
-import java.util.Collection;
-
public class ShowAction implements QGateWsAction {
private final QualityGates qualityGates;
writer.endObject().close();
}
- private void checkOneOfIdOrNamePresent(@Nullable Long qGateId, @Nullable String qGateName) {
+ private static void checkOneOfIdOrNamePresent(@Nullable Long qGateId, @Nullable String qGateName) {
if (qGateId == null && qGateName == null) {
throw new BadRequestException("Either one of 'id' or 'name' is required.");
} else if (qGateId != null && qGateName != null) {
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.Nullable;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.codehaus.staxmate.SMInputFactory;
import org.codehaus.staxmate.in.SMHierarchicCursor;
import org.codehaus.staxmate.in.SMInputCursor;
-import org.sonar.api.server.ServerSide;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.text.XmlWriter;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.qualityprofile.db.QualityProfileDto;
import org.sonar.server.qualityprofile.index.ActiveRuleIndex;
import org.sonar.server.search.IndexClient;
-import javax.annotation.Nullable;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-
-import java.io.Reader;
-import java.io.Writer;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
@ServerSide
public class QProfileBackuper {
writeXml(writer, profile, activeRules.iterator());
}
- private void writeXml(Writer writer, QualityProfileDto profile, Iterator<ActiveRule> activeRules) {
+ private static void writeXml(Writer writer, QualityProfileDto profile, Iterator<ActiveRule> activeRules) {
XmlWriter xml = XmlWriter.of(writer).declaration();
xml.begin("profile");
xml.prop("name", profile.getName());
*/
package org.sonar.server.qualityprofile;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
-import org.sonar.api.server.ServerSide;
import org.sonar.api.profiles.ProfileExporter;
import org.sonar.api.profiles.ProfileImporter;
import org.sonar.api.profiles.RulesProfile;
import org.sonar.api.rules.Rule;
import org.sonar.api.rules.RuleFinder;
import org.sonar.api.rules.RulePriority;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.utils.ValidationMessages;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.qualityprofile.db.QualityProfileDto;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.exceptions.NotFoundException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
@ServerSide
public class QProfileExporters {
throw new BadRequestException("No such importer : " + importerKey);
}
- private void processValidationMessages(ValidationMessages messages, QProfileResult result) {
+ private static void processValidationMessages(ValidationMessages messages, QProfileResult result) {
if (!messages.getErrors().isEmpty()) {
throw new BadRequestException(messages);
}
result.addInfos(messages.getInfos());
}
- private RuleActivation toRuleActivation(org.sonar.api.rules.ActiveRule activeRule) {
+ private static RuleActivation toRuleActivation(org.sonar.api.rules.ActiveRule activeRule) {
RuleActivation ruleActivation = new RuleActivation(activeRule.getRule().ruleKey());
ruleActivation.setSeverity(activeRule.getSeverity().name());
for (ActiveRuleParam activeRuleParam : activeRule.getActiveRuleParams()) {
return qualityProfile;
}
- private void checkPermission(UserSession userSession) {
+ private static void checkPermission(UserSession userSession) {
userSession.checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN);
}
- private void checkPermission(UserSession userSession, String projectKey) {
+ private static void checkPermission(UserSession userSession, String projectKey) {
if (!userSession.hasGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN) && !userSession.hasProjectPermission(UserRole.ADMIN, projectKey)) {
throw new ForbiddenException("Insufficient privileges");
}
package org.sonar.server.qualityprofile;
+import com.google.common.base.Strings;
import java.util.List;
-
import javax.annotation.CheckForNull;
-
-import org.sonar.api.server.ServerSide;
import org.sonar.api.component.Component;
+import org.sonar.api.server.ServerSide;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.user.UserSession;
import org.sonar.server.util.Validation;
-import com.google.common.base.Strings;
-
/**
* Use {@link org.sonar.server.qualityprofile.QProfileService} instead
*/
projectOperations.removeAllProjects(profileKey, userSession);
}
- private void checkProfileNameParam(String name) {
+ private static void checkProfileNameParam(String name) {
if (Strings.isNullOrEmpty(name)) {
throw new BadRequestException("quality_profiles.please_type_profile_name");
}
controller.done();
}
- private void defineListAction(NewController controller) {
+ private static void defineListAction(NewController controller) {
WebService.NewAction action = controller.createAction("list")
.setDescription("Get a list of profiles")
.setSince("3.3")
.setHandler(RailsHandler.INSTANCE)
- .setResponseExample(Resources.getResource(this.getClass(), "example-list.json"));
+ .setResponseExample(Resources.getResource(ProfilesWs.class, "example-list.json"));
action.createParam("language")
.setDescription("Profile language")
RailsHandler.addJsonOnlyFormatParam(action);
}
- private void defineIndexAction(NewController controller) {
+ private static void defineIndexAction(NewController controller) {
WebService.NewAction action = controller.createAction("index")
.setDescription("Get a profile")
.setSince("3.3")
.setHandler(RailsHandler.INSTANCE)
- .setResponseExample(Resources.getResource(this.getClass(), "example-index.json"));
+ .setResponseExample(Resources.getResource(ProfilesWs.class, "example-index.json"));
action.createParam("language")
.setDescription("Profile language")
RailsHandler.addFormatParam(action);
}
- private void defineBackupAction(NewController controller) {
+ private static void defineBackupAction(NewController controller) {
WebService.NewAction action = controller.createAction("backup")
.setDescription("Backup a quality profile. Requires Administer Quality Profiles permission")
.setSince("3.1")
RailsHandler.addFormatParam(action);
}
- private void defineRestoreAction(NewController controller) {
+ private static void defineRestoreAction(NewController controller) {
WebService.NewAction action = controller.createAction("restore")
.setDescription("Restore a quality profile backup. Requires Administer Quality Profiles permission")
.setSince("3.1")
RailsHandler.addJsonOnlyFormatParam(action);
}
- private void defineDestroyAction(NewController controller) {
+ private static void defineDestroyAction(NewController controller) {
WebService.NewAction action = controller.createAction("destroy")
.setDescription("Delete a quality profile. Requires Administer Quality Profiles permission")
.setSince("3.3")
.setExampleValue("Sonar way");
}
- private void defineSetAsDefaultAction(NewController controller) {
+ private static void defineSetAsDefaultAction(NewController controller) {
WebService.NewAction action = controller.createAction("set_as_default")
.setDescription("Set a quality profile as Default. Requires Administer Quality Profiles permission")
.setSince("3.3")
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
+import java.io.Reader;
+import java.util.Collection;
+import java.util.List;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
-import org.sonar.api.server.ServerSide;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rules.RuleParam;
import org.sonar.api.rules.RuleRepository;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.server.debt.DebtRemediationFunction;
import org.sonar.api.server.rule.RuleParamType;
import org.sonar.api.server.rule.RulesDefinition;
import org.sonar.server.debt.DebtModelXMLExporter.RuleDebt;
import org.sonar.server.debt.DebtRulesXMLImporter;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.io.Reader;
-import java.util.Collection;
-import java.util.List;
-
import static com.google.common.collect.Lists.newArrayList;
/**
}
}
- private DebtRemediationFunction remediationFunction(DebtRemediationFunction.Type function, @Nullable String coefficient, @Nullable String offset,
+ private static DebtRemediationFunction remediationFunction(DebtRemediationFunction.Type function, @Nullable String coefficient, @Nullable String offset,
RulesDefinition.DebtRemediationFunctions functions, String repoKey, String ruleKey) {
if (DebtRemediationFunction.Type.LINEAR.equals(function) && coefficient != null) {
return functions.linear(coefficient);
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.picocontainer.Startable;
import org.sonar.server.qualityprofile.RuleActivator;
import org.sonar.server.startup.RegisterDebtModel;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.util.*;
-
import static com.google.common.collect.Lists.newArrayList;
/**
}
@CheckForNull
- private CharacteristicDto characteristic(RulesDefinition.Rule ruleDef, @Nullable Integer overridingCharacteristicId, Map<String, CharacteristicDto> allCharacteristics) {
+ private static CharacteristicDto characteristic(RulesDefinition.Rule ruleDef, @Nullable Integer overridingCharacteristicId, Map<String, CharacteristicDto> allCharacteristics) {
String subCharacteristic = ruleDef.debtSubCharacteristic();
String repo = ruleDef.repository().key();
String ruleKey = ruleDef.key();
package org.sonar.server.rule;
import com.google.common.base.Strings;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.apache.commons.lang.builder.EqualsBuilder;
-import org.sonar.api.server.ServerSide;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.server.debt.DebtRemediationFunction;
import org.sonar.api.server.debt.internal.DefaultDebtRemediationFunction;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.user.UserSession;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
/**
* @deprecated to be dropped in 4.4
*/
.isEquals();
}
- private void checkPermission(UserSession userSession) {
+ private static void checkPermission(UserSession userSession) {
userSession.checkLoggedIn();
userSession.checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN);
}
import com.google.common.base.Strings;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
-import org.sonar.api.server.ServerSide;
import org.sonar.api.rule.RuleStatus;
import org.sonar.api.rule.Severity;
+import org.sonar.api.server.ServerSide;
import org.sonar.api.server.debt.DebtRemediationFunction;
import org.sonar.api.utils.System2;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.db.DbClient;
import org.sonar.server.user.UserSession;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-
import static com.google.common.collect.Lists.newArrayList;
@ServerSide
}
}
- private void updateName(RuleUpdate update, Context context) {
+ private static void updateName(RuleUpdate update, Context context) {
String name = update.getName();
if (Strings.isNullOrEmpty(name)) {
throw new IllegalArgumentException("The name is missing");
}
}
- private void updateDescription(RuleUpdate update, Context context) {
+ private static void updateDescription(RuleUpdate update, Context context) {
String description = update.getMarkdownDescription();
if (Strings.isNullOrEmpty(description)) {
throw new IllegalArgumentException("The description is missing");
}
}
- private void updateSeverity(RuleUpdate update, Context context) {
+ private static void updateSeverity(RuleUpdate update, Context context) {
String severity = update.getSeverity();
if (Strings.isNullOrEmpty(severity) || !Severity.ALL.contains(severity)) {
throw new IllegalArgumentException("The severity is invalid");
}
}
- private void updateStatus(RuleUpdate update, Context context) {
+ private static void updateStatus(RuleUpdate update, Context context) {
RuleStatus status = update.getStatus();
if (status == null) {
throw new IllegalArgumentException("The status is missing");
}
}
- private void updateTags(RuleUpdate update, Context context) {
+ private static void updateTags(RuleUpdate update, Context context) {
Set<String> tags = update.getTags();
if (tags == null || tags.isEmpty()) {
context.rule.setTags(Collections.<String>emptySet());
}
}
- private void updateDebtSubCharacteristic(RuleUpdate update, Context context) {
+ private static void updateDebtSubCharacteristic(RuleUpdate update, Context context) {
if (update.getDebtSubCharacteristicKey() == null) {
// set to "none"
Integer id = context.rule.getDefaultSubCharacteristicId() != null ? RuleDto.DISABLED_CHARACTERISTIC_ID : null;
}
}
- private void updateDebtRemediationFunction(RuleUpdate update, Context context) {
+ private static void updateDebtRemediationFunction(RuleUpdate update, Context context) {
Integer subChar = context.rule.getSubCharacteristicId();
boolean noChar =
(context.rule.getDefaultSubCharacteristicId() == null && subChar == null) ||
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
+import java.io.Serializable;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Queue;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.count.CountRequestBuilder;
import org.elasticsearch.action.count.CountResponse;
-import org.elasticsearch.action.get.*;
+import org.elasticsearch.action.get.GetRequestBuilder;
+import org.elasticsearch.action.get.GetResponse;
+import org.elasticsearch.action.get.MultiGetItemResponse;
+import org.elasticsearch.action.get.MultiGetRequest;
+import org.elasticsearch.action.get.MultiGetRequestBuilder;
+import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequestBuilder;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
-import org.elasticsearch.index.query.*;
+import org.elasticsearch.index.query.BoolFilterBuilder;
+import org.elasticsearch.index.query.FilterBuilder;
+import org.elasticsearch.index.query.FilterBuilders;
+import org.elasticsearch.index.query.QueryBuilder;
+import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.sonar.core.persistence.Dto;
import org.sonar.server.exceptions.NotFoundException;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.io.Serializable;
-import java.util.*;
-
/**
* @deprecated replaced by {@link org.sonar.server.es.BaseIndex}
*/
}
}
- private Map mapUuidPathField(IndexField field) {
+ private static Map mapUuidPathField(IndexField field) {
return ImmutableMap.of(
"type", "string",
"index", "analyzed",
package org.sonar.server.source;
import com.google.common.io.Closeables;
-import org.sonar.api.utils.log.Loggers;
-
-import javax.annotation.Nullable;
-
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.Collection;
import java.util.List;
+import javax.annotation.Nullable;
+import org.sonar.api.utils.log.Loggers;
import static com.google.common.collect.Lists.newArrayList;
}
}
- private boolean canAddLine(int currentLine, @Nullable Integer from) {
+ private static boolean canAddLine(int currentLine, @Nullable Integer from) {
return from == null || currentLine >= from;
}
- private boolean shouldStop(int currentLine, @Nullable Integer to) {
+ private static boolean shouldStop(int currentLine, @Nullable Integer to) {
return to != null && to < currentLine;
}
ResultSet rs = null;
Reader reader = null;
try {
- pstmt = connection.prepareStatement("SELECT line_hashes FROM file_sources WHERE file_uuid=? AND data_type = '" + Type.SOURCE +"'");
+ pstmt = connection.prepareStatement("SELECT line_hashes FROM file_sources WHERE file_uuid=? AND data_type=?");
pstmt.setString(1, fileUuid);
+ pstmt.setString(2, Type.SOURCE);
rs = pstmt.executeQuery();
if (rs.next()) {
reader = rs.getCharacterStream(1);
*/
package org.sonar.server.startup;
+import java.io.File;
+import java.io.IOException;
+import javax.annotation.Nullable;
import org.apache.commons.io.FileUtils;
import org.sonar.api.config.Settings;
import org.sonar.home.cache.FileHashes;
import org.sonar.process.ProcessProperties;
import org.sonar.server.platform.DefaultServerFileSystem;
-import javax.annotation.Nullable;
-
-import java.io.File;
-import java.io.IOException;
-
public class JdbcDriverDeployer {
private final DefaultServerFileSystem fileSystem;
}
}
- private String driverIndexContent(@Nullable File deployedDriver) {
+ private static String driverIndexContent(@Nullable File deployedDriver) {
if (deployedDriver != null) {
String hash = new FileHashes().of(deployedDriver);
return deployedDriver.getName() + "|" + hash;
}
}
- private void addQuotedValue(PropertyDto property, StringBuilder message) {
+ private static void addQuotedValue(PropertyDto property, StringBuilder message) {
message.append("\"");
message.append(property.getValue());
message.append("\"\n");
package org.sonar.server.user;
+import java.util.List;
import org.sonar.api.server.ServerSide;
import org.sonar.core.user.GroupMembership;
import org.sonar.core.user.GroupMembershipDao;
import org.sonar.core.user.UserDto;
import org.sonar.server.exceptions.NotFoundException;
-import java.util.List;
-
import static com.google.common.collect.Lists.newArrayList;
@ServerSide
return userDto.getId();
}
- private List<GroupMembership> toGroupMembership(List<GroupMembershipDto> dtos) {
+ private static List<GroupMembership> toGroupMembership(List<GroupMembershipDto> dtos) {
List<GroupMembership> groups = newArrayList();
for (GroupMembershipDto groupMembershipDto : dtos) {
groups.add(groupMembershipDto.toGroupMembership());
package org.sonar.server.user;
+import java.util.Map;
import org.sonar.api.server.ServerSide;
import org.sonar.core.user.GroupMembershipQuery;
import org.sonar.server.util.RubyUtils;
-import java.util.Map;
-
/**
* Used by ruby code <pre>Internal.group_membership</pre>
*/
return builder.build();
}
- private String membership(Map<String, Object> params) {
+ private static String membership(Map<String, Object> params) {
String selected = (String) params.get("selected");
if (SELECTED_MEMBERSHIP.equals(selected)) {
return GroupMembershipQuery.IN;
package org.sonar.server.user.index;
+import java.sql.Connection;
+import java.util.Iterator;
import org.apache.commons.dbutils.DbUtils;
import org.elasticsearch.action.update.UpdateRequest;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.es.BulkIndexer;
import org.sonar.server.es.EsClient;
-import java.sql.Connection;
-import java.util.Iterator;
-
public class UserIndexer extends BaseIndexer {
private final DbClient dbClient;
return maxUpdatedAt;
}
- private UpdateRequest newUpsertRequest(UserDoc user) {
+ private static UpdateRequest newUpsertRequest(UserDoc user) {
return new UpdateRequest(UserIndexDefinition.INDEX, UserIndexDefinition.TYPE_USER, user.login())
.doc(user.getFields())
.upsert(user.getFields());
controller.done();
}
- private void defineIndexAction(NewController controller) {
+ private static void defineIndexAction(NewController controller) {
controller.createAction("index")
.setDescription("Documentation of this web service is available <a href=\"http://redirect.sonarsource.com/doc/old-web-service-api.html\">here</a>")
.setSince("2.6")
json.endObject().close();
}
- private void writeUser(JsonWriter json, UserDoc user) {
+ private static void writeUser(JsonWriter json, UserDoc user) {
json.name("user").beginObject()
.prop("login", user.login())
.prop("name", user.name())
controller.done();
}
- private void defineIndexAction(NewController controller) {
+ private static void defineIndexAction(NewController controller) {
controller.createAction("index")
.setDescription("Documentation of this web service is available <a href=\"http://redirect.sonarsource.com/doc/old-web-service-api.html\">here</a>")
.setSince("2.6")
package org.sonar.server.view.index;
+import java.util.List;
+import java.util.Map;
import org.elasticsearch.action.update.UpdateRequest;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.component.UuidWithProjectUuidDto;
import org.sonar.server.es.EsClient;
import org.sonar.server.issue.index.IssueIndex;
-import java.util.List;
-import java.util.Map;
-
import static com.google.common.collect.Maps.newHashMap;
public class ViewIndexer extends BaseIndexer {
}
}
- private UpdateRequest newUpsertRequest(ViewDoc doc) {
+ private static UpdateRequest newUpsertRequest(ViewDoc doc) {
return new UpdateRequest(ViewIndexDefinition.INDEX, ViewIndexDefinition.TYPE_VIEW, doc.uuid())
.doc(doc.getFields())
.upsert(doc.getFields());
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube 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.
+ *
+ * SonarQube 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.server.computation.step;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.sonar.api.utils.System2;
+import org.sonar.batch.protocol.Constants;
+import org.sonar.batch.protocol.output.BatchReport;
+import org.sonar.core.component.ComponentDto;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.core.persistence.DbTester;
+import org.sonar.server.component.ComponentTesting;
+import org.sonar.server.component.db.ComponentDao;
+import org.sonar.server.computation.batch.BatchReportReaderRule;
+import org.sonar.server.computation.batch.TreeRootHolderRule;
+import org.sonar.server.computation.component.Component;
+import org.sonar.server.computation.component.DbIdsRepository;
+import org.sonar.server.computation.component.DumbComponent;
+import org.sonar.server.db.DbClient;
+import org.sonar.test.DbTests;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+
+@Category(DbTests.class)
+public class PersistComponentsAndSnapshotsStepTest extends BaseStepTest {
+
+ private static final String PROJECT_KEY = "PROJECT_KEY";
+
+ @ClassRule
+ public static DbTester dbTester = new DbTester();
+
+ @Rule
+ public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule();
+
+ @Rule
+ public BatchReportReaderRule reportReader = new BatchReportReaderRule();
+
+ System2 system2 = mock(System2.class);
+
+ DbIdsRepository dbIdsRepository;
+
+ DbSession session;
+
+ DbClient dbClient;
+
+ PersistComponentsAndSnapshotsStep sut;
+
+ @Before
+ public void setup() throws Exception {
+ dbTester.truncateTables();
+ session = dbTester.myBatis().openSession(false);
+ dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new ComponentDao());
+
+ reportReader.setMetadata(BatchReport.Metadata.newBuilder().build());
+
+ dbIdsRepository = new DbIdsRepository();
+ sut = new PersistComponentsAndSnapshotsStep(system2, dbClient, treeRootHolder, reportReader, dbIdsRepository);
+ }
+
+ @Override
+ protected ComputationStep step() {
+ return sut;
+ }
+
+ @After
+ public void tearDown() {
+ session.close();
+ }
+
+ @Test
+ public void persist_components() throws Exception {
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey(PROJECT_KEY)
+ .setName("Project")
+ .setDescription("Project description")
+ .addChildRef(2)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(2)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("MODULE_KEY")
+ .setPath("module")
+ .setName("Module")
+ .setDescription("Module description")
+ .addChildRef(3)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(3)
+ .setType(Constants.ComponentType.DIRECTORY)
+ .setPath("src/main/java/dir")
+ .addChildRef(4)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(4)
+ .setType(Constants.ComponentType.FILE)
+ .setPath("src/main/java/dir/Foo.java")
+ .setLanguage("java")
+ .build());
+
+ Component file = new DumbComponent(Component.Type.FILE, 4, "DEFG", "MODULE_KEY:src/main/java/dir/Foo.java");
+ Component directory = new DumbComponent(Component.Type.DIRECTORY, 3, "CDEF", "MODULE_KEY:src/main/java/dir", file);
+ Component module = new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY", directory);
+ Component project = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY, module);
+ treeRootHolder.setRoot(project);
+
+ sut.execute();
+
+ assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
+
+ ComponentDto projectDto = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
+ assertThat(projectDto).isNotNull();
+ assertThat(projectDto.name()).isEqualTo("Project");
+ assertThat(projectDto.description()).isEqualTo("Project description");
+ assertThat(projectDto.path()).isNull();
+ assertThat(projectDto.uuid()).isEqualTo("ABCD");
+ assertThat(projectDto.moduleUuid()).isNull();
+ assertThat(projectDto.moduleUuidPath()).isEqualTo("." + projectDto.uuid() + ".");
+ assertThat(projectDto.projectUuid()).isEqualTo(projectDto.uuid());
+ assertThat(projectDto.qualifier()).isEqualTo("TRK");
+ assertThat(projectDto.scope()).isEqualTo("PRJ");
+ assertThat(projectDto.parentProjectId()).isNull();
+
+ ComponentDto moduleDto = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
+ assertThat(moduleDto).isNotNull();
+ assertThat(moduleDto.name()).isEqualTo("Module");
+ assertThat(moduleDto.description()).isEqualTo("Module description");
+ assertThat(moduleDto.path()).isEqualTo("module");
+ assertThat(moduleDto.uuid()).isEqualTo("BCDE");
+ assertThat(moduleDto.moduleUuid()).isEqualTo(projectDto.uuid());
+ assertThat(moduleDto.moduleUuidPath()).isEqualTo(projectDto.moduleUuidPath() + moduleDto.uuid() + ".");
+ assertThat(moduleDto.projectUuid()).isEqualTo(projectDto.uuid());
+ assertThat(moduleDto.qualifier()).isEqualTo("BRC");
+ assertThat(moduleDto.scope()).isEqualTo("PRJ");
+ assertThat(moduleDto.parentProjectId()).isEqualTo(projectDto.getId());
+
+ ComponentDto directoryDto = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir");
+ assertThat(directoryDto).isNotNull();
+ assertThat(directoryDto.name()).isEqualTo("src/main/java/dir");
+ assertThat(directoryDto.description()).isNull();
+ assertThat(directoryDto.path()).isEqualTo("src/main/java/dir");
+ assertThat(directoryDto.uuid()).isEqualTo("CDEF");
+ assertThat(directoryDto.moduleUuid()).isEqualTo(moduleDto.uuid());
+ assertThat(directoryDto.moduleUuidPath()).isEqualTo(moduleDto.moduleUuidPath());
+ assertThat(directoryDto.projectUuid()).isEqualTo(projectDto.uuid());
+ assertThat(directoryDto.qualifier()).isEqualTo("DIR");
+ assertThat(directoryDto.scope()).isEqualTo("DIR");
+ assertThat(directoryDto.parentProjectId()).isEqualTo(moduleDto.getId());
+
+ ComponentDto fileDto = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir/Foo.java");
+ assertThat(fileDto).isNotNull();
+ assertThat(fileDto.name()).isEqualTo("Foo.java");
+ assertThat(fileDto.description()).isNull();
+ assertThat(fileDto.path()).isEqualTo("src/main/java/dir/Foo.java");
+ assertThat(fileDto.language()).isEqualTo("java");
+ assertThat(fileDto.uuid()).isEqualTo("DEFG");
+ assertThat(fileDto.moduleUuid()).isEqualTo(moduleDto.uuid());
+ assertThat(fileDto.moduleUuidPath()).isEqualTo(moduleDto.moduleUuidPath());
+ assertThat(fileDto.projectUuid()).isEqualTo(projectDto.uuid());
+ assertThat(fileDto.qualifier()).isEqualTo("FIL");
+ assertThat(fileDto.scope()).isEqualTo("FIL");
+ assertThat(fileDto.parentProjectId()).isEqualTo(moduleDto.getId());
+
+ assertThat(dbIdsRepository.getComponentId(project)).isEqualTo(projectDto.getId());
+ assertThat(dbIdsRepository.getComponentId(module)).isEqualTo(moduleDto.getId());
+ assertThat(dbIdsRepository.getComponentId(directory)).isEqualTo(directoryDto.getId());
+ assertThat(dbIdsRepository.getComponentId(file)).isEqualTo(fileDto.getId());
+ }
+
+ @Test
+ public void persist_file_directly_attached_on_root_directory() throws Exception {
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey(PROJECT_KEY)
+ .setName("Project")
+ .addChildRef(2)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(2)
+ .setType(Constants.ComponentType.DIRECTORY)
+ .setPath("/")
+ .addChildRef(3)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(3)
+ .setType(Constants.ComponentType.FILE)
+ .setPath("pom.xml")
+ .build());
+
+ treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
+ new DumbComponent(Component.Type.DIRECTORY, 2, "CDEF", PROJECT_KEY + ":/",
+ new DumbComponent(Component.Type.FILE, 3, "DEFG", PROJECT_KEY + ":pom.xml"))));
+
+ sut.execute();
+
+ ComponentDto directory = dbClient.componentDao().selectNullableByKey(session, "PROJECT_KEY:/");
+ assertThat(directory).isNotNull();
+ assertThat(directory.name()).isEqualTo("/");
+ assertThat(directory.path()).isEqualTo("/");
+
+ ComponentDto file = dbClient.componentDao().selectNullableByKey(session, "PROJECT_KEY:pom.xml");
+ assertThat(file).isNotNull();
+ assertThat(file.name()).isEqualTo("pom.xml");
+ assertThat(file.path()).isEqualTo("pom.xml");
+ }
+
+ @Test
+ public void persist_unit_test() throws Exception {
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey(PROJECT_KEY)
+ .setName("Project")
+ .addChildRef(2)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(2)
+ .setType(Constants.ComponentType.DIRECTORY)
+ .setPath("src/test/java/dir")
+ .addChildRef(3)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(3)
+ .setType(Constants.ComponentType.FILE)
+ .setPath("src/test/java/dir/FooTest.java")
+ .setIsTest(true)
+ .build());
+
+ treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
+ new DumbComponent(Component.Type.DIRECTORY, 2, "CDEF", PROJECT_KEY + ":src/test/java/dir",
+ new DumbComponent(Component.Type.FILE, 3, "DEFG", PROJECT_KEY + ":src/test/java/dir/FooTest.java"))));
+
+ sut.execute();
+
+ ComponentDto file = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY + ":src/test/java/dir/FooTest.java");
+ assertThat(file).isNotNull();
+ assertThat(file.name()).isEqualTo("FooTest.java");
+ assertThat(file.path()).isEqualTo("src/test/java/dir/FooTest.java");
+ assertThat(file.qualifier()).isEqualTo("UTS");
+ assertThat(file.scope()).isEqualTo("FIL");
+ }
+
+ @Test
+ public void persist_only_new_components() throws Exception {
+ // Project amd module already exists
+ ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project");
+ dbClient.componentDao().insert(session, project);
+ ComponentDto module = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_KEY").setName("Module");
+ dbClient.componentDao().insert(session, module);
+ session.commit();
+
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey(PROJECT_KEY)
+ .setName("Project")
+ .addChildRef(2)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(2)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("MODULE_KEY")
+ .setName("Module")
+ .addChildRef(3)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(3)
+ .setType(Constants.ComponentType.DIRECTORY)
+ .setPath("src/main/java/dir")
+ .addChildRef(4)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(4)
+ .setType(Constants.ComponentType.FILE)
+ .setPath("src/main/java/dir/Foo.java")
+ .build());
+
+ treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
+ new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY",
+ new DumbComponent(Component.Type.DIRECTORY, 3, "CDEF", "MODULE_KEY:src/main/java/dir",
+ new DumbComponent(Component.Type.FILE, 4, "DEFG", "MODULE_KEY:src/main/java/dir/Foo.java")))));
+
+ sut.execute();
+
+ assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
+
+ ComponentDto projectReloaded = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
+ assertThat(projectReloaded.getId()).isEqualTo(project.getId());
+ assertThat(projectReloaded.uuid()).isEqualTo(project.uuid());
+
+ ComponentDto moduleReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
+ assertThat(moduleReloaded.getId()).isEqualTo(module.getId());
+ assertThat(moduleReloaded.uuid()).isEqualTo(module.uuid());
+ assertThat(moduleReloaded.moduleUuid()).isEqualTo(module.moduleUuid());
+ assertThat(moduleReloaded.moduleUuidPath()).isEqualTo(module.moduleUuidPath());
+ assertThat(moduleReloaded.projectUuid()).isEqualTo(module.projectUuid());
+ assertThat(moduleReloaded.parentProjectId()).isEqualTo(module.parentProjectId());
+
+ ComponentDto directory = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir");
+ assertThat(directory).isNotNull();
+ assertThat(directory.moduleUuid()).isEqualTo(module.uuid());
+ assertThat(directory.moduleUuidPath()).isEqualTo(module.moduleUuidPath());
+ assertThat(directory.projectUuid()).isEqualTo(project.uuid());
+ assertThat(directory.parentProjectId()).isEqualTo(module.getId());
+
+ ComponentDto file = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir/Foo.java");
+ assertThat(file).isNotNull();
+ assertThat(file.moduleUuid()).isEqualTo(module.uuid());
+ assertThat(file.moduleUuidPath()).isEqualTo(module.moduleUuidPath());
+ assertThat(file.projectUuid()).isEqualTo(project.uuid());
+ assertThat(file.parentProjectId()).isEqualTo(module.getId());
+ }
+
+ @Test
+ public void compute_parent_project_id() throws Exception {
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey(PROJECT_KEY)
+ .setName("Project")
+ .addChildRef(2)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(2)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("MODULE_KEY")
+ .setName("Module")
+ .addChildRef(3)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(3)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("SUB_MODULE_1_KEY")
+ .setName("Sub Module 1")
+ .addChildRef(4)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(4)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("SUB_MODULE_2_KEY")
+ .setName("Sub Module 2")
+ .addChildRef(5)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(5)
+ .setType(Constants.ComponentType.DIRECTORY)
+ .setPath("src/main/java/dir")
+ .build());
+
+ treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
+ new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY",
+ new DumbComponent(Component.Type.MODULE, 3, "CDEF", "SUB_MODULE_1_KEY",
+ new DumbComponent(Component.Type.MODULE, 4, "DEFG", "SUB_MODULE_2_KEY",
+ new DumbComponent(Component.Type.DIRECTORY, 5, "EFGH", "SUB_MODULE_2_KEY:src/main/java/dir"))))));
+
+ sut.execute();
+
+ assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(5);
+
+ ComponentDto project = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
+ assertThat(project).isNotNull();
+ assertThat(project.parentProjectId()).isNull();
+
+ ComponentDto module = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
+ assertThat(module).isNotNull();
+ assertThat(module.parentProjectId()).isEqualTo(project.getId());
+
+ ComponentDto subModule1 = dbClient.componentDao().selectNullableByKey(session, "SUB_MODULE_1_KEY");
+ assertThat(subModule1).isNotNull();
+ assertThat(subModule1.parentProjectId()).isEqualTo(project.getId());
+
+ ComponentDto subModule2 = dbClient.componentDao().selectNullableByKey(session, "SUB_MODULE_2_KEY");
+ assertThat(subModule2).isNotNull();
+ assertThat(subModule2.parentProjectId()).isEqualTo(project.getId());
+
+ ComponentDto directory = dbClient.componentDao().selectNullableByKey(session, "SUB_MODULE_2_KEY:src/main/java/dir");
+ assertThat(directory).isNotNull();
+ assertThat(directory.parentProjectId()).isEqualTo(subModule2.getId());
+ }
+
+ @Test
+ public void persist_multi_modules() throws Exception {
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey(PROJECT_KEY)
+ .setName("Project")
+ .addChildRef(2)
+ .addChildRef(4)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(2)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("MODULE_A")
+ .setName("Module A")
+ .addChildRef(3)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(3)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("SUB_MODULE_A")
+ .setName("Sub Module A")
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(4)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("MODULE_B")
+ .setName("Module B")
+ .build());
+
+ treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
+ new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_A",
+ new DumbComponent(Component.Type.MODULE, 3, "DEFG", "SUB_MODULE_A")),
+ new DumbComponent(Component.Type.MODULE, 4, "CDEF", "MODULE_B")));
+
+ sut.execute();
+
+ assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
+
+ ComponentDto project = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
+ assertThat(project).isNotNull();
+ assertThat(project.moduleUuid()).isNull();
+ assertThat(project.moduleUuidPath()).isEqualTo("." + project.uuid() + ".");
+ assertThat(project.parentProjectId()).isNull();
+
+ ComponentDto moduleA = dbClient.componentDao().selectNullableByKey(session, "MODULE_A");
+ assertThat(moduleA).isNotNull();
+ assertThat(moduleA.moduleUuid()).isEqualTo(project.uuid());
+ assertThat(moduleA.moduleUuidPath()).isEqualTo(project.moduleUuidPath() + moduleA.uuid() + ".");
+ assertThat(moduleA.parentProjectId()).isEqualTo(project.getId());
+
+ ComponentDto subModuleA = dbClient.componentDao().selectNullableByKey(session, "SUB_MODULE_A");
+ assertThat(subModuleA).isNotNull();
+ assertThat(subModuleA.moduleUuid()).isEqualTo(moduleA.uuid());
+ assertThat(subModuleA.moduleUuidPath()).isEqualTo(moduleA.moduleUuidPath() + subModuleA.uuid() + ".");
+ assertThat(subModuleA.parentProjectId()).isEqualTo(project.getId());
+
+ ComponentDto moduleB = dbClient.componentDao().selectNullableByKey(session, "MODULE_B");
+ assertThat(moduleB).isNotNull();
+ assertThat(moduleB.moduleUuid()).isEqualTo(project.uuid());
+ assertThat(moduleB.moduleUuidPath()).isEqualTo(project.moduleUuidPath() + moduleB.uuid() + ".");
+ assertThat(moduleB.parentProjectId()).isEqualTo(project.getId());
+ }
+
+ @Test
+ public void nothing_to_persist() throws Exception {
+ ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project");
+ dbClient.componentDao().insert(session, project);
+ ComponentDto module = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_KEY").setName("Module");
+ dbClient.componentDao().insert(session, module);
+ ComponentDto directory = ComponentTesting.newDirectory(module, "src/main/java/dir").setUuid("CDEF").setKey("MODULE_KEY:src/main/java/dir");
+ ComponentDto file = ComponentTesting.newFileDto(module, "DEFG").setPath("src/main/java/dir/Foo.java").setName("Foo.java").setKey("MODULE_KEY:src/main/java/dir/Foo.java");
+ dbClient.componentDao().insert(session, directory, file);
+ session.commit();
+
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey(PROJECT_KEY)
+ .setName("Project")
+ .addChildRef(2)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(2)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("MODULE_KEY")
+ .setName("Module")
+ .addChildRef(3)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(3)
+ .setType(Constants.ComponentType.DIRECTORY)
+ .setPath("src/main/java/dir")
+ .addChildRef(4)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(4)
+ .setType(Constants.ComponentType.FILE)
+ .setPath("src/main/java/dir/Foo.java")
+ .build());
+
+ treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
+ new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY",
+ new DumbComponent(Component.Type.DIRECTORY, 3, "CDEF", "MODULE_KEY:src/main/java/dir",
+ new DumbComponent(Component.Type.FILE, 4, "DEFG", "MODULE_KEY:src/main/java/dir/Foo.java")))));
+
+ sut.execute();
+
+ assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
+ assertThat(dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY).getId()).isEqualTo(project.getId());
+ assertThat(dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY").getId()).isEqualTo(module.getId());
+ assertThat(dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir").getId()).isEqualTo(directory.getId());
+ assertThat(dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir/Foo.java").getId()).isEqualTo(file.getId());
+
+ ComponentDto projectReloaded = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
+ assertThat(projectReloaded.getId()).isEqualTo(project.getId());
+ assertThat(projectReloaded.uuid()).isEqualTo(project.uuid());
+ assertThat(projectReloaded.moduleUuid()).isEqualTo(project.moduleUuid());
+ assertThat(projectReloaded.moduleUuidPath()).isEqualTo(project.moduleUuidPath());
+ assertThat(projectReloaded.projectUuid()).isEqualTo(project.projectUuid());
+ assertThat(projectReloaded.parentProjectId()).isEqualTo(project.parentProjectId());
+
+ ComponentDto moduleReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
+ assertThat(moduleReloaded.getId()).isEqualTo(module.getId());
+ assertThat(moduleReloaded.uuid()).isEqualTo(module.uuid());
+ assertThat(moduleReloaded.moduleUuid()).isEqualTo(module.moduleUuid());
+ assertThat(moduleReloaded.moduleUuidPath()).isEqualTo(module.moduleUuidPath());
+ assertThat(moduleReloaded.projectUuid()).isEqualTo(module.projectUuid());
+ assertThat(moduleReloaded.parentProjectId()).isEqualTo(module.parentProjectId());
+
+ ComponentDto directoryReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir");
+ assertThat(directoryReloaded).isNotNull();
+ assertThat(directoryReloaded.uuid()).isEqualTo(directory.uuid());
+ assertThat(directoryReloaded.moduleUuid()).isEqualTo(directory.moduleUuid());
+ assertThat(directoryReloaded.moduleUuidPath()).isEqualTo(directory.moduleUuidPath());
+ assertThat(directoryReloaded.projectUuid()).isEqualTo(directory.projectUuid());
+ assertThat(directoryReloaded.parentProjectId()).isEqualTo(directory.parentProjectId());
+ assertThat(directoryReloaded.name()).isEqualTo(directory.name());
+ assertThat(directoryReloaded.path()).isEqualTo(directory.path());
+
+ ComponentDto fileReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir/Foo.java");
+ assertThat(fileReloaded).isNotNull();
+ assertThat(fileReloaded.uuid()).isEqualTo(file.uuid());
+ assertThat(fileReloaded.moduleUuid()).isEqualTo(file.moduleUuid());
+ assertThat(fileReloaded.moduleUuidPath()).isEqualTo(file.moduleUuidPath());
+ assertThat(fileReloaded.projectUuid()).isEqualTo(file.projectUuid());
+ assertThat(fileReloaded.parentProjectId()).isEqualTo(file.parentProjectId());
+ assertThat(fileReloaded.name()).isEqualTo(file.name());
+ assertThat(fileReloaded.path()).isEqualTo(file.path());
+ }
+
+ @Test
+ public void update_module_name() throws Exception {
+ ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project");
+ dbClient.componentDao().insert(session, project);
+ ComponentDto module = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_KEY").setName("Module").setPath("path");
+ dbClient.componentDao().insert(session, module);
+ session.commit();
+
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey(PROJECT_KEY)
+ .setName("New project name")
+ .addChildRef(2)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(2)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("MODULE_KEY")
+ .setName("New module name")
+ .setPath("New path")
+ .build());
+
+ treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
+ new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY")));
+
+ sut.execute();
+
+ ComponentDto projectReloaded = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
+ assertThat(projectReloaded.name()).isEqualTo("New project name");
+
+ ComponentDto moduleReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
+ assertThat(moduleReloaded.name()).isEqualTo("New module name");
+ }
+
+ @Test
+ public void update_module_description() throws Exception {
+ ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project").setDescription("Project description");
+ dbClient.componentDao().insert(session, project);
+ ComponentDto module = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_KEY").setName("Module");
+ dbClient.componentDao().insert(session, module);
+ session.commit();
+
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey(PROJECT_KEY)
+ .setName("Project")
+ .setDescription("New project description")
+ .addChildRef(2)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(2)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("MODULE_KEY")
+ .setName("Module")
+ .setDescription("New module description")
+ .build());
+
+ treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
+ new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY")));
+
+ sut.execute();
+
+ ComponentDto projectReloaded = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
+ assertThat(projectReloaded.description()).isEqualTo("New project description");
+
+ ComponentDto moduleReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
+ assertThat(moduleReloaded.description()).isEqualTo("New module description");
+ }
+
+ @Test
+ public void update_module_path() throws Exception {
+ ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project");
+ dbClient.componentDao().insert(session, project);
+ ComponentDto module = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_KEY").setName("Module").setPath("path");
+ dbClient.componentDao().insert(session, module);
+ session.commit();
+
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey(PROJECT_KEY)
+ .setName("Project")
+ .addChildRef(2)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(2)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("MODULE_KEY")
+ .setName("Module")
+ .setPath("New path")
+ .build());
+
+ treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
+ new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY")));
+
+ sut.execute();
+
+ ComponentDto moduleReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
+ assertThat(moduleReloaded.path()).isEqualTo("New path");
+ }
+
+ @Test
+ public void update_module_uuid_when_moving_a_module() throws Exception {
+ ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project");
+ dbClient.componentDao().insert(session, project);
+ ComponentDto moduleA = ComponentTesting.newModuleDto("EDCB", project).setKey("MODULE_A").setName("Module A");
+ ComponentDto moduleB = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_B").setName("Module B");
+ dbClient.componentDao().insert(session, moduleA, moduleB);
+ ComponentDto directory = ComponentTesting.newDirectory(moduleB, "src/main/java/dir").setUuid("CDEF").setKey("MODULE_B:src/main/java/dir");
+ ComponentDto file = ComponentTesting.newFileDto(moduleB, "DEFG").setPath("src/main/java/dir/Foo.java").setName("Foo.java").setKey("MODULE_B:src/main/java/dir/Foo.java");
+ dbClient.componentDao().insert(session, directory, file);
+ session.commit();
+
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(1)
+ .setType(Constants.ComponentType.PROJECT)
+ .setKey(PROJECT_KEY)
+ .setName("Project")
+ .addChildRef(2)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(2)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("MODULE_A")
+ .setName("Module A")
+ .addChildRef(3)
+ .build());
+ // Module B is now a sub module of module A
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(3)
+ .setType(Constants.ComponentType.MODULE)
+ .setKey("MODULE_B")
+ .setName("Module B")
+ .addChildRef(4)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(4)
+ .setType(Constants.ComponentType.DIRECTORY)
+ .setPath("src/main/java/dir")
+ .addChildRef(5)
+ .build());
+ reportReader.putComponent(BatchReport.Component.newBuilder()
+ .setRef(5)
+ .setType(Constants.ComponentType.FILE)
+ .setPath("src/main/java/dir/Foo.java")
+ .build());
+
+ treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
+ new DumbComponent(Component.Type.MODULE, 2, "EDCB", "MODULE_A",
+ new DumbComponent(Component.Type.MODULE, 3, "BCDE", "MODULE_B",
+ new DumbComponent(Component.Type.DIRECTORY, 4, "CDEF", "MODULE_B:src/main/java/dir",
+ new DumbComponent(Component.Type.FILE, 5, "DEFG", "MODULE_B:src/main/java/dir/Foo.java"))))));
+
+ sut.execute();
+
+ assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(5);
+
+ ComponentDto moduleAreloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_A");
+ assertThat(moduleAreloaded).isNotNull();
+
+ ComponentDto moduleBReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_B");
+ assertThat(moduleBReloaded).isNotNull();
+ assertThat(moduleBReloaded.uuid()).isEqualTo(moduleB.uuid());
+ assertThat(moduleBReloaded.moduleUuid()).isEqualTo(moduleAreloaded.uuid());
+ assertThat(moduleBReloaded.moduleUuidPath()).isEqualTo(moduleAreloaded.moduleUuidPath() + moduleBReloaded.uuid() + ".");
+ assertThat(moduleBReloaded.projectUuid()).isEqualTo(project.uuid());
+ assertThat(moduleBReloaded.parentProjectId()).isEqualTo(project.getId());
+
+ ComponentDto directoryReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_B:src/main/java/dir");
+ assertThat(directoryReloaded).isNotNull();
+ assertThat(directoryReloaded.uuid()).isEqualTo(directory.uuid());
+ assertThat(directoryReloaded.moduleUuid()).isEqualTo(moduleBReloaded.uuid());
+ assertThat(directoryReloaded.moduleUuidPath()).isEqualTo(moduleBReloaded.moduleUuidPath());
+ assertThat(directoryReloaded.projectUuid()).isEqualTo(project.uuid());
+ assertThat(directoryReloaded.parentProjectId()).isEqualTo(moduleBReloaded.getId());
+
+ ComponentDto fileReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_B:src/main/java/dir/Foo.java");
+ assertThat(fileReloaded).isNotNull();
+ assertThat(fileReloaded.uuid()).isEqualTo(file.uuid());
+ assertThat(fileReloaded.moduleUuid()).isEqualTo(moduleBReloaded.uuid());
+ assertThat(fileReloaded.moduleUuidPath()).isEqualTo(moduleBReloaded.moduleUuidPath());
+ assertThat(fileReloaded.projectUuid()).isEqualTo(project.uuid());
+ assertThat(fileReloaded.parentProjectId()).isEqualTo(moduleBReloaded.getId());
+ }
+
+}
+++ /dev/null
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2014 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube 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.
- *
- * SonarQube 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.server.computation.step;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.sonar.batch.protocol.Constants;
-import org.sonar.batch.protocol.output.BatchReport;
-import org.sonar.core.component.ComponentDto;
-import org.sonar.core.persistence.DbSession;
-import org.sonar.core.persistence.DbTester;
-import org.sonar.server.component.ComponentTesting;
-import org.sonar.server.component.db.ComponentDao;
-import org.sonar.server.computation.batch.BatchReportReaderRule;
-import org.sonar.server.computation.batch.TreeRootHolderRule;
-import org.sonar.server.computation.component.Component;
-import org.sonar.server.computation.component.DbIdsRepository;
-import org.sonar.server.computation.component.DumbComponent;
-import org.sonar.server.db.DbClient;
-import org.sonar.test.DbTests;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-@Category(DbTests.class)
-public class PersistComponentsStepTest extends BaseStepTest {
-
- private static final String PROJECT_KEY = "PROJECT_KEY";
-
- @ClassRule
- public static DbTester dbTester = new DbTester();
-
- @Rule
- public BatchReportReaderRule reportReader = new BatchReportReaderRule();
-
- @Rule
- public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule();
-
- DbIdsRepository dbIdsRepository;
-
- DbSession session;
- DbClient dbClient;
-
- PersistComponentsStep sut;
-
- @Before
- public void setup() throws Exception {
- dbTester.truncateTables();
- session = dbTester.myBatis().openSession(false);
- dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new ComponentDao());
-
- dbIdsRepository = new DbIdsRepository();
- sut = new PersistComponentsStep(dbClient, dbIdsRepository, reportReader, treeRootHolder);
- }
-
- @Override
- protected ComputationStep step() {
- return sut;
- }
-
- @After
- public void tearDown() {
- session.close();
- }
-
- @Test
- public void persist_components() throws Exception {
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .setKey(PROJECT_KEY)
- .setName("Project")
- .setDescription("Project description")
- .addChildRef(2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.MODULE)
- .setKey("MODULE_KEY")
- .setPath("module")
- .setName("Module")
- .setDescription("Module description")
- .addChildRef(3)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(3)
- .setType(Constants.ComponentType.DIRECTORY)
- .setPath("src/main/java/dir")
- .addChildRef(4)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(4)
- .setType(Constants.ComponentType.FILE)
- .setPath("src/main/java/dir/Foo.java")
- .setLanguage("java")
- .build());
-
- Component file = new DumbComponent(Component.Type.FILE, 4, "DEFG", "MODULE_KEY:src/main/java/dir/Foo.java");
- Component directory = new DumbComponent(Component.Type.DIRECTORY, 3, "CDEF", "MODULE_KEY:src/main/java/dir", file);
- Component module = new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY", directory);
- Component project = new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY, module);
- treeRootHolder.setRoot(project);
-
- sut.execute();
-
- assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
-
- ComponentDto projectDto = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
- assertThat(projectDto).isNotNull();
- assertThat(projectDto.name()).isEqualTo("Project");
- assertThat(projectDto.description()).isEqualTo("Project description");
- assertThat(projectDto.path()).isNull();
- assertThat(projectDto.uuid()).isEqualTo("ABCD");
- assertThat(projectDto.moduleUuid()).isNull();
- assertThat(projectDto.moduleUuidPath()).isEqualTo("." + projectDto.uuid() + ".");
- assertThat(projectDto.projectUuid()).isEqualTo(projectDto.uuid());
- assertThat(projectDto.qualifier()).isEqualTo("TRK");
- assertThat(projectDto.scope()).isEqualTo("PRJ");
- assertThat(projectDto.parentProjectId()).isNull();
-
- ComponentDto moduleDto = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
- assertThat(moduleDto).isNotNull();
- assertThat(moduleDto.name()).isEqualTo("Module");
- assertThat(moduleDto.description()).isEqualTo("Module description");
- assertThat(moduleDto.path()).isEqualTo("module");
- assertThat(moduleDto.uuid()).isEqualTo("BCDE");
- assertThat(moduleDto.moduleUuid()).isEqualTo(projectDto.uuid());
- assertThat(moduleDto.moduleUuidPath()).isEqualTo(projectDto.moduleUuidPath() + moduleDto.uuid() + ".");
- assertThat(moduleDto.projectUuid()).isEqualTo(projectDto.uuid());
- assertThat(moduleDto.qualifier()).isEqualTo("BRC");
- assertThat(moduleDto.scope()).isEqualTo("PRJ");
- assertThat(moduleDto.parentProjectId()).isEqualTo(projectDto.getId());
-
- ComponentDto directoryDto = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir");
- assertThat(directoryDto).isNotNull();
- assertThat(directoryDto.name()).isEqualTo("src/main/java/dir");
- assertThat(directoryDto.description()).isNull();
- assertThat(directoryDto.path()).isEqualTo("src/main/java/dir");
- assertThat(directoryDto.uuid()).isEqualTo("CDEF");
- assertThat(directoryDto.moduleUuid()).isEqualTo(moduleDto.uuid());
- assertThat(directoryDto.moduleUuidPath()).isEqualTo(moduleDto.moduleUuidPath());
- assertThat(directoryDto.projectUuid()).isEqualTo(projectDto.uuid());
- assertThat(directoryDto.qualifier()).isEqualTo("DIR");
- assertThat(directoryDto.scope()).isEqualTo("DIR");
- assertThat(directoryDto.parentProjectId()).isEqualTo(moduleDto.getId());
-
- ComponentDto fileDto = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir/Foo.java");
- assertThat(fileDto).isNotNull();
- assertThat(fileDto.name()).isEqualTo("Foo.java");
- assertThat(fileDto.description()).isNull();
- assertThat(fileDto.path()).isEqualTo("src/main/java/dir/Foo.java");
- assertThat(fileDto.language()).isEqualTo("java");
- assertThat(fileDto.uuid()).isEqualTo("DEFG");
- assertThat(fileDto.moduleUuid()).isEqualTo(moduleDto.uuid());
- assertThat(fileDto.moduleUuidPath()).isEqualTo(moduleDto.moduleUuidPath());
- assertThat(fileDto.projectUuid()).isEqualTo(projectDto.uuid());
- assertThat(fileDto.qualifier()).isEqualTo("FIL");
- assertThat(fileDto.scope()).isEqualTo("FIL");
- assertThat(fileDto.parentProjectId()).isEqualTo(moduleDto.getId());
-
- assertThat(dbIdsRepository.getComponentId(project)).isEqualTo(projectDto.getId());
- assertThat(dbIdsRepository.getComponentId(module)).isEqualTo(moduleDto.getId());
- assertThat(dbIdsRepository.getComponentId(directory)).isEqualTo(directoryDto.getId());
- assertThat(dbIdsRepository.getComponentId(file)).isEqualTo(fileDto.getId());
- }
-
- @Test
- public void persist_file_directly_attached_on_root_directory() throws Exception {
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .setKey(PROJECT_KEY)
- .setName("Project")
- .addChildRef(2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.DIRECTORY)
- .setPath("/")
- .addChildRef(3)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(3)
- .setType(Constants.ComponentType.FILE)
- .setPath("pom.xml")
- .build());
-
- treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
- new DumbComponent(Component.Type.DIRECTORY, 2, "CDEF", PROJECT_KEY + ":/",
- new DumbComponent(Component.Type.FILE, 3, "DEFG", PROJECT_KEY + ":pom.xml"))));
- sut.execute();
-
- ComponentDto directory = dbClient.componentDao().selectNullableByKey(session, "PROJECT_KEY:/");
- assertThat(directory).isNotNull();
- assertThat(directory.name()).isEqualTo("/");
- assertThat(directory.path()).isEqualTo("/");
-
- ComponentDto file = dbClient.componentDao().selectNullableByKey(session, "PROJECT_KEY:pom.xml");
- assertThat(file).isNotNull();
- assertThat(file.name()).isEqualTo("pom.xml");
- assertThat(file.path()).isEqualTo("pom.xml");
- }
-
- @Test
- public void persist_unit_test() throws Exception {
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .setKey(PROJECT_KEY)
- .setName("Project")
- .addChildRef(2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.DIRECTORY)
- .setPath("src/test/java/dir")
- .addChildRef(3)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(3)
- .setType(Constants.ComponentType.FILE)
- .setPath("src/test/java/dir/FooTest.java")
- .setIsTest(true)
- .build());
-
- treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
- new DumbComponent(Component.Type.DIRECTORY, 2, "CDEF", PROJECT_KEY + ":src/test/java/dir",
- new DumbComponent(Component.Type.FILE, 3, "DEFG", PROJECT_KEY + ":src/test/java/dir/FooTest.java"))));
- sut.execute();
-
- ComponentDto file = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY + ":src/test/java/dir/FooTest.java");
- assertThat(file).isNotNull();
- assertThat(file.name()).isEqualTo("FooTest.java");
- assertThat(file.path()).isEqualTo("src/test/java/dir/FooTest.java");
- assertThat(file.qualifier()).isEqualTo("UTS");
- assertThat(file.scope()).isEqualTo("FIL");
- }
-
- @Test
- public void persist_only_new_components() throws Exception {
- // Project amd module already exists
- ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project");
- dbClient.componentDao().insert(session, project);
- ComponentDto module = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_KEY").setName("Module");
- dbClient.componentDao().insert(session, module);
- session.commit();
-
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .setKey(PROJECT_KEY)
- .setName("Project")
- .addChildRef(2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.MODULE)
- .setKey("MODULE_KEY")
- .setName("Module")
- .addChildRef(3)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(3)
- .setType(Constants.ComponentType.DIRECTORY)
- .setPath("src/main/java/dir")
- .addChildRef(4)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(4)
- .setType(Constants.ComponentType.FILE)
- .setPath("src/main/java/dir/Foo.java")
- .build());
-
- treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
- new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY",
- new DumbComponent(Component.Type.DIRECTORY, 3, "CDEF", "MODULE_KEY:src/main/java/dir",
- new DumbComponent(Component.Type.FILE, 4, "DEFG", "MODULE_KEY:src/main/java/dir/Foo.java")))));
- sut.execute();
-
- assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
-
- ComponentDto projectReloaded = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
- assertThat(projectReloaded.getId()).isEqualTo(project.getId());
- assertThat(projectReloaded.uuid()).isEqualTo(project.uuid());
-
- ComponentDto moduleReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
- assertThat(moduleReloaded.getId()).isEqualTo(module.getId());
- assertThat(moduleReloaded.uuid()).isEqualTo(module.uuid());
- assertThat(moduleReloaded.moduleUuid()).isEqualTo(module.moduleUuid());
- assertThat(moduleReloaded.moduleUuidPath()).isEqualTo(module.moduleUuidPath());
- assertThat(moduleReloaded.projectUuid()).isEqualTo(module.projectUuid());
- assertThat(moduleReloaded.parentProjectId()).isEqualTo(module.parentProjectId());
-
- ComponentDto directory = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir");
- assertThat(directory).isNotNull();
- assertThat(directory.moduleUuid()).isEqualTo(module.uuid());
- assertThat(directory.moduleUuidPath()).isEqualTo(module.moduleUuidPath());
- assertThat(directory.projectUuid()).isEqualTo(project.uuid());
- assertThat(directory.parentProjectId()).isEqualTo(module.getId());
-
- ComponentDto file = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir/Foo.java");
- assertThat(file).isNotNull();
- assertThat(file.moduleUuid()).isEqualTo(module.uuid());
- assertThat(file.moduleUuidPath()).isEqualTo(module.moduleUuidPath());
- assertThat(file.projectUuid()).isEqualTo(project.uuid());
- assertThat(file.parentProjectId()).isEqualTo(module.getId());
- }
-
- @Test
- public void compute_parent_project_id() throws Exception {
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .setKey(PROJECT_KEY)
- .setName("Project")
- .addChildRef(2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.MODULE)
- .setKey("MODULE_KEY")
- .setName("Module")
- .addChildRef(3)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(3)
- .setType(Constants.ComponentType.MODULE)
- .setKey("SUB_MODULE_1_KEY")
- .setName("Sub Module 1")
- .addChildRef(4)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(4)
- .setType(Constants.ComponentType.MODULE)
- .setKey("SUB_MODULE_2_KEY")
- .setName("Sub Module 2")
- .addChildRef(5)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(5)
- .setType(Constants.ComponentType.DIRECTORY)
- .setPath("src/main/java/dir")
- .build());
-
- treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
- new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY",
- new DumbComponent(Component.Type.MODULE, 3, "CDEF", "SUB_MODULE_1_KEY",
- new DumbComponent(Component.Type.MODULE, 4, "DEFG", "SUB_MODULE_2_KEY",
- new DumbComponent(Component.Type.DIRECTORY, 5, "EFGH", "SUB_MODULE_2_KEY:src/main/java/dir"))))));
- sut.execute();
-
- assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(5);
-
- ComponentDto project = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
- assertThat(project).isNotNull();
- assertThat(project.parentProjectId()).isNull();
-
- ComponentDto module = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
- assertThat(module).isNotNull();
- assertThat(module.parentProjectId()).isEqualTo(project.getId());
-
- ComponentDto subModule1 = dbClient.componentDao().selectNullableByKey(session, "SUB_MODULE_1_KEY");
- assertThat(subModule1).isNotNull();
- assertThat(subModule1.parentProjectId()).isEqualTo(project.getId());
-
- ComponentDto subModule2 = dbClient.componentDao().selectNullableByKey(session, "SUB_MODULE_2_KEY");
- assertThat(subModule2).isNotNull();
- assertThat(subModule2.parentProjectId()).isEqualTo(project.getId());
-
- ComponentDto directory = dbClient.componentDao().selectNullableByKey(session, "SUB_MODULE_2_KEY:src/main/java/dir");
- assertThat(directory).isNotNull();
- assertThat(directory.parentProjectId()).isEqualTo(subModule2.getId());
- }
-
- @Test
- public void persist_multi_modules() throws Exception {
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .setKey(PROJECT_KEY)
- .setName("Project")
- .addChildRef(2)
- .addChildRef(4)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.MODULE)
- .setKey("MODULE_A")
- .setName("Module A")
- .addChildRef(3)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(3)
- .setType(Constants.ComponentType.MODULE)
- .setKey("SUB_MODULE_A")
- .setName("Sub Module A")
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(4)
- .setType(Constants.ComponentType.MODULE)
- .setKey("MODULE_B")
- .setName("Module B")
- .build());
-
- treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
- new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_A",
- new DumbComponent(Component.Type.MODULE, 3, "DEFG", "SUB_MODULE_A")),
- new DumbComponent(Component.Type.MODULE, 4, "CDEF", "MODULE_B")));
- sut.execute();
-
- assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
-
- ComponentDto project = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
- assertThat(project).isNotNull();
- assertThat(project.moduleUuid()).isNull();
- assertThat(project.moduleUuidPath()).isEqualTo("." + project.uuid() + ".");
- assertThat(project.parentProjectId()).isNull();
-
- ComponentDto moduleA = dbClient.componentDao().selectNullableByKey(session, "MODULE_A");
- assertThat(moduleA).isNotNull();
- assertThat(moduleA.moduleUuid()).isEqualTo(project.uuid());
- assertThat(moduleA.moduleUuidPath()).isEqualTo(project.moduleUuidPath() + moduleA.uuid() + ".");
- assertThat(moduleA.parentProjectId()).isEqualTo(project.getId());
-
- ComponentDto subModuleA = dbClient.componentDao().selectNullableByKey(session, "SUB_MODULE_A");
- assertThat(subModuleA).isNotNull();
- assertThat(subModuleA.moduleUuid()).isEqualTo(moduleA.uuid());
- assertThat(subModuleA.moduleUuidPath()).isEqualTo(moduleA.moduleUuidPath() + subModuleA.uuid() + ".");
- assertThat(subModuleA.parentProjectId()).isEqualTo(project.getId());
-
- ComponentDto moduleB = dbClient.componentDao().selectNullableByKey(session, "MODULE_B");
- assertThat(moduleB).isNotNull();
- assertThat(moduleB.moduleUuid()).isEqualTo(project.uuid());
- assertThat(moduleB.moduleUuidPath()).isEqualTo(project.moduleUuidPath() + moduleB.uuid() + ".");
- assertThat(moduleB.parentProjectId()).isEqualTo(project.getId());
- }
-
- @Test
- public void nothing_to_persist() throws Exception {
- ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project");
- dbClient.componentDao().insert(session, project);
- ComponentDto module = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_KEY").setName("Module");
- dbClient.componentDao().insert(session, module);
- ComponentDto directory = ComponentTesting.newDirectory(module, "src/main/java/dir").setUuid("CDEF").setKey("MODULE_KEY:src/main/java/dir");
- ComponentDto file = ComponentTesting.newFileDto(module, "DEFG").setPath("src/main/java/dir/Foo.java").setName("Foo.java").setKey("MODULE_KEY:src/main/java/dir/Foo.java");
- dbClient.componentDao().insert(session, directory, file);
- session.commit();
-
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .setKey(PROJECT_KEY)
- .setName("Project")
- .addChildRef(2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.MODULE)
- .setKey("MODULE_KEY")
- .setName("Module")
- .addChildRef(3)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(3)
- .setType(Constants.ComponentType.DIRECTORY)
- .setPath("src/main/java/dir")
- .addChildRef(4)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(4)
- .setType(Constants.ComponentType.FILE)
- .setPath("src/main/java/dir/Foo.java")
- .build());
-
- treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
- new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY",
- new DumbComponent(Component.Type.DIRECTORY, 3, "CDEF", "MODULE_KEY:src/main/java/dir",
- new DumbComponent(Component.Type.FILE, 4, "DEFG", "MODULE_KEY:src/main/java/dir/Foo.java")))));
- sut.execute();
-
- assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(4);
- assertThat(dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY).getId()).isEqualTo(project.getId());
- assertThat(dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY").getId()).isEqualTo(module.getId());
- assertThat(dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir").getId()).isEqualTo(directory.getId());
- assertThat(dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir/Foo.java").getId()).isEqualTo(file.getId());
-
- ComponentDto projectReloaded = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
- assertThat(projectReloaded.getId()).isEqualTo(project.getId());
- assertThat(projectReloaded.uuid()).isEqualTo(project.uuid());
- assertThat(projectReloaded.moduleUuid()).isEqualTo(project.moduleUuid());
- assertThat(projectReloaded.moduleUuidPath()).isEqualTo(project.moduleUuidPath());
- assertThat(projectReloaded.projectUuid()).isEqualTo(project.projectUuid());
- assertThat(projectReloaded.parentProjectId()).isEqualTo(project.parentProjectId());
-
- ComponentDto moduleReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
- assertThat(moduleReloaded.getId()).isEqualTo(module.getId());
- assertThat(moduleReloaded.uuid()).isEqualTo(module.uuid());
- assertThat(moduleReloaded.moduleUuid()).isEqualTo(module.moduleUuid());
- assertThat(moduleReloaded.moduleUuidPath()).isEqualTo(module.moduleUuidPath());
- assertThat(moduleReloaded.projectUuid()).isEqualTo(module.projectUuid());
- assertThat(moduleReloaded.parentProjectId()).isEqualTo(module.parentProjectId());
-
- ComponentDto directoryReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir");
- assertThat(directoryReloaded).isNotNull();
- assertThat(directoryReloaded.uuid()).isEqualTo(directory.uuid());
- assertThat(directoryReloaded.moduleUuid()).isEqualTo(directory.moduleUuid());
- assertThat(directoryReloaded.moduleUuidPath()).isEqualTo(directory.moduleUuidPath());
- assertThat(directoryReloaded.projectUuid()).isEqualTo(directory.projectUuid());
- assertThat(directoryReloaded.parentProjectId()).isEqualTo(directory.parentProjectId());
- assertThat(directoryReloaded.name()).isEqualTo(directory.name());
- assertThat(directoryReloaded.path()).isEqualTo(directory.path());
-
- ComponentDto fileReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY:src/main/java/dir/Foo.java");
- assertThat(fileReloaded).isNotNull();
- assertThat(fileReloaded.uuid()).isEqualTo(file.uuid());
- assertThat(fileReloaded.moduleUuid()).isEqualTo(file.moduleUuid());
- assertThat(fileReloaded.moduleUuidPath()).isEqualTo(file.moduleUuidPath());
- assertThat(fileReloaded.projectUuid()).isEqualTo(file.projectUuid());
- assertThat(fileReloaded.parentProjectId()).isEqualTo(file.parentProjectId());
- assertThat(fileReloaded.name()).isEqualTo(file.name());
- assertThat(fileReloaded.path()).isEqualTo(file.path());
- }
-
- @Test
- public void update_module_name() throws Exception {
- ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project");
- dbClient.componentDao().insert(session, project);
- ComponentDto module = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_KEY").setName("Module").setPath("path");
- dbClient.componentDao().insert(session, module);
- session.commit();
-
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .setKey(PROJECT_KEY)
- .setName("New project name")
- .addChildRef(2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.MODULE)
- .setKey("MODULE_KEY")
- .setName("New module name")
- .setPath("New path")
- .build());
-
- treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
- new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY")));
- sut.execute();
-
- ComponentDto projectReloaded = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
- assertThat(projectReloaded.name()).isEqualTo("New project name");
-
- ComponentDto moduleReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
- assertThat(moduleReloaded.name()).isEqualTo("New module name");
- }
-
- @Test
- public void update_module_description() throws Exception {
- ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project").setDescription("Project description");
- dbClient.componentDao().insert(session, project);
- ComponentDto module = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_KEY").setName("Module");
- dbClient.componentDao().insert(session, module);
- session.commit();
-
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .setKey(PROJECT_KEY)
- .setName("Project")
- .setDescription("New project description")
- .addChildRef(2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.MODULE)
- .setKey("MODULE_KEY")
- .setName("Module")
- .setDescription("New module description")
- .build());
-
- treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
- new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY")));
- sut.execute();
-
- ComponentDto projectReloaded = dbClient.componentDao().selectNullableByKey(session, PROJECT_KEY);
- assertThat(projectReloaded.description()).isEqualTo("New project description");
-
- ComponentDto moduleReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
- assertThat(moduleReloaded.description()).isEqualTo("New module description");
- }
-
- @Test
- public void update_module_path() throws Exception {
- ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project");
- dbClient.componentDao().insert(session, project);
- ComponentDto module = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_KEY").setName("Module").setPath("path");
- dbClient.componentDao().insert(session, module);
- session.commit();
-
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .setKey(PROJECT_KEY)
- .setName("Project")
- .addChildRef(2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.MODULE)
- .setKey("MODULE_KEY")
- .setName("Module")
- .setPath("New path")
- .build());
-
- treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
- new DumbComponent(Component.Type.MODULE, 2, "BCDE", "MODULE_KEY")));
- sut.execute();
-
- ComponentDto moduleReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_KEY");
- assertThat(moduleReloaded.path()).isEqualTo("New path");
- }
-
- @Test
- public void update_module_uuid_when_moving_a_module() throws Exception {
- ComponentDto project = ComponentTesting.newProjectDto("ABCD").setKey(PROJECT_KEY).setName("Project");
- dbClient.componentDao().insert(session, project);
- ComponentDto moduleA = ComponentTesting.newModuleDto("EDCB", project).setKey("MODULE_A").setName("Module A");
- ComponentDto moduleB = ComponentTesting.newModuleDto("BCDE", project).setKey("MODULE_B").setName("Module B");
- dbClient.componentDao().insert(session, moduleA, moduleB);
- ComponentDto directory = ComponentTesting.newDirectory(moduleB, "src/main/java/dir").setUuid("CDEF").setKey("MODULE_B:src/main/java/dir");
- ComponentDto file = ComponentTesting.newFileDto(moduleB, "DEFG").setPath("src/main/java/dir/Foo.java").setName("Foo.java").setKey("MODULE_B:src/main/java/dir/Foo.java");
- dbClient.componentDao().insert(session, directory, file);
- session.commit();
-
- reportReader.setMetadata(BatchReport.Metadata.newBuilder()
- .setRootComponentRef(1)
- .build());
-
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .setKey(PROJECT_KEY)
- .setName("Project")
- .addChildRef(2)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(2)
- .setType(Constants.ComponentType.MODULE)
- .setKey("MODULE_A")
- .setName("Module A")
- .addChildRef(3)
- .build());
- // Module B is now a sub module of module A
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(3)
- .setType(Constants.ComponentType.MODULE)
- .setKey("MODULE_B")
- .setName("Module B")
- .addChildRef(4)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(4)
- .setType(Constants.ComponentType.DIRECTORY)
- .setPath("src/main/java/dir")
- .addChildRef(5)
- .build());
- reportReader.putComponent(BatchReport.Component.newBuilder()
- .setRef(5)
- .setType(Constants.ComponentType.FILE)
- .setPath("src/main/java/dir/Foo.java")
- .build());
-
- treeRootHolder.setRoot(new DumbComponent(Component.Type.PROJECT, 1, "ABCD", PROJECT_KEY,
- new DumbComponent(Component.Type.MODULE, 2, "EDCB", "MODULE_A",
- new DumbComponent(Component.Type.MODULE, 3, "BCDE", "MODULE_B",
- new DumbComponent(Component.Type.DIRECTORY, 4, "CDEF", "MODULE_B:src/main/java/dir",
- new DumbComponent(Component.Type.FILE, 5, "DEFG", "MODULE_B:src/main/java/dir/Foo.java"))))));
- sut.execute();
-
- assertThat(dbTester.countRowsOfTable("projects")).isEqualTo(5);
-
- ComponentDto moduleAreloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_A");
- assertThat(moduleAreloaded).isNotNull();
-
- ComponentDto moduleBReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_B");
- assertThat(moduleBReloaded).isNotNull();
- assertThat(moduleBReloaded.uuid()).isEqualTo(moduleB.uuid());
- assertThat(moduleBReloaded.moduleUuid()).isEqualTo(moduleAreloaded.uuid());
- assertThat(moduleBReloaded.moduleUuidPath()).isEqualTo(moduleAreloaded.moduleUuidPath() + moduleBReloaded.uuid() + ".");
- assertThat(moduleBReloaded.projectUuid()).isEqualTo(project.uuid());
- assertThat(moduleBReloaded.parentProjectId()).isEqualTo(project.getId());
-
- ComponentDto directoryReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_B:src/main/java/dir");
- assertThat(directoryReloaded).isNotNull();
- assertThat(directoryReloaded.uuid()).isEqualTo(directory.uuid());
- assertThat(directoryReloaded.moduleUuid()).isEqualTo(moduleBReloaded.uuid());
- assertThat(directoryReloaded.moduleUuidPath()).isEqualTo(moduleBReloaded.moduleUuidPath());
- assertThat(directoryReloaded.projectUuid()).isEqualTo(project.uuid());
- assertThat(directoryReloaded.parentProjectId()).isEqualTo(moduleBReloaded.getId());
-
- ComponentDto fileReloaded = dbClient.componentDao().selectNullableByKey(session, "MODULE_B:src/main/java/dir/Foo.java");
- assertThat(fileReloaded).isNotNull();
- assertThat(fileReloaded.uuid()).isEqualTo(file.uuid());
- assertThat(fileReloaded.moduleUuid()).isEqualTo(moduleBReloaded.uuid());
- assertThat(fileReloaded.moduleUuidPath()).isEqualTo(moduleBReloaded.moduleUuidPath());
- assertThat(fileReloaded.projectUuid()).isEqualTo(project.uuid());
- assertThat(fileReloaded.parentProjectId()).isEqualTo(moduleBReloaded.getId());
- }
-
-}
*/
package org.sonar.batch.protocol.output;
-import org.sonar.batch.protocol.ProtobufUtil;
-import org.sonar.batch.protocol.output.BatchReport.Issues;
-
-import javax.annotation.CheckForNull;
-
import java.io.File;
import java.util.Collections;
import java.util.List;
+import javax.annotation.CheckForNull;
+import org.sonar.batch.protocol.ProtobufUtil;
+import org.sonar.batch.protocol.output.BatchReport.Issues;
public class BatchReportReader {
return null;
}
- private boolean doesFileExists(File file) {
+ private static boolean doesFileExists(File file) {
return file.exists() && file.isFile();
}
}
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
+import java.util.Map;
import org.sonar.api.batch.SonarIndex;
import org.sonar.api.measures.FileLinesContext;
import org.sonar.api.measures.Measure;
import org.sonar.api.utils.KeyValueFormat;
import org.sonar.api.utils.KeyValueFormat.Converter;
-import java.util.Map;
-
public class DefaultFileLinesContext implements FileLinesContext {
private final SonarIndex index;
* @see #loadData(String, Converter)
* @see #save()
*/
- private boolean shouldSave(Map<Integer, Object> lines) {
+ private static boolean shouldSave(Map<Integer, Object> lines) {
return !(lines instanceof ImmutableMap);
}
context.saveMeasure(newUncoveredConditions);
}
- private Map<Integer, Integer> parseCountByLine(@Nullable Measure measure) {
+ private static Map<Integer, Integer> parseCountByLine(@Nullable Measure measure) {
if (measure != null && measure.hasData()) {
return KeyValueFormat.parseIntInt(measure.getData());
}
}
}
- private void saveTotalIssues(DecoratorContext context, Collection<Issue> issues) {
+ private static void saveTotalIssues(DecoratorContext context, Collection<Issue> issues) {
if (context.getMeasure(CoreMetrics.VIOLATIONS) == null) {
Collection<Measure> childrenIssues = context.getChildrenMeasures(CoreMetrics.VIOLATIONS);
Double sum = MeasureUtils.sum(true, childrenIssues);
}
}
- private void saveIssuesForSeverity(DecoratorContext context, RulePriority ruleSeverity, Multiset<RulePriority> severitiesBag) {
+ private static void saveIssuesForSeverity(DecoratorContext context, RulePriority ruleSeverity, Multiset<RulePriority> severitiesBag) {
Metric metric = SeverityUtils.severityToIssueMetric(ruleSeverity);
if (context.getMeasure(metric) == null) {
Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.metric(metric));
context.saveMeasure(measure);
}
- private void saveMeasure(DecoratorContext context, Metric metric, int value) {
+ private static void saveMeasure(DecoratorContext context, Metric metric, int value) {
context.saveMeasure(metric, (double) (value + sumChildren(context, metric)));
}
- private int sumChildren(DecoratorContext context, Metric metric) {
+ private static int sumChildren(DecoratorContext context, Metric metric) {
int sum = 0;
if (!ResourceUtils.isFile(context.getResource())) {
sum = MeasureUtils.sum(true, context.getChildrenMeasures(metric)).intValue();
return sum;
}
- private Multiset<RuleKey> initRules(Map<RulePriority, Multiset<RuleKey>> rulesPerSeverity, RulePriority severity) {
+ private static Multiset<RuleKey> initRules(Map<RulePriority, Multiset<RuleKey>> rulesPerSeverity, RulePriority severity) {
Multiset<RuleKey> rulesBag = rulesPerSeverity.get(severity);
if (rulesBag == null) {
rulesBag = HashMultiset.create();
return count;
}
- private boolean isAfter(Issue issue, @Nullable Date date) {
+ private static boolean isAfter(Issue issue, @Nullable Date date) {
return date == null || (issue.creationDate() != null && DateUtils.truncatedCompareTo(issue.creationDate(), date, Calendar.SECOND) > 0);
}
- private boolean shouldSaveNewMetrics(DecoratorContext context) {
+ private static boolean shouldSaveNewMetrics(DecoratorContext context) {
return context.getMeasure(CoreMetrics.NEW_VIOLATIONS) == null;
}
return true;
}
- private void updatePeriodParams(Snapshot snapshot, PastSnapshot pastSnapshot) {
+ private static void updatePeriodParams(Snapshot snapshot, PastSnapshot pastSnapshot) {
int periodIndex = pastSnapshot.getIndex();
snapshot.setPeriodMode(periodIndex, pastSnapshot.getMode());
snapshot.setPeriodModeParameter(periodIndex, pastSnapshot.getModeParameter());
package org.sonar.batch.debt;
import com.google.common.annotations.VisibleForTesting;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.sonar.api.batch.Decorator;
import org.sonar.api.batch.DecoratorBarriers;
import org.sonar.api.batch.DecoratorContext;
import org.sonar.api.technicaldebt.batch.Characteristic;
import org.sonar.api.technicaldebt.batch.TechnicalDebtModel;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
}
}
- private void saveMeasure(DecoratorContext context, Measure measure, Double value, boolean inMemory) {
+ private static void saveMeasure(DecoratorContext context, Measure measure, Double value, boolean inMemory) {
measure.setValue(value);
if (inMemory) {
measure.setPersistenceMode(PersistenceMode.MEMORY);
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
+import java.util.List;
+import javax.annotation.Nullable;
import org.picocontainer.injectors.ProviderAdapter;
import org.sonar.api.batch.debt.DebtCharacteristic;
import org.sonar.api.batch.debt.DebtModel;
import org.sonar.core.technicaldebt.db.CharacteristicDao;
import org.sonar.core.technicaldebt.db.CharacteristicDto;
-import javax.annotation.Nullable;
-import java.util.List;
-
public class DebtModelProvider extends ProviderAdapter {
private DebtModel model;
return model;
}
- private DebtModel load(CharacteristicDao dao) {
+ private static DebtModel load(CharacteristicDao dao) {
DefaultDebtModel debtModel = new DefaultDebtModel();
List<CharacteristicDto> allCharacteristics = dao.selectEnabledCharacteristics();
import com.google.common.base.Function;
import com.google.common.collect.Ordering;
-import org.apache.commons.lang.time.DateUtils;
-import org.sonar.api.batch.BatchSide;
-import org.sonar.api.issue.Issue;
-import org.sonar.api.issue.internal.DefaultIssue;
-import org.sonar.api.issue.internal.FieldDiffs;
-import org.sonar.core.issue.IssueUpdater;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+import org.apache.commons.lang.time.DateUtils;
+import org.sonar.api.batch.BatchSide;
+import org.sonar.api.issue.Issue;
+import org.sonar.api.issue.internal.DefaultIssue;
+import org.sonar.api.issue.internal.FieldDiffs;
+import org.sonar.core.issue.IssueUpdater;
import static com.google.common.collect.Lists.newArrayList;
* SONAR-5059
*/
@CheckForNull
- private Long subtractNeverNegative(@Nullable Long value, Long with) {
+ private static Long subtractNeverNegative(@Nullable Long value, @Nullable Long with) {
Long result = (value != null ? value : 0) - (with != null ? with : 0);
return result > 0 ? result : null;
}
return Collections.emptyList();
}
- private List<FieldDiffs> changesOnField(Collection<FieldDiffs> fieldDiffs) {
+ private static List<FieldDiffs> changesOnField(Collection<FieldDiffs> fieldDiffs) {
List<FieldDiffs> diffs = newArrayList();
for (FieldDiffs fieldDiff : fieldDiffs) {
if (fieldDiff.diffs().containsKey(IssueUpdater.TECHNICAL_DEBT)) {
}
@CheckForNull
- private Long newValue(FieldDiffs fieldDiffs) {
+ private static Long newValue(FieldDiffs fieldDiffs) {
for (Map.Entry<String, FieldDiffs.Diff> entry : fieldDiffs.diffs().entrySet()) {
if (entry.getKey().equals(IssueUpdater.TECHNICAL_DEBT)) {
return entry.getValue().newValueLong();
}
@CheckForNull
- private Long oldValue(FieldDiffs fieldDiffs) {
+ private static Long oldValue(FieldDiffs fieldDiffs) {
for (Map.Entry<String, FieldDiffs.Diff> entry : fieldDiffs.diffs().entrySet()) {
if (entry.getKey().equals(IssueUpdater.TECHNICAL_DEBT)) {
return entry.getValue().oldValueLong();
return null;
}
- private boolean isAfter(@Nullable Date currentDate, @Nullable Date pastDate) {
+ private static boolean isAfter(@Nullable Date currentDate, @Nullable Date pastDate) {
return pastDate == null || (currentDate != null && DateUtils.truncatedCompareTo(currentDate, pastDate, Calendar.SECOND) > 0);
}
- private boolean isLesserOrEqual(@Nullable Date currentDate, @Nullable Date pastDate) {
+ private static boolean isLesserOrEqual(@Nullable Date currentDate, @Nullable Date pastDate) {
return (currentDate != null) && (pastDate == null || (DateUtils.truncatedCompareTo(currentDate, pastDate, Calendar.SECOND) <= 0));
}
package org.sonar.batch.debt;
import com.google.common.collect.ImmutableList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+import javax.annotation.Nullable;
import org.sonar.api.batch.Decorator;
import org.sonar.api.batch.DecoratorBarriers;
import org.sonar.api.batch.DecoratorContext;
import org.sonar.batch.components.Period;
import org.sonar.batch.components.TimeMachineConfiguration;
-import javax.annotation.Nullable;
-
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
import static com.google.common.collect.Lists.newArrayList;
/**
return result;
}
- private boolean shouldSaveNewMetrics(DecoratorContext context) {
+ private static boolean shouldSaveNewMetrics(DecoratorContext context) {
return context.getMeasure(CoreMetrics.NEW_TECHNICAL_DEBT) == null;
}
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import javax.annotation.Nullable;
import org.sonar.api.batch.Decorator;
import org.sonar.api.batch.DecoratorContext;
import org.sonar.api.batch.DependedUpon;
import org.sonar.api.resources.Resource;
import org.sonar.api.resources.ResourceUtils;
-import javax.annotation.Nullable;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
/**
* Decorator that computes Sqale Rating metric
*/
}
}
- private Measure createRatingMeasure(int rating) {
+ private static Measure createRatingMeasure(int rating) {
return new Measure(CoreMetrics.SQALE_RATING).setIntValue(rating).setData(toRatingLetter(rating));
}
return sum;
}
- private long getMeasureValue(DecoratorContext context, Metric metric) {
+ private static long getMeasureValue(DecoratorContext context, Metric metric) {
Measure measure = context.getMeasure(metric);
if (measure != null) {
return measure.getValue().longValue();
package org.sonar.batch.debt;
-import org.sonar.api.batch.BatchSide;
+import javax.annotation.Nullable;
import org.sonar.api.CoreProperties;
+import org.sonar.api.batch.BatchSide;
import org.sonar.api.config.Settings;
import org.sonar.api.measures.Metric;
-import javax.annotation.Nullable;
-
@BatchSide
public class SqaleRatingSettings {
return getMetricForKey(settings.getString(CoreProperties.SIZE_METRIC), metrics);
}
- private Metric getMetricForKey(String sizeMetricKey, Metric[] metrics) {
+ private static Metric getMetricForKey(String sizeMetricKey, Metric[] metrics) {
for (Metric metric : metrics) {
if (metric.getKey().equals(sizeMetricKey)) {
return metric;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
+import javax.annotation.Nullable;
import org.sonar.api.batch.debt.DebtRemediationFunction;
import org.sonar.api.batch.rule.ActiveRule;
import org.sonar.api.batch.rule.ActiveRules;
import org.sonar.api.utils.MessageException;
import org.sonar.core.issue.DefaultIssueBuilder;
-import javax.annotation.Nullable;
-
/**
* Initialize the issues raised during scan.
*/
return false;
}
- private void validateRule(DefaultIssue issue, Rule rule) {
+ private static void validateRule(DefaultIssue issue, @Nullable Rule rule) {
RuleKey ruleKey = issue.ruleKey();
if (rule == null) {
throw MessageException.of(String.format("The rule '%s' does not exist.", ruleKey));
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
+import java.util.List;
+import javax.annotation.Nullable;
import org.picocontainer.injectors.ProviderAdapter;
import org.sonar.api.batch.debt.DebtCharacteristic;
import org.sonar.api.batch.debt.DebtModel;
import org.sonar.core.rule.RuleDto;
import org.sonar.core.rule.RuleParamDto;
-import javax.annotation.Nullable;
-import java.util.List;
-
/**
* Loads all enabled and non manual rules
*/
return rulesBuilder.build();
}
- private DebtCharacteristic effectiveCharacteristic(RuleDto ruleDto, RuleKey ruleKey, DefaultDebtModel debtModel) {
+ private static DebtCharacteristic effectiveCharacteristic(RuleDto ruleDto, RuleKey ruleKey, DefaultDebtModel debtModel) {
Integer subCharacteristicId = ruleDto.getSubCharacteristicId();
Integer defaultSubCharacteristicId = ruleDto.getDefaultSubCharacteristicId();
Integer effectiveSubCharacteristicId = subCharacteristicId != null ? subCharacteristicId : defaultSubCharacteristicId;
* Return true is the characteristic has not been overridden and a default characteristic is existing or
* if the characteristic has been overridden but is not disabled
*/
- private boolean hasCharacteristic(RuleDto ruleDto) {
+ private static boolean hasCharacteristic(RuleDto ruleDto) {
Integer subCharacteristicId = ruleDto.getSubCharacteristicId();
return (subCharacteristicId == null && ruleDto.getDefaultSubCharacteristicId() != null) ||
(subCharacteristicId != null && !RuleDto.DISABLED_CHARACTERISTIC_ID.equals(subCharacteristicId));
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.SetMultimap;
+import java.io.IOException;
+import java.io.InvalidClassException;
+import java.util.Arrays;
+import java.util.List;
+import javax.annotation.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonar.api.batch.RequiresDB;
import org.sonar.core.notification.db.NotificationQueueDto;
import org.sonar.core.properties.PropertiesDao;
-import javax.annotation.Nullable;
-
-import java.io.IOException;
-import java.io.InvalidClassException;
-import java.util.Arrays;
-import java.util.List;
-
/**
* @since 2.10
*/
return Arrays.asList(notificationChannels);
}
- private void addUsersToRecipientListForChannel(List<String> users, SetMultimap<String, NotificationChannel> recipients, NotificationChannel channel) {
+ private static void addUsersToRecipientListForChannel(List<String> users, SetMultimap<String, NotificationChannel> recipients, NotificationChannel channel) {
for (String username : users) {
recipients.put(username, channel);
}
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
-import org.apache.commons.lang.StringUtils;
-
+import java.util.Set;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
-
-import java.util.Set;
+import org.apache.commons.lang.StringUtils;
/**
* Query used to get users and groups from a permission
this.pageIndex = builder.pageIndex;
}
- private String searchToSql(@Nullable String s) {
+ private static String searchToSql(@Nullable String s) {
String sql = null;
if (s != null) {
sql = StringUtils.replace(StringUtils.upperCase(s), "%", "/%");
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-import org.apache.commons.lang.StringUtils;
-import org.apache.ibatis.session.SqlSession;
-import org.sonar.core.persistence.DbSession;
-import org.sonar.core.persistence.MyBatis;
-
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.commons.lang.StringUtils;
+import org.apache.ibatis.session.SqlSession;
+import org.sonar.core.persistence.DbSession;
+import org.sonar.core.persistence.MyBatis;
/**
* Class used to rename the key of a project and its resources.
}
}
- private String computeNewKey(ResourceDto resource, String stringToReplace, String replacementString) {
+ private static String computeNewKey(ResourceDto resource, String stringToReplace, String replacementString) {
return resource.getKey().replaceAll(stringToReplace, replacementString);
}
- private void runBatchUpdateForAllResources(Collection<ResourceDto> resources, String oldKey, String newKey, ResourceKeyUpdaterMapper mapper) {
+ private static void runBatchUpdateForAllResources(Collection<ResourceDto> resources, String oldKey, String newKey, ResourceKeyUpdaterMapper mapper) {
for (ResourceDto resource : resources) {
String resourceKey = resource.getKey();
resource.setKey(newKey + resourceKey.substring(oldKey.length(), resourceKey.length()));
*/
package org.sonar.core.timemachine;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.apache.commons.lang.StringUtils;
-import org.sonar.api.batch.BatchSide;
import org.sonar.api.CoreProperties;
-import org.sonar.api.server.ServerSide;
+import org.sonar.api.batch.BatchSide;
import org.sonar.api.batch.RequiresDB;
import org.sonar.api.config.Settings;
import org.sonar.api.database.model.Snapshot;
import org.sonar.api.i18n.I18n;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
+import org.sonar.api.server.ServerSide;
import static org.sonar.api.utils.DateUtils.longToDate;
}
@CheckForNull
- private String convertDate(Date date) {
+ private static String convertDate(Date date) {
if (date != null) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy MMM dd");
return dateFormat.format(date);
return null;
}
- private Locale getLocale() {
+ private static Locale getLocale() {
return Locale.ENGLISH;
}
}
}
- private Integer findByDays(String property) {
+ private static Integer findByDays(String property) {
try {
return Integer.parseInt(property);
} catch (NumberFormatException e) {
}
}
- private Date findByDate(String property) {
+ private static Date findByDate(String property) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
return format.parse(property);
this.pageIndex = builder.pageIndex;
}
- private String groupSearchToSql(@Nullable String s) {
+ private static String groupSearchToSql(@Nullable String s) {
String sql = null;
if (s != null) {
sql = StringUtils.replace(StringUtils.upperCase(s), "%", "/%");
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
/**
* PLUGINS MUST NOT USE THIS CLASS, EXCEPT FOR UNIT TESTING.
}
@CheckForNull
- private Long toLong(Serializable value) {
+ private static Long toLong(@Nullable Serializable value) {
if (value != null && !"".equals(value)) {
try {
return Long.valueOf((String) value);
package org.sonar.api.measures;
-import org.sonar.api.resources.ResourceUtils;
-
import java.util.List;
+import org.sonar.api.resources.ResourceUtils;
import static com.google.common.collect.Lists.newArrayList;
return result;
}
- private boolean shouldDecorateResource(FormulaData data, FormulaContext context) {
+ private static boolean shouldDecorateResource(FormulaData data, FormulaContext context) {
return !MeasureUtils.hasValue(data.getMeasure(context.getTargetMetric()));
}
}
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableSet;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.lang.builder.ToStringStyle;
-import org.sonar.api.database.DatabaseProperties;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.api.utils.SonarException;
-import org.sonar.check.Cardinality;
-
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import javax.persistence.Column;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.commons.lang.builder.ToStringBuilder;
+import org.apache.commons.lang.builder.ToStringStyle;
+import org.sonar.api.database.DatabaseProperties;
+import org.sonar.api.rule.RuleKey;
+import org.sonar.api.utils.SonarException;
+import org.sonar.check.Cardinality;
@Entity
@Table(name = "rules")
}
@CheckForNull
- private String removeNewLineCharacters(@Nullable String text) {
+ private static String removeNewLineCharacters(@Nullable String text) {
String removedCRLF = StringUtils.remove(text, "\n");
removedCRLF = StringUtils.remove(removedCRLF, "\r");
removedCRLF = StringUtils.remove(removedCRLF, "\n\r");
*/
package org.sonar.api.server.rule;
+import java.util.List;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.sonar.api.PropertyType;
-import java.util.List;
-
import static com.google.common.collect.Lists.newArrayList;
/**
this.multiple = multiple;
}
- private String valuesToCsv(String... values) {
+ private static String valuesToCsv(String... values) {
StringBuilder sb = new StringBuilder();
for (String value : values) {
sb.append(StringEscapeUtils.escapeCsv(value));
package org.sonar.api.utils;
+import java.util.Locale;
+import javax.annotation.CheckForNull;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.BatchSide;
import org.sonar.api.config.Settings;
import org.sonar.api.i18n.I18n;
import org.sonar.api.server.ServerSide;
-import javax.annotation.CheckForNull;
-
-import java.util.Locale;
-
/**
* Used through ruby code <pre>Internal.durations</pre>
*
return i18n.message(locale, key, null, parameter);
}
- private boolean displayHours(int days, int hours) {
+ private static boolean displayHours(int days, int hours) {
return hours > 0 && days < 10;
}
- private boolean displayMinutes(int days, int hours, int minutes) {
+ private static boolean displayMinutes(int days, int hours, int minutes) {
return minutes > 0 && hours < 10 && days == 0;
}
- private void addSpaceIfNeeded(StringBuilder message) {
+ private static void addSpaceIfNeeded(StringBuilder message) {
if (message.length() > 0) {
message.append(" ");
}