Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
   *
   * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   * Other names may be trademarks of their respective owners.
   *
   * The contents of this file are subject to the terms of either the GNU
  * General Public License Version 2 only ("GPL") or the Common
  * Development and Distribution License("CDDL") (collectively, the
  * "License"). You may not use this file except in compliance with the
  * License. You can obtain a copy of the License at
  * http://www.netbeans.org/cddl-gplv2.html
  * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
  * specific language governing permissions and limitations under the
  * License.  When distributing the software, include this License Header
  * Notice in each file and include the License file at
  * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
  * particular file as subject to the "Classpath" exception as provided
  * by Oracle in the GPL Version 2 section of the License file that
  * accompanied this code. If applicable, add the following below the
  * License Header, with the fields enclosed by brackets [] replaced by
  * your own identifying information:
  * "Portions Copyrighted [year] [name of copyright owner]"
  *
  * Contributor(s):
  *
  * The Original Software is NetBeans. The Initial Developer of the Original
  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
  * Microsystems, Inc. All Rights Reserved.
  *
  * If you wish your version of this file to be governed by only the CDDL
  * or only the GPL Version 2, indicate your decision by adding
  * "[Contributor] elects to include this software in this distribution
  * under the [CDDL or GPL Version 2] license." If you do not indicate a
  * single choice of license, a recipient has the option to distribute
  * your version of this file under either the CDDL, the GPL Version 2 or
  * to extend the choice of license to its licensees as provided above.
  * However, if you add GPL Version 2 code and therefore, elected the GPL
  * Version 2 license, then the option applies only if the new code is
  * made subject to such option by the copyright holder.
  */
 package org.netbeans.modules.java.navigation;
 
 
 import java.awt.Image;
 import java.util.List;
 import java.util.Set;
Node representing an Element

