package org.sonar.server.component.db;
+import java.util.List;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
import org.sonar.api.resources.Scopes;
import org.sonar.api.utils.System2;
import org.sonar.core.component.SnapshotDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.exceptions.NotFoundException;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
-import java.util.List;
-
public class SnapshotDao implements DaoComponent {
private final System2 system2;
@CheckForNull
public SnapshotDto getLastSnapshot(DbSession session, SnapshotDto snapshot) {
- return mapper(session).selectLastSnapshot(snapshot.getResourceId());
+ return mapper(session).selectLastSnapshot(snapshot.getComponentId());
}
@CheckForNull
public SnapshotDto getLastSnapshotOlderThan(DbSession session, SnapshotDto snapshot) {
- return mapper(session).selectLastSnapshotOlderThan(snapshot.getResourceId(), snapshot.getCreatedAt());
+ return mapper(session).selectLastSnapshotOlderThan(snapshot.getComponentId(), snapshot.getCreatedAt());
}
public List<SnapshotDto> findSnapshotAndChildrenOfProjectScope(DbSession session, SnapshotDto snapshot) {
package org.sonar.server.ui.ws;
import com.google.common.collect.Lists;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import javax.annotation.Nullable;
import org.sonar.api.i18n.I18n;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.resources.ResourceType;
import org.sonar.server.ui.Views;
import org.sonar.server.user.UserSession;
-import javax.annotation.Nullable;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-
public class ComponentNavigationAction implements NavigationWsAction {
private static final String PARAM_COMPONENT_KEY = "componentKey";
userSession.checkProjectUuidPermission(UserRole.USER, component.projectUuid());
- SnapshotDto snapshot = dbClient.snapshotDao().getLastSnapshot(session, new SnapshotDto().setResourceId(component.getId()));
+ SnapshotDto snapshot = dbClient.snapshotDao().getLastSnapshot(session, new SnapshotDto().setComponentId(component.getId()));
JsonWriter json = response.newJsonWriter();
json.beginObject();
SnapshotDto currentSnapshot = snapshot;
while (currentSnapshot.getParentId() != null) {
currentSnapshot = dbClient.snapshotDao().getByKey(session, currentSnapshot.getParentId());
- componentPath.add(0, dbClient.componentDao().selectById(currentSnapshot.getResourceId(), session));
+ componentPath.add(0, dbClient.componentDao().selectById(currentSnapshot.getComponentId(), session));
}
}
package org.sonar.server.component;
+import com.google.common.base.Preconditions;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.component.SnapshotDto;
* Can be used for modules and files
*/
public static SnapshotDto createForComponent(ComponentDto component, SnapshotDto parentSnapshot) {
+ Preconditions.checkNotNull(parentSnapshot.getId(), "The parent snapshot need to be persisted before creating this snapshot");
Long parentRootId = parentSnapshot.getRootId();
- return new SnapshotDto()
- .setResourceId(component.getId())
- .setRootProjectId(parentSnapshot.getRootProjectId())
+ return createBasicSnapshot(component, parentSnapshot.getRootProjectId())
.setRootId(parentRootId != null ? parentRootId : parentSnapshot.getId())
- .setStatus(SnapshotDto.STATUS_PROCESSED)
- .setQualifier(component.qualifier())
- .setScope(component.scope())
.setParentId(parentSnapshot.getId())
- .setPath(parentSnapshot.getPath() == null ? Long.toString(parentSnapshot.getId()) + "." : parentSnapshot.getPath() + Long.toString(parentSnapshot.getId()) + ".")
- .setLast(true)
- .setBuildDate(System.currentTimeMillis());
+ .setPath(parentSnapshot.getPath() == null ? Long.toString(parentSnapshot.getId()) + "." : parentSnapshot.getPath() + Long.toString(parentSnapshot.getId()) + ".");
}
public static SnapshotDto createForProject(ComponentDto project) {
+ return createBasicSnapshot(project, project.getId())
+ .setPath("");
+ }
+
+ public static SnapshotDto createBasicSnapshot(ComponentDto component, Long rootProjectId) {
+ Preconditions.checkNotNull(component.getId(), "The project need to be persisted before creating this snapshot");
+ Preconditions.checkNotNull(rootProjectId, "Root project id is null");
return new SnapshotDto()
- .setResourceId(project.getId())
- .setRootProjectId(project.getId())
+ .setComponentId(component.getId())
+ .setRootProjectId(rootProjectId)
.setStatus(SnapshotDto.STATUS_PROCESSED)
- .setQualifier(project.qualifier())
- .setScope(project.scope())
- .setPath("")
- .setLast(true)
- .setBuildDate(System.currentTimeMillis());
+ .setQualifier(component.qualifier())
+ .setScope(component.scope())
+ .setCreatedAt(System.currentTimeMillis())
+ .setBuildDate(System.currentTimeMillis())
+ .setLast(true);
}
}
package org.sonar.server.component.db;
+import java.util.Date;
+import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.sonar.core.persistence.AbstractDaoTestCase;
import org.sonar.core.persistence.DbSession;
-import java.util.Date;
-import java.util.List;
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
SnapshotDto result = sut.getNullableByKey(session, 3L);
assertThat(result).isNotNull();
assertThat(result.getId()).isEqualTo(3L);
- assertThat(result.getResourceId()).isEqualTo(3L);
+ assertThat(result.getComponentId()).isEqualTo(3L);
assertThat(result.getRootProjectId()).isEqualTo(1L);
assertThat(result.getParentId()).isEqualTo(2L);
assertThat(result.getRootId()).isEqualTo(1L);
public void lastSnapshot_from_one_resource() {
setupData("snapshots");
- SnapshotDto snapshot = sut.getLastSnapshot(session, defaultSnapshot().setResourceId(2L));
+ SnapshotDto snapshot = sut.getLastSnapshot(session, defaultSnapshot().setComponentId(2L));
assertThat(snapshot).isNotNull();
assertThat(snapshot.getId()).isEqualTo(4L);
public void lastSnapshot_from_one_resource_without_last_is_null() {
setupData("snapshots");
- SnapshotDto snapshot = sut.getLastSnapshot(session, defaultSnapshot().setResourceId(5L));
+ SnapshotDto snapshot = sut.getLastSnapshot(session, defaultSnapshot().setComponentId(5L));
assertThat(snapshot).isNull();
}
public void last_snapshot_older__than_a_reference() {
setupData("snapshots");
- SnapshotDto referenceSnapshot = defaultSnapshot().setResourceId(1L);
+ SnapshotDto referenceSnapshot = defaultSnapshot().setComponentId(1L);
referenceSnapshot.setCreatedAt(DateUtils.parseDate("2008-12-03").getTime());
SnapshotDto snapshot = sut.getLastSnapshotOlderThan(session, referenceSnapshot);
public void last_snapshot_earlier__than_a_reference() {
setupData("snapshots");
- SnapshotDto referenceSnapshot = defaultSnapshot().setResourceId(1L);
+ SnapshotDto referenceSnapshot = defaultSnapshot().setComponentId(1L);
referenceSnapshot.setCreatedAt(DateUtils.parseDate("2008-12-01").getTime());
SnapshotDto snapshot = sut.getLastSnapshotOlderThan(session, referenceSnapshot);
private static SnapshotDto defaultSnapshot() {
return new SnapshotDto()
- .setResourceId(3L)
+ .setComponentId(3L)
.setRootProjectId(1L)
.setParentId(2L)
.setRootId(1L)
*/
package org.sonar.server.ui.ws;
+import java.util.Date;
+import java.util.Locale;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.sonar.core.properties.PropertiesDao;
import org.sonar.core.properties.PropertyDto;
import org.sonar.server.component.ComponentTesting;
+import org.sonar.server.component.SnapshotTesting;
import org.sonar.server.component.db.ComponentDao;
import org.sonar.server.component.db.SnapshotDao;
import org.sonar.server.db.DbClient;
import org.sonar.server.user.db.UserDao;
import org.sonar.server.ws.WsTester;
-import java.util.Date;
-import java.util.Locale;
-
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
.setKey("polop").setName("Polop");
dbClient.componentDao().insert(session, project);
dbClient.snapshotDao().insert(session, new SnapshotDto().setCreatedAt(snapshotDate.getTime()).setVersion("3.14")
- .setLast(true).setQualifier(project.qualifier()).setResourceId(project.getId()).setRootProjectId(project.getId()).setScope(project.scope()));
+ .setLast(true).setQualifier(project.qualifier()).setComponentId(project.getId()).setRootProjectId(project.getId()).setScope(project.scope()));
session.commit();
userSessionRule.login("obiwan").setUserId(userId).addProjectUuidPermissions(UserRole.USER, "abcd");
.setKey("polop").setName("Polop").setLanguage("xoo");
dbClient.componentDao().insert(session, project);
dbClient.snapshotDao().insert(session, new SnapshotDto()
- .setLast(true).setQualifier(project.qualifier()).setResourceId(project.getId()).setRootProjectId(project.getId()).setScope(project.scope()));
+ .setLast(true).setQualifier(project.qualifier()).setComponentId(project.getId()).setRootProjectId(project.getId()).setScope(project.scope()));
session.commit();
userSessionRule.addProjectUuidPermissions(UserRole.USER, "abcd");
.setKey("polop").setName("Polop").setLanguage("xoo");
dbClient.componentDao().insert(session, project);
dbClient.snapshotDao().insert(session, new SnapshotDto()
- .setLast(true).setQualifier(project.qualifier()).setResourceId(project.getId()).setRootProjectId(project.getId()).setScope(project.scope()));
+ .setLast(true).setQualifier(project.qualifier()).setComponentId(project.getId()).setRootProjectId(project.getId()).setScope(project.scope()));
session.commit();
userSessionRule
.setPath(directory.path());
dbClient.componentDao().insert(session, project, module, directory, file);
- SnapshotDto projectSnapshot = dbClient.snapshotDao().insert(session, new SnapshotDto()
- .setLast(true)
- .setQualifier(project.qualifier())
- .setResourceId(project.getId())
- .setRootProjectId(project.getId())
- .setScope(project.scope()));
- SnapshotDto moduleSnapshot = dbClient.snapshotDao().insert(session, new SnapshotDto()
- .setLast(true)
- .setQualifier(module.qualifier())
- .setResourceId(module.getId())
- .setRootProjectId(project.getId())
- .setScope(module.scope())
- .setParentId(projectSnapshot.getId()));
- SnapshotDto directorySnapshot = dbClient.snapshotDao().insert(session, new SnapshotDto()
- .setLast(true)
- .setQualifier(directory.qualifier())
- .setResourceId(directory.getId())
- .setRootProjectId(project.getId())
- .setScope(directory.scope())
- .setParentId(moduleSnapshot.getId()));
- dbClient.snapshotDao().insert(session, new SnapshotDto()
- .setLast(true)
- .setQualifier(file.qualifier())
- .setResourceId(file.getId())
- .setRootProjectId(project.getId())
- .setScope(file.scope())
- .setParentId(directorySnapshot.getId()));
+ SnapshotDto projectSnapshot = SnapshotTesting.createForProject(project);
+ dbClient.snapshotDao().insert(session, projectSnapshot);
+ SnapshotDto moduleSnapshot = SnapshotTesting.createForComponent(module, projectSnapshot);
+ dbClient.snapshotDao().insert(session, moduleSnapshot);
+ SnapshotDto directorySnapshot = SnapshotTesting.createForComponent(directory, moduleSnapshot);
+ dbClient.snapshotDao().insert(session, directorySnapshot);
+ dbClient.snapshotDao().insert(session, SnapshotTesting.createForComponent(file, directorySnapshot));
session.commit();
private Long createdAt;
private Long buildDate;
- private Long resourceId;
+ private Long componentId;
private String status = STATUS_UNPROCESSED;
private Integer purgeStatus;
private Boolean last;
return this;
}
- public Long getResourceId() {
- return resourceId;
+ public Long getComponentId() {
+ return componentId;
}
- public SnapshotDto setResourceId(Long resourceId) {
- this.resourceId = resourceId;
+ public SnapshotDto setComponentId(Long componentId) {
+ this.componentId = componentId;
return this;
}
s.parent_snapshot_id as parentId,
s.root_snapshot_id as rootId,
s.root_project_id as rootProjectId,
- s.project_id as resourceId,
+ s.project_id as componentId,
s.created_at as createdAt,
s.build_date as buildDate,
s.status as status,
<insert id="insert" parameterType="Snapshot" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
insert into snapshots
<include refid="insertColumns"/>
- values (#{parentId}, #{rootId}, #{rootProjectId}, #{resourceId}, #{createdAt}, #{buildDate}, #{status},
+ values (#{parentId}, #{rootId}, #{rootProjectId}, #{componentId}, #{createdAt}, #{buildDate}, #{status},
#{purgeStatus}, #{last}, #{scope}, #{qualifier}, #{version}, #{path}, #{depth},
#{period1Mode}, #{period2Mode}, #{period3Mode}, #{period4Mode}, #{period5Mode},
#{period1Param}, #{period2Param}, #{period3Param}, #{period4Param}, #{period5Param},
<result property="rootId" column="root_snapshot_id"/>
<result property="createdAt" column="created_at"/>
<result property="buildDate" column="build_date"/>
- <result property="resourceId" column="project_id"/>
+ <result property="componentId" column="project_id"/>
<result property="status" column="status"/>
<result property="purgeStatus" column="purge_status"/>
<result property="last" column="islast"/>
.setRootId(3L)
.setRootProjectId(20L)
.setBuildDate(parseDate("2014-07-02").getTime())
- .setResourceId(21L)
+ .setComponentId(21L)
.setLast(true)
.setScope("FIL")
.setQualifier("FIL")
assertThat(snapshotDto.getRootId()).isEqualTo(3L);
assertThat(snapshotDto.getRootProjectId()).isEqualTo(20L);
assertThat(snapshotDto.getBuildDate()).isEqualTo(parseDate("2014-07-02").getTime());
- assertThat(snapshotDto.getResourceId()).isEqualTo(21L);
+ assertThat(snapshotDto.getComponentId()).isEqualTo(21L);
assertThat(snapshotDto.getLast()).isTrue();
assertThat(snapshotDto.getScope()).isEqualTo("FIL");
assertThat(snapshotDto.getQualifier()).isEqualTo("FIL");