/* * ==================================================================== * 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 java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * Represents a, according to the repository, valid path/revision combination. * * @author jesper@sventon.org */ public class PathRevision implements Serializable, Comparable<PathRevision> { private static final long serialVersionUID = 9203048530692746853L; /** * The delimiter between the path and the revision values. */ public static final String DELIMITER = "@"; /** * Entry path. */ private final String path; /** * Revision. */ private final Revision revision; /** * Constructor. * * @param path Path to the dir entry. * @param revision Revision */ public PathRevision(final String path, final Revision revision) { this.path = path; this.revision = revision; } /** * @return The path */ public String getPath() { return path; } /** * @return The revision */ public Revision getRevision() { return revision; } @Override public int compareTo(PathRevision o) { return this.getRevision().compareTo(o.getRevision()); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; final PathRevision that = (PathRevision) o; if (path != null ? !path.equals(that.path) : that.path != null) return false; if (revision != null ? !revision.equals(that.revision) : that.revision != null) return false; return true; } @Override public int hashCode() { int result = path != null ? path.hashCode() : 0; result = 31 * result + (revision != null ? revision.hashCode() : 0); return result; } /** * Parses a path/revision string. * * @param pathRevisionString Path/revision string. See {@link #DELIMITER}. * @return Parsed instance. * @see #DELIMITER */ public static PathRevision parse(final String pathRevisionString) { return parse(new String[]{pathRevisionString})[0]; } /** * Parses multiple path/revision strings at once. * * @param pathRevisionStrings Path/revision strings. See {@link #DELIMITER}. * @return Parsed instances. * @see #DELIMITER */ public static PathRevision[] parse(final String... pathRevisionStrings) { final List<PathRevision> fileEntries = new ArrayList<PathRevision>(); for (final String entry : pathRevisionStrings) { if (!entry.contains(DELIMITER)) { throw new IllegalArgumentException("Illegal parameter. No delimiter in entry: " + entry); } final String path = entry.substring(0, entry.lastIndexOf(DELIMITER)); final String revision = entry.substring(entry.lastIndexOf(DELIMITER) + 1); fileEntries.add(new PathRevision(path, Revision.parse(revision))); } return fileEntries.toArray(new PathRevision[fileEntries.size()]); } @Override public String toString() { return path + DELIMITER + revision; } }