001/*
002 * ====================================================================
003 *
004 * The Apache Software License, Version 1.1
005 *
006 * Copyright (c) 1999-2003 The Apache Software Foundation.
007 * All rights reserved.
008 *
009 * Redistribution and use in source and binary forms, with or without
010 * modification, are permitted provided that the following conditions
011 * are met:
012 *
013 * 1. Redistributions of source code must retain the above copyright
014 *    notice, this list of conditions and the following disclaimer.
015 *
016 * 2. Redistributions in binary form must reproduce the above copyright
017 *    notice, this list of conditions and the following disclaimer in
018 *    the documentation and/or other materials provided with the
019 *    distribution.
020 *
021 * 3. The end-user documentation included with the redistribution, if
022 *    any, must include the following acknowledgement:
023 *       "This product includes software developed by the
024 *        Apache Software Foundation (http://www.apache.org/)."
025 *    Alternately, this acknowledgement may appear in the software itself,
026 *    if and wherever such third-party acknowledgements normally appear.
027 *
028 * 4. The names "The Jakarta Project", "Commons", and "Apache Software
029 *    Foundation" must not be used to endorse or promote products derived
030 *    from this software without prior written permission. For written
031 *    permission, please contact apache@apache.org.
032 *
033 * 5. Products derived from this software may not be called "Apache"
034 *    nor may "Apache" appear in their names without prior written
035 *    permission of the Apache Software Foundation.
036 *
037 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
038 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
039 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
040 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
041 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
042 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
043 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
044 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
045 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
046 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
047 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
048 * SUCH DAMAGE.
049 * ====================================================================
050 *
051 * This software consists of voluntary contributions made by many
052 * individuals on behalf of the Apache Software Foundation.  For more
053 * information on the Apache Software Foundation, please see
054 * <http://www.apache.org/>.
055 *
056 */
057
058package org.apache.wicket.util.diff;
059
060import java.util.List;
061
062/**
063 * Holds an change-delta between to revisions of a text.
064 * 
065 * @version $Id: ChangeDelta.java,v 1.1 2006/03/12 00:24:21 juanca Exp $
066 * @author <a href="mailto:juanco@suigeneris.org">Juanco Anez</a>
067 * @see Delta
068 * @see Diff
069 * @see Chunk
070 */
071public class ChangeDelta extends Delta
072{
073
074        ChangeDelta()
075        {
076                super();
077        }
078
079        /**
080         * Construct.
081         * 
082         * @param orig
083         * @param rev
084         */
085        public ChangeDelta(final Chunk orig, final Chunk rev)
086        {
087                init(orig, rev);
088        }
089
090        @Override
091        public void verify(final List<Object> target) throws PatchFailedException
092        {
093                if (!original.verify(target))
094                {
095                        throw new PatchFailedException();
096                }
097                if (original.first() > target.size())
098                {
099                        throw new PatchFailedException("original.first() > target.size()");
100                }
101        }
102
103        @Override
104        public void applyTo(final List<Object> target)
105        {
106                original.applyDelete(target);
107                revised.applyAdd(original.first(), target);
108        }
109
110        @Override
111        public void toString(final StringBuilder s)
112        {
113                original.rangeString(s);
114                s.append("c");
115                revised.rangeString(s);
116                s.append(Diff.NL);
117                original.toString(s, "< ", "\n");
118                s.append("---");
119                s.append(Diff.NL);
120                revised.toString(s, "> ", "\n");
121        }
122
123        @Override
124        public void toRCSString(final StringBuilder s, final String EOL)
125        {
126                s.append("d");
127                s.append(original.rcsfrom());
128                s.append(" ");
129                s.append(original.size());
130                s.append(EOL);
131                s.append("a");
132                s.append(original.rcsto());
133                s.append(" ");
134                s.append(revised.size());
135                s.append(EOL);
136                revised.toString(s, "", EOL);
137        }
138
139        @Override
140        public void accept(final RevisionVisitor visitor)
141        {
142                visitor.visit(this);
143        }
144}