Author(s):
Petr Hrebejk
 
 public class ElementNode extends AbstractNode {
 
 
     private static final String ACTION_FOLDER = "Navigator/Actions/Members/text/x-java";  //NOI18N
     private static Node WAIT_NODE;
     
     private OpenAction openAction;
     private Description description;
           
    
Creates a new instance of TreeNode
    public ElementNodeDescription description ) {
        super(
            description.subs == null ? .new ElementChilren(description.subsdescription.ui.getFilters()),
            description.elementHandle == null ? null : prepareLookup(description));
        this. = description;
        setDisplayNamedescription.name ); 
    }
    
    @Override
    public Image getIcon(int type) {
         return . == null ? super.getIcon(type) : ImageUtilities.icon2Image(ElementIcons.getElementIcon(..));
    }
    @Override
    public Image getOpenedIcon(int type) {
        return getIcon(type);
    }
                   
    @Override
    public java.lang.String getDisplayName() {
        if (. != null) {
            return .;
        }
        if (. != null) {
            return ..getNameExt();
        }
        return null;
    }
            
    @Override
    public String getHtmlDisplayName() {
        return .;
    }
    
    @Override
    public Action[] getActionsboolean context ) {
        
        if ( context || . == null ) {
            return ..getActions();
        } else {
            final Action panelActions[] = ..getActions();
            final List<? extends ActionadditionalActions = Utilities.actionsForPath();
            final int additionalActionSize = additionalActions.isEmpty() ? 0 : additionalActions.size() + 1;
            final List<Actionactions = new ArrayList<Action>(4 + panelActions.length + additionalActionSize);
            actions.add(getOpenAction());
            actions.add(RefactoringActionsFactory.whereUsedAction());
            actions.add(RefactoringActionsFactory.popupSubmenuAction());
            actions.add(null);
            if (additionalActionSize > 0) {
                actions.addAll(additionalActions);
                actions.add(null);
            }
            actions.addAll(Arrays.asList(panelActions));
            return actions.toArray(new Action[actions.size()]);
        }
    }        
    
    @Override
    public Action getPreferredAction() {
        return getOpenAction();
    }
    @Override
    public boolean canCopy() {
        return false;
    }
    @Override
    public boolean canCut() {
        return false;
    }
    @Override
    public boolean canDestroy() {
        return false;
    }
    @Override
    public boolean canRename() {
        return false;
    }
    @Override
    public PasteType getDropType(Transferable tint actionint index) {
        return null;
    }
    @Override
    public Transferable drag() throws IOException {
        return null;
    }
    @Override
    protected void createPasteTypes(Transferable tList<PasteTypes) {
        // Do nothing
    }
        
    private synchronized Action getOpenAction() {
        if (  == null && . != null) {
             = new OpenAction(
                .,
                .getFileObject(),
                .);
        }
        return ;
    }
    
    static synchronized Node getWaitNode() {
        if (  == null ) {
             = new WaitNode();
        }
        return ;
    }
    
    public void refreshRecursively() {
        Children ch = getChildren();
        if ( ch instanceof ElementChilren ) {
            boolean scrollOnExpand = ..getScrollOnExpand();
            ..setScrollOnExpandfalse );
           forNode sub : ch.getNodes() ) {
               ..expandNode(sub);
               ((ElementNode)sub).refreshRecursively();
           }
           ..setScrollOnExpandscrollOnExpand );
        }        
    }
    
        
        if ( getDescritption(). != null &&
             eh.signatureEquals(getDescritption().)) {
            return this;
        }
        
        Children ch = getChildren();
        if ( ch instanceof ElementChilren ) {
           forNode sub : ch.getNodes() ) {
               ElementNode result = ((ElementNode)sub).getNodeForElement(eh);
               if ( result != null ) {
                   return result;
               }
           }
        }
        
        return null;
    }
    
    public void updateRecursivelyDescription newDescription ) {
        Children ch = getChildren();
        if ( ch instanceof ElementChilren ) {           
           HashSet<DescriptionoldSubs = new HashSet<Description>( . );
           
           // Create a hashtable which maps Description to node.
           // We will then identify the nodes by the description. The trick is 
           // that the new and old description are equal and have the same hashcode
           Node[] nodes = ch.getNodestrue );           
           HashMap<Description,ElementNodeoldD2node = new HashMap<Description,ElementNode>();           
           for (Node node : nodes) {
               oldD2node.put(((ElementNode)node)., (ElementNode)node);
           }
           
           // Now refresh keys
           ((ElementChilren)ch).resetKeys(newDescription.subsnewDescription.ui.getFilters());
           
           // Reread nodes
           nodes = ch.getNodestrue );
           
           forDescription newSub : newDescription.subs ) {
                ElementNode node = oldD2node.get(newSub);
                if ( node != null ) { // filtered out
                    if ( !oldSubs.contains(newSub) && node.getChildren() != .) {                                           
                        ..expandNode(node); // Make sure new nodes get expanded
                    }     
                    node.updateRecursivelynewSub ); // update the node recursively
                }
           }
        }
                        
        Description oldDescription = // Remember old description        
         = newDescription// set new descrioption to the new node
        if ( oldDescription.htmlHeader != null && !oldDescription.htmlHeader.equals(.)) {
            // Different headers => we need to fire displayname change
            fireDisplayNameChange(oldDescription.htmlHeader.);
        }
        ifoldDescription.modifiers != null &&  !oldDescription.modifiers.equals(newDescription.modifiers)) {
            fireIconChange();
            fireOpenedIconChange();
        }
    }
    
    public Description getDescritption() {
        return ;
    }
    private static Lookup prepareLookup(Description d) {
        InstanceContent ic = new InstanceContent();
        ic.add(d);
        ic.add(d);
        ic.add(d);
        return new AbstractLookup(ic);
    }
    
        @Override public TreePathHandle convert(Description obj) {
            return obj.elementHandle == null ?
                null :
                TreePathHandle.from(obj.elementHandleobj.cpInfo);
        }
        @Override public Class<? extends TreePathHandletype(Description obj) {
            return TreePathHandle.class;
        }
        @Override public String id(Description obj) {
            return "IL[" + obj.toString();
        }
        @Override public String displayName(Description obj) {
            return id(obj);
        }
    };
        public FileObject convert(Description d) {
            return d.getFileObject();
        }
        public Class<? extends FileObjecttype(Description obj) {
            return FileObject.class;
        }
        public String id(Description obj) {
            return "IL[" + obj.toString();
        }
        public String displayName(Description obj) {
            return id(obj);
        }
    };
        public DataObject convert(Description d) {
            try {
                final FileObject fo = d.getFileObject();
                return fo == null ? null : DataObject.find(fo);
            } catch (DataObjectNotFoundException ex) {
                return null;
            }
        }
        public Class<? extends DataObjecttype(Description obj) {
            return DataObject.class;
        }
        public String id(Description obj) {
            return "IL[" + obj.toString();
        }
        public String displayName(Description obj) {
            return id(obj);
        }
    };
    private static final class ElementChilren extends Children.Keys<Description> {
            
        public ElementChilren(Collection<DescriptiondescriptionsClassMemberFilters filters ) {
            resetKeysdescriptionsfilters );            
        }
        
        protected Node[] createNodes(Description key) {
            return new Node[] {new  ElementNode(key)};
        }
        
        void resetKeysCollection<DescriptiondescriptionsClassMemberFilters filters ) {            
            setKeysfilters.filter(descriptions) );
        }
        
        
                        
    }
                       
    
