/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.sling.servlets.post;

public class Modification {

    private final ModificationType type;

    private final String source;

    private final String destination;

    public Modification(final ModificationType type, final String source,
            final String destination) {
        this.type = type;
        this.source = source;
        this.destination = destination;
    }

    public ModificationType getType() {
        return type;
    }

    public String getSource() {
        return source;
    }

    public String getDestination() {
        return destination;
    }

    /**
     * Records a 'modified' change
     *
     * @param path path of the item that was modified
     */
    public static Modification onModified(String path) {
        return onChange(ModificationType.MODIFY, path);
    }

    /**
     * Records a 'created' change
     *
     * @param path path of the item that was created
     */
    public static Modification onCreated(String path) {
        return onChange(ModificationType.CREATE, path);
    }

    /**
     * Records a 'deleted' change
     *
     * @param path path of the item that was deleted
     */
    public static Modification onDeleted(String path) {
        return onChange(ModificationType.DELETE, path);
    }

    /**
     * Records a 'moved' change.
     * <p/>
     * Note: the moved change only records the basic move command. the implied
     * changes on the moved properties and sub nodes are not recorded.
     *
     * @param srcPath source path of the node that was moved
     * @param dstPath destination path of the node that was moved.
     */
    public static Modification onMoved(String srcPath, String dstPath) {
        return onChange(ModificationType.MOVE, srcPath, dstPath);
    }

    /**
     * Records a 'copied' change.
     * <p/>
     * Note: the copy change only records the basic copy command. the implied
     * changes on the copied properties and sub nodes are not recorded.
     *
     * @param srcPath source path of the node that was copied
     * @param dstPath destination path of the node that was copied.
     */
    public static Modification onCopied(String srcPath, String dstPath) {
        return onChange(ModificationType.COPY, srcPath, dstPath);
    }

    /**
     * Records a 'order' change.
     *
     * @param orderedPath Path of the node that was reordered
     * @param beforeSibbling Name of the sibbling node before which the source node has
     *            been inserted.
     */
    public static Modification onOrder(String orderedPath, String beforeSibbling) {
        return onChange(ModificationType.ORDER, orderedPath, beforeSibbling);
    }

    protected static Modification onChange(ModificationType type, String source) {
        return onChange(type, source, null);
    }

    protected static Modification onChange(ModificationType type,
            final String source, final String dest) {
        return new Modification(type, source, dest);
    }

    public static Modification onCheckin(String path) {
        return onChange(ModificationType.CHECKIN, path, null);
    }

    public static Modification onCheckout(String path) {
        return onChange(ModificationType.CHECKOUT, path, null);
    }

    public static Modification onRestore(String path, String version) {
        return onChange(ModificationType.RESTORE, path, version);
    }

    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Modification[type=").append(type).append(", source=").append(source);
        if (destination != null) {
            builder.append(", dest=").append(destination);
        }
        builder.append("]");
        return builder.toString();
    }
}

@@ -3212,25 +3212,24 @@
 am beforeSib
-b
 ling Name of
@@ -3236,17 +3236,16 @@
  the sib
-b
 ling nod
@@ -3391,25 +3391,24 @@
 ng beforeSib
-b
 ling) %7B%0A    
@@ -3473,17 +3473,16 @@
 eforeSib
-b
 ling);%0A 

fix typos