Alien-SVN

 view release on metacpan or  search on metacpan

src/subversion/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Mergeinfo.java  view on Meta::CPAN

    // http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
    // http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
    // http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
    private static final long serialVersionUID = 1L;

    /**
     * A mapping of repository-relative paths to a list of revision
     * ranges.
     */
    private Map<String, List<RevisionRange>> mergeSources;

    public Mergeinfo()
    {
        mergeSources = new HashMap<String, List<RevisionRange>>();
    }

    /**
     * Create and populate an instance using the contents of the
     * <code>svn:mergeinfo</code> property.
     * @param mergeinfo <code>svn:mergeinfo</code> property value.
     */
    public Mergeinfo(String mergeinfo)
    {
        this();
        this.loadFromMergeinfoProperty(mergeinfo);
    }

    /**
     * A constructor for backward compat.
     */
    public Mergeinfo(org.apache.subversion.javahl.types.Mergeinfo aMergeinfo)
    {
        this();
        Set<String> srcPaths = aMergeinfo.getPaths();

        for (String srcPath : srcPaths)
        {
            List<org.apache.subversion.javahl.types.RevisionRange> aRanges =
                                    aMergeinfo.getRevisionRange(srcPath);
            List<RevisionRange> list = new ArrayList<RevisionRange>();

            for (org.apache.subversion.javahl.types.RevisionRange range : aRanges)
            {
                list.add(new RevisionRange(range));
            }
            mergeSources.put(srcPath, list);
        }
    }

    /**
     * Add one or more RevisionRange objects to merge info. If the
     * merge source is already stored, the list of revisions is
     * replaced.
     * @param mergeSrc The merge source URL.
     * @param ranges RevisionRange objects to add.
     * @throws SubversionException If range list contains objects of
     * type other than RevisionRange.
     */
    public void addRevisions(String mergeSrc, RevisionRange[] ranges)
    {
        for (int i = 0; i < ranges.length; i++)
            addRevisionRange(mergeSrc, ranges[i]);
    }

    /**
     * Add a revision range to the merged revisions for a path.  If
     * the merge source already has associated revision ranges, add
     * the revision range to the existing list.
     * @param mergeSrc The merge source URL.
     * @param range The revision range to add.
     */
    public void addRevisionRange(String mergeSrc, RevisionRange range)
    {
        List<RevisionRange> revisions = this.getRevisions(mergeSrc);
        if (revisions == null)
            revisions = new ArrayList<RevisionRange>();
        revisions.add(range);
        this.setRevisionList(mergeSrc, revisions);
    }

    /**
     * Get the merge source URLs.
     * @return The merge source URLs.
     */
    public String[] getPaths()
    {
        Set<String> pathSet = mergeSources.keySet();
        if (pathSet == null)
            return null;
        return pathSet.toArray(new String[pathSet.size()]);
    }

    /**
     * Get the revision ranges for the specified merge source URL.
     * @param mergeSrc The merge source URL, or <code>null</code>.
     * @return List of RevisionRange objects, or <code>null</code>.
     */
    public List<RevisionRange> getRevisions(String mergeSrc)
    {
        if (mergeSrc == null)
            return null;
        return mergeSources.get(mergeSrc);
    }

    /**
     * Get the RevisionRange objects for the specified merge source URL
     * @param mergeSrc The merge source URL, or <code>null</code>.
     * @return Array of RevisionRange objects, or <code>null</code>.
     */
    public RevisionRange[] getRevisionRange(String mergeSrc)
    {
        List<RevisionRange> revisions = this.getRevisions(mergeSrc);
        if (revisions == null)
            return null;
        return revisions.toArray(new RevisionRange[revisions.size()]);
    }

    /**
     * Parse the <code>svn:mergeinfo</code> property to populate the
     * merge source URLs and revision ranges of this instance.
     * @param mergeinfo <code>svn:mergeinfo</code> property value.



( run in 0.306 second using v1.01-cache-2.11-cpan-ceb78f64989 )