/* * SonarQube * Copyright (C) 2009-2017 SonarSource SA * mailto:info AT sonarsource DOT com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.sonar.db.issue; import java.io.Serializable; import java.util.Date; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.sonar.api.utils.System2; import org.sonar.core.issue.DefaultIssueComment; import org.sonar.core.issue.FieldDiffs; import static com.google.common.base.Preconditions.checkNotNull; /** * @since 3.6 */ public final class IssueChangeDto implements Serializable { public static final String TYPE_FIELD_CHANGE = "diff"; public static final String TYPE_COMMENT = "comment"; private Long id; private String kee; private String issueKey; private String userLogin; private String changeType; private String changeData; // technical dates private Long createdAt; private Long updatedAt; // functional date private Long issueChangeCreationDate; public static IssueChangeDto of(DefaultIssueComment comment) { IssueChangeDto dto = newDto(comment.issueKey()); dto.setKey(comment.key()); dto.setChangeType(IssueChangeDto.TYPE_COMMENT); dto.setChangeData(comment.markdownText()); dto.setUserLogin(comment.userLogin()); dto.setIssueChangeCreationDate(comment.createdAt() == null ? null : comment.createdAt().getTime()); return dto; } public static IssueChangeDto of(String issueKey, FieldDiffs diffs) { IssueChangeDto dto = newDto(issueKey); dto.setChangeType(IssueChangeDto.TYPE_FIELD_CHANGE); dto.setChangeData(diffs.toString()); dto.setUserLogin(diffs.userLogin()); dto.setIssueChangeCreationDate(diffs.creationDate() == null ? null : diffs.creationDate().getTime()); return dto; } private static IssueChangeDto newDto(String issueKey) { IssueChangeDto dto = new IssueChangeDto(); dto.setIssueKey(issueKey); // technical dates - do not use the context date dto.setCreatedAt(System2.INSTANCE.now()); dto.setUpdatedAt(System2.INSTANCE.now()); return dto; } public Long getId() { return id; } public IssueChangeDto setId(Long id) { this.id = id; return this; } @CheckForNull public String getKey() { return kee; } public IssueChangeDto setKey(@Nullable String key) { this.kee = key; return this; } public String getIssueKey() { return issueKey; } public IssueChangeDto setIssueKey(String s) { this.issueKey = s; return this; } @CheckForNull public String getUserLogin() { return userLogin; } public IssueChangeDto setUserLogin(@Nullable String userLogin) { this.userLogin = userLogin; return this; } public String getChangeType() { return changeType; } public IssueChangeDto setChangeType(String changeType) { this.changeType = changeType; return this; } public String getChangeData() { return changeData; } public IssueChangeDto setChangeData(String changeData) { this.changeData = changeData; return this; } public Long getCreatedAt() { return createdAt; } public IssueChangeDto setCreatedAt(Long createdAt) { this.createdAt = checkNotNull(createdAt); return this; } public Long getUpdatedAt() { return updatedAt; } public IssueChangeDto setUpdatedAt(@Nullable Long updatedAt) { this.updatedAt = updatedAt; return this; } public Long getIssueChangeCreationDate() { return issueChangeCreationDate; } public IssueChangeDto setIssueChangeCreationDate(@Nullable Long issueChangeCreationDate) { this.issueChangeCreationDate = issueChangeCreationDate; return this; } @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); } public DefaultIssueComment toComment() { return new DefaultIssueComment() .setMarkdownText(changeData) .setKey(kee) .setCreatedAt(new Date(createdAt)) .setUpdatedAt(updatedAt == null ? null : new Date(updatedAt)) .setUserLogin(userLogin) .setIssueKey(issueKey) .setNew(false); } public FieldDiffs toFieldDiffs() { return FieldDiffs.parse(changeData) .setUserLogin(userLogin) // issueChangeCreationDate can be null as it has been introduced after createdAt .setCreationDate(issueChangeCreationDate != null ? new Date(issueChangeCreationDate) : new Date(createdAt)) .setIssueKey(issueKey); } }