Stores all interesting data about given element.
    
    static class Description {
        
        public static final Comparator<DescriptionALPHA_COMPARATOR =
            new DescriptionComparator(true);
        public static final Comparator<DescriptionPOSITION_COMPARATOR = 
            new DescriptionComparator(false);    
        
        ClassMemberPanelUI ui;
                
        FileObject fileObject// For the root description
        
        final String name;
        final ElementHandle<? extends ElementelementHandle;
        final ElementKind kind;
        Set<Modifiermodifiers;        
        Collection<Descriptionsubs
        String htmlHeader;
        long pos;
        final boolean isInherited;
        final boolean isTopLevel;
        ClasspathInfo cpInfo;
        
        DescriptionClassMemberPanelUI ui ) {
            this. = ui;
            this. = null;
            this. = null;
            this. = null;
            this. = false;
            this. = false;
        }
         
                    @NonNull String name,
                    @NonNull ElementHandle<? extends ElementelementHandle,
                    @NonNull ElementKind kind,
                    boolean inherited,
                    boolean topLevel) {
            Parameters.notNull("ui"ui);   //NOI18N
            Parameters.notNull("name"name);   //NOI18N
            Parameters.notNull("elementHandle"elementHandle); //NOI18N
            Parameters.notNull("kind"kind);   //NOI18N
            this. = ui;
            this. = name;
            this. = elementHandle;
            this. = kind;
            this. = inherited;
            this. = topLevel;
        }
        public FileObject getFileObject() {
            if( ! )
                return .getFileObject();
            return SourceUtils.getFile );
        }
        
        @Override
        public boolean equals(Object o) {
                        
            if ( o == null ) {
                //System.out.println("- f nul");
                return false;
            }
            
            if ( !(o instanceof Description)) {
                // System.out.println("- not a desc");
                return false;
            }
            
            Description d = (Description)o;
            
            if (  != d.kind ) {
                // System.out.println("- kind");
                return false;
            }
            
            if (this. != d.name && (this. == null || !this..equals(d.name))) {
                // System.out.println("- name");
                return false;
            }
            if (this. != d.elementHandle && (this. == null || !this..equals(d.elementHandle))) {
                return false;
            }
            
            /*
            if ( !modifiers.equals(d.modifiers)) {
                // E.println("- modifiers");
                return false;
            }
            */
            
            // System.out.println("Equals called");            
            return true;
        }
        
        
        public int hashCode() {
            int hash = 7;
            hash = 29 * hash + (this. != null ? this..hashCode() : 0);
            hash = 29 * hash + (this. != null ? this..hashCode() : 0);
            // hash = 29 * hash + (this.modifiers != null ? this.modifiers.hashCode() : 0);
            return hash;
        }
        
        private static class DescriptionComparator implements Comparator<Description> {
            
            boolean alpha;
            
            DescriptionComparatorboolean alpha ) {
                this. = alpha;
            }
            
            public int compare(Description d1Description d2) {
                
                if (  ) {
                    return alphaCompared1d2 );
                }
                else {
                    ifd1.isInherited && !d2.isInherited )
                        return 1;
                    if( !d1.isInherited && d2.isInherited )
                        return -1;
                    ifd1.isInherited && d2.isInherited ) {
                        return alphaCompared1d2 );
                    }
                    return d1.pos == d2.pos ? 0 : d1.pos < d2.pos ? -1 : 1;
                }
            }
            
            int alphaCompareDescription d1Description d2 ) {
                if ( k2i(d1.kind) != k2i(d2.kind) ) {
                    return k2i(d1.kind) - k2i(d2.kind);
                } 
                return d1.name.compareTo(d2.name);
            }
            
            int k2iElementKind kind ) {
                switchkind ) {
                    case :
                        return 1;
                    case :
                        return 2;
                    case :
                        return 3;
                    case :
                    case :
                    case :
                    case :                        
                        return 4;
                    default:
                        return 100;
                }
            }
            
        }
        
    }
        
    private static class WaitNode extends AbstractNode {
        
        private Image waitIcon = ImageUtilities.loadImage("org/netbeans/modules/java/navigation/resources/wait.gif"); // NOI18N
        
        WaitNode( ) {
            super. );
        }
        
        @Override
        public Image getIcon(int type) {
             return ;
        }
        @Override
        public Image getOpenedIcon(int type) {
            return getIcon(type);
        }
        @java.lang.Override
        public java.lang.String getDisplayName() {
            return NbBundle.getMessage(ElementNode.class"LBL_WaitNode"); // NOI18N
        }
        
    }
    
    
New to GrepCode? Check out our FAQ X