uml.project/src/org/netbeans/modules/uml/project/ui/nodes/UMLElementNode.java
author Sergey B. Petrov <sj-nb@netbeans.org>
Sat, 05 Oct 2013 10:58:10 +0400
changeset 44 55780b8b65f1
parent 0 054eeee980fe
permissions -rw-r--r--
#236763 proposed patch
jglick@0
     1
/*
jglick@0
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
jglick@0
     3
 *
jglick@0
     4
 * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
jglick@0
     5
 *
jglick@0
     6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
jglick@0
     7
 * Other names may be trademarks of their respective owners.
jglick@0
     8
 *
jglick@0
     9
 * The contents of this file are subject to the terms of either the GNU
jglick@0
    10
 * General Public License Version 2 only ("GPL") or the Common
jglick@0
    11
 * Development and Distribution License("CDDL") (collectively, the
jglick@0
    12
 * "License"). You may not use this file except in compliance with the
jglick@0
    13
 * License. You can obtain a copy of the License at
jglick@0
    14
 * http://www.netbeans.org/cddl-gplv2.html
jglick@0
    15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
jglick@0
    16
 * specific language governing permissions and limitations under the
jglick@0
    17
 * License.  When distributing the software, include this License Header
jglick@0
    18
 * Notice in each file and include the License file at
jglick@0
    19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
jglick@0
    20
 * particular file as subject to the "Classpath" exception as provided
jglick@0
    21
 * by Oracle in the GPL Version 2 section of the License file that
jglick@0
    22
 * accompanied this code. If applicable, add the following below the
jglick@0
    23
 * License Header, with the fields enclosed by brackets [] replaced by
jglick@0
    24
 * your own identifying information:
jglick@0
    25
 * "Portions Copyrighted [year] [name of copyright owner]"
jglick@0
    26
 *
jglick@0
    27
 * Contributor(s):
jglick@0
    28
 *
jglick@0
    29
 * The Original Software is NetBeans. The Initial Developer of the Original
jglick@0
    30
 * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
jglick@0
    31
 * Microsystems, Inc. All Rights Reserved.
jglick@0
    32
 *
jglick@0
    33
 * If you wish your version of this file to be governed by only the CDDL
jglick@0
    34
 * or only the GPL Version 2, indicate your decision by adding
jglick@0
    35
 * "[Contributor] elects to include this software in this distribution
jglick@0
    36
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
jglick@0
    37
 * single choice of license, a recipient has the option to distribute
jglick@0
    38
 * your version of this file under either the CDDL, the GPL Version 2 or
jglick@0
    39
 * to extend the choice of license to its licensees as provided above.
jglick@0
    40
 * However, if you add GPL Version 2 code and therefore, elected the GPL
jglick@0
    41
 * Version 2 license, then the option applies only if the new code is
jglick@0
    42
 * made subject to such option by the copyright holder.
jglick@0
    43
 */
jglick@0
    44
package org.netbeans.modules.uml.project.ui.nodes;
jglick@0
    45
jglick@0
    46
import org.netbeans.modules.uml.core.metamodel.structure.IProject;
jglick@0
    47
jglick@0
    48
import java.awt.Graphics;
jglick@0
    49
import java.awt.GraphicsConfiguration;
jglick@0
    50
import java.awt.GraphicsDevice;
jglick@0
    51
import java.awt.GraphicsEnvironment;
jglick@0
    52
import java.awt.Image;
jglick@0
    53
import java.util.ArrayList;
jglick@0
    54
import java.util.Comparator;
jglick@0
    55
import java.util.Enumeration;
jglick@0
    56
jglick@0
    57
import javax.swing.Action;
jglick@0
    58
import javax.swing.Icon;
jglick@0
    59
import javax.swing.ImageIcon;
sj-nb@44
    60
import java.util.List;
jglick@0
    61
jglick@0
    62
import org.openide.actions.OpenAction;
jglick@0
    63
import org.openide.cookies.OpenCookie;
jglick@0
    64
import org.openide.nodes.Children;
jglick@0
    65
import org.openide.nodes.Node;
jglick@0
    66
import org.openide.nodes.CookieSet;
jglick@0
    67
import org.openide.util.ImageUtilities;
jglick@0
    68
import org.openide.util.Lookup;
jglick@0
    69
import org.openide.util.Utilities;
jglick@0
    70
import org.openide.util.actions.SystemAction;
jglick@0
    71
jglick@0
    72
import org.netbeans.modules.uml.core.eventframework.IEventPayload;
jglick@0
    73
import org.netbeans.modules.uml.core.metamodel.core.foundation.IElement;
jglick@0
    74
import org.netbeans.modules.uml.core.metamodel.core.foundation.INamedElement;
jglick@0
    75
import org.netbeans.modules.uml.core.metamodel.diagrams.TSDiagramDetails;
jglick@0
    76
import org.netbeans.modules.uml.core.scm.ISCMIntegrator;
jglick@0
    77
import org.netbeans.modules.uml.core.scm.SCMFeatureKind;
jglick@0
    78
import org.netbeans.modules.uml.resources.images.ImageUtil;
jglick@0
    79
import org.netbeans.modules.uml.ui.controls.projecttree.IProjectTreeEventDispatcher;
jglick@0
    80
import org.netbeans.modules.uml.ui.controls.projecttree.IProjectTreeItem;
sj-nb@44
    81
import org.netbeans.modules.uml.project.ui.NetBeansUMLProjectTreeModel;
jglick@0
    82
import org.netbeans.modules.uml.ui.controls.projecttree.ProjectTreeItemImpl;
jglick@0
    83
import org.netbeans.modules.uml.ui.support.DispatchHelper;
jglick@0
    84
import org.netbeans.modules.uml.ui.support.ProductHelper;
jglick@0
    85
import org.netbeans.modules.uml.ui.support.commonresources.CommonResourceManager;
jglick@0
    86
import org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeDiagram;
jglick@0
    87
import org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeElement;
jglick@0
    88
import org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeFolder;
jglick@0
    89
import org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem;
jglick@0
    90
import org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeRelElement;
jglick@0
    91
import org.netbeans.modules.uml.ui.support.projecttreesupport.ProjectTreeComparable;
sj-nb@44
    92
import org.openide.nodes.ChildFactory;
jglick@0
    93
jglick@0
    94
