All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openide.nodes.NodeMemberEvent Maven / Gradle / Ivy

Go to download

The NetBeans Platform is a generic base for desktop applications. It provides the services common to almost all large desktop applications: window management, menus, settings and storage, an update manager, and file access. Get a head start by reusing these standard components, allowing you to concentrate fully on your application's business logic.

The newest version!
/*
 *                 Sun Public License Notice
 * 
 * The contents of this file are subject to the Sun Public License
 * Version 1.0 (the "License"). You may not use this file except in
 * compliance with the License. A copy of the License is available at
 * http://www.sun.com/
 * 
 * The Original Code is NetBeans. The Initial Developer of the Original
 * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun
 * Microsystems, Inc. All Rights Reserved.
 */

package org.openide.nodes;

import java.util.Arrays;
import java.util.HashSet;

/** Event describing change in the list of a node's children.
*
* @author Jaroslav Tulach
*/
public class NodeMemberEvent extends NodeEvent {
    /** is this add event? */
    private boolean add;
    /** list of changed nodes */
    private Node[] delta;
    /** list of nodes to find indices in, null if one should use current
    * node's list
    */
    private Node[] from;
    /** list of nodes indexes, can be null if it should be computed lazily */
    private int[] indices;

    static final long serialVersionUID =-3973509253579305102L;
    /** Package private constructor to allow construction only
    * @param n node that should fire change
    * @param add true if nodes has been added
    * @param delta array of nodes that have changed
    * @param from nodes to find indices in
    */
    NodeMemberEvent(Node n, boolean add, Node[] delta, Node[] from) {
        super (n);
        this.add = add;
        this.delta = delta;
        this.from = from;
    }

    /** Get the type of action.
    * @return true if children were added,
    *    false if removed
    */
    public final boolean isAddEvent () {
        return add;
    }

    /** Get a list of children that changed.
    * @return array of nodes that changed
    */
    public final Node[] getDelta () {
        return delta;
    }

    /** Get an array of indices of the changed nodes.
    * @return array with the same length as {@link #getDelta}
    */
    public synchronized int[] getDeltaIndices () {
        if (indices != null) return indices;

        // compute indices
        if (from == null) {
            // use current node subnodes
            from = getNode ().getChildren ().getNodes ();
        }

        java.util.List list = Arrays.asList (delta);
        HashSet set = new HashSet (list);

        indices = new int[delta.length];

        int j = 0;
        int i = 0;
        while (i < from.length && j < indices.length) {
            if (set.contains (from[i])) {
                indices[j++] = i;
            }
            i++;
        }

        if (j != delta.length) {
            StringBuffer m = new StringBuffer(1000);
            m.append("Some of a set of deleted nodes are not present in the original ones.\n"); // NOI18N
            m.append("See #15478; you may need to check that your Children.Keys keys are safely comparable."); // NOI18N
            m.append("\ni: " + i);  // NOI18N
            m.append("\nj: " + j);  // NOI18N
            m.append("\nThis: " + this); // NOI18N
            m.append("\nCurrent state:\n"); // NOI18N
            m.append(Arrays.asList (from));
            m.append("\nDelta:\n"); // NOI18N
            m.append(list);
            throw new IllegalStateException(m.toString());
        }

        return indices;
    }

    /** Human presentable information about the event */
    public String toString () {
        StringBuffer sb = new StringBuffer ();
        sb.append (getClass ().getName ());
        sb.append ("[node="); // NOI18N
        sb.append (getSource ());
        sb.append (", add="); // NOI18N
        sb.append (isAddEvent ());

        Node[] deltaNodes = getDelta ();
        int[] deltaIndices = getDeltaIndices ();

        for (int i = 0; i < deltaNodes.length; i++) {
            sb.append ("\n  "); // NOI18N
            sb.append (i);
            sb.append (" at "); // NOI18N
            sb.append (deltaIndices[i]);
            sb.append (" = "); // NOI18N
            sb.append (deltaNodes[i]);
        }
        sb.append ("\n]"); // NOI18N

        return sb.toString ();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy