/*
 * ModeShape (http://www.modeshape.org)
 *
 * Licensed 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.modeshape.jcr.cache.change;

import java.util.Set;
import org.modeshape.jcr.cache.NodeKey;
import org.modeshape.jcr.value.Name;
import org.modeshape.jcr.value.Path;

/**
 * Change which is triggered after the sequencing process of a node is finished.
 * 
 * @author Horia Chiorean
 */
public class NodeSequenced extends AbstractSequencingChange {

    private static final long serialVersionUID = 1L;

    private final NodeKey outputNodeKey;
    private final Path outputNodePath;

    public NodeSequenced( NodeKey sequencedNodeKey,
                          Path sequencedNodePath,
                          Name sequencedNodePrimaryType,
                          Set<Name> sequencedNodeMixinTypes,
                          NodeKey outputNodeKey,
                          Path outputNodePath,
                          String outputPath,
                          String userId,
                          String selectedPath,
                          String sequencerName,
                          boolean queryable ) {
        super(sequencedNodeKey, sequencedNodePath, sequencedNodePrimaryType, sequencedNodeMixinTypes, queryable, outputPath,
              userId, selectedPath, sequencerName);
        assert outputNodeKey != null;
        assert outputNodePath != null;
        this.outputNodeKey = outputNodeKey;
        this.outputNodePath = outputNodePath;
    }

    /**
     * Get the key of the top-level node that was output by the sequencer.
     * 
     * @return the output node key; never null
     */
    public NodeKey getOutputNodeKey() {
        return outputNodeKey;
    }

    /**
     * Get the path of the top-level node that was output by the sequencer.
     * 
     * @return the output node path; never null
     */
    public Path getOutputNodePath() {
        return outputNodePath;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        sb.append("Sequenced new node: ").append(outputNodeKey).append(" at path: ").append(outputNodePath);
        sb.append(" from the node: ").append(getKey()).append(" at path: ").append(getPath());
        return sb.toString();
    }
}
