bpel.editors/src/org/netbeans/modules/bpel/search/Decorator.java
author Vladimir Yaroslavskiy <yaroslavskiy@netbeans.org>
Wed, 28 Sep 2011 14:01:59 +0400
changeset 4891 fa2f6f3c723d
parent 4011 0d334c4dc92e
permissions -rw-r--r--
Fix selection on BPEL diagram
yaroslavskiy@3955
     1
/*
yaroslavskiy@3955
     2
 * The contents of this file are subject to the terms of the Common Development
yaroslavskiy@3955
     3
 * and Distribution License (the License). You may not use this file except in
yaroslavskiy@3955
     4
 * compliance with the License.
yaroslavskiy@3955
     5
 * 
yaroslavskiy@3955
     6
 * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
yaroslavskiy@3955
     7
 * or http://www.netbeans.org/cddl.txt.
yaroslavskiy@3955
     8
 * 
yaroslavskiy@3955
     9
 * When distributing Covered Code, include this CDDL Header Notice in each file
yaroslavskiy@3955
    10
 * and include the License file at http://www.netbeans.org/cddl.txt.
yaroslavskiy@3955
    11
 * If applicable, add the following below the CDDL Header, with the fields
yaroslavskiy@3955
    12
 * enclosed by brackets [] replaced by your own identifying information:
yaroslavskiy@3955
    13
 * "Portions Copyrighted [year] [name of copyright owner]"
yaroslavskiy@3955
    14
 * 
yaroslavskiy@3955
    15
 * The Original Software is NetBeans. The Initial Developer of the Original
yaroslavskiy@3955
    16
 * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
yaroslavskiy@3955
    17
 * Microsystems, Inc. All Rights Reserved.
yaroslavskiy@3955
    18
 */
yaroslavskiy@3955
    19
package org.netbeans.modules.bpel.search;
yaroslavskiy@3955
    20
yaroslavskiy@3955
    21
import java.awt.Color;
yaroslavskiy@3955
    22
import java.awt.Font;
yaroslavskiy@3955
    23
import java.util.ArrayList;
yaroslavskiy@3955
    24
import java.util.List;
yaroslavskiy@3955
    25
yaroslavskiy@3955
    26
import org.netbeans.modules.bpel.model.api.BpelEntity;
yaroslavskiy@3955
    27
import org.netbeans.modules.bpel.design.DesignView;
yaroslavskiy@3955
    28
import org.netbeans.modules.bpel.design.decoration.Decoration;
yaroslavskiy@3955
    29
import org.netbeans.modules.bpel.design.decoration.DecorationProvider;
yaroslavskiy@3955
    30
import org.netbeans.modules.bpel.design.decoration.DecorationProviderFactory;
yaroslavskiy@4891
    31
import org.netbeans.modules.bpel.design.decoration.GlowDescriptor;
yaroslavskiy@3955
    32
import org.netbeans.modules.bpel.design.decoration.LabelStyleDescriptor;
yaroslavskiy@3955
    33
import org.netbeans.modules.bpel.design.model.elements.VisualElement;
yaroslavskiy@3955
    34
yaroslavskiy@3955
    35
/**
yaroslavskiy@3955
    36
 * @author Vladimir Yaroslavskiy
yaroslavskiy@3955
    37
 * @version 2006.12.06
yaroslavskiy@3955
    38
 */
yaroslavskiy@3955
    39