/**
jglick@0
    95
 *
jglick@0
    96
 * @author Trey Spiva
jglick@0
    97
 */
jglick@0
    98
public class UMLElementNode extends AbstractModelElementNode
sj-nb@44
    99
        implements ITreeItem, CookieSet.Factory, Comparable {
sj-nb@44
   100
sj-nb@44
   101
    private IProjectTreeItem m_Data = null;
sj-nb@44
   102
    private String mPathAsString = ""; // NOI18N
sj-nb@44
   103
    private Node.Cookie mOpenCookie = null;
sj-nb@44
   104
    private Node.Cookie mModelElementCookie = null;
sj-nb@44
   105
    /**
sj-nb@44
   106
     * Determines if the node has been initialized with children yet.
sj-nb@44
   107
     */
sj-nb@44
   108
    private boolean mIsInitialized = false;
sj-nb@44
   109
    //Cache to speed up performance
sj-nb@44
   110
    private Image icon = null;
jglick@0
   111
//	private Action[] actions=null;
sj-nb@44
   112
sj-nb@44
   113
    /**
sj-nb@44
   114
     * Create a new UMLElementNode
sj-nb@44
   115
     */
sj-nb@44
   116
    public UMLElementNode() {
sj-nb@44
   117
        this(new ProjectTreeItemImpl());
sj-nb@44
   118
        initCookies();
sj-nb@44
   119
    }
sj-nb@44
   120
sj-nb@44
   121
    /**
sj-nb@44
   122
     *
sj-nb@44
   123
     */
sj-nb@44
   124
    public UMLElementNode(Lookup lookup) {
sj-nb@44
   125
        this(lookup, new ProjectTreeItemImpl());
sj-nb@44
   126
    }
sj-nb@44
   127
sj-nb@44
   128
    /**
sj-nb@44
   129
     * Create a new UMLElementNode
sj-nb@44
   130
     */
sj-nb@44
   131
    public UMLElementNode(Children ch, Lookup lookup) {
sj-nb@44
   132
        this(ch, lookup, new ProjectTreeItemImpl());
sj-nb@44
   133
    }
sj-nb@44
   134
sj-nb@44
   135
    /**
sj-nb@44
   136
     * Create a new UMLElementNode and initialize its data with the information
sj-nb@44
   137
     * from an IProjectTreeItem.
sj-nb@44
   138
     *
sj-nb@44
   139
     * @param item The ITreeItem used to initialize the new node.
sj-nb@44
   140
     * @see IProjectTreeItem
sj-nb@44
   141
     */
sj-nb@44
   142
    public UMLElementNode(IProjectTreeItem data) {
sj-nb@44
   143
        super();
sj-nb@44
   144
        setData(data);
sj-nb@44
   145
        setUpChildren();
sj-nb@44
   146
        addProjectTreeItemCookie(data);
sj-nb@44
   147
    }
sj-nb@44
   148
sj-nb@44
   149
    /**
sj-nb@44
   150
     * Create a new UMLElementNode and initialize its data with the information
sj-nb@44
   151
     * from an ITreeItem.
sj-nb@44
   152
     *
sj-nb@44
   153
     * @param item The ITreeItem used to initialize the new node.
sj-nb@44
   154
     * @see ITreeItem
sj-nb@44
   155
     */
sj-nb@44
   156
    public UMLElementNode(ITreeItem item) {
sj-nb@44
   157
        this(item.getData());
sj-nb@44
   158
    }
sj-nb@44
   159
sj-nb@44
   160
    /**
sj-nb@44
   161
     * Create a new UMLElementNode and initialize its data with the information
sj-nb@44
   162
     * from an IProjectTreeItem.
sj-nb@44
   163
     */
sj-nb@44
   164
    public UMLElementNode(Lookup lookup, IProjectTreeItem data) {
sj-nb@44
   165
        super(lookup);
sj-nb@44
   166
        setData(data);
sj-nb@44
   167
        //addChild(this);
sj-nb@44
   168
        //setUpChildren();
sj-nb@44
   169
    }
sj-nb@44
   170
sj-nb@44
   171
    public UMLElementNode(Children ch, Lookup lookup, IProjectTreeItem data) {
sj-nb@44
   172
        super(ch, lookup);
sj-nb@44
   173
        setData(data);
sj-nb@44
   174
        setUpChildren();
sj-nb@44
   175
        //addChild(this);
sj-nb@44
   176
        //setChildren(new UMLChildren(this));
sj-nb@44
   177
    }
sj-nb@44
   178
sj-nb@44
   179
    protected void addProjectTreeItemCookie(IProjectTreeItem projectTreeItem) {
sj-nb@44
   180
        getCookieSet().add(projectTreeItem);
sj-nb@44
   181
    }
sj-nb@44
   182
sj-nb@44
   183
    /**
sj-nb@44
   184
     * Gathers the nodes children.
sj-nb@44
   185
     */
sj-nb@44
   186
    public void setUpChildren() {
sj-nb@44
   187
        setChildren(Children.create(new UMLChildFactory(this), true));
sj-nb@44
   188
    }
sj-nb@44
   189
jglick@0
   190
    //**************************************************
jglick@0
   191
    // ITreeItem Implementation
jglick@0
   192
    //**************************************************
sj-nb@44
   193
    public String getName() {
sj-nb@44
   194
        IElement element = getModelElement();
jglick@0
   195
sj-nb@44
   196
        if (element instanceof INamedElement) {
jglick@0
   197
            // return unformatted name for attributes and operations, so that
jglick@0
   198
            // rename action on those nodes will display the bare name without
jglick@0
   199
            // visibility modifier and type information, since we only support 
jglick@0
   200
            // rename the name part of these two types of elements from project
jglick@0
   201
            // tree
sj-nb@44
   202
            if (element.getElementType().equals(ELEMENT_TYPE_ATTRIBUTE)
sj-nb@44
   203
                    || element.getElementType().equals(ELEMENT_TYPE_OPERATION)) {
jglick@0
   204
                return (((INamedElement) element).getName());
jglick@0
   205
            }
jglick@0
   206
        }
jglick@0
   207
jglick@0
   208
        return super.getName();
jglick@0
   209
    }
jglick@0
   210
sj-nb@44
   211
    /* (non-Javadoc)
sj-nb@44
   212
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#setDisplayedName(java.lang.String)
sj-nb@44
   213
     */
sj-nb@44
   214
    public void setDisplayedName(String name) {
sj-nb@44
   215
        setDisplayedName(name, true);
sj-nb@44
   216
    }
sj-nb@44
   217
sj-nb@44
   218
    /* (non-Javadoc)
sj-nb@44
   219
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#setDisplayedName(java.lang.String,V)
sj-nb@44
   220
     */
sj-nb@44
   221
    public void setDisplayedName(String name, boolean buildProperties) {
sj-nb@44
   222
        setDisplayName(name, buildProperties);
sj-nb@44
   223
        if (getData() != null) {
sj-nb@44
   224
            getData().setItemText(name);
jglick@0
   225
        }
sj-nb@44
   226
sj-nb@44
   227
        IElement element = getModelElement();
sj-nb@44
   228
sj-nb@44
   229
        if (element instanceof INamedElement) {
sj-nb@44
   230
            // set the name of the node as well, so in edit mode, the new name
sj-nb@44
   231
            // of the element will be displayed
sj-nb@44
   232
            super.setName(((INamedElement) element).getName());
sj-nb@44
   233
        }
sj-nb@44
   234
jglick@0
   235
//        else
jglick@0
   236
//            setName(name);
sj-nb@44
   237
    }
sj-nb@44
   238
sj-nb@44
   239
    public String getDisplayName() {
sj-nb@44
   240
        String retVal = super.getDisplayName();
sj-nb@44
   241
sj-nb@44
   242
        if (retVal == null || retVal.length() <= 0) {
sj-nb@44
   243
            if (getData() != null) {
sj-nb@44
   244
                retVal = getData().getItemText();
sj-nb@44
   245
            }
jglick@0
   246
        }
sj-nb@44
   247
sj-nb@44
   248
        if (retVal == null || retVal.length() <= 0) {
sj-nb@44
   249
            retVal = getName();
jglick@0
   250
        }
sj-nb@44
   251
jglick@0
   252
        return retVal;
jglick@0
   253
    }
sj-nb@44
   254
sj-nb@44
   255
    /* (non-Javadoc)
sj-nb@44
   256
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#getDisplayedName()
sj-nb@44
   257
     */
sj-nb@44
   258
    public String getDisplayedName() {
jglick@0
   259
        return getDisplayName();
sj-nb@44
   260
    }
jglick@0
   261
sj-nb@44
   262
    /* (non-Javadoc)
sj-nb@44
   263
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#getPath()
sj-nb@44
   264
     */
sj-nb@44
   265
    public Object[] getPath() {
sj-nb@44
   266
        ArrayList parents = new ArrayList();
sj-nb@44
   267
sj-nb@44
   268
        while (getParentNode() != null) {
sj-nb@44
   269
            parents.add(0, getParentNode());
sj-nb@44
   270
        }
sj-nb@44
   271
sj-nb@44
   272
        Object[] retVal = new Object[parents.size()];
sj-nb@44
   273
        parents.toArray(retVal);
sj-nb@44
   274
        return retVal;
sj-nb@44
   275
    }
sj-nb@44
   276
sj-nb@44
   277
    /* (non-Javadoc)
sj-nb@44
   278
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#getPathAsString()
sj-nb@44
   279
     */
sj-nb@44
   280
    public String getPathAsString() {
sj-nb@44
   281
        //      StringBuffer retVal = new StringBuffer(getDisplayName());
sj-nb@44
   282
        //
sj-nb@44
   283
        ////      ArrayList parents = new ArrayList();
sj-nb@44
   284
        ////
sj-nb@44
   285
        ////      while (getParentNode() != null)
sj-nb@44
   286
        ////      {
sj-nb@44
   287
        ////         retVal.insert(0, "|");
sj-nb@44
   288
        ////         retVal.insert(0, getParentNode().getDisplayName());
sj-nb@44
   289
        ////      }
sj-nb@44
   290
        //
sj-nb@44
   291
        //      Node parent = getParentNode();
sj-nb@44
   292
        //      if(parent != null)
sj-nb@44
   293
        //      {
sj-nb@44
   294
        //
sj-nb@44
   295
        //      }
sj-nb@44
   296
        //
sj-nb@44
   297
        //      return retVal.toString();
sj-nb@44
   298
sj-nb@44
   299
        return mPathAsString;
sj-nb@44
   300
    }
sj-nb@44
   301
sj-nb@44
   302
    /* (non-Javadoc)
sj-nb@44
   303
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#setPathAsString(java.lang.String)
sj-nb@44
   304
     */
sj-nb@44
   305
    public void setPathAsString(String str) {
sj-nb@44
   306
        mPathAsString = str;
sj-nb@44
   307
    }
sj-nb@44
   308
sj-nb@44
   309
    /* (non-Javadoc)
sj-nb@44
   310
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#isSame(org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem)
sj-nb@44
   311
     */
sj-nb@44
   312
    public boolean isSame(ITreeItem queryItem) {
sj-nb@44
   313
        return equals(queryItem);
sj-nb@44
   314
    }
sj-nb@44
   315
sj-nb@44
   316
    /* (non-Javadoc)
sj-nb@44
   317
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#getParentItem()
sj-nb@44
   318
     */
sj-nb@44
   319
    public ITreeItem getParentItem() {
sj-nb@44
   320
        ITreeItem retVal = null;
sj-nb@44
   321
        Node parentNode = getParentNode();
sj-nb@44
   322
sj-nb@44
   323
        if (parentNode instanceof ITreeItem) {
sj-nb@44
   324
            retVal = (ITreeItem) parentNode;
sj-nb@44
   325
        }
sj-nb@44
   326
sj-nb@44
   327
        return retVal;
sj-nb@44
   328
    }
sj-nb@44
   329
sj-nb@44
   330
    /* (non-Javadoc)
sj-nb@44
   331
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#setParentItem(org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem)
sj-nb@44
   332
     */
sj-nb@44
   333
    public void setParentItem(ITreeItem parent) {
sj-nb@44
   334
    }
sj-nb@44
   335
sj-nb@44
   336
    /* (non-Javadoc)
sj-nb@44
   337
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#getTopParentItem()
sj-nb@44
   338
     */
sj-nb@44
   339
    public ITreeItem getTopParentItem() {
sj-nb@44
   340
        ITreeItem pTop = null;
sj-nb@44
   341
        ITreeItem pItem = getParentItem();
sj-nb@44
   342
sj-nb@44
   343
        while (pItem != null) {
sj-nb@44
   344
            pTop = pItem;
sj-nb@44
   345
            ITreeItem pTemp = pTop.getParentItem();
sj-nb@44
   346
            pItem = pTemp;
sj-nb@44
   347
        }
sj-nb@44
   348
sj-nb@44
   349
        return pTop;
sj-nb@44
   350
    }
sj-nb@44
   351
sj-nb@44
   352
    /* (non-Javadoc)
sj-nb@44
   353
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#getOwningTreeElement()
sj-nb@44
   354
     */
sj-nb@44
   355
    public ITreeElement getOwningTreeElement() {
sj-nb@44
   356
        ITreeElement pOutEle = null;
sj-nb@44
   357
        ITreeItem pLast = null;
sj-nb@44
   358
        ITreeItem pItem = getParentItem();
sj-nb@44
   359
sj-nb@44
   360
        while (pItem != null) {
sj-nb@44
   361
            pLast = pItem;
sj-nb@44
   362
sj-nb@44
   363
            if (pItem instanceof ITreeRelElement) {
sj-nb@44
   364
                ITreeItem pTemp = pLast.getParentItem();
sj-nb@44
   365
                pItem = pTemp;
sj-nb@44
   366
            } else if (pItem instanceof ITreeElement) {
sj-nb@44
   367
                pItem = null;
sj-nb@44
   368
            } else {
sj-nb@44
   369
                ITreeItem pTemp = pLast.getParentItem();
sj-nb@44
   370
                pItem = pTemp;
sj-nb@44
   371
            }
sj-nb@44
   372
        }
sj-nb@44
   373
sj-nb@44
   374
        if (pLast != null) {
sj-nb@44
   375
            if (pLast instanceof ITreeElement) {
sj-nb@44
   376
                pOutEle = (ITreeElement) pLast;
sj-nb@44
   377
            }
sj-nb@44
   378
        }
sj-nb@44
   379
sj-nb@44
   380
        return pOutEle;
sj-nb@44
   381
    }
sj-nb@44
   382
sj-nb@44
   383
    /* (non-Javadoc)
sj-nb@44
   384
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#getType()
sj-nb@44
   385
     */
sj-nb@44
   386
    public String getType() {
sj-nb@44
   387
        return null;
sj-nb@44
   388
    }
sj-nb@44
   389
sj-nb@44
   390
    /* (non-Javadoc)
sj-nb@44
   391
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#addChild(org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem)
sj-nb@44
   392
     */
sj-nb@44
   393
    public void addChild(ITreeItem item) {
jglick@0
   394
        boolean canAdd = true;
sj-nb@44
   395
        // <Sheryl> Do we really need this condition check? In case like 'Relationships' 
sj-nb@44
   396
        // -> 'Specializations', these two folders both refer to the same 
sj-nb@44
   397
        // model element, the sub-folder will not be added as a result, #6320478
sj-nb@44
   398
        // to filter out the relationship end which refers to itself, it's temporary
sj-nb@44
   399
        // we need to go back to visit the root cause in project tree impl
jglick@0
   400
        ITreeItem parent = getParentItem();
sj-nb@44
   401
        if (parent != null) {
jglick@0
   402
            String yourID = item.getData().getModelElementXMIID();
jglick@0
   403
            String parentID = parent.getData().getModelElementXMIID();
sj-nb@44
   404
            if (item instanceof ITreeFolder == false) {
sj-nb@44
   405
                canAdd = !yourID.equals(parentID);
sj-nb@44
   406
            }
jglick@0
   407
        }
sj-nb@44
   408
        if (canAdd == true) {
sj-nb@44
   409
            if (item instanceof Node) {
sj-nb@44
   410
                Node[] node = {(Node) item};
jglick@0
   411
                Children children = getChildren();
jglick@0
   412
sj-nb@44
   413
                if (children != null) {
jglick@0
   414
                    children.add(node);
sj-nb@44
   415
                }
jglick@0
   416
            }
jglick@0
   417
        }
sj-nb@44
   418
    }
sj-nb@44
   419
sj-nb@44
   420
    /* (non-Javadoc)
sj-nb@44
   421
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#insertAt(org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem, int)
sj-nb@44
   422
     */
sj-nb@44
   423
    public void insertAt(ITreeItem item, int index) {
sj-nb@44
   424
        // The NetBeans API does not allow you to add a child to a specific
sj-nb@44
   425
        // index.  The children are sorted so this is not neccessary.
sj-nb@44
   426
        addChild(item);
sj-nb@44
   427
    }
sj-nb@44
   428
sj-nb@44
   429
    /* (non-Javadoc)
sj-nb@44
   430
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#removeChild(org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem)
sj-nb@44
   431
     */
sj-nb@44
   432
    public void removeChild(ITreeItem item) {
sj-nb@44
   433
        if (item instanceof Node) {
sj-nb@44
   434
            Node[] node = {(Node) item};
sj-nb@44
   435
            Children children = getChildren();
sj-nb@44
   436
sj-nb@44
   437
            if (children != null) {
sj-nb@44
   438
                children.remove(node);
sj-nb@44
   439
            }
sj-nb@44
   440
        }
sj-nb@44
   441
    }
sj-nb@44
   442
sj-nb@44
   443
    /* (non-Javadoc)
sj-nb@44
   444
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#removeAllChildren()
sj-nb@44
   445
     */
sj-nb@44
   446
    public void removeAllChildren() {
sj-nb@44
   447
        Children children = getChildren();
sj-nb@44
   448
sj-nb@44
   449
        if ((children != null) && (children.getNodesCount() > 0)) {
sj-nb@44
   450
            children.remove(children.getNodes());
sj-nb@44
   451
        }
sj-nb@44
   452
    }
sj-nb@44
   453
sj-nb@44
   454
    /* (non-Javadoc)
sj-nb@44
   455
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#getChild(int)
sj-nb@44
   456
     */
sj-nb@44
   457
    public ITreeItem getChild(int index) {
sj-nb@44
   458
        // TODO Auto-generated method stub
sj-nb@44
   459
        return null;
sj-nb@44
   460
    }
sj-nb@44
   461
sj-nb@44
   462
    /* (non-Javadoc)
sj-nb@44
   463
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#sortChildren()
sj-nb@44
   464
     */
sj-nb@44
   465
    public void sortChildren() {
sj-nb@44
   466
        ((UMLChildren) getChildren()).recalculateChildren();
sj-nb@44
   467
    }
sj-nb@44
   468
sj-nb@44
   469
    /* (non-Javadoc)
sj-nb@44
   470
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#sortChildren(java.util.Comparator)
sj-nb@44
   471
     */
sj-nb@44
   472
    public void sortChildren(Comparator compare) {
sj-nb@44
   473
    }
sj-nb@44
   474
sj-nb@44
   475
    /* (non-Javadoc)
sj-nb@44
   476
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#getData()
sj-nb@44
   477
     */
sj-nb@44
   478
    public IProjectTreeItem getData() {
sj-nb@44
   479
        return m_Data;
sj-nb@44
   480
    }
sj-nb@44
   481
sj-nb@44
   482
    protected void setData(IProjectTreeItem data) {
sj-nb@44
   483
        m_Data = data;
sj-nb@44
   484
sj-nb@44
   485
        if (data != null) {
sj-nb@44
   486
            m_Data.setProjectTreeSupportTreeItem(this);
sj-nb@44
   487
        }
sj-nb@44
   488
    }
sj-nb@44
   489
sj-nb@44
   490
    /* (non-Javadoc)
sj-nb@44
   491
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#getChildCount()
sj-nb@44
   492
     */
sj-nb@44
   493
    public int getChildCount() {
sj-nb@44
   494
        int retVal = 0;
sj-nb@44
   495
        Children children = getChildren();
sj-nb@44
   496
sj-nb@44
   497
        if (children != null) {
sj-nb@44
   498
            retVal = children.getNodesCount();
sj-nb@44
   499
        }
sj-nb@44
   500
sj-nb@44
   501
        return retVal;
sj-nb@44
   502
    }
sj-nb@44
   503
sj-nb@44
   504
    /* (non-Javadoc)
sj-nb@44
   505
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#isInitalized()
sj-nb@44
   506
     */
sj-nb@44
   507
    public boolean isInitalized() {
sj-nb@44
   508
        // TODO Auto-generated method stub
sj-nb@44
   509
        return mIsInitialized;
sj-nb@44
   510
    }
sj-nb@44
   511
sj-nb@44
   512
    /* (non-Javadoc)
sj-nb@44
   513
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#setIsInitalized(boolean)
sj-nb@44
   514
     */
sj-nb@44
   515
    public void setIsInitalized(boolean value) {
sj-nb@44
   516
        mIsInitialized = value;
sj-nb@44
   517
    }
sj-nb@44
   518
sj-nb@44
   519
    /* (non-Javadoc)
sj-nb@44
   520
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#getSortPriority()
sj-nb@44
   521
     */
sj-nb@44
   522
    public long getSortPriority() {
sj-nb@44
   523
        // TODO Auto-generated method stub
sj-nb@44
   524
        return m_Data.getSortPriority();
sj-nb@44
   525
    }
sj-nb@44
   526
sj-nb@44
   527
    /* (non-Javadoc)
sj-nb@44
   528
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#setSortPriority(long)
sj-nb@44
   529
     */
sj-nb@44
   530
    public void setSortPriority(long value) {
sj-nb@44
   531
        m_Data.setSortPriority(value);
sj-nb@44
   532
    }
sj-nb@44
   533
sj-nb@44
   534
    /* (non-Javadoc)
sj-nb@44
   535
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#setExpanded(boolean)
sj-nb@44
   536
     */
sj-nb@44
   537
    public void setExpanded(boolean value) {
sj-nb@44
   538
    }
sj-nb@44
   539
sj-nb@44
   540
    /* (non-Javadoc)
sj-nb@44
   541
     * @see org.netbeans.modules.uml.ui.support.projecttreesupport.ITreeItem#setSelected(boolean)
sj-nb@44
   542
     */
sj-nb@44
   543
    public void setSelected(boolean value) {
sj-nb@44
   544
    }
sj-nb@44
   545
jglick@0
   546
    /**
sj-nb@44
   547
     * Retrieve a collection that contains all of the children contained by the
sj-nb@44
   548
     * node.
sj-nb@44
   549
     * <br>
sj-nb@44
   550
     * <i>Note:</i> This collection should be treated as <b>read-only</b>. If a
sj-nb@44
   551
     * node is added to the returned collection any associated view will not be
sj-nb@44
   552
     * updated until a refresh is performed.
sj-nb@44
   553
     *
sj-nb@44
   554
     * @return The collection of children.
sj-nb@44
   555
     */
sj-nb@44
   556
    public Enumeration<ITreeItem> getNodeChildren() {
sj-nb@44
   557
        Children children = getChildren();
sj-nb@44
   558
sj-nb@44
   559
        return new TreeItemEnumeration(children);
sj-nb@44
   560
    }
sj-nb@44
   561
sj-nb@44
   562
    //**************************************************
sj-nb@44
   563
    // AbstractModelElement Implementation
sj-nb@44
   564
    //**************************************************
sj-nb@44
   565
    /**
sj-nb@44
   566
     * Retrieves the actions for the node. This method only returns the context
sj-nb@44
   567
     * sensitive actions.
jglick@0
   568
     *
jglick@0
   569
     * @param context Whether to find actions for context meaning or for the
sj-nb@44
   570
     * node itself
jglick@0
   571
     * @return A list of actions (you may include nulls for separators)
jglick@0
   572
     */
sj-nb@44
   573
    public Action[] getActions(boolean context) {
jglick@0
   574
jglick@0
   575
// Source control Sub menu Actions are created based on the SCM status of the nodes (Class diagrams, classes) 
jglick@0
   576
// so every time we need to get the actions afresh.  
sj-nb@44
   577
jglick@0
   578
//			if (actions == null)
sj-nb@44
   579
        return super.getActions(context);
sj-nb@44
   580
sj-nb@44
   581
    }
sj-nb@44
   582
sj-nb@44
   583
    public Action getPreferredAction() {
sj-nb@44
   584
        return SystemAction.get(OpenAction.class);
sj-nb@44
   585
    }
sj-nb@44
   586
jglick@0
   587
    @Override
sj-nb@44
   588
    public Image getIcon(int type) {
jglick@0
   589
        Image retVal = null;
jglick@0
   590
        //	if(icon!=null) return icon;
jglick@0
   591
jglick@0
   592
        ITreeItem item = this;
jglick@0
   593
        IProjectTreeItem data = item.getData();
jglick@0
   594
sj-nb@44
   595
        if (icon != null) {
jglick@0
   596
            retVal = icon;
sj-nb@44
   597
        } else {
jglick@0
   598
sj-nb@44
   599
            if (item instanceof ITreeFolder) {
jglick@0
   600
                CommonResourceManager resource =
sj-nb@44
   601
                        CommonResourceManager.instance();
jglick@0
   602
jglick@0
   603
                retVal = createImage(resource
sj-nb@44
   604
                        .getIconDetailsForElementType(item.getName()));
sj-nb@44
   605
            } else if (item instanceof ITreeDiagram) {
sj-nb@44
   606
                ITreeDiagram diagram = (ITreeDiagram) item;
jglick@0
   607
jglick@0
   608
                CommonResourceManager resource =
sj-nb@44
   609
                        CommonResourceManager.instance();
jglick@0
   610
jglick@0
   611
                retVal = createImage(resource
sj-nb@44
   612
                        .getIconDetailsForElementType(diagram.getDiagramType()));
jglick@0
   613
sj-nb@44
   614
                if (diagram.getDiagram().getDiagramDetails() instanceof TSDiagramDetails) {
jglick@0
   615
                    // this is an old TS diagram; when opened, it needs
jglick@0
   616
                    // to be converted to new Meteora diagram.
jglick@0
   617
                    // this code will badge the diagram icon with a
jglick@0
   618
                    // yellow triangle with an exclamation point to 
jglick@0
   619
                    // visually indicate the diagram's state
jglick@0
   620
                    retVal = ImageUtilities.mergeImages(
sj-nb@44
   621
                            retVal, createImage(ICON_BADGE_EXCLAMATION), 0, 0);
jglick@0
   622
                }
sj-nb@44
   623
            } else if (data.getModelElement() != null) {
sj-nb@44
   624
                if (data.getModelElement() instanceof IProject) {
jglick@0
   625
                    retVal = super.getIcon(type);
sj-nb@44
   626
                } else {
jglick@0
   627
                    CommonResourceManager resource =
sj-nb@44
   628
                            CommonResourceManager.instance();
jglick@0
   629
jglick@0
   630
                    retVal = createImage(resource
sj-nb@44
   631
                            .getIconDetailsForDisp(data.getModelElement()));
jglick@0
   632
                }
sj-nb@44
   633
            } else if (data.isProject()) {
jglick@0
   634
                // CommonResourceManager resource = 
jglick@0
   635
                //     CommonResourceManager.instance();
jglick@0
   636
                // retVal = createImage(
jglick@0
   637
                //     resource.getIconDetailsForElementType("WSProject"));
jglick@0
   638
jglick@0
   639
                retVal = super.getIcon(type);
sj-nb@44
   640
            } else if (data.isWorkspace()) {
jglick@0
   641
                CommonResourceManager resource = CommonResourceManager.instance();
jglick@0
   642
                // special case for design pattern catalog
jglick@0
   643
jglick@0
   644
                if (data.getItemText().equals("DesignPatternCatalog")) // NOI18N
jglick@0
   645
                {
jglick@0
   646
                    retVal = createImage(
sj-nb@44
   647
                            resource.getIconDetailsForElementType(
sj-nb@44
   648
                            "DesignPatternCatalog")); // NOI18N
sj-nb@44
   649
                } else {
sj-nb@44
   650
                    retVal = createImage(resource
sj-nb@44
   651
                            .getIconDetailsForElementType("Workspace")); // NOI18N
jglick@0
   652
                }
sj-nb@44
   653
            } else {
sj-nb@44
   654
                CommonResourceManager resource =
sj-nb@44
   655
                        CommonResourceManager.instance();
jglick@0
   656
jglick@0
   657
                retVal = createImage(
sj-nb@44
   658
                        resource.getIconDetailsForElementType(item.getName()));
jglick@0
   659
            }
jglick@0
   660
        }
jglick@0
   661
sj-nb@44
   662
        if (retVal == null) {
jglick@0
   663
            retVal = super.getIcon(type);
sj-nb@44
   664
        }
jglick@0
   665
jglick@0
   666
        //return getIconWithOverlay(retVal, this);
sj-nb@44
   667
        retVal = getIconWithOverlay(retVal, this);
jglick@0
   668
sj-nb@44
   669
        icon = retVal;
jglick@0
   670
        return icon;
jglick@0
   671
    }
sj-nb@44
   672
    public final static String ICON_BADGE_EXCLAMATION =
sj-nb@44
   673
            ImageUtil.IMAGE_FOLDER + "broken-project-badge.gif";
sj-nb@44
   674
jglick@0
   675
    @Override
sj-nb@44
   676
    public Image getOpenedIcon(int type) {
sj-nb@44
   677
        return getIcon(type);
sj-nb@44
   678
    }
jglick@0
   679
sj-nb@44
   680
    /* (non-Javadoc)
sj-nb@44
   681
     * @see org.netbeans.modules.uml.netbeans.umlproject.ui.AbstractModelElementNode#getModelElement()
sj-nb@44
   682
     */
sj-nb@44
   683
    public IElement getModelElement() {
sj-nb@44
   684
        IElement retVal = null;
sj-nb@44
   685
        IProjectTreeItem item = getData();
jglick@0
   686
sj-nb@44
   687
        if (item != null) {
sj-nb@44
   688
            retVal = item.getModelElement();
sj-nb@44
   689
        }
sj-nb@44
   690
sj-nb@44
   691
        return retVal;
sj-nb@44
   692
    }
sj-nb@44
   693
sj-nb@44
   694
    //**************************************************
sj-nb@44
   695
    // CookieSet.Factory implementation
sj-nb@44
   696
    //**************************************************
sj-nb@44
   697
    public Node.Cookie createCookie(Class klass) {
sj-nb@44
   698
        Node.Cookie retVal = null;
sj-nb@44
   699
sj-nb@44
   700
        if (OpenCookie.class.equals(klass) == true) {
sj-nb@44
   701
            if (mOpenCookie == null) {
sj-nb@44
   702
                mOpenCookie = createOpenCookie();
sj-nb@44
   703
            }
sj-nb@44
   704
sj-nb@44
   705
            retVal = mOpenCookie;
sj-nb@44
   706
        }
sj-nb@44
   707
sj-nb@44
   708
        return retVal;
sj-nb@44
   709
    }
sj-nb@44
   710
sj-nb@44
   711
    //**************************************************
sj-nb@44
   712
    // Helper Methods
sj-nb@44
   713
    //**************************************************
sj-nb@44
   714
    public String toString() {
sj-nb@44
   715
        String retVal = getDisplayedName();
sj-nb@44
   716
sj-nb@44
   717
        if ((retVal == null) || (retVal.length() <= 0)) {
sj-nb@44
   718
            retVal = getName();
sj-nb@44
   719
        }
sj-nb@44
   720
sj-nb@44
   721
        return retVal;
sj-nb@44
   722
    }
sj-nb@44
   723
sj-nb@44
   724
    /* (non-Javadoc)
sj-nb@44
   725
     * @see java.lang.Object#equals(java.lang.Object)
sj-nb@44
   726
     */
sj-nb@44
   727
    public boolean equals(Object obj) {
sj-nb@44
   728
        boolean retVal = false;
sj-nb@44
   729
sj-nb@44
   730
        if (obj != null && this.hashCode() == obj.hashCode()) {
sj-nb@44
   731
            return true;
sj-nb@44
   732
        }
sj-nb@44
   733
sj-nb@44
   734
        IProjectTreeItem myItem = getData();
sj-nb@44
   735
sj-nb@44
   736
        if (obj instanceof IElement) {
sj-nb@44
   737
            IElement myElement = myItem.getModelElement();
sj-nb@44
   738
sj-nb@44
   739
            if (myElement != null) {
sj-nb@44
   740
                retVal = myElement.isSame((IElement) obj);
sj-nb@44
   741
            }
sj-nb@44
   742
        } else if (obj instanceof UMLElementNode) {
sj-nb@44
   743
            UMLElementNode node = (UMLElementNode) obj;
sj-nb@44
   744
            IProjectTreeItem testItem = node.getData();
sj-nb@44
   745
            String testText = node.getDisplayedName();
sj-nb@44
   746
            String myText = getDisplayedName();
sj-nb@44
   747
sj-nb@44
   748
            if ((testText != null) && (myText != null)) {
sj-nb@44
   749
                retVal = testText.equals(myText);
sj-nb@44
   750
            } else if ((testText == null) && (myText == null)) {
sj-nb@44
   751
                retVal = super.equals(obj);
sj-nb@44
   752
            }
sj-nb@44
   753
sj-nb@44
   754
            if (retVal == true) {
sj-nb@44
   755
                String testXMIID = testItem.getModelElementXMIID();
sj-nb@44
   756
                String myXMIID = myItem.getModelElementXMIID();
sj-nb@44
   757
sj-nb@44
   758
                if ((testXMIID != null) && (myXMIID != null)) {
sj-nb@44
   759
                    retVal = testXMIID.equals(myXMIID);
sj-nb@44
   760
                }
sj-nb@44
   761
            }
sj-nb@44
   762
        } else {  // Generic equals method.  This can be used to test
sj-nb@44
   763
            // to ITreeItem(s).
sj-nb@44
   764
            retVal = super.equals(obj);
sj-nb@44
   765
        }
sj-nb@44
   766
sj-nb@44
   767
        return retVal;
sj-nb@44
   768
    }
sj-nb@44
   769
sj-nb@44
   770
    /**
sj-nb@44
   771
     * Initializes the node with the default cookies. <b>Note:</b> Do not call
sj-nb@44
   772
     * this method if a looup is added. When a lookup is added then the lookup
sj-nb@44
   773
     * is used to find the cookies.
sj-nb@44
   774
     */
sj-nb@44
   775
    protected void initCookies() {
sj-nb@44
   776
        Class[] cookies = {OpenCookie.class};
sj-nb@44
   777
        getCookieSet().add(cookies, this);
sj-nb@44
   778
    }
sj-nb@44
   779
sj-nb@44
   780
    /**
sj-nb@44
   781
     * Creates the open cookie to use when opening the node.
sj-nb@44
   782
     */
sj-nb@44
   783
    protected Node.Cookie createOpenCookie() {
sj-nb@44
   784
        return new ModelElementOpen();
sj-nb@44
   785
    }
sj-nb@44
   786
sj-nb@44
   787
    /**
sj-nb@44
   788
     * @param string
sj-nb@44
   789
     * @return
sj-nb@44
   790
     */
sj-nb@44
   791
    protected Image createImage(String iconLocation) {
sj-nb@44
   792
        return ImageUtilities.loadImage(iconLocation, true);
sj-nb@44
   793
    }
sj-nb@44
   794
sj-nb@44
   795
    /**
sj-nb@44
   796
     * Implementation of method from Comparable interface.
sj-nb@44
   797
     *
sj-nb@44
   798
     * @return
sj-nb@44
   799
     */
sj-nb@44
   800
    public int compareTo(Object o) {
sj-nb@44
   801
        return ProjectTreeComparable.compareTo(this, o);
sj-nb@44
   802
    }
sj-nb@44
   803
sj-nb@44
   804
    // to be overridden by subclasses as needed
sj-nb@44
   805
    public void registerListeners() {
sj-nb@44
   806
    }
sj-nb@44
   807
sj-nb@44
   808
    public class ModelElementOpen implements OpenCookie {
sj-nb@44
   809
sj-nb@44
   810
        public void open() {
sj-nb@44
   811
            DispatchHelper helper = new DispatchHelper();
sj-nb@44
   812
            IProjectTreeEventDispatcher disp = helper.getProjectTreeDispatcher();
sj-nb@44
   813
            if (disp != null) {
sj-nb@44
   814
                IEventPayload payload =
sj-nb@44
   815
                        disp.createPayload("ProjectTreeDoubleClick"); // NOI18N
sj-nb@44
   816
sj-nb@44
   817
                helper.getProjectTreeDispatcher().fireDoubleClick(null,
sj-nb@44
   818
                        getData(), false, false, false, false, payload);
sj-nb@44
   819
            }
sj-nb@44
   820
sj-nb@44
   821
            registerListeners();
sj-nb@44
   822
        }
sj-nb@44
   823
    }
sj-nb@44
   824
sj-nb@44
   825
    public class TreeItemEnumeration implements Enumeration< ITreeItem> {
sj-nb@44
   826
sj-nb@44
   827
        Enumeration m_ChildrenEnum = null;
sj-nb@44
   828
sj-nb@44
   829
        public TreeItemEnumeration(Children c) {
sj-nb@44
   830
            m_ChildrenEnum = c.nodes();
sj-nb@44
   831
        }
sj-nb@44
   832
sj-nb@44
   833
        public boolean hasMoreElements() {
sj-nb@44
   834
            return m_ChildrenEnum.hasMoreElements();
sj-nb@44
   835
        }
sj-nb@44
   836
sj-nb@44
   837
        public ITreeItem nextElement() {
sj-nb@44
   838
            return (ITreeItem) m_ChildrenEnum.nextElement();
sj-nb@44
   839
        }
sj-nb@44
   840
    }
sj-nb@44
   841
sj-nb@44
   842
    public void vcsFeatureExecuted(/* SCMFeatureKind */int kind) {
sj-nb@44
   843
        if (kind == SCMFeatureKind.FK_CHECK_IN
sj-nb@44
   844
                || kind == SCMFeatureKind.FK_CHECK_OUT
sj-nb@44
   845
                || kind == SCMFeatureKind.FK_ADD_TO_SOURCE_CONTROL
sj-nb@44
   846
                || kind == SCMFeatureKind.FK_REMOVE_FROM_SOURCE_CONTROL
sj-nb@44
   847
                || kind == SCMFeatureKind.REFRESH_STATUS) {
sj-nb@44
   848
            fireIconChange();
sj-nb@44
   849
        }
sj-nb@44
   850
    }
sj-nb@44
   851
sj-nb@44
   852
    protected Image getIconWithOverlay(Image image, ITreeItem item) {
sj-nb@44
   853
        ImageIcon image1 = new ImageIcon(image);
sj-nb@44
   854
sj-nb@44
   855
sj-nb@44
   856
        if (!(item instanceof ITreeFolder)) {
sj-nb@44
   857
            Icon overlay = getOverlayIcon(item.getData());
sj-nb@44
   858
sj-nb@44
   859
            if ((image1 != null) && (overlay != null)) {
sj-nb@44
   860
                GraphicsDevice[] gs = GraphicsEnvironment
sj-nb@44
   861
                        .getLocalGraphicsEnvironment().getScreenDevices();
sj-nb@44
   862
sj-nb@44
   863
                GraphicsConfiguration[] gc = gs[0].getConfigurations();
sj-nb@44
   864
sj-nb@44
   865
                Image retImage = gc[0].createCompatibleVolatileImage(
sj-nb@44
   866
                        image1.getIconWidth(), image1.getIconHeight());
sj-nb@44
   867
sj-nb@44
   868
                Graphics g = retImage.getGraphics();
sj-nb@44
   869
sj-nb@44
   870
                image1.paintIcon(null, g, 0, 0);
sj-nb@44
   871
sj-nb@44
   872
                int overlayY = image1.getIconHeight() - overlay.getIconHeight();
sj-nb@44
   873
                overlay.paintIcon(null, g, 0, overlayY);
sj-nb@44
   874
sj-nb@44
   875
sj-nb@44
   876
                image1 = new ImageIcon(retImage);
sj-nb@44
   877
            }
sj-nb@44
   878
        }
sj-nb@44
   879
        return image1.getImage();
sj-nb@44
   880
    }
sj-nb@44
   881
sj-nb@44
   882
    protected Icon getOverlayIcon(IProjectTreeItem item) {
sj-nb@44
   883
        Icon retVal = null;
sj-nb@44
   884
sj-nb@44
   885
sj-nb@44
   886
        ISCMIntegrator gator = ProductHelper.getSCMIntegrator();
sj-nb@44
   887
        if (gator != null) {
sj-nb@44
   888
            int kind = gator.getSCMMaskKind(item);
sj-nb@44
   889
            retVal = gator.getSCMMask(kind);
sj-nb@44
   890
        }
sj-nb@44
   891
sj-nb@44
   892
        return retVal;
sj-nb@44
   893
    }
sj-nb@44
   894
sj-nb@44
   895
    /**
sj-nb@44
   896
     * Factory by which children of Node will be initialized
sj-nb@44
   897
     */
sj-nb@44
   898
    class UMLChildFactory extends ChildFactory<ITreeItem> {
sj-nb@44
   899
sj-nb@44
   900
        private ITreeItem item = null;
sj-nb@44
   901
sj-nb@44
   902
        UMLChildFactory(ITreeItem item) {
sj-nb@44
   903
            this.item = item;
sj-nb@44
   904
        }
sj-nb@44
   905
sj-nb@44
   906
        /**
sj-nb@44
   907
         * Initializes children of node by firing item expanding event.
sj-nb@44
   908
         *
sj-nb@44
   909
         * @param children a list to add object to, (for now not used)
sj-nb@44
   910
         *
sj-nb@44
   911
         * @return true if node is initialized completely; false if list has
sj-nb@44
   912
         * been partially populated and this method should be called again to
sj-nb@44
   913
         * retrieve more children
sj-nb@44
   914
         */
sj-nb@44
   915
        @Override
sj-nb@44
   916
        protected boolean createKeys(List<ITreeItem> children) {
sj-nb@44
   917
            final NetBeansUMLProjectTreeModel model = UMLModelRootNode.getProjectTreeModel();
sj-nb@44
   918
sj-nb@44
   919
            // Debug.out.println("UMLChildren Firing node expand event");
sj-nb@44
   920
            if (model != null) {
sj-nb@44
   921
                model.fireItemExpanding(item);
sj-nb@44
   922
sj-nb@44
   923
                item.setIsInitalized(true);
sj-nb@44
   924
sj-nb@44
   925
                return true;
sj-nb@44
   926
            }
sj-nb@44
   927
sj-nb@44
   928
            return false;
sj-nb@44
   929
        }
sj-nb@44
   930
sj-nb@44
   931
        /**
sj-nb@44
   932
         * Enforce no WaitNode is shown by returning null
sj-nb@44
   933
         */
sj-nb@44
   934
        @Override
sj-nb@44
   935
        protected Node createWaitNode() {
sj-nb@44
   936
            return null;
sj-nb@44
   937
        }
sj-nb@44
   938
    }
jglick@0
   939
}