/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * See LICENSE.txt included in this distribution for the specific * language governing permissions and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at LICENSE.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 2006 Trond Norbye. All rights reserved. */ package org.opensolaris.opengrok.history; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.SortedSet; import java.util.TreeSet; import java.util.logging.Level; import java.util.logging.Logger; import org.opensolaris.opengrok.OpenGrokLogger; /** * Collect all information of a given revision * * @author Trond Norbye */ public class HistoryEntry { private String revision; private Date date; private String author; private String tags; @SuppressWarnings("PMD.AvoidStringBufferField") private final StringBuffer message; private boolean active; private SortedSet files; private List changeRequests; /** Creates a new instance of HistoryEntry */ public HistoryEntry() { message = new StringBuffer(); files = new TreeSet(); changeRequests = new ArrayList(); } /** Copy constructor */ public HistoryEntry(HistoryEntry that) { this.revision = that.revision; this.date = that.date; this.author = that.author; this.tags = that.tags; this.message = that.message; this.active = that.active; this.files = that.files; this.changeRequests = that.changeRequests; } public HistoryEntry(String revision, Date date, String author, String tags, String message, boolean active) { this.revision = revision; setDate(date); this.author = author; this.tags = tags; this.message = new StringBuffer(message); this.active = active; this.files = new TreeSet(); this.changeRequests = new ArrayList(); } public String getLine() { return revision + " " + date + " " + author + " " + message + "\n"; } public void dump() { Logger log = OpenGrokLogger.getLogger(); log.log(Level.FINE, "HistoryEntry : revision = {0}", revision); log.log(Level.FINE, "HistoryEntry : tags = {0}", tags); log.log(Level.FINE, "HistoryEntry : date = {0}", date); log.log(Level.FINE, "HistoryEntry : author = {0}", author); log.log(Level.FINE, "HistoryEntry : active = {0}", (active ? "True" : "False")); String[] lines = message.toString().split("\n"); String separator = "="; for (String line : lines) { log.log(Level.FINE, "HistoryEntry : message {0} {1}", new Object[]{separator, line}); separator = ">"; } separator = "="; for (String cr : changeRequests) { log.log(Level.FINE, "HistoryEntry : changeRequests {0} {1}", new Object[]{separator, cr}); separator = ">"; } separator = "="; for (String file : files) { log.log(Level.FINE, "HistoryEntry : files {0} {1}", new Object[]{separator, file}); separator = ">"; } } public String getAuthor() { return author; } public String getTags() { return tags; } public Date getDate() { return (date == null) ? null : (Date) date.clone(); } public String getMessage() { return message.toString().trim(); } public String getRevision() { return revision; } public void setAuthor(String author) { this.author = author; } public void setTags(String tags) { this.tags = tags; } public final void setDate(Date date) { if (date == null) { this.date = null; } else { this.date = (Date) date.clone(); } } public boolean isActive() { return active; } public void setActive(boolean active) { this.active = active; } public void setMessage(String message) { this.message.setLength(0); this.message.append(message); } public void setRevision(String revision) { this.revision = revision; } public void appendMessage(String message) { this.message.append(message); this.message.append("\n"); } public void addFile(String file) { files.add(file); } public SortedSet getFiles() { return files; } public void setFiles(SortedSet files) { this.files = files; } @Override public String toString() { return getLine(); } public void addChangeRequest(String changeRequest) { if (!changeRequests.contains(changeRequest)) { changeRequests.add(changeRequest); } } public List getChangeRequests() { return changeRequests; } public void setChangeRequests(List changeRequests) { this.changeRequests = changeRequests; } /** * Remove "unneeded" info such as multiline history and files list */ public void strip() { files.clear(); tags = null; } }