public final class Decorator extends DecorationProvider implements DecorationProviderFactory {
yaroslavskiy@3955
    40
yaroslavskiy@4891
    41
    public Decorator() {}
yaroslavskiy@3955
    42
yaroslavskiy@3955
    43
    public DecorationProvider createInstance(DesignView view) {
yaroslavskiy@3955
    44
        return new Decorator(view);
yaroslavskiy@3955
    45
    }
yaroslavskiy@3955
    46
yaroslavskiy@3955
    47
    private Decorator(DesignView view) {
yaroslavskiy@3955
    48
        super(view);
yaroslavskiy@3955
    49
        myHighlightedEntities = new ArrayList<BpelEntity>();
yaroslavskiy@3955
    50
    }
yaroslavskiy@3955
    51
yaroslavskiy@3955
    52
    @Override
yaroslavskiy@3955
    53
    public Decoration getDecoration(BpelEntity entity) {
yaroslavskiy@4891
    54
        if ( !myIsClearSelection && mySelectedEntity == entity) {
yaroslavskiy@4891
    55
            return new Decoration(new LabelStyleDescriptor(new Color(0x339900), element, Font.BOLD)); // glow
yaroslavskiy@4891
    56
        }
yaroslavskiy@4891
    57
        if ( !myIsClearHighlighting && myHighlightedEntities.contains(entity)) {
yaroslavskiy@4891
    58
            return new Decoration(new GlowDescriptor(new Color(255, 255, 0), 20.0)); // highlight
yaroslavskiy@3955
    59
        }
yaroslavskiy@3955
    60
        return null;
yaroslavskiy@3955
    61
    }
yaroslavskiy@3955
    62
yaroslavskiy@3955
    63
    @Override
yaroslavskiy@3955
    64
    public void release() {
yaroslavskiy@3955
    65
        mySelectedEntity = null;
yaroslavskiy@3955
    66
        myHighlightedEntities = null;
yaroslavskiy@3955
    67
    }
yaroslavskiy@3955
    68
yaroslavskiy@3955
    69
    void select(BpelEntity entity, VisualElement findedElement) {
yaroslavskiy@3955
    70
        if (mySelectedEntity != null) {
yaroslavskiy@3955
    71
            myIsClearSelection = true;
yaroslavskiy@3955
    72
        }
yaroslavskiy@3955
    73
        myIsClearSelection = false;
yaroslavskiy@3955
    74
        mySelectedEntity = entity;
yaroslavskiy@3955
    75
        element = findedElement;
yaroslavskiy@3955
    76
        fireDecorationChanged();
yaroslavskiy@3955
    77
    }
yaroslavskiy@3955
    78
yaroslavskiy@3955
    79
    void clearHighlighting() {
yaroslavskiy@3955
    80
        myIsClearHighlighting = true;
yaroslavskiy@3955
    81
        myIsClearSelection = true;
yaroslavskiy@3955
    82
yaroslavskiy@3955
    83
        fireDecorationChanged();
yaroslavskiy@3955
    84
yaroslavskiy@3955
    85
        myHighlightedEntities = new ArrayList<BpelEntity>();
yaroslavskiy@3955
    86
        myIsClearHighlighting = false;
yaroslavskiy@3955
    87
        myIsClearSelection = false;
yaroslavskiy@3955
    88
    }
yaroslavskiy@3955
    89
yaroslavskiy@3955
    90
    void doHighlight(BpelEntity entity, boolean highlighted) {
yaroslavskiy@3955
    91
        if (highlighted) {
yaroslavskiy@3955
    92
            myHighlightedEntities.add(entity);
yaroslavskiy@3955
    93
        } else {
yaroslavskiy@3955
    94
            myHighlightedEntities.remove(entity);
yaroslavskiy@3955
    95
        }
yaroslavskiy@3955
    96
        myIsClearSelection = !highlighted;
yaroslavskiy@3955
    97
        fireDecorationChanged();
yaroslavskiy@3955
    98
    }
yaroslavskiy@3955
    99
yaroslavskiy@3955
   100
    static Decorator getDecorator(DesignView view) {
yaroslavskiy@3955
   101
        List<DecorationProvider> providers = view.getDecorationManager().getProviders();
yaroslavskiy@3955
   102
yaroslavskiy@3955
   103
        for (DecorationProvider provider : providers) {
yaroslavskiy@3955
   104
            if (provider instanceof Decorator) {
yaroslavskiy@3955
   105
                return (Decorator) provider;
yaroslavskiy@3955
   106
            }
yaroslavskiy@3955
   107
        }
yaroslavskiy@3955
   108
        return null;
yaroslavskiy@4891
   109
    }
yaroslavskiy@3955
   110
yaroslavskiy@4891
   111
    private VisualElement element;
yaroslavskiy@3955
   112
    private boolean myIsClearSelection;
yaroslavskiy@3955
   113
    private boolean myIsClearHighlighting;
yaroslavskiy@3955
   114
    private BpelEntity mySelectedEntity;
yaroslavskiy@3955
   115
    private List<BpelEntity> myHighlightedEntities;
yaroslavskiy@3955
   116
}