Java tutorial
/* * ==================================================================== * Copyright (c) 2005-2012 sventon project. All rights reserved. * * This software is licensed as described in the file LICENSE, which * you should have received as part of this distribution. The terms * are also available at http://www.sventon.org. * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * ==================================================================== */ package org.sventon.model; import org.apache.commons.lang.StringUtils; import java.io.Serializable; import java.util.*; /** * LogEntry. * * @author patrik@sventon.org * @author jesper@sventon.org */ public final class LogEntry implements Serializable { private static final long serialVersionUID = 1625655173694918781L; /** * The path at revision. */ private String pathAtRevision; /** * Revision. */ private final long revision; /** * Changed paths. */ private final SortedSet<ChangedPath> changedPaths; /** * Map holding the RevisionProperties and the corresponding (String) value. */ private final Map<RevisionProperty, String> properties; /** * Constructor. * * @param revision Revision * @param properties Properties * @param changedPaths Changed paths */ public LogEntry(final long revision, final Map<RevisionProperty, String> properties, final SortedSet<ChangedPath> changedPaths) { this.revision = revision; this.properties = properties == null ? Collections.<RevisionProperty, String>emptyMap() : properties; this.changedPaths = changedPaths; } public void setPathAtRevision(String path) { pathAtRevision = path; } /** * Gets the path at revision. * * @return Returns the pathAtRevision. */ public String getPathAtRevision() { return pathAtRevision; } /** * @return Map of the changed paths. */ public SortedSet<ChangedPath> getChangedPaths() { //noinspection unchecked return changedPaths; } /** * @return Revision number. */ public long getRevision() { return revision; } /** * @return Author. */ public String getAuthor() { return properties.get(RevisionProperty.AUTHOR); } /** * @return Log entry date. */ public Date getDate() { final String date = properties.get(RevisionProperty.DATE); if (StringUtils.isEmpty(date)) return null; return DateUtil.parseISO8601(date); } /** * @return The log message. */ public String getMessage() { return properties.get(RevisionProperty.LOG); } /** * Iterate through (and modify!) the log entries and set the pathAtRevision for each entry. * * @param logEntries the entries to set pathAtRevision for * @param path the starting path */ public static void setPathAtRevisionInLogEntries(final List<LogEntry> logEntries, final String path) { String pathAtRevision = path; for (final LogEntry logEntry : logEntries) { logEntry.setPathAtRevision(pathAtRevision); //noinspection unchecked final SortedSet<ChangedPath> allChangedPaths = logEntry.getChangedPaths(); if (allChangedPaths != null) { for (ChangedPath entryPath : allChangedPaths) { if (entryPath.getCopyPath() != null) { int i = StringUtils.indexOfDifference(entryPath.getPath(), pathAtRevision); if (i == -1) { // Same path pathAtRevision = entryPath.getCopyPath(); } else if (entryPath.getPath().length() == i) { // Part path, can be a branch pathAtRevision = entryPath.getCopyPath() + pathAtRevision.substring(i); } else { // TODO: else what? Is this OK to let the path be the previous? } } } } } } /** * Checks if given log entry contains accessible information, i.e. it was * fetched from the repository by a user with access to the affected paths. * * @return True if accessible, false if not. */ public boolean isAccessible() { return getDate() != null && (getChangedPaths() != null && !getChangedPaths().isEmpty()); } @Override public String toString() { return "LogEntry{" + "pathAtRevision='" + pathAtRevision + '\'' + ", revision=" + revision + ", changedPaths=" + changedPaths + ", properties=" + properties + '}'